Skip to content

Commit

Permalink
Fix failing tests
Browse files Browse the repository at this point in the history
Currently CI is broken due to 56a61e0 and c4cb686. This occurred because
the failures are not present on SQLite which is what I normally run
locally before pushing.

The optimizations to our YAML size were dropping mutations, as
`with_type` didn't set the previous value if it'd already been read
(that method was never really designed to be used with values on
individual objects, it was previously only used for defaults). I'm
questioning whether there's a better place to be handling the exclusion
of the type, but this will fix the failing build.

Additionally, there was a bug in `remove_foreign_key` if you passed it
an options hash containing `to_table`. This now occurs whenever removing
a reference, as we always normalize to a hash.

[Sean Griffin & Ryuta Kamizono]
  • Loading branch information
sgrif committed Jun 2, 2016
1 parent 7b75ca1 commit 1b8a7b8
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
6 changes: 5 additions & 1 deletion activerecord/lib/active_record/attribute.rb
Expand Up @@ -77,7 +77,11 @@ def with_cast_value(value)
end

def with_type(type)
self.class.new(name, value_before_type_cast, type, original_attribute)
if changed_in_place?
with_value_from_user(value).with_type(type)
else
self.class.new(name, value_before_type_cast, type, original_attribute)
end
end

def type_cast(*)
Expand Down
Expand Up @@ -51,11 +51,12 @@ def custom_primary_key?
options[:primary_key] != default_primary_key
end

def defined_for?(options_or_to_table = {})
if options_or_to_table.is_a?(Hash)
options_or_to_table.all? {|key, value| options[key].to_s == value.to_s }
def defined_for?(to_table_ord = nil, to_table: nil, **options)
if to_table_ord
self.to_table == to_table_ord.to_s
else
to_table == options_or_to_table.to_s
(to_table.nil? || to_table.to_s == self.to_table) &&
options.all? { |k, v| self.options[k].to_s == v.to_s }
end
end

Expand Down
7 changes: 7 additions & 0 deletions activerecord/test/cases/attribute_test.rb
Expand Up @@ -242,5 +242,12 @@ def assert_valid_value(*)
attribute.with_value_from_user(1)
end
end

test "with_type preserves mutations" do
attribute = Attribute.from_database(:foo, "", Type::Value.new)
attribute.value << "1"

assert_equal 1, attribute.with_type(Type::Integer.new).value
end
end
end

0 comments on commit 1b8a7b8

Please sign in to comment.