mongo-parser-rb 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -15,3 +15,6 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .DS_Store
19
+ .tags
20
+ .tags_sorted_by_file
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ -m markdown lib/**/*.rb - README.md
@@ -1,19 +1,34 @@
1
1
  module MongoParserRB
2
2
  class Query
3
3
 
4
+ # Parse a query, returning an initialized MongoParserRB::Query object.
5
+ #
6
+ # @param raw_query [Hash] the hash to parse
7
+ # @return [MongoParserRB::Query] initialized query object
4
8
  def self.parse(raw_query)
5
9
  new(raw_query).parse!
6
10
  end
7
11
 
12
+ # Use {MongoParserRB::Query.parse}.
13
+ # @visibility private
8
14
  def initialize(raw_query)
9
15
  @raw_query = raw_query
10
16
  end
11
17
 
18
+ # @visibility private
12
19
  def parse!
13
20
  @expression_tree = parse_root_expression(@raw_query)
14
21
  self
15
22
  end
16
23
 
24
+ # Check if a document matches a query.
25
+ #
26
+ # q = MongoParserRB::Query.parse(:x => {:$gt => 3})
27
+ # q.matches_document?(:x => 4) => true
28
+ # q.matches_document?(:x => 3) => false
29
+ #
30
+ # @param document [Hash] The document to check
31
+ # @return [Boolean]
17
32
  def matches_document?(document)
18
33
  raise NotParsedError, "Query not parsed (run parse!)" if @expression_tree.nil?
19
34
  @expression_tree.evaluate(document)
@@ -6,13 +6,13 @@ module MongoParserRB
6
6
 
7
7
  def conjunction_operators
8
8
  @conjunction_operators ||= [
9
- :$and,
9
+ :$and,
10
10
  :$or
11
11
  ]
12
12
  end
13
13
 
14
14
  def conjunction_operator?(operator)
15
- conjunction_operators.include?(operator)
15
+ conjunction_operators.include?(operator)
16
16
  end
17
17
 
18
18
  def negative_equality_operators
@@ -47,7 +47,7 @@ module MongoParserRB
47
47
  @operator = operator
48
48
 
49
49
  if Expression.conjunction_operator? @operator
50
- @arguments = args[0]
50
+ @arguments = args[0]
51
51
  else
52
52
  @field = Field.new(args[0])
53
53
  @arguments = args[1]
@@ -103,7 +103,6 @@ module MongoParserRB
103
103
 
104
104
  def evaluate_equality(document)
105
105
  value_for_field = @field.value_in_document(document)
106
- return false if !value_for_field && !@field.in_document?(document)
107
106
 
108
107
  case @operator
109
108
  when :$eq
@@ -128,7 +127,6 @@ module MongoParserRB
128
127
  end
129
128
  end
130
129
  end
131
-
132
130
  end
133
131
  end
134
- end
132
+ end
@@ -1,3 +1,3 @@
1
1
  module MongoParserRB
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -85,7 +85,7 @@ class QueryTest < MiniTest::Unit::TestCase
85
85
 
86
86
 
87
87
  def test_or
88
- query = MongoParserRB::Query.parse(:$or => [
88
+ query = MongoParserRB::Query.parse(:$or => [
89
89
  {:string_key => "abc"},
90
90
  {:integer_key => {:$gt => 5}}
91
91
  ])
@@ -133,6 +133,19 @@ class QueryTest < MiniTest::Unit::TestCase
133
133
  query = MongoParserRB::Query.parse(:string_key => nil)
134
134
  assert query.matches_document?(:string_key => nil)
135
135
  refute query.matches_document?(:string_key => 'hey')
136
+ assert query.matches_document?(:something_else => "hello")
137
+ assert query.matches_document?({})
138
+ end
139
+
140
+ def test_ne_with_nil
141
+ query = MongoParserRB::Query.parse(:string_key => {:$ne => 'cheese'})
142
+ assert query.matches_document?(:string_key => nil)
143
+ assert query.matches_document?({})
144
+ end
145
+
146
+ def test_no_key_in_unknown
147
+ query = MongoParserRB::Query.parse(:string_key => {:$in=>[nil, "", "null", "nil"]})
148
+ assert query.matches_document?(:something_else => "hello")
136
149
  end
137
150
 
138
151
  def test_regex_eq
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.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-27 00:00:00.000000000 Z
12
+ date: 2013-05-04 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Parse and evaluate mongo queries in Ruby
15
15
  email:
@@ -19,6 +19,7 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - .gitignore
22
+ - .yardopts
22
23
  - Gemfile
23
24
  - LICENSE.txt
24
25
  - README.md