Skip to content

Commit

Permalink
Support multikey hashes in include arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
moiristo committed Dec 3, 2016
1 parent 4a85f05 commit 517537d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
15 changes: 14 additions & 1 deletion lib/deep_cloneable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def deep_clone *args, &block
end

if options[:include]
Array(options[:include]).each do |association, conditions_or_deep_associations|
normalized_includes_list(options[:include]).each do |association, conditions_or_deep_associations|
conditions = {}

if association.kind_of? Hash
Expand Down Expand Up @@ -173,6 +173,19 @@ def dup_join_association options, &block
def evaluate_conditions object, conditions
(conditions[:if] && conditions[:if].call(object)) || (conditions[:unless] && !conditions[:unless].call(object))
end

def normalized_includes_list includes
list = []
Array(includes).each do |item|
if item.is_a?(Hash) && item.size > 1
item.each{|key, value| list << { key => value } }
else
list << item
end
end

list
end

class AssociationNotFoundException < StandardError; end

Expand Down
10 changes: 10 additions & 0 deletions test/test_deep_cloneable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,15 @@ def test_multiple_and_deep_include_association_with_array
assert_equal 1, deep_clone.gold_pieces.size
assert_equal 1, deep_clone.mateys.size
end

def test_multiple_and_deep_include_association_with_array_and_multikey_hash
deep_clone = @jack.deep_clone(:include => [:parrot, {:treasures => :gold_pieces, :mateys => {}}])
assert deep_clone.new_record?
assert deep_clone.save
assert_equal 1, deep_clone.treasures.size
assert_equal 1, deep_clone.gold_pieces.size
assert_equal 1, deep_clone.mateys.size
end

def test_with_belongs_to_relation
deep_clone = @jack.deep_clone(:include => :parrot)
Expand Down Expand Up @@ -427,4 +436,5 @@ def test_should_not_make_attributes_dirty_for_exceptions
assert_nil deep_clone.name
refute deep_clone.name_changed?
end

end

0 comments on commit 517537d

Please sign in to comment.