mongoid_oslc 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
data/lib/mongoid/oslc/grammar.rb
CHANGED
@@ -3,31 +3,13 @@ require 'treetop'
|
|
3
3
|
module Mongoid
|
4
4
|
module Oslc
|
5
5
|
module Grammar
|
6
|
-
class
|
6
|
+
class BinaryDecision < Treetop::Runtime::SyntaxNode
|
7
7
|
def to_mongo_query
|
8
|
-
|
8
|
+
operand_1.to_mongo_query.deep_merge(operand_2.to_mongo_query)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
class
|
13
|
-
|
14
|
-
def to_mongo_query
|
15
|
-
operand_1 = elements[0].to_mongo_query
|
16
|
-
operand_2 = elements[2].to_mongo_query
|
17
|
-
operand_1.deep_merge(operand_2)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class LogicalOperator < GrammarNode
|
22
|
-
end
|
23
|
-
|
24
|
-
class Field < GrammarNode
|
25
|
-
def to_mongo_query
|
26
|
-
text_content
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class Operator < GrammarNode
|
12
|
+
class Operator < Treetop::Runtime::SyntaxNode
|
31
13
|
OPERATORS = {
|
32
14
|
"=" => "$in",
|
33
15
|
"!=" => "$ne",
|
@@ -38,10 +20,6 @@ module Mongoid
|
|
38
20
|
"in" => "$in"
|
39
21
|
}
|
40
22
|
|
41
|
-
def to_mongo_query
|
42
|
-
OPERATORS[text_value]
|
43
|
-
end
|
44
|
-
|
45
23
|
def to_mongo_query_with_value(value)
|
46
24
|
if text_value == "="
|
47
25
|
value
|
@@ -51,49 +29,44 @@ module Mongoid
|
|
51
29
|
end
|
52
30
|
end
|
53
31
|
|
54
|
-
class InOp <
|
55
|
-
def to_mongo_query
|
56
|
-
"$in"
|
57
|
-
end
|
58
|
-
|
32
|
+
class InOp < Treetop::Runtime::SyntaxNode
|
59
33
|
def to_mongo_query_with_value(value)
|
60
34
|
{ "$in" => value }
|
61
35
|
end
|
62
36
|
end
|
63
37
|
|
64
|
-
class InVal <
|
38
|
+
class InVal < Treetop::Runtime::SyntaxNode
|
65
39
|
def to_mongo_query
|
66
|
-
|
67
|
-
eval text_value
|
40
|
+
[first_value.to_mongo_query] + rest_values.elements.map{|comma_and_value| comma_and_value.rest_value.to_mongo_query }
|
68
41
|
end
|
69
42
|
end
|
70
43
|
|
71
|
-
class UriRefEsc <
|
44
|
+
class UriRefEsc < Treetop::Runtime::SyntaxNode
|
72
45
|
def to_mongo_query
|
73
46
|
# TODO: an angle bracket-delimited URI reference in which > and \ are \-escaped.
|
74
47
|
text_content
|
75
48
|
end
|
76
49
|
end
|
77
50
|
|
78
|
-
class BooleanValue <
|
51
|
+
class BooleanValue < Treetop::Runtime::SyntaxNode
|
79
52
|
def to_mongo_query
|
80
53
|
text_value == "true"
|
81
54
|
end
|
82
55
|
end
|
83
56
|
|
84
|
-
class BlankValue <
|
57
|
+
class BlankValue < Treetop::Runtime::SyntaxNode
|
85
58
|
def to_mongo_query
|
86
59
|
nil
|
87
60
|
end
|
88
61
|
end
|
89
62
|
|
90
|
-
class DecimalValue <
|
63
|
+
class DecimalValue < Treetop::Runtime::SyntaxNode
|
91
64
|
def to_mongo_query
|
92
65
|
text_value.to_f
|
93
66
|
end
|
94
67
|
end
|
95
68
|
|
96
|
-
class StringEsc <
|
69
|
+
class StringEsc < Treetop::Runtime::SyntaxNode
|
97
70
|
def to_mongo_query
|
98
71
|
value = text_value[1...-1]
|
99
72
|
if value.starts_with?("*") || value.ends_with?("*")
|
@@ -105,14 +78,13 @@ module Mongoid
|
|
105
78
|
end
|
106
79
|
end
|
107
80
|
|
108
|
-
class Condition <
|
81
|
+
class Condition < Treetop::Runtime::SyntaxNode
|
109
82
|
def to_mongo_query
|
110
|
-
oslc_name =
|
83
|
+
oslc_name = field_name.text_value
|
111
84
|
field = Mongoid::Oslc.resources.field_name(oslc_name)
|
112
|
-
value =
|
85
|
+
value = field_value.to_mongo_query
|
113
86
|
value = [] if value.nil? && Mongoid::Oslc.resources.is_field_array?(oslc_name)
|
114
|
-
|
115
|
-
{ field => operator_with_value }
|
87
|
+
{ field => operator.to_mongo_query_with_value(value) }
|
116
88
|
end
|
117
89
|
end
|
118
90
|
end
|
@@ -39,11 +39,13 @@ grammar Grammar
|
|
39
39
|
end
|
40
40
|
|
41
41
|
rule term
|
42
|
-
field comparison_op value <Mongoid::Oslc::Grammar::Condition>
|
42
|
+
field_name:field operator:comparison_op field_value:value <Mongoid::Oslc::Grammar::Condition>
|
43
|
+
/
|
44
|
+
field_name:field space operator:in_op space? field_value:in_val <Mongoid::Oslc::Grammar::Condition>
|
43
45
|
end
|
44
46
|
|
45
47
|
rule boolean_op
|
46
|
-
'and'
|
48
|
+
'and'
|
47
49
|
end
|
48
50
|
|
49
51
|
rule in_op
|
@@ -51,7 +53,7 @@ grammar Grammar
|
|
51
53
|
end
|
52
54
|
|
53
55
|
rule in_val
|
54
|
-
'[' value (',' value)* ']' <Mongoid::Oslc::Grammar::InVal>
|
56
|
+
'[' first_value:value rest_values:(',' rest_value:value)* ']' <Mongoid::Oslc::Grammar::InVal>
|
55
57
|
end
|
56
58
|
|
57
59
|
rule space
|
@@ -59,7 +61,7 @@ grammar Grammar
|
|
59
61
|
end
|
60
62
|
|
61
63
|
rule field
|
62
|
-
[\w\:]+
|
64
|
+
[\w\:]+
|
63
65
|
end
|
64
66
|
|
65
67
|
rule comparison_op
|
@@ -16,18 +16,8 @@ module Mongoid
|
|
16
16
|
tree = @parser.parse(query)
|
17
17
|
raise Mongoid::Oslc::QueryParsingError.new(query, @parser.index) if tree.nil?
|
18
18
|
|
19
|
-
clean_tree(tree)
|
20
|
-
|
21
19
|
tree.to_mongo_query
|
22
20
|
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def self.clean_tree(root_node)
|
27
|
-
return if(root_node.elements.nil?)
|
28
|
-
root_node.elements.delete_if{|node| node.class.name == "Treetop::Runtime::SyntaxNode" }
|
29
|
-
root_node.elements.each {|node| self.clean_tree(node) }
|
30
|
-
end
|
31
21
|
end
|
32
22
|
end
|
33
23
|
end
|
data/lib/mongoid/oslc/version.rb
CHANGED
@@ -17,6 +17,10 @@ describe Mongoid::Oslc::Strategy do
|
|
17
17
|
parse_query('dcterms:title="requirement"').should eql({title: "requirement"})
|
18
18
|
end
|
19
19
|
|
20
|
+
it "should parse not simple query" do
|
21
|
+
parse_query('dcterms:title="requirement" and dcterms:description="desc" and dcterms:creator=blank').should eql({title: "requirement", description: 'desc', creators: []})
|
22
|
+
end
|
23
|
+
|
20
24
|
it "should parse query with conjunction" do
|
21
25
|
parse_query('dcterms:title="requirement" and dcterms:description="first"').should eql({
|
22
26
|
title: "requirement", description: "first"
|
@@ -64,7 +68,7 @@ describe Mongoid::Oslc::Strategy do
|
|
64
68
|
end
|
65
69
|
|
66
70
|
it "should parse query with array values" do
|
67
|
-
parse_query('dcterms:title in ["First","Second"]').should eql({title: {"$in"=>["First", "Second"]}})
|
71
|
+
parse_query('dcterms:title in ["First","Second",false,blank,+5]').should eql({title: {"$in"=>["First", "Second", false, nil, 5.0]}})
|
68
72
|
end
|
69
73
|
|
70
74
|
it "should parse query with wild char" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_oslc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
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-
|
12
|
+
date: 2013-02-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -155,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
155
|
version: '0'
|
156
156
|
segments:
|
157
157
|
- 0
|
158
|
-
hash:
|
158
|
+
hash: 4140121173363015006
|
159
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
@@ -164,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
164
|
version: '0'
|
165
165
|
segments:
|
166
166
|
- 0
|
167
|
-
hash:
|
167
|
+
hash: 4140121173363015006
|
168
168
|
requirements: []
|
169
169
|
rubyforge_project:
|
170
170
|
rubygems_version: 1.8.24
|