Skip to content

Commit

Permalink
Add support for $set when updating a document in a nested collection
Browse files Browse the repository at this point in the history
  • Loading branch information
tonywok committed May 21, 2011
1 parent ba98699 commit d070d1f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
9 changes: 5 additions & 4 deletions lib/mongomatic/base.rb
Expand Up @@ -305,10 +305,11 @@ def hash_for_field(field, break_if_dne=false)
return [parts[0], curr_hash] if parts.size == 1
field = parts.pop # last one is the field
parts.each_with_index do |part, i|
return [part, curr_hash] if break_if_dne && !curr_hash.has_key?(part)
curr_hash[part] ||= {}
return [field, curr_hash[part]] if parts.size == i+1
curr_hash = curr_hash[part]
part_accessor = curr_hash.kind_of?(Array) ? part.to_i : part
return [part, curr_hash] if break_if_dne && !curr_hash.has_key?(part_accessor)
curr_hash[part_accessor] ||= {}
return [field, curr_hash[part_accessor]] if parts.size == i+1
curr_hash = curr_hash[part_accessor]
end
end

Expand Down
8 changes: 8 additions & 0 deletions test/test_modifiers.rb
Expand Up @@ -153,6 +153,14 @@ def test_set_in_embedded_hash
p1 = Person.find_one(p1["_id"])
assert_equal "Ben", p1["l1"]["l2"]["l3"]["l4"]["name"]
end

def test_set_for_embedded_hash_of_nested_document_collection
p1 = Person.new(:name => "Tony")
p1.push('friends', Person.new(:name => "Jordan").doc)
assert p1.insert!
p1.set!("friends.0.isAwesome", "Absolutely!")
assert_equal "Absolutely!", p1["friends"][0]["isAwesome"]
end

def test_unset
p1 = Person.new(:name => "Jordan")
Expand Down

0 comments on commit d070d1f

Please sign in to comment.