From 58d49595245b3450c829ab9d7d195e2b6a838e83 Mon Sep 17 00:00:00 2001 From: Cesar Carruitero Date: Fri, 20 Oct 2017 22:03:03 -0500 Subject: [PATCH 1/4] add specs for current behavior --- .gitignore | 1 + spec/extension_spec.rb | 11 +++++++++++ spec/spec_helper.rb | 7 +++---- spec/support/extension_helper.rb | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 spec/extension_spec.rb create mode 100644 spec/support/extension_helper.rb 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/spec/extension_spec.rb b/spec/extension_spec.rb new file mode 100644 index 0000000..005badb --- /dev/null +++ b/spec/extension_spec.rb @@ -0,0 +1,11 @@ +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) + end +end 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 From 28c5d9acb39a20f0028f2712e33d7cb5570f6e2c Mon Sep 17 00:00:00 2001 From: Cesar Carruitero Date: Fri, 20 Oct 2017 23:30:56 -0500 Subject: [PATCH 2/4] move extension generation to template file --- lib/solidus_cmd/extension.rb | 21 ++++----------------- lib/solidus_cmd/template.rb | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 17 deletions(-) create mode 100644 lib/solidus_cmd/template.rb diff --git a/lib/solidus_cmd/extension.rb b/lib/solidus_cmd/extension.rb index 7245d33..05d1235 100644 --- a/lib/solidus_cmd/extension.rb +++ b/lib/solidus_cmd/extension.rb @@ -8,29 +8,16 @@ 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__) + def self.source_root + File.expand_path('../', __FILE__) + end def generate 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.rb' 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" From 4d69f8d43f22fbb86547520a56230acdfc092223 Mon Sep 17 00:00:00 2001 From: Cesar Carruitero Date: Fri, 20 Oct 2017 23:53:15 -0500 Subject: [PATCH 3/4] allow use custom template --- lib/solidus_cmd/extension.rb | 5 ++++- spec/extension_spec.rb | 10 ++++++++++ spec/fixtures/dummy_template.rb | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 spec/fixtures/dummy_template.rb diff --git a/lib/solidus_cmd/extension.rb b/lib/solidus_cmd/extension.rb index 05d1235..483ac70 100644 --- a/lib/solidus_cmd/extension.rb +++ b/lib/solidus_cmd/extension.rb @@ -8,6 +8,8 @@ class Extension < Thor::Group desc "builds a solidus extension" argument :file_name, type: :string, desc: 'rails app_path', default: '.' + class_option :template + def self.source_root File.expand_path('../', __FILE__) end @@ -17,7 +19,8 @@ def generate empty_directory file_name - apply 'template.rb' + template = options[:template] ? options[:template] : 'template.rb' + apply template end no_tasks do diff --git a/spec/extension_spec.rb b/spec/extension_spec.rb index 005badb..d25ca6c 100644 --- a/spec/extension_spec.rb +++ b/spec/extension_spec.rb @@ -7,5 +7,15 @@ 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 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" From b12418620b51b9e2da751a427b00df3f9cc4aef3 Mon Sep 17 00:00:00 2001 From: Cesar Carruitero Date: Sat, 21 Oct 2017 10:51:58 -0500 Subject: [PATCH 4/4] not create extension when template is invalid --- lib/solidus_cmd/extension.rb | 5 ++++- spec/extension_spec.rb | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/solidus_cmd/extension.rb b/lib/solidus_cmd/extension.rb index 483ac70..2dd3f81 100644 --- a/lib/solidus_cmd/extension.rb +++ b/lib/solidus_cmd/extension.rb @@ -15,11 +15,14 @@ def self.source_root end def generate + template = options[:template] ? options[:template] : 'template.rb' + + find_in_source_paths(template) + use_prefix 'solidus_' empty_directory file_name - template = options[:template] ? options[:template] : 'template.rb' apply template end diff --git a/spec/extension_spec.rb b/spec/extension_spec.rb index d25ca6c..e413b08 100644 --- a/spec/extension_spec.rb +++ b/spec/extension_spec.rb @@ -18,4 +18,9 @@ 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