mongo-parser-rb 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,12 @@ module MongoParserRB
9
9
  def value_in_document(document)
10
10
  document = stringify_keys(document)
11
11
  @field_parts.reduce(document) do |value, field|
12
- value[field]
12
+ case value
13
+ when Array
14
+ value[field.to_i]
15
+ when Hash
16
+ value[field]
17
+ end
13
18
  end
14
19
  rescue NoMethodError
15
20
  nil
@@ -30,7 +35,15 @@ module MongoParserRB
30
35
 
31
36
  def stringify_keys(document)
32
37
  document.reduce({}) do |new_document, (k,v)|
33
- new_document[k.to_s] = v.kind_of?(Hash) ? stringify_keys(v) : v
38
+ new_document[k.to_s] = case v
39
+ when Hash
40
+ stringify_keys(v)
41
+ when Array
42
+ v.map { |e| e.kind_of?(Hash) ? stringify_keys(e) : e }
43
+ else
44
+ v
45
+ end
46
+
34
47
  new_document
35
48
  end
36
49
  end
@@ -1,3 +1,3 @@
1
1
  module MongoParserRB
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -23,4 +23,18 @@ class FieldTest < MiniTest::Unit::TestCase
23
23
  refute field.in_document?(:custom_data => {:tracked_users => 10})
24
24
  end
25
25
 
26
+ def test_returning_array_element
27
+ field = MongoParserRB::Field.new(:"something.array.0")
28
+ assert_equal 1, field.value_in_document(:something => {:array => [1,2]})
29
+ end
30
+
31
+ def test_returning_hash_in_array
32
+ field = MongoParserRB::Field.new(:"something.array.0.key")
33
+ document = {:something => {:array => [{:key => 'hello world'}, {:key => 'bye world'}]}}
34
+ assert_equal 'hello world', field.value_in_document(document)
35
+
36
+ field = MongoParserRB::Field.new(:"something.array.1.key")
37
+ assert_equal 'bye world', field.value_in_document(document)
38
+ end
39
+
26
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo-parser-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: