From 668d4d43885e8bca89a468072d2f0777c8cdd4ca Mon Sep 17 00:00:00 2001 From: kbparagua Date: Tue, 12 Feb 2013 23:17:46 +0800 Subject: [PATCH] Hook for paloma:add when using 'rails generate controller actions*' --- lib/paloma.rb | 2 + lib/paloma/rails/controller_generator.rb | 11 +++ spec/generator_helper.rb | 15 ++++ ...rator_spec.rb => paloma_generator_spec.rb} | 13 +--- spec/rails_generator_spec.rb | 71 +++++++++++++++++++ spec/spec_helper.rb | 2 +- 6 files changed, 101 insertions(+), 13 deletions(-) create mode 100644 lib/paloma/rails/controller_generator.rb create mode 100644 spec/generator_helper.rb rename spec/{generator_spec.rb => paloma_generator_spec.rb} (97%) create mode 100644 spec/rails_generator_spec.rb diff --git a/lib/paloma.rb b/lib/paloma.rb index 863008b..91b5d90 100644 --- a/lib/paloma.rb +++ b/lib/paloma.rb @@ -19,6 +19,7 @@ module Paloma def self.templates @templates ||= "#{Paloma.root}/app/templates" end + end require 'action_controller/railtie' @@ -30,3 +31,4 @@ require 'paloma/generators/add_generator' require 'paloma/generators/setup_generator' require 'paloma/action_controller_filters' require 'paloma/action_controller_extension' +require 'paloma/rails/controller_generator' diff --git a/lib/paloma/rails/controller_generator.rb b/lib/paloma/rails/controller_generator.rb new file mode 100644 index 0000000..0e34a8d --- /dev/null +++ b/lib/paloma/rails/controller_generator.rb @@ -0,0 +1,11 @@ +module ::Rails::Generators + class ControllerGenerator < NamedBase + + class_option :paloma, :type => :boolean, :default => true + + def paloma + invoke 'paloma:add', ([file_name] + actions) if options[:paloma] + end + + end +end diff --git a/spec/generator_helper.rb b/spec/generator_helper.rb new file mode 100644 index 0000000..0310481 --- /dev/null +++ b/spec/generator_helper.rb @@ -0,0 +1,15 @@ +require 'rails/generators/named_base' +require 'rails/generators/rails/controller/controller_generator' +require 'fileutils' +require 'generator_spec/test_case' + + +TEMP = "#{File.dirname(__FILE__)}/tmp/" + + +def mimic_setup + # Mimic SetupGenerator results before running the AddGenerator + FileUtils.cd TEMP + FileUtils.mkpath Paloma.destination + File.open("#{Paloma.destination}/index.js", 'w') { |f| f.write('//= require ./paloma.js')} +end diff --git a/spec/generator_spec.rb b/spec/paloma_generator_spec.rb similarity index 97% rename from spec/generator_spec.rb rename to spec/paloma_generator_spec.rb index 325cca3..7cae8d0 100644 --- a/spec/generator_spec.rb +++ b/spec/paloma_generator_spec.rb @@ -1,8 +1,6 @@ require 'spec_helper' -require 'generator_spec/test_case' -require 'fileutils' +require 'generator_helper' -TEMP = "#{File.dirname(__FILE__)}/tmp/" # rails g paloma:setup feature Paloma::SetupGenerator do @@ -25,15 +23,6 @@ feature Paloma::SetupGenerator do end - -def mimic_setup - # Mimic SetupGenerator results before running the AddGenerator - FileUtils.cd TEMP - FileUtils.mkpath Paloma.destination - File.open("#{Paloma.destination}/index.js", 'w') { |f| f.write('//= require ./paloma.js')} -end - - # rails g paloma:add sexy_controller feature Paloma::AddGenerator, 'creating controller folder only' do include GeneratorSpec::TestCase diff --git a/spec/rails_generator_spec.rb b/spec/rails_generator_spec.rb new file mode 100644 index 0000000..81fca41 --- /dev/null +++ b/spec/rails_generator_spec.rb @@ -0,0 +1,71 @@ +require 'spec_helper' +require 'generator_helper' + + +feature ::Rails::Generators::ControllerGenerator, 'generating a rails controller without action' do + include GeneratorSpec::TestCase + destination TEMP + arguments ['my_controller'] + + before do + prepare_destination + mimic_setup + run_generator + end + + specify do + destination_root.should have_structure { + directory Paloma.destination do + directory 'my_controller' do + file '_local.js' do + contains 'Paloma.my_controller = {' + end + + file '_callbacks.js' do + contains '//= require ./_local.js' + contains '//= require_tree .' + end + end + end + } + end +end + + +feature ::Rails::Generators::ControllerGenerator, 'generating a rails controller with actions' do + include GeneratorSpec::TestCase + destination TEMP + arguments ['my_controller', 'new', 'edit'] + + before do + prepare_destination + + # Create config/routes.rb + FileUtils.cd TEMP + FileUtils.mkpath 'config' + File.open("config/routes.rb", 'w') { |f| f.write('')} + + mimic_setup + run_generator + end + + specify do + destination_root.should have_structure { + directory Paloma.destination do + directory 'my_controller' do + file '_local.js' do + contains 'Paloma.my_controller = {' + end + + file '_callbacks.js' do + contains '//= require ./_local.js' + contains '//= require_tree .' + end + + file 'new.js' + file 'edit.js' + end + end + } + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 20899d9..d7def48 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,10 +5,10 @@ Bundler.require require 'sample_app/init' require 'rspec/rails' - require 'capybara/rspec' require 'database_cleaner' + RSpec.configure do |config| config.before :each do DatabaseCleaner.strategy = :truncation