mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge branch 'master' of git@github.com:rails/rails
This commit is contained in:
commit
e2af713d1c
18 changed files with 228 additions and 88 deletions
|
@ -1,6 +1,7 @@
|
||||||
require 'cgi'
|
require 'cgi'
|
||||||
require 'action_view/helpers/date_helper'
|
require 'action_view/helpers/date_helper'
|
||||||
require 'action_view/helpers/tag_helper'
|
require 'action_view/helpers/tag_helper'
|
||||||
|
require 'action_view/helpers/form_tag_helper'
|
||||||
|
|
||||||
module ActionView
|
module ActionView
|
||||||
module Helpers
|
module Helpers
|
||||||
|
@ -445,7 +446,7 @@ module ActionView
|
||||||
end
|
end
|
||||||
|
|
||||||
class InstanceTag #:nodoc:
|
class InstanceTag #:nodoc:
|
||||||
include Helpers::TagHelper
|
include Helpers::TagHelper, Helpers::FormTagHelper
|
||||||
|
|
||||||
attr_reader :method_name, :object_name
|
attr_reader :method_name, :object_name
|
||||||
|
|
||||||
|
@ -467,11 +468,13 @@ module ActionView
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_label_tag(text = nil, options = {})
|
def to_label_tag(text = nil, options = {})
|
||||||
|
options = options.stringify_keys
|
||||||
name_and_id = options.dup
|
name_and_id = options.dup
|
||||||
add_default_name_and_id(name_and_id)
|
add_default_name_and_id(name_and_id)
|
||||||
options["for"] = name_and_id["id"]
|
options.delete("index")
|
||||||
|
options["for"] ||= name_and_id["id"]
|
||||||
content = (text.blank? ? nil : text.to_s) || method_name.humanize
|
content = (text.blank? ? nil : text.to_s) || method_name.humanize
|
||||||
content_tag("label", content, options)
|
label_tag(name_and_id["id"], content, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_input_field_tag(field_type, options = {})
|
def to_input_field_tag(field_type, options = {})
|
||||||
|
|
|
@ -24,7 +24,12 @@ module ActionView #:nodoc:
|
||||||
view_paths.flatten.compact.each do |dir|
|
view_paths.flatten.compact.each do |dir|
|
||||||
next if @@processed_view_paths.has_key?(dir)
|
next if @@processed_view_paths.has_key?(dir)
|
||||||
@@processed_view_paths[dir] = []
|
@@processed_view_paths[dir] = []
|
||||||
Dir.glob("#{dir}/**/*/**").each do |file|
|
|
||||||
|
#
|
||||||
|
# Dir.glob("#{dir}/**/*/**") reads all the directories in view path and templates inside those directories
|
||||||
|
# Dir.glob("#{dir}/**") reads templates residing at top level of view path
|
||||||
|
#
|
||||||
|
(Dir.glob("#{dir}/**/*/**") | Dir.glob("#{dir}/**")).each do |file|
|
||||||
unless File.directory?(file)
|
unless File.directory?(file)
|
||||||
@@processed_view_paths[dir] << file.split(dir).last.sub(/^\//, '')
|
@@processed_view_paths[dir] << file.split(dir).last.sub(/^\//, '')
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,14 @@ class TestController < ActionController::Base
|
||||||
render :template => "/test/hello_world"
|
render :template => "/test/hello_world"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render_template_in_top_directory
|
||||||
|
render :template => 'shared'
|
||||||
|
end
|
||||||
|
|
||||||
|
def render_template_in_top_directory_with_slash
|
||||||
|
render :template => '/shared'
|
||||||
|
end
|
||||||
|
|
||||||
def render_hello_world_from_variable
|
def render_hello_world_from_variable
|
||||||
@person = "david"
|
@person = "david"
|
||||||
render :text => "hello #{@person}"
|
render :text => "hello #{@person}"
|
||||||
|
@ -244,6 +252,18 @@ class RenderTest < Test::Unit::TestCase
|
||||||
assert_template "test/hello_world"
|
assert_template "test/hello_world"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_render_in_top_directory
|
||||||
|
get :render_template_in_top_directory
|
||||||
|
assert_template "shared"
|
||||||
|
assert_equal "Elastica", @response.body
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_render_in_top_directory_with_slash
|
||||||
|
get :render_template_in_top_directory_with_slash
|
||||||
|
assert_template "shared"
|
||||||
|
assert_equal "Elastica", @response.body
|
||||||
|
end
|
||||||
|
|
||||||
def test_render_from_variable
|
def test_render_from_variable
|
||||||
get :render_hello_world_from_variable
|
get :render_hello_world_from_variable
|
||||||
assert_equal "hello david", @response.body
|
assert_equal "hello david", @response.body
|
||||||
|
|
1
actionpack/test/fixtures/shared.html.erb
vendored
Normal file
1
actionpack/test/fixtures/shared.html.erb
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Elastica
|
|
@ -77,6 +77,14 @@ class FormHelperTest < ActionView::TestCase
|
||||||
assert_dom_equal('<label for="post_title">Title</label>', label(:post, :title))
|
assert_dom_equal('<label for="post_title">Title</label>', label(:post, :title))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_label_with_for_attribute_as_symbol
|
||||||
|
assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, :for => "my_for"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_label_with_for_attribute_as_string
|
||||||
|
assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, "for" => "my_for"))
|
||||||
|
end
|
||||||
|
|
||||||
def test_text_field
|
def test_text_field
|
||||||
assert_dom_equal(
|
assert_dom_equal(
|
||||||
'<input id="post_title" name="post[title]" size="30" type="text" value="Hello World" />', text_field("post", "title")
|
'<input id="post_title" name="post[title]" size="30" type="text" value="Hello World" />', text_field("post", "title")
|
||||||
|
@ -532,6 +540,18 @@ class FormHelperTest < ActionView::TestCase
|
||||||
_erbout
|
_erbout
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_fields_for_object_with_bracketed_name_and_index
|
||||||
|
_erbout = ''
|
||||||
|
fields_for("author[post]", @post, :index => 1) do |f|
|
||||||
|
_erbout.concat f.label(:title)
|
||||||
|
_erbout.concat f.text_field(:title)
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_dom_equal "<label for=\"author_post_1_title\">Title</label>" +
|
||||||
|
"<input name='author[post][1][title]' size='30' type='text' id='author_post_1_title' value='Hello World' />",
|
||||||
|
_erbout
|
||||||
|
end
|
||||||
|
|
||||||
def test_form_builder_does_not_have_form_for_method
|
def test_form_builder_does_not_have_form_for_method
|
||||||
assert ! ActionView::Helpers::FormBuilder.instance_methods.include?('form_for')
|
assert ! ActionView::Helpers::FormBuilder.instance_methods.include?('form_for')
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,13 +21,14 @@ class TemplateFinderTest < Test::Unit::TestCase
|
||||||
assert_equal ["builder", "erb", "rhtml", "rjs", "rxml", "mab"].sort,
|
assert_equal ["builder", "erb", "rhtml", "rjs", "rxml", "mab"].sort,
|
||||||
ActionView::TemplateFinder.file_extension_cache[LOAD_PATH_ROOT].values.flatten.uniq.sort
|
ActionView::TemplateFinder.file_extension_cache[LOAD_PATH_ROOT].values.flatten.uniq.sort
|
||||||
|
|
||||||
assert_equal Dir.glob("#{LOAD_PATH_ROOT}/**/*/*.{erb,rjs,rhtml,builder,rxml,mab}").size,
|
assert_equal (Dir.glob("#{LOAD_PATH_ROOT}/**/*/*.{erb,rjs,rhtml,builder,rxml,mab}") |
|
||||||
|
Dir.glob("#{LOAD_PATH_ROOT}/**.{erb,rjs,rhtml,builder,rxml,mab}")).size,
|
||||||
ActionView::TemplateFinder.file_extension_cache[LOAD_PATH_ROOT].keys.size
|
ActionView::TemplateFinder.file_extension_cache[LOAD_PATH_ROOT].keys.size
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_should_cache_dir_content_properly
|
def test_should_cache_dir_content_properly
|
||||||
assert ActionView::TemplateFinder.processed_view_paths[LOAD_PATH_ROOT]
|
assert ActionView::TemplateFinder.processed_view_paths[LOAD_PATH_ROOT]
|
||||||
assert_equal Dir.glob("#{LOAD_PATH_ROOT}/**/*/**").find_all {|f| !File.directory?(f) }.size,
|
assert_equal (Dir.glob("#{LOAD_PATH_ROOT}/**/*/**") | Dir.glob("#{LOAD_PATH_ROOT}/**")).find_all {|f| !File.directory?(f) }.size,
|
||||||
ActionView::TemplateFinder.processed_view_paths[LOAD_PATH_ROOT].size
|
ActionView::TemplateFinder.processed_view_paths[LOAD_PATH_ROOT].size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
*SVN*
|
*SVN*
|
||||||
|
|
||||||
|
* Added block-setting of attributes for Base.create like Base.new already has (Adam Meehan) [#39]
|
||||||
|
|
||||||
* Fixed that pessimistic locking you reference the quoted table name (Josh Susser) [#67]
|
* Fixed that pessimistic locking you reference the quoted table name (Josh Susser) [#67]
|
||||||
|
|
||||||
* Fixed that change_column should be able to use :null => true on a field that formerly had false [Nate Wiger] [#26]
|
* Fixed that change_column should be able to use :null => true on a field that formerly had false [Nate Wiger] [#26]
|
||||||
|
|
|
@ -59,14 +59,14 @@ module ActiveRecord
|
||||||
|
|
||||||
def set_association_collection_records(id_to_record_map, reflection_name, associated_records, key)
|
def set_association_collection_records(id_to_record_map, reflection_name, associated_records, key)
|
||||||
associated_records.each do |associated_record|
|
associated_records.each do |associated_record|
|
||||||
mapped_records = id_to_record_map[associated_record[key].to_i]
|
mapped_records = id_to_record_map[associated_record[key].to_s]
|
||||||
add_preloaded_records_to_collection(mapped_records, reflection_name, associated_record)
|
add_preloaded_records_to_collection(mapped_records, reflection_name, associated_record)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_association_single_records(id_to_record_map, reflection_name, associated_records, key)
|
def set_association_single_records(id_to_record_map, reflection_name, associated_records, key)
|
||||||
associated_records.each do |associated_record|
|
associated_records.each do |associated_record|
|
||||||
mapped_records = id_to_record_map[associated_record[key].to_i]
|
mapped_records = id_to_record_map[associated_record[key].to_s]
|
||||||
mapped_records.each do |mapped_record|
|
mapped_records.each do |mapped_record|
|
||||||
mapped_record.send("set_#{reflection_name}_target", associated_record)
|
mapped_record.send("set_#{reflection_name}_target", associated_record)
|
||||||
end
|
end
|
||||||
|
@ -78,7 +78,7 @@ module ActiveRecord
|
||||||
ids = []
|
ids = []
|
||||||
records.each do |record|
|
records.each do |record|
|
||||||
ids << record.id
|
ids << record.id
|
||||||
mapped_records = (id_to_record_map[record.id] ||= [])
|
mapped_records = (id_to_record_map[record.id.to_s] ||= [])
|
||||||
mapped_records << record
|
mapped_records << record
|
||||||
end
|
end
|
||||||
ids.uniq!
|
ids.uniq!
|
||||||
|
@ -115,7 +115,7 @@ module ActiveRecord
|
||||||
source = reflection.source_reflection.name
|
source = reflection.source_reflection.name
|
||||||
through_records.first.class.preload_associations(through_records, source)
|
through_records.first.class.preload_associations(through_records, source)
|
||||||
through_records.each do |through_record|
|
through_records.each do |through_record|
|
||||||
add_preloaded_record_to_collection(id_to_record_map[through_record[through_primary_key].to_i],
|
add_preloaded_record_to_collection(id_to_record_map[through_record[through_primary_key].to_s],
|
||||||
reflection.name, through_record.send(source))
|
reflection.name, through_record.send(source))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -140,7 +140,7 @@ module ActiveRecord
|
||||||
source = reflection.source_reflection.name
|
source = reflection.source_reflection.name
|
||||||
through_records.first.class.preload_associations(through_records, source)
|
through_records.first.class.preload_associations(through_records, source)
|
||||||
through_records.each do |through_record|
|
through_records.each do |through_record|
|
||||||
add_preloaded_records_to_collection(id_to_record_map[through_record[through_primary_key].to_i],
|
add_preloaded_records_to_collection(id_to_record_map[through_record[through_primary_key].to_s],
|
||||||
reflection.name, through_record.send(source))
|
reflection.name, through_record.send(source))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -195,18 +195,22 @@ module ActiveRecord
|
||||||
records.each do |record|
|
records.each do |record|
|
||||||
if klass = record.send(polymorph_type)
|
if klass = record.send(polymorph_type)
|
||||||
klass_id = record.send(primary_key_name)
|
klass_id = record.send(primary_key_name)
|
||||||
|
if klass_id
|
||||||
id_map = klasses_and_ids[klass] ||= {}
|
id_map = klasses_and_ids[klass] ||= {}
|
||||||
id_list_for_klass_id = (id_map[klass_id] ||= [])
|
id_list_for_klass_id = (id_map[klass_id.to_s] ||= [])
|
||||||
id_list_for_klass_id << record
|
id_list_for_klass_id << record
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
klasses_and_ids = klasses_and_ids.to_a
|
klasses_and_ids = klasses_and_ids.to_a
|
||||||
else
|
else
|
||||||
id_map = {}
|
id_map = {}
|
||||||
records.each do |record|
|
records.each do |record|
|
||||||
mapped_records = (id_map[record.send(primary_key_name)] ||= [])
|
key = record.send(primary_key_name)
|
||||||
mapped_records << record
|
if key
|
||||||
|
mapped_records = (id_map[key.to_s] ||= [])
|
||||||
|
mapped_records << record
|
||||||
|
end
|
||||||
end
|
end
|
||||||
klasses_and_ids = [[reflection.klass.name, id_map]]
|
klasses_and_ids = [[reflection.klass.name, id_map]]
|
||||||
end
|
end
|
||||||
|
|
|
@ -603,13 +603,25 @@ module ActiveRecord #:nodoc:
|
||||||
# ==== Examples
|
# ==== Examples
|
||||||
# # Create a single new object
|
# # Create a single new object
|
||||||
# User.create(:first_name => 'Jamie')
|
# User.create(:first_name => 'Jamie')
|
||||||
|
#
|
||||||
# # Create an Array of new objects
|
# # Create an Array of new objects
|
||||||
# User.create([{:first_name => 'Jamie'}, {:first_name => 'Jeremy'}])
|
# User.create([{:first_name => 'Jamie'}, {:first_name => 'Jeremy'}])
|
||||||
def create(attributes = nil)
|
#
|
||||||
|
# # Create a single object and pass it into a block to set other attributes.
|
||||||
|
# User.create(:first_name => 'Jamie') do |u|
|
||||||
|
# u.is_admin = false
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# # Creating an Array of new objects using a block, where the block is executed for each object:
|
||||||
|
# User.create([{:first_name => 'Jamie'}, {:first_name => 'Jeremy'}]) do |u|
|
||||||
|
# u.is_admin = false
|
||||||
|
# end
|
||||||
|
def create(attributes = nil, &block)
|
||||||
if attributes.is_a?(Array)
|
if attributes.is_a?(Array)
|
||||||
attributes.collect { |attr| create(attr) }
|
attributes.collect { |attr| create(attr, &block) }
|
||||||
else
|
else
|
||||||
object = new(attributes)
|
object = new(attributes)
|
||||||
|
yield(object) if block_given?
|
||||||
object.save
|
object.save
|
||||||
object
|
object
|
||||||
end
|
end
|
||||||
|
|
|
@ -469,8 +469,8 @@ class Fixtures < (RUBY_VERSION < '1.9' ? YAML::Omap : Hash)
|
||||||
fixtures.size > 1 ? fixtures : fixtures.first
|
fixtures.size > 1 ? fixtures : fixtures.first
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.cache_fixtures(connection, fixtures)
|
def self.cache_fixtures(connection, fixtures_map)
|
||||||
cache_for_connection(connection).update(fixtures.index_by { |f| f.table_name })
|
cache_for_connection(connection).update(fixtures_map)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.instantiate_fixtures(object, table_name, fixtures, load_instances = true)
|
def self.instantiate_fixtures(object, table_name, fixtures, load_instances = true)
|
||||||
|
@ -526,7 +526,7 @@ class Fixtures < (RUBY_VERSION < '1.9' ? YAML::Omap : Hash)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
cache_fixtures(connection, fixtures)
|
cache_fixtures(connection, fixtures_map)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -873,11 +873,12 @@ module ActiveRecord
|
||||||
|
|
||||||
# Creates an object just like Base.create but calls save! instead of save
|
# Creates an object just like Base.create but calls save! instead of save
|
||||||
# so an exception is raised if the record is invalid.
|
# so an exception is raised if the record is invalid.
|
||||||
def create!(attributes = nil)
|
def create!(attributes = nil, &block)
|
||||||
if attributes.is_a?(Array)
|
if attributes.is_a?(Array)
|
||||||
attributes.collect { |attr| create!(attr) }
|
attributes.collect { |attr| create!(attr, &block) }
|
||||||
else
|
else
|
||||||
object = new(attributes)
|
object = new(attributes)
|
||||||
|
yield(object) if block_given?
|
||||||
object.save!
|
object.save!
|
||||||
object
|
object
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,11 +11,14 @@ require 'models/owner'
|
||||||
require 'models/pet'
|
require 'models/pet'
|
||||||
require 'models/reference'
|
require 'models/reference'
|
||||||
require 'models/job'
|
require 'models/job'
|
||||||
|
require 'models/subscriber'
|
||||||
|
require 'models/subscription'
|
||||||
|
require 'models/book'
|
||||||
|
|
||||||
class EagerAssociationTest < ActiveRecord::TestCase
|
class EagerAssociationTest < ActiveRecord::TestCase
|
||||||
fixtures :posts, :comments, :authors, :categories, :categories_posts,
|
fixtures :posts, :comments, :authors, :categories, :categories_posts,
|
||||||
:companies, :accounts, :tags, :taggings, :people, :readers,
|
:companies, :accounts, :tags, :taggings, :people, :readers,
|
||||||
:owners, :pets, :author_favorites, :jobs, :references
|
:owners, :pets, :author_favorites, :jobs, :references, :subscribers, :subscriptions, :books
|
||||||
|
|
||||||
def test_loading_with_one_association
|
def test_loading_with_one_association
|
||||||
posts = Post.find(:all, :include => :comments)
|
posts = Post.find(:all, :include => :comments)
|
||||||
|
@ -220,6 +223,24 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
||||||
assert_no_queries{ assert_equal jobs(:unicyclist, :magician), michael.jobs.sort_by(&:id) }
|
assert_no_queries{ assert_equal jobs(:unicyclist, :magician), michael.jobs.sort_by(&:id) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_eager_load_has_many_with_string_keys
|
||||||
|
subscriptions = subscriptions(:webster_awdr, :webster_rfr)
|
||||||
|
subscriber =Subscriber.find(subscribers(:second).id, :include => :subscriptions)
|
||||||
|
assert_equal subscriptions, subscriber.subscriptions.sort_by(&:id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_eager_load_has_many_through_with_string_keys
|
||||||
|
books = books(:awdr, :rfr)
|
||||||
|
subscriber = Subscriber.find(subscribers(:second).id, :include => :books)
|
||||||
|
assert_equal books, subscriber.books.sort_by(&:id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_eager_load_belongs_to_with_string_keys
|
||||||
|
subscriber = subscribers(:second)
|
||||||
|
subscription = Subscription.find(subscriptions(:webster_awdr).id, :include => :subscriber)
|
||||||
|
assert_equal subscriber, subscription.subscriber
|
||||||
|
end
|
||||||
|
|
||||||
def test_eager_association_loading_with_explicit_join
|
def test_eager_association_loading_with_explicit_join
|
||||||
posts = Post.find(:all, :include => :comments, :joins => "INNER JOIN authors ON posts.author_id = authors.id AND authors.name = 'Mary'", :limit => 1, :order => 'author_id')
|
posts = Post.find(:all, :include => :comments, :joins => "INNER JOIN authors ON posts.author_id = authors.id AND authors.name = 'Mary'", :limit => 1, :order => 'author_id')
|
||||||
assert_equal 1, posts.length
|
assert_equal 1, posts.length
|
||||||
|
|
|
@ -253,6 +253,27 @@ class BasicsTest < ActiveRecord::TestCase
|
||||||
assert_equal(topic, topicReloaded)
|
assert_equal(topic, topicReloaded)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_create_through_factory_with_block
|
||||||
|
topic = Topic.create("title" => "New Topic") do |t|
|
||||||
|
t.author_name = "David"
|
||||||
|
end
|
||||||
|
topicReloaded = Topic.find(topic.id)
|
||||||
|
assert_equal("New Topic", topic.title)
|
||||||
|
assert_equal("David", topic.author_name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create_many_through_factory_with_block
|
||||||
|
topics = Topic.create([ { "title" => "first" }, { "title" => "second" }]) do |t|
|
||||||
|
t.author_name = "David"
|
||||||
|
end
|
||||||
|
assert_equal 2, topics.size
|
||||||
|
topic1, topic2 = Topic.find(topics[0].id), Topic.find(topics[1].id)
|
||||||
|
assert_equal "first", topic1.title
|
||||||
|
assert_equal "David", topic1.author_name
|
||||||
|
assert_equal "second", topic2.title
|
||||||
|
assert_equal "David", topic2.author_name
|
||||||
|
end
|
||||||
|
|
||||||
def test_update
|
def test_update
|
||||||
topic = Topic.new
|
topic = Topic.new
|
||||||
topic.title = "Another New Topic"
|
topic.title = "Another New Topic"
|
||||||
|
|
|
@ -96,6 +96,10 @@ class FixturesTest < ActiveRecord::TestCase
|
||||||
|
|
||||||
second_row = ActiveRecord::Base.connection.select_one("SELECT * FROM prefix_topics_suffix WHERE author_name = 'Mary'")
|
second_row = ActiveRecord::Base.connection.select_one("SELECT * FROM prefix_topics_suffix WHERE author_name = 'Mary'")
|
||||||
assert_nil(second_row["author_email_address"])
|
assert_nil(second_row["author_email_address"])
|
||||||
|
|
||||||
|
# This checks for a caching problem which causes a bug in the fixtures
|
||||||
|
# class-level configuration helper.
|
||||||
|
assert_not_nil topics, "Fixture data inserted, but fixture objects not returned from create"
|
||||||
ensure
|
ensure
|
||||||
# Restore prefix/suffix to its previous values
|
# Restore prefix/suffix to its previous values
|
||||||
ActiveRecord::Base.table_name_prefix = old_prefix
|
ActiveRecord::Base.table_name_prefix = old_prefix
|
||||||
|
|
|
@ -134,6 +134,22 @@ class ValidationsTest < ActiveRecord::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_exception_on_create_bang_with_block
|
||||||
|
assert_raises(ActiveRecord::RecordInvalid) do
|
||||||
|
Reply.create!({ "title" => "OK" }) do |r|
|
||||||
|
r.content = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_exception_on_create_bang_many_with_block
|
||||||
|
assert_raises(ActiveRecord::RecordInvalid) do
|
||||||
|
Reply.create!([{ "title" => "OK" }, { "title" => "Wrong Create" }]) do |r|
|
||||||
|
r.content = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_scoped_create_without_attributes
|
def test_scoped_create_without_attributes
|
||||||
Reply.with_scope(:create => {}) do
|
Reply.with_scope(:create => {}) do
|
||||||
assert_raises(ActiveRecord::RecordInvalid) { Reply.create! }
|
assert_raises(ActiveRecord::RecordInvalid) { Reply.create! }
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
class Subscriber < ActiveRecord::Base
|
class Subscriber < ActiveRecord::Base
|
||||||
set_primary_key 'nick'
|
set_primary_key 'nick'
|
||||||
|
has_many :subscriptions
|
||||||
|
has_many :books, :through => :subscriptions
|
||||||
end
|
end
|
||||||
|
|
||||||
class SpecialSubscriber < Subscriber
|
class SpecialSubscriber < Subscriber
|
||||||
|
|
|
@ -349,6 +349,11 @@ ActiveRecord::Schema.define do
|
||||||
end
|
end
|
||||||
add_index :subscribers, :nick, :unique => true
|
add_index :subscribers, :nick, :unique => true
|
||||||
|
|
||||||
|
create_table :subscriptions, :force => true do |t|
|
||||||
|
t.string :subscriber_id
|
||||||
|
t.integer :book_id
|
||||||
|
end
|
||||||
|
|
||||||
create_table :tasks, :force => true do |t|
|
create_table :tasks, :force => true do |t|
|
||||||
t.datetime :starting
|
t.datetime :starting
|
||||||
t.datetime :ending
|
t.datetime :ending
|
||||||
|
|
|
@ -423,10 +423,12 @@ module Dependencies #:nodoc:
|
||||||
|
|
||||||
protected
|
protected
|
||||||
def log_call(*args)
|
def log_call(*args)
|
||||||
arg_str = args.collect(&:inspect) * ', '
|
if defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER && log_activity
|
||||||
/in `([a-z_\?\!]+)'/ =~ caller(1).first
|
arg_str = args.collect(&:inspect) * ', '
|
||||||
selector = $1 || '<unknown>'
|
/in `([a-z_\?\!]+)'/ =~ caller(1).first
|
||||||
log "called #{selector}(#{arg_str})"
|
selector = $1 || '<unknown>'
|
||||||
|
log "called #{selector}(#{arg_str})"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def log(msg)
|
def log(msg)
|
||||||
|
|
Loading…
Reference in a new issue