@@ -11,6 +11,32 @@ class CLI < Thor
1111 attr_accessor :kata
1212
1313 source_root File . expand_path ( 'templates' , __dir__ )
14+
15+ desc 'create' , 'Create a new kata'
16+ def create ( kata_name )
17+ self . kata = kata_name
18+
19+ kata_number = CleoKatas ::KataFile . max_number . to_i + 1
20+ kata_name = kata_name . gsub ( /[^a-z0-9]/i , '_' ) . downcase
21+ kata_number_name = "#{ kata_number } -#{ kata_name } "
22+
23+ say "Creating kata #{ kata_number_name } "
24+
25+ empty_directory ( File . join ( Dir . pwd , 'katas' , "#{ kata_number_name } " ) )
26+ empty_directory ( File . join ( Dir . pwd , 'katas' , "#{ kata_number_name } " , 'source' ) )
27+ template ( 'README.md.erb' ,
28+ File . join ( Dir . pwd , 'katas' , "#{ kata_number_name } " , 'README.md' )
29+ )
30+ template (
31+ 'main.rb.erb' ,
32+ File . join ( Dir . pwd , 'katas' , "#{ kata_number_name } " , 'source' , 'main.rb' )
33+ )
34+ template (
35+ 'test.rb.erb' ,
36+ File . join ( Dir . pwd , 'katas' , "#{ kata_number_name } " , 'source' , 'test.rb' )
37+ )
38+ end
39+
1440 desc 'list' , 'List all available katas'
1541 def list
1642 say 'Listing katas...'
@@ -21,19 +47,20 @@ def list
2147
2248 # rubocop:disable Metrics/MethodLength
2349 desc 'attempt DIRECTORY' , 'Create a new kata attempt in your own directory'
24- def attempt ( kata )
25- self . kata = kata
50+ def attempt ( kata_name )
51+ self . kata = kata_name
2652
53+ begin
54+ kata_file . numbered_name
55+ rescue
56+ say "Kata #{ kata_name } not found"
57+ return
58+ end
2759
2860 source_directory = File . join ( Dir . pwd , 'katas' , kata_file . numbered_name , 'source' )
2961 target_directory = File . join ( Dir . pwd , 'katas' , kata_file . numbered_name , username )
3062 readme_target_file = File . join ( target_directory , 'README.md' )
3163
32- puts <<~STRING
33- source_directory: #{ source_directory }
34- target_directory: #{ target_directory }
35- readme_target_file: #{ readme_target_file }
36- STRING
3764 directory ( source_directory , target_directory )
3865 copy_file ( kata_file . path , readme_target_file )
3966 append_file ( readme_target_file , <<~MARKDOWN )
@@ -52,6 +79,13 @@ def attempt(kata)
5279 end
5380 # rubocop:enable Metrics/MethodLength
5481
82+ protected
83+
84+
85+ def kata_class_name
86+ kata . to_s . split ( /[^a-z0-9]+/i ) . map ( &:capitalize ) . join
87+ end
88+
5589 private
5690
5791 def username
0 commit comments