diff --git a/.gitignore b/.gitignore index 5b6d6a5..8266372 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ Gemfile.lock .ruby-version .bundle pkg +tmp diff --git a/lib/solidus_cmd/extension.rb b/lib/solidus_cmd/extension.rb index 7245d33..2dd3f81 100644 --- a/lib/solidus_cmd/extension.rb +++ b/lib/solidus_cmd/extension.rb @@ -8,29 +8,22 @@ class Extension < Thor::Group desc "builds a solidus extension" argument :file_name, type: :string, desc: 'rails app_path', default: '.' - source_root File.expand_path('../templates/extension', __FILE__) + class_option :template + + def self.source_root + File.expand_path('../', __FILE__) + end def generate + template = options[:template] ? options[:template] : 'template.rb' + + find_in_source_paths(template) + use_prefix 'solidus_' empty_directory file_name - directory 'app', "#{file_name}/app" - directory 'lib', "#{file_name}/lib" - directory 'bin', "#{file_name}/bin" - - template 'extension.gemspec', "#{file_name}/#{file_name}.gemspec" - template 'Gemfile', "#{file_name}/Gemfile" - template 'gitignore', "#{file_name}/.gitignore" - template 'LICENSE', "#{file_name}/LICENSE" - template 'Rakefile', "#{file_name}/Rakefile" - template 'README.md', "#{file_name}/README.md" - template 'config/routes.rb', "#{file_name}/config/routes.rb" - template 'config/locales/en.yml', "#{file_name}/config/locales/en.yml" - template 'rspec', "#{file_name}/.rspec" - template 'spec/spec_helper.rb.tt', "#{file_name}/spec/spec_helper.rb" - template 'rubocop.yml', "#{file_name}/.rubocop.yml" - template 'travis.yml', "#{file_name}/.travis.yml" + apply template end no_tasks do diff --git a/lib/solidus_cmd/template.rb b/lib/solidus_cmd/template.rb new file mode 100644 index 0000000..300ef24 --- /dev/null +++ b/lib/solidus_cmd/template.rb @@ -0,0 +1,18 @@ +source_paths.unshift(File.expand_path('../templates/extension', __FILE__)) + +directory 'app', "#{file_name}/app" +directory 'lib', "#{file_name}/lib" +directory 'bin', "#{file_name}/bin" + +template 'extension.gemspec', "#{file_name}/#{file_name}.gemspec" +template 'Gemfile', "#{file_name}/Gemfile" +template 'gitignore', "#{file_name}/.gitignore" +template 'LICENSE', "#{file_name}/LICENSE" +template 'Rakefile', "#{file_name}/Rakefile" +template 'README.md', "#{file_name}/README.md" +template 'config/routes.rb', "#{file_name}/config/routes.rb" +template 'config/locales/en.yml', "#{file_name}/config/locales/en.yml" +template 'rspec', "#{file_name}/.rspec" +template 'spec/spec_helper.rb.tt', "#{file_name}/spec/spec_helper.rb" +template 'rubocop.yml', "#{file_name}/.rubocop.yml" +template 'travis.yml', "#{file_name}/.travis.yml" diff --git a/spec/extension_spec.rb b/spec/extension_spec.rb new file mode 100644 index 0000000..e413b08 --- /dev/null +++ b/spec/extension_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +RSpec.describe SolidusCmd::Extension do + it 'generate skeleton' do + run_extension + dir = '../tmp/solidus_dummy_ext' + expect(Dir.exist?(dir)).to be(true) + expect(File.exist?("#{dir}/solidus_dummy_ext.gemspec")).to be(true) + expect(File.exist?("#{dir}/Gemfile")).to be(true) + expect(File.exist?("#{dir}/Rakefile")).to be(true) + end + + it 'allow use custom template' do + template_path = '../../spec/fixtures/dummy_template.rb' + run_extension(['dummy', '--template', template_path]) + dir = '../tmp/solidus_dummy' + expect(Dir.exist?(dir)).to be(true) + expect(File.exist?("#{dir}/solidus_dummy.gemspec")).to be(true) + expect(File.exist?("#{dir}/Gemfile")).to be(false) + end + + it 'not create extension when template path is invalid' do + run_extension(['dummy', '--template', '/invalid/path']) + expect(Dir.exist?('../tmp/solidus_dummy')).to be(false) + end +end diff --git a/spec/fixtures/dummy_template.rb b/spec/fixtures/dummy_template.rb new file mode 100644 index 0000000..dfbbae8 --- /dev/null +++ b/spec/fixtures/dummy_template.rb @@ -0,0 +1,3 @@ +source_paths.unshift(File.expand_path('../../../lib/solidus_cmd/templates/extension', __FILE__)) + +template 'extension.gemspec', "#{file_name}/#{file_name}.gemspec" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f939216..c639567 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,3 +1,5 @@ +require 'support/extension_helper' + if ENV["COVERAGE"] # Run Coverage report require 'simplecov' @@ -18,10 +20,7 @@ RSpec.configure do |config| config.color = true config.mock_with :rspec - - config.fixture_path = "#{::Rails.root}/spec/fixtures" - - config.use_transactional_fixtures = false + config.include ExtensionHelper config.fail_fast = ENV['FAIL_FAST'] || false end diff --git a/spec/support/extension_helper.rb b/spec/support/extension_helper.rb new file mode 100644 index 0000000..ab17a58 --- /dev/null +++ b/spec/support/extension_helper.rb @@ -0,0 +1,15 @@ +require 'solidus_cmd/extension' + +module ExtensionHelper + include FileUtils + + def run_extension(args = ['dummy_ext'], config = {}) + clear_destination + config.merge!(destination_root: '../tmp') + SolidusCmd::Extension.start(args, config) + end + + def clear_destination(dir = '../tmp') + Dir.exist?(dir) ? rm_rf(dir) : nil + end +end