mongoid_oslc 0.0.6 → 0.0.7
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/lib/mongoid/oslc/exceptions.rb +28 -0
- data/lib/mongoid/oslc/grammar.rb +17 -0
- data/lib/mongoid/oslc/grammar.treetop +9 -1
- data/lib/mongoid/oslc/strategy.rb +1 -1
- data/lib/mongoid/oslc/version.rb +1 -1
- data/lib/mongoid/oslc.rb +1 -0
- data/spec/lib/mongoid/oslc/strategy_spec.rb +8 -0
- metadata +4 -3
@@ -0,0 +1,28 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Oslc
|
3
|
+
class QuerySyntaxError < Exception
|
4
|
+
attr :query
|
5
|
+
def initialize(message, query = nil)
|
6
|
+
@query = query
|
7
|
+
super(message)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class QueryParsingError < Exception
|
12
|
+
attr :query, :index
|
13
|
+
def initialize(query = "", index = 0, message = "")
|
14
|
+
@query = query
|
15
|
+
@index = index
|
16
|
+
super("Parse error at offset: #{@index} #{highlight_error(@query, @index)}")
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def highlight_error(str, index)
|
22
|
+
error_str = "\n#{str}\n"
|
23
|
+
(index - 1).times { error_str << "-" }
|
24
|
+
error_str << "^"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/mongoid/oslc/grammar.rb
CHANGED
@@ -51,6 +51,23 @@ module Mongoid
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
class InOp < GrammarNode
|
55
|
+
def to_mongo_query
|
56
|
+
"$in"
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_mongo_query_with_value(value)
|
60
|
+
{ "$in" => value }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class InVal < GrammarNode
|
65
|
+
def to_mongo_query
|
66
|
+
# "[\"First\",\"Second\"]" -> ["First", "Second"]
|
67
|
+
eval text_value
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
54
71
|
class UriRefEsc < GrammarNode
|
55
72
|
def to_mongo_query
|
56
73
|
# TODO: an angle bracket-delimited URI reference in which > and \ are \-escaped.
|
@@ -35,13 +35,21 @@ grammar Grammar
|
|
35
35
|
end
|
36
36
|
|
37
37
|
rule term
|
38
|
-
field comparison_op value <Mongoid::Oslc::Grammar::Condition>
|
38
|
+
field comparison_op value <Mongoid::Oslc::Grammar::Condition> / field space in_op space? in_val <Mongoid::Oslc::Grammar::Condition>
|
39
39
|
end
|
40
40
|
|
41
41
|
rule boolean_op
|
42
42
|
'and' <Mongoid::Oslc::Grammar::LogicalOperator>
|
43
43
|
end
|
44
44
|
|
45
|
+
rule in_op
|
46
|
+
'in' <Mongoid::Oslc::Grammar::InOp>
|
47
|
+
end
|
48
|
+
|
49
|
+
rule in_val
|
50
|
+
'[' value (',' value)* ']' <Mongoid::Oslc::Grammar::InVal>
|
51
|
+
end
|
52
|
+
|
45
53
|
rule space
|
46
54
|
' '
|
47
55
|
end
|
@@ -14,7 +14,7 @@ module Mongoid
|
|
14
14
|
@parser = GrammarParser.new
|
15
15
|
|
16
16
|
tree = @parser.parse(query)
|
17
|
-
raise
|
17
|
+
raise Mongoid::Oslc::QueryParsingError.new(query, @parser.index) if tree.nil?
|
18
18
|
|
19
19
|
clean_tree(tree)
|
20
20
|
|
data/lib/mongoid/oslc/version.rb
CHANGED
data/lib/mongoid/oslc.rb
CHANGED
@@ -36,6 +36,14 @@ describe Mongoid::Oslc::Strategy do
|
|
36
36
|
parse_query('oslc_cm:closed=false').should eql({"closed"=> false})
|
37
37
|
end
|
38
38
|
|
39
|
+
it "should parse query with one values" do
|
40
|
+
parse_query('dcterms:title in ["First"]').should eql({"title"=>{"$in"=>["First"]}})
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should parse query with array values" do
|
44
|
+
parse_query('dcterms:title in ["First","Second"]').should eql({"title"=>{"$in"=>["First", "Second"]}})
|
45
|
+
end
|
46
|
+
|
39
47
|
describe "custom fields" do
|
40
48
|
describe "defined by fields_mapping" do
|
41
49
|
before { Mongoid::Oslc.config.stub(:fields_mapping => {'rtc:frontColor' => 'front_color'}) }
|
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.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- Rakefile
|
112
112
|
- lib/mongoid/oslc.rb
|
113
113
|
- lib/mongoid/oslc/config.rb
|
114
|
+
- lib/mongoid/oslc/exceptions.rb
|
114
115
|
- lib/mongoid/oslc/grammar.rb
|
115
116
|
- lib/mongoid/oslc/grammar.treetop
|
116
117
|
- lib/mongoid/oslc/strategy.rb
|
@@ -134,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
135
|
version: '0'
|
135
136
|
segments:
|
136
137
|
- 0
|
137
|
-
hash: -
|
138
|
+
hash: -466769109880562586
|
138
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
140
|
none: false
|
140
141
|
requirements:
|
@@ -143,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
144
|
version: '0'
|
144
145
|
segments:
|
145
146
|
- 0
|
146
|
-
hash: -
|
147
|
+
hash: -466769109880562586
|
147
148
|
requirements: []
|
148
149
|
rubyforge_project:
|
149
150
|
rubygems_version: 1.8.24
|