mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge commit 'josevalim/fixes'
Conflicts: railties/test/generators/app_generator_test.rb
This commit is contained in:
commit
acb1624f27
15 changed files with 153 additions and 140 deletions
|
@ -3,7 +3,8 @@ module ActionController #:nodoc:
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
class_inheritable_reader :mimes_for_respond_to
|
extlib_inheritable_accessor :responder, :mimes_for_respond_to, :instance_writer => false
|
||||||
|
self.responder = ActionController::Responder
|
||||||
clear_respond_to
|
clear_respond_to
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -46,7 +47,7 @@ module ActionController #:nodoc:
|
||||||
# Clear all mimes in respond_to.
|
# Clear all mimes in respond_to.
|
||||||
#
|
#
|
||||||
def clear_respond_to
|
def clear_respond_to
|
||||||
write_inheritable_attribute(:mimes_for_respond_to, ActiveSupport::OrderedHash.new)
|
self.mimes_for_respond_to = ActiveSupport::OrderedHash.new
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -221,10 +222,6 @@ module ActionController #:nodoc:
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def responder
|
|
||||||
ActionController::Responder
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
# Collect mimes declared in the class method respond_to valid for the
|
# Collect mimes declared in the class method respond_to valid for the
|
||||||
|
|
|
@ -202,8 +202,8 @@ module ActionView
|
||||||
end
|
end
|
||||||
|
|
||||||
objects.compact!
|
objects.compact!
|
||||||
|
|
||||||
count = objects.inject(0) {|sum, object| sum + object.errors.count }
|
count = objects.inject(0) {|sum, object| sum + object.errors.count }
|
||||||
|
|
||||||
unless count.zero?
|
unless count.zero?
|
||||||
html = {}
|
html = {}
|
||||||
[:id, :class].each do |key|
|
[:id, :class].each do |key|
|
||||||
|
@ -216,16 +216,20 @@ module ActionView
|
||||||
end
|
end
|
||||||
options[:object_name] ||= params.first
|
options[:object_name] ||= params.first
|
||||||
|
|
||||||
I18n.with_options :locale => options[:locale], :scope => [:activerecord, :errors, :template] do |locale|
|
I18n.with_options :locale => options[:locale], :scope => [:activemodel, :errors, :template] do |locale|
|
||||||
header_message = if options.include?(:header_message)
|
header_message = if options.include?(:header_message)
|
||||||
options[:header_message]
|
options[:header_message]
|
||||||
else
|
else
|
||||||
object_name = options[:object_name].to_s.gsub('_', ' ')
|
locale.t :header, :count => count, :model => options[:object_name].to_s.gsub('_', ' ')
|
||||||
object_name = I18n.t(options[:object_name].to_s, :default => object_name, :scope => [:activerecord, :models], :count => 1)
|
|
||||||
locale.t :header, :count => count, :model => object_name
|
|
||||||
end
|
end
|
||||||
|
|
||||||
message = options.include?(:message) ? options[:message] : locale.t(:body)
|
message = options.include?(:message) ? options[:message] : locale.t(:body)
|
||||||
error_messages = objects.sum {|object| object.errors.full_messages.map {|msg| content_tag(:li, ERB::Util.html_escape(msg)) } }.join
|
|
||||||
|
error_messages = objects.sum do |object|
|
||||||
|
object.errors.full_messages.map do |msg|
|
||||||
|
content_tag(:li, ERB::Util.html_escape(msg))
|
||||||
|
end
|
||||||
|
end.join
|
||||||
|
|
||||||
contents = ''
|
contents = ''
|
||||||
contents << content_tag(options[:header_tag] || :h2, header_message) unless header_message.blank?
|
contents << content_tag(options[:header_tag] || :h2, header_message) unless header_message.blank?
|
||||||
|
|
|
@ -102,7 +102,7 @@
|
||||||
minute: "Minute"
|
minute: "Minute"
|
||||||
second: "Seconds"
|
second: "Seconds"
|
||||||
|
|
||||||
activerecord:
|
activemodel:
|
||||||
errors:
|
errors:
|
||||||
template:
|
template:
|
||||||
header:
|
header:
|
||||||
|
|
|
@ -760,6 +760,14 @@ class RespondWithControllerTest < ActionController::TestCase
|
||||||
assert_equal "Resource name is david", @response.body
|
assert_equal "Resource name is david", @response.body
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_using_resource_with_responder
|
||||||
|
RespondWithController.responder = proc { |c, r, o| c.render :text => "Resource name is #{r.first.name}" }
|
||||||
|
get :using_resource
|
||||||
|
assert_equal "Resource name is david", @response.body
|
||||||
|
ensure
|
||||||
|
RespondWithController.responder = ActionController::Responder
|
||||||
|
end
|
||||||
|
|
||||||
def test_not_acceptable
|
def test_not_acceptable
|
||||||
@request.accept = "application/xml"
|
@request.accept = "application/xml"
|
||||||
get :using_defaults
|
get :using_defaults
|
||||||
|
|
42
actionpack/test/template/active_model_helper_i18n_test.rb
Normal file
42
actionpack/test/template/active_model_helper_i18n_test.rb
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
require 'abstract_unit'
|
||||||
|
|
||||||
|
class ActiveModelHelperI18nTest < Test::Unit::TestCase
|
||||||
|
include ActionView::Context
|
||||||
|
include ActionView::Helpers::ActiveModelHelper
|
||||||
|
|
||||||
|
attr_reader :request
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@object = stub :errors => stub(:count => 1, :full_messages => ['full_messages'])
|
||||||
|
@object.stubs :to_model => @object
|
||||||
|
@object.stubs :class => stub(:model_name => stub(:human => ""))
|
||||||
|
|
||||||
|
@object_name = 'book_seller'
|
||||||
|
@object_name_without_underscore = 'book seller'
|
||||||
|
|
||||||
|
stubs(:content_tag).returns 'content_tag'
|
||||||
|
|
||||||
|
I18n.stubs(:t).with(:'header', :locale => 'en', :scope => [:activemodel, :errors, :template], :count => 1, :model => '').returns "1 error prohibited this from being saved"
|
||||||
|
I18n.stubs(:t).with(:'body', :locale => 'en', :scope => [:activemodel, :errors, :template]).returns 'There were problems with the following fields:'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_error_messages_for_given_a_header_option_it_does_not_translate_header_message
|
||||||
|
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:activemodel, :errors, :template], :count => 1, :model => '').never
|
||||||
|
error_messages_for(:object => @object, :header_message => 'header message', :locale => 'en')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_error_messages_for_given_no_header_option_it_translates_header_message
|
||||||
|
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:activemodel, :errors, :template], :count => 1, :model => '').returns 'header message'
|
||||||
|
error_messages_for(:object => @object, :locale => 'en')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_error_messages_for_given_a_message_option_it_does_not_translate_message
|
||||||
|
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:activemodel, :errors, :template]).never
|
||||||
|
error_messages_for(:object => @object, :message => 'message', :locale => 'en')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_error_messages_for_given_no_message_option_it_translates_message
|
||||||
|
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:activemodel, :errors, :template]).returns 'There were problems with the following fields:'
|
||||||
|
error_messages_for(:object => @object, :locale => 'en')
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +1,6 @@
|
||||||
require 'abstract_unit'
|
require 'abstract_unit'
|
||||||
|
|
||||||
class ActiveRecordHelperTest < ActionView::TestCase
|
class ActiveModelHelperTest < ActionView::TestCase
|
||||||
tests ActionView::Helpers::ActiveModelHelper
|
tests ActionView::Helpers::ActiveModelHelper
|
||||||
|
|
||||||
silence_warnings do
|
silence_warnings do
|
|
@ -1,51 +0,0 @@
|
||||||
require 'abstract_unit'
|
|
||||||
|
|
||||||
class ActiveRecordHelperI18nTest < Test::Unit::TestCase
|
|
||||||
include ActionView::Context
|
|
||||||
include ActionView::Helpers::ActiveModelHelper
|
|
||||||
|
|
||||||
attr_reader :request
|
|
||||||
|
|
||||||
def setup
|
|
||||||
@object = stub :errors => stub(:count => 1, :full_messages => ['full_messages'])
|
|
||||||
@object.stubs :to_model => @object
|
|
||||||
@object.stubs :class => stub(:model_name => stub(:human => ""))
|
|
||||||
|
|
||||||
@object_name = 'book_seller'
|
|
||||||
@object_name_without_underscore = 'book seller'
|
|
||||||
|
|
||||||
stubs(:content_tag).returns 'content_tag'
|
|
||||||
|
|
||||||
I18n.stubs(:t).with(:'header', :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => '').returns "1 error prohibited this from being saved"
|
|
||||||
I18n.stubs(:t).with(:'body', :locale => 'en', :scope => [:activerecord, :errors, :template]).returns 'There were problems with the following fields:'
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_a_header_option_it_does_not_translate_header_message
|
|
||||||
I18n.expects(:translate).with(:'header', :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => '').never
|
|
||||||
error_messages_for(:object => @object, :header_message => 'header message', :locale => 'en')
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_no_header_option_it_translates_header_message
|
|
||||||
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => '').returns 'header message'
|
|
||||||
I18n.expects(:t).with('', :default => '', :count => 1, :scope => [:activerecord, :models]).once.returns ''
|
|
||||||
error_messages_for(:object => @object, :locale => 'en')
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_a_message_option_it_does_not_translate_message
|
|
||||||
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:activerecord, :errors, :template]).never
|
|
||||||
I18n.expects(:t).with('', :default => '', :count => 1, :scope => [:activerecord, :models]).once.returns ''
|
|
||||||
error_messages_for(:object => @object, :message => 'message', :locale => 'en')
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_no_message_option_it_translates_message
|
|
||||||
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:activerecord, :errors, :template]).returns 'There were problems with the following fields:'
|
|
||||||
I18n.expects(:t).with('', :default => '', :count => 1, :scope => [:activerecord, :models]).once.returns ''
|
|
||||||
error_messages_for(:object => @object, :locale => 'en')
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_object_name_it_translates_object_name
|
|
||||||
I18n.expects(:t).with(:header, :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => @object_name_without_underscore).returns "1 error prohibited this #{@object_name_without_underscore} from being saved"
|
|
||||||
I18n.expects(:t).with(@object_name, :default => @object_name_without_underscore, :count => 1, :scope => [:activerecord, :models]).once.returns @object_name_without_underscore
|
|
||||||
error_messages_for(:object => @object, :locale => 'en', :object_name => @object_name)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -10,16 +10,19 @@ end
|
||||||
# children, which is unlike the regular class-level attributes that are shared across the entire hierarchy.
|
# children, which is unlike the regular class-level attributes that are shared across the entire hierarchy.
|
||||||
class Class # :nodoc:
|
class Class # :nodoc:
|
||||||
def class_inheritable_reader(*syms)
|
def class_inheritable_reader(*syms)
|
||||||
|
options = syms.extract_options!
|
||||||
syms.each do |sym|
|
syms.each do |sym|
|
||||||
next if sym.is_a?(Hash)
|
next if sym.is_a?(Hash)
|
||||||
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
||||||
def self.#{sym} # def self.after_add
|
def self.#{sym} # def self.after_add
|
||||||
read_inheritable_attribute(:#{sym}) # read_inheritable_attribute(:after_add)
|
read_inheritable_attribute(:#{sym}) # read_inheritable_attribute(:after_add)
|
||||||
end # end
|
end # end
|
||||||
|
#
|
||||||
|
#{" #
|
||||||
def #{sym} # def after_add
|
def #{sym} # def after_add
|
||||||
self.class.#{sym} # self.class.after_add
|
self.class.#{sym} # self.class.after_add
|
||||||
end # end
|
end # end
|
||||||
|
" unless options[:instance_reader] == false } # # the reader above is generated unless options[:instance_reader] == false
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -156,7 +159,7 @@ class Class
|
||||||
# moving on). In particular, this makes the return value of this function
|
# moving on). In particular, this makes the return value of this function
|
||||||
# less useful.
|
# less useful.
|
||||||
def extlib_inheritable_reader(*ivars)
|
def extlib_inheritable_reader(*ivars)
|
||||||
instance_reader = ivars.pop[:reader] if ivars.last.is_a?(Hash)
|
options = ivars.extract_options!
|
||||||
|
|
||||||
ivars.each do |ivar|
|
ivars.each do |ivar|
|
||||||
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
||||||
|
@ -164,10 +167,10 @@ class Class
|
||||||
return @#{ivar} if self.object_id == #{self.object_id} || defined?(@#{ivar})
|
return @#{ivar} if self.object_id == #{self.object_id} || defined?(@#{ivar})
|
||||||
ivar = superclass.#{ivar}
|
ivar = superclass.#{ivar}
|
||||||
return nil if ivar.nil? && !#{self}.instance_variable_defined?("@#{ivar}")
|
return nil if ivar.nil? && !#{self}.instance_variable_defined?("@#{ivar}")
|
||||||
@#{ivar} = ivar && !ivar.is_a?(Module) && !ivar.is_a?(Numeric) && !ivar.is_a?(TrueClass) && !ivar.is_a?(FalseClass) ? ivar.dup : ivar
|
@#{ivar} = ivar.duplicable? ? ivar.dup : ivar
|
||||||
end
|
end
|
||||||
RUBY
|
RUBY
|
||||||
unless instance_reader == false
|
unless options[:instance_reader] == false
|
||||||
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
||||||
def #{ivar}
|
def #{ivar}
|
||||||
self.class.#{ivar}
|
self.class.#{ivar}
|
||||||
|
@ -190,14 +193,15 @@ class Class
|
||||||
# @todo We need a style for class_eval <<-HEREDOC. I'd like to make it
|
# @todo We need a style for class_eval <<-HEREDOC. I'd like to make it
|
||||||
# class_eval(<<-RUBY, __FILE__, __LINE__), but we should codify it somewhere.
|
# class_eval(<<-RUBY, __FILE__, __LINE__), but we should codify it somewhere.
|
||||||
def extlib_inheritable_writer(*ivars)
|
def extlib_inheritable_writer(*ivars)
|
||||||
instance_writer = ivars.pop[:writer] if ivars.last.is_a?(Hash)
|
options = ivars.extract_options!
|
||||||
|
|
||||||
ivars.each do |ivar|
|
ivars.each do |ivar|
|
||||||
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
||||||
def self.#{ivar}=(obj)
|
def self.#{ivar}=(obj)
|
||||||
@#{ivar} = obj
|
@#{ivar} = obj
|
||||||
end
|
end
|
||||||
RUBY
|
RUBY
|
||||||
unless instance_writer == false
|
unless options[:instance_writer] == false
|
||||||
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
||||||
def #{ivar}=(obj) self.class.#{ivar} = obj end
|
def #{ivar}=(obj) self.class.#{ivar} = obj end
|
||||||
RUBY
|
RUBY
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
class Object
|
class Object
|
||||||
# Can you safely .dup this object?
|
# Can you safely .dup this object?
|
||||||
# False for nil, false, true, symbols, numbers, and class objects; true otherwise.
|
# False for nil, false, true, symbols, numbers, class and module objects; true otherwise.
|
||||||
def duplicable?
|
def duplicable?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
@ -41,3 +41,9 @@ class Class #:nodoc:
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Module #:nodoc:
|
||||||
|
def duplicable?
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -32,7 +32,7 @@ module Rails
|
||||||
|
|
||||||
# GET index
|
# GET index
|
||||||
def self.all(klass)
|
def self.all(klass)
|
||||||
raise NotImplementedError
|
"#{klass}.all"
|
||||||
end
|
end
|
||||||
|
|
||||||
# GET show
|
# GET show
|
||||||
|
@ -40,34 +40,38 @@ module Rails
|
||||||
# PUT update
|
# PUT update
|
||||||
# DELETE destroy
|
# DELETE destroy
|
||||||
def self.find(klass, params=nil)
|
def self.find(klass, params=nil)
|
||||||
raise NotImplementedError
|
"#{klass}.find(#{params})"
|
||||||
end
|
end
|
||||||
|
|
||||||
# GET new
|
# GET new
|
||||||
# POST create
|
# POST create
|
||||||
def self.build(klass, params=nil)
|
def self.build(klass, params=nil)
|
||||||
raise NotImplementedError
|
if params
|
||||||
|
"#{klass}.new(#{params})"
|
||||||
|
else
|
||||||
|
"#{klass}.new"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# POST create
|
# POST create
|
||||||
def save
|
def save
|
||||||
raise NotImplementedError
|
"#{name}.save"
|
||||||
end
|
end
|
||||||
|
|
||||||
# PUT update
|
# PUT update
|
||||||
def update_attributes(params=nil)
|
def update_attributes(params=nil)
|
||||||
raise NotImplementedError
|
"#{name}.update_attributes(#{params})"
|
||||||
end
|
end
|
||||||
|
|
||||||
# POST create
|
# POST create
|
||||||
# PUT update
|
# PUT update
|
||||||
def errors
|
def errors
|
||||||
raise NotImplementedError
|
"#{name}.errors"
|
||||||
end
|
end
|
||||||
|
|
||||||
# DELETE destroy
|
# DELETE destroy
|
||||||
def destroy
|
def destroy
|
||||||
raise NotImplementedError
|
"#{name}.destroy"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,39 +18,5 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class ActiveModel < Rails::Generators::ActiveModel #:nodoc:
|
|
||||||
def self.all(klass)
|
|
||||||
"#{klass}.all"
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.find(klass, params=nil)
|
|
||||||
"#{klass}.find(#{params})"
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.build(klass, params=nil)
|
|
||||||
if params
|
|
||||||
"#{klass}.new(#{params})"
|
|
||||||
else
|
|
||||||
"#{klass}.new"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def save
|
|
||||||
"#{name}.save"
|
|
||||||
end
|
|
||||||
|
|
||||||
def update_attributes(params=nil)
|
|
||||||
"#{name}.update_attributes(#{params})"
|
|
||||||
end
|
|
||||||
|
|
||||||
def errors
|
|
||||||
"#{name}.errors"
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
"#{name}.destroy"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# Gemfile is where you list all of your application's dependencies
|
# Gemfile is where you list all of your application's dependencies
|
||||||
#
|
#
|
||||||
gem "rails", "<%= Rails::VERSION::STRING %>"
|
<%= "# " if options.freeze? %>gem "rails", "<%= Rails::VERSION::STRING %>"
|
||||||
#
|
#
|
||||||
# Bundling edge rails:
|
# Bundling edge rails:
|
||||||
# gem "rails", "<%= Rails::VERSION::STRING %>", :git => "git://github.com/rails/rails.git"
|
<%= "# " unless options.freeze? %>gem "rails", "<%= Rails::VERSION::STRING %>", :git => "git://github.com/rails/rails.git"
|
||||||
|
|
||||||
# Specify gemcutter as a gem source
|
# Specify gemcutter as a gem source
|
||||||
# source "http://gemcutter.org"
|
# source "http://gemcutter.org"
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
require 'rails/generators/active_model'
|
||||||
|
|
||||||
module Rails
|
module Rails
|
||||||
module Generators
|
module Generators
|
||||||
# Deal with controller names on scaffold and add some helpers to deal with
|
# Deal with controller names on scaffold and add some helpers to deal with
|
||||||
|
@ -47,20 +49,11 @@ module Rails
|
||||||
raise "You need to have :orm as class option to invoke orm_class and orm_instance"
|
raise "You need to have :orm as class option to invoke orm_class and orm_instance"
|
||||||
end
|
end
|
||||||
|
|
||||||
active_model = "#{options[:orm].to_s.classify}::Generators::ActiveModel"
|
|
||||||
|
|
||||||
# If the orm was not loaded, try to load it at "generators/orm",
|
|
||||||
# for example "generators/active_record" or "generators/sequel".
|
|
||||||
begin
|
begin
|
||||||
klass = active_model.constantize
|
"#{options[:orm].to_s.classify}::Generators::ActiveModel".constantize
|
||||||
rescue NameError
|
rescue NameError => e
|
||||||
require "rails/generators/#{options[:orm]}"
|
Rails::Generators::ActiveModel
|
||||||
end
|
end
|
||||||
|
|
||||||
# Try once again after loading the file with success.
|
|
||||||
klass ||= active_model.constantize
|
|
||||||
rescue Exception => e
|
|
||||||
raise Error, "Could not load #{active_model}, skipping controller. Error: #{e.message}."
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,14 @@ class AppGeneratorTest < GeneratorsTestCase
|
||||||
generator(:freeze => true, :database => "sqlite3").expects(:run).
|
generator(:freeze => true, :database => "sqlite3").expects(:run).
|
||||||
with("rake rails:freeze:edge", :verbose => false)
|
with("rake rails:freeze:edge", :verbose => false)
|
||||||
silence(:stdout){ generator.invoke }
|
silence(:stdout){ generator.invoke }
|
||||||
assert_file 'config/environment.rb'
|
|
||||||
|
assert_file 'Gemfile' do |content|
|
||||||
|
flag = %(gem "rails", "#{Rails::VERSION::STRING}", :git => "git://github.com/rails/rails.git")
|
||||||
|
assert_match /^#{Regexp.escape(flag)}$/, content
|
||||||
|
|
||||||
|
flag = %(# gem "rails", "#{Rails::VERSION::STRING}")
|
||||||
|
assert_match /^#{Regexp.escape(flag)}$/, content
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_template_from_dir_pwd
|
def test_template_from_dir_pwd
|
||||||
|
|
|
@ -2,6 +2,11 @@ require 'abstract_unit'
|
||||||
require 'generators/generators_test_helper'
|
require 'generators/generators_test_helper'
|
||||||
require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'
|
require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'
|
||||||
|
|
||||||
|
module Unknown
|
||||||
|
module Generators
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class ScaffoldControllerGeneratorTest < GeneratorsTestCase
|
class ScaffoldControllerGeneratorTest < GeneratorsTestCase
|
||||||
|
|
||||||
def test_controller_skeleton_is_created
|
def test_controller_skeleton_is_created
|
||||||
|
@ -97,10 +102,38 @@ class ScaffoldControllerGeneratorTest < GeneratorsTestCase
|
||||||
assert_no_file "app/views/layouts/users.html.erb"
|
assert_no_file "app/views/layouts/users.html.erb"
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_error_is_shown_if_orm_does_not_provide_interface
|
def test_default_orm_is_used
|
||||||
error = capture(:stderr){ run_generator ["User", "--orm=unknown"] }
|
run_generator ["User", "--orm=unknown"]
|
||||||
assert_equal "Could not load Unknown::Generators::ActiveModel, skipping controller. " <<
|
|
||||||
"Error: no such file to load -- rails/generators/unknown.\n", error
|
assert_file "app/controllers/users_controller.rb" do |content|
|
||||||
|
assert_match /class UsersController < ApplicationController/, content
|
||||||
|
|
||||||
|
assert_instance_method content, :index do |m|
|
||||||
|
assert_match /@users = User\.all/, m
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_customized_orm_is_used
|
||||||
|
klass = Class.new(Rails::Generators::ActiveModel) do
|
||||||
|
def self.all(klass)
|
||||||
|
"#{klass}.find(:all)"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Unknown::Generators.const_set(:ActiveModel, klass)
|
||||||
|
run_generator ["User", "--orm=unknown"]
|
||||||
|
|
||||||
|
assert_file "app/controllers/users_controller.rb" do |content|
|
||||||
|
assert_match /class UsersController < ApplicationController/, content
|
||||||
|
|
||||||
|
assert_instance_method content, :index do |m|
|
||||||
|
assert_match /@users = User\.find\(:all\)/, m
|
||||||
|
assert_no_match /@users = User\.all/, m
|
||||||
|
end
|
||||||
|
end
|
||||||
|
ensure
|
||||||
|
Unknown::Generators.send :remove_const, :ActiveModel
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
Loading…
Reference in a new issue