lib/togostanza/cli.rb in togostanza-1.3.0 vs lib/togostanza/cli.rb in togostanza-1.3.1

- old
+ new

@@ -73,11 +73,135 @@ def title stanza_id.titleize end end + class NameModifier < Thor::Group + include Thor::Actions + + argument :name1, type: :string + argument :name2, type: :string + + def self.source_root + File.expand_path('../../../templates/stanza', __FILE__) + end + + def replace_description + name1_chopped = chop_slash(name1) + name2_chopped = chop_slash(name2) + + gsub_file("#{files_name(name1_chopped)}/help.md", titles(name1_chopped), titles(name2_chopped)) + gsub_file("#{files_name(name1_chopped)}/help.md", stanzas_id(name1_chopped), stanzas_id(name2_chopped)) + gsub_file("#{files_name(name1_chopped)}/#{files_name(name1_chopped)}.gemspec", files_name(name1_chopped), files_name(name2_chopped)) + gsub_file("#{files_name(name1_chopped)}/lib/#{files_name(name1_chopped)}.rb", classes_name(name1_chopped), classes_name(name2_chopped)) + + unless File.exist?("#{files_name(name1_chopped)}/metadata.json") + template 'metadata.json.erb', "#{file_name}/metadata.json" + end + + gsub_file("#{files_name(name1_chopped)}/metadata.json", stanzas_id(name1_chopped), stanzas_id(name2_chopped)) + gsub_file("#{files_name(name1_chopped)}/stanza.rb", classes_name(name1_chopped), classes_name(name2_chopped)) + gsub_file("#{files_name(name1_chopped)}/template.hbs", titles(name1_chopped), titles(name2_chopped)) + gsub_file("#{files_name(name1_chopped)}/template.hbs", "assets/#{stanzas_id(name1_chopped)}","assets/#{stanzas_id(name2_chopped)}") + gsub_file("#{files_name(name1_chopped)}/template.hbs", "#{stanzas_id(name1_chopped)}/resources", "#{stanzas_id(name2_chopped)}/resources") + gsub_file('Gemfile', /\'#{files_name(name1_chopped)}\'/, "\'#{files_name(name2_chopped)}\'") + gsub_file('Gemfile', /\'\.\/#{files_name(name1_chopped)}\'/, "\'\.\/#{files_name(name2_chopped)}\'") + end + + def rename_directory + name1_chopped = chop_slash(name1) + name2_chopped = chop_slash(name2) + + unless File.exist?("#{files_name(name1_chopped)}/assets/#{stanzas_id(name1_chopped)}") + Dir.mkdir("#{files_name(name1_chopped)}/assets/#{stanzas_id(name1_chopped)}") + end + + File.rename("#{files_name(name1_chopped)}/assets/#{stanzas_id(name1_chopped)}", "#{files_name(name1_chopped)}/assets/#{stanzas_id(name2_chopped)}") + File.rename("#{files_name(name1_chopped)}/lib/#{files_name(name1_chopped)}.rb", "#{files_name(name1_chopped)}/lib/#{files_name(name2_chopped)}.rb") + File.rename("#{files_name(name1_chopped)}/#{files_name(name1_chopped)}.gemspec", "#{files_name(name1_chopped)}/#{files_name(name2_chopped)}.gemspec") + File.rename(files_name(name1_chopped), files_name(name2_chopped)) + end + + private + + def chop_slash(name) + if name[-1] == '/' + name.chop + else + name + end + end + + def stanza_id + name1_chopped = chop_slash(name1) + name1_chopped.underscore.sub(/_stanza$/, '') + end + + def file_name + stanza_id + '_stanza' + end + + def stanzas_id(name) + name.underscore.sub(/_stanza$/, '') + end + + def files_name(name) + stanzas_id(name) + '_stanza' + end + + def classes_name(name) + files_name(name).classify + end + + def titles(name) + stanzas_id(name).titleize + end + end + + class NameRegister < Thor::Group + include Thor::Actions + + argument :name + + def template_dir + File.expand_path('../../../templates/stanza', __FILE__) + end + + def replace_author + gsub_file("#{template_dir}/gemspec.erb", /spec.authors\s*=\s\[\'.*\'\]/, "spec.authors = ['#{name}']") + gsub_file("#{template_dir}/metadata.json.erb", /author":\s".*"/, "author\": \"#{name}\"") + end + end + + class MailRegister < Thor::Group + include Thor::Actions + + argument :addr + + def template_dir + File.expand_path('../../../templates/stanza', __FILE__) + end + + def replace_author + gsub_file("#{template_dir}/gemspec.erb", /spec.email\s*=\s\[\'.*\'\]/, "spec.email = ['#{addr}']") + gsub_file("#{template_dir}/metadata.json.erb", /address":\s".*"/, "address\": \"#{addr}\"") + end + end + class Stanza < Thor register StanzaGenerator, 'new', 'new NAME', 'Creates a new stanza' + end + + class Stanza < Thor + register NameModifier, 'modify', 'modify OLD_NAME NEW_NAME', 'Modify a name of stanza' + end + + class Root < Thor + register NameRegister, 'name' , 'name NAME' , 'register your name' + end + + class Root < Thor + register MailRegister, 'mail' , 'mail ADDRESS' , 'register your mail' end class Root < Thor register ProviderGenerator, 'init', 'init NAME', 'Creates a new provider'