odata-model 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83e49bd9f7c8f2d740de14d39b783fa5c15ae87c
4
- data.tar.gz: 7293c767466539473d216cb3daddd8445ac91b19
3
+ metadata.gz: 0653979dfb88ea7148ac214b771b1133922e63bd
4
+ data.tar.gz: 12e5004a1054dc4645ef2a4b8a7e779eda35a000
5
5
  SHA512:
6
- metadata.gz: 9b3ac6d07f37f8d07d4aadd50fded4e94f3c71ccd19c8d55b7701b26a97054d15785e83c34d2207b41997feca86255a14a511989ab32728625de72e404f4af6f
7
- data.tar.gz: 30e92ac253e598e43f4f2fee80f23992395c882d5672cb8c6f26ca207899832e5caef0f61cf647515d125e9c39768834024220be99dac690d4e0830fe5be09b8
6
+ metadata.gz: 23e898b61aec37dafb51611b3e8778d0eb449783c0e5820786ac8e5d41ae3939a454963267f369399ad6932b93c2e692f129a8c45f99607df788d304d9785333
7
+ data.tar.gz: 4ebcf488bac36ae7c4fb17c8531bec5f77530c53f1ddc80c541e237426b838a3a5f1b6c814caf6f48b5835e0a264dfd99f366aa7845a32dd0a2bf6fb8e994add
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.1.0
4
+
5
+ * Basic model behavior via property mapping and query interface.
@@ -1,5 +1,6 @@
1
1
  module OData
2
2
  module Model
3
+ # Provides the methods that make up the query interface for OData::Model.
3
4
  module Query
4
5
  extend ActiveSupport::Concern
5
6
 
@@ -9,10 +10,44 @@ module OData
9
10
 
10
11
  # Methods mixed in at the class level.
11
12
  module ClassMethods
12
- # Starts a chain for building up an OData query.
13
- # @return [OData::Query::Builder]
14
- def find
15
- OData::Query::Builder.new(self)
13
+ # Starts a query chain with a filter for a given property's name.
14
+ # @param property_name [to_sym]
15
+ # @return [OData::Model::Query]
16
+ def where(property_name)
17
+ query_proxy = OData::Model::QueryProxy.new(self)
18
+ query_proxy.where(property_name.to_sym)
19
+ end
20
+
21
+ # Starts a query chain with a limit to entities returned.
22
+ # @param value [to_i]
23
+ # @return [OData::Model::Query]
24
+ def limit(value)
25
+ query_proxy = OData::Model::QueryProxy.new(self)
26
+ query_proxy.limit(value.to_i)
27
+ end
28
+
29
+ # Starts a query chain with the number of entities to skip.
30
+ # @param value [to_i]
31
+ # @return [OData::Model::Query]
32
+ def skip(value)
33
+ query_proxy = OData::Model::QueryProxy.new(self)
34
+ query_proxy.skip(value.to_i)
35
+ end
36
+
37
+ # Starts a query chain with a order operator for a given property's name.
38
+ # @param property_name [to_sym]
39
+ # @return [OData::Model::Query]
40
+ def order_by(property_name)
41
+ query_proxy = OData::Model::QueryProxy.new(self)
42
+ query_proxy.order_by(property_name.to_sym)
43
+ end
44
+
45
+ # Starts a query chain with a list of properties to select.
46
+ # @param property_name [to_sym]
47
+ # @return [OData::Model::Query]
48
+ def select(property_name)
49
+ query_proxy = OData::Model::QueryProxy.new(self)
50
+ query_proxy.select(property_name.to_sym)
16
51
  end
17
52
 
18
53
  # Enables lookup of model entities by their primary key.
@@ -0,0 +1,88 @@
1
+ module OData
2
+ module Model
3
+ # Provides the proxy between OData::Query and OData::Model.
4
+ class QueryProxy
5
+ include Enumerable
6
+
7
+ # Last filter criteria set on the query.
8
+ attr_reader :last_criteria
9
+
10
+ # Instantiates a new QueryProxy for the supplied OData::Model class.
11
+ # @param model_class [Class]
12
+ # @api private
13
+ def initialize(model_class)
14
+ @target = model_class
15
+ @query = target.odata_entity_set.query
16
+ @last_criteria = nil
17
+ end
18
+
19
+ # Sets up a new criteria for filters for the given property name.
20
+ # @param property_name [Symbol]
21
+ # @return [self]
22
+ # @api private
23
+ def where(property_name)
24
+ @last_criteria = query[target.property_map[property_name]]
25
+ self
26
+ end
27
+
28
+ # Sets up last criteria with supplied argument sets.
29
+ # @param arguments [Hash]
30
+ # @return [self]
31
+ def is(arguments)
32
+ raise ArgumentError 'can only accept Hash argument' unless arguments.is_a?(Hash)
33
+ property_name = last_criteria.property
34
+ arguments.each do |operator, value|
35
+ @last_criteria = query[property_name].send(operator.to_sym, value)
36
+ query.where(@last_criteria)
37
+ end
38
+ self
39
+ end
40
+
41
+ # Specifies the limit for the query.
42
+ # @param value [to_i]
43
+ # @return [self]
44
+ def limit(value)
45
+ query.limit(value.to_i)
46
+ self
47
+ end
48
+
49
+ # Specifies the number of entities to skip for the query.
50
+ # @param value [to_i]
51
+ # @return [self]
52
+ def skip(value)
53
+ query.skip(value.to_i)
54
+ self
55
+ end
56
+
57
+ # Specified the ordering for the query.
58
+ # @param property_name [to_sym]
59
+ # @return [self]
60
+ def order_by(property_name)
61
+ query.order_by(target.property_map[property_name.to_sym])
62
+ self
63
+ end
64
+
65
+ # Selects specific properties to return with query.
66
+ # @param property_name [to_sym]
67
+ # @return [self]
68
+ def select(property_name)
69
+ query.select(target.property_map[property_name.to_sym])
70
+ self
71
+ end
72
+
73
+ # Executes the query and returns each instance of the target model in
74
+ # turn.
75
+ def each(&block)
76
+ query.execute.each do |entity|
77
+ model = target.new
78
+ model.instance_variable_set(:@odata_entity, entity)
79
+ block_given? ? block.call(model) : yield(model)
80
+ end
81
+ end
82
+
83
+ private
84
+
85
+ attr_reader :target, :query
86
+ end
87
+ end
88
+ end
@@ -1,5 +1,5 @@
1
1
  module OData
2
2
  module Model
3
- VERSION = '0.0.3'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
data/lib/odata/model.rb CHANGED
@@ -4,14 +4,13 @@ require 'active_support/concern'
4
4
 
5
5
  require 'odata'
6
6
 
7
- require 'odata/query/builder'
8
-
9
7
  require 'odata/model/version'
10
8
  require 'odata/model/active_model'
11
9
  require 'odata/model/configuration'
12
10
  require 'odata/model/attributes'
13
11
  require 'odata/model/persistence'
14
12
  require 'odata/model/query'
13
+ require 'odata/model/query_proxy'
15
14
 
16
15
  # OData is the parent namespace for the OData::Model project.
17
16
  module OData
data/odata-model.gemspec CHANGED
@@ -20,11 +20,11 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency 'bundler', '~> 1.6'
22
22
  spec.add_development_dependency 'rake'
23
- spec.add_development_dependency 'simplecov', '~> 0.8.2'
23
+ spec.add_development_dependency 'simplecov', '~> 0.9.0'
24
24
  spec.add_development_dependency 'codeclimate-test-reporter'
25
25
  spec.add_development_dependency 'rspec', '~> 3.0.0'
26
26
 
27
- spec.add_dependency 'odata', '~> 0.2'
27
+ spec.add_dependency 'odata', '~> 0.5'
28
28
  spec.add_dependency 'activesupport', '>= 3.0.0'
29
29
  spec.add_dependency 'activemodel', '>= 3.0.0'
30
30
  end
@@ -3,18 +3,35 @@ require 'spec_helper'
3
3
  describe OData::Model do
4
4
  describe 'query interface' do
5
5
  it { expect(Product).to respond_to(:[]) }
6
- it { expect(Product).to respond_to(:find) }
7
-
8
6
  describe 'Product[]' do
9
7
  it 'finds a model instance' do
10
8
  expect(Product[0]).to be_a(Product)
11
9
  end
12
10
  end
13
11
 
14
- describe 'Product.find' do
15
- it 'returns an OData::Query::Builder' do
16
- expect(Product.find).to be_a(OData::Query::Builder)
17
- end
12
+ it { expect(Product).to respond_to(:where) }
13
+ describe 'Product#where' do
14
+ it { expect(Product.where(:name)).to be_a(OData::Model::QueryProxy) }
15
+ end
16
+
17
+ it { expect(Product).to respond_to(:limit) }
18
+ describe 'Product#limit' do
19
+ it { expect(Product.limit(3)).to be_a(OData::Model::QueryProxy) }
20
+ end
21
+
22
+ it { expect(Product).to respond_to(:skip) }
23
+ describe 'Product#skip' do
24
+ it { expect(Product.skip(6)).to be_a(OData::Model::QueryProxy) }
25
+ end
26
+
27
+ it { expect(Product).to respond_to(:order_by) }
28
+ describe 'Product#order_by' do
29
+ it { expect(Product.order_by(:rating)).to be_a(OData::Model::QueryProxy) }
30
+ end
31
+
32
+ it { expect(Product).to respond_to(:select) }
33
+ describe 'Product#order_by' do
34
+ it { expect(Product.select(:name)).to be_a(OData::Model::QueryProxy) }
18
35
  end
19
36
  end
20
37
  end
@@ -0,0 +1,117 @@
1
+ require 'spec_helper'
2
+
3
+ describe OData::Model::QueryProxy do
4
+ let(:subject) { query_proxy }
5
+ let(:query_proxy) { OData::Model::QueryProxy.new(Product) }
6
+ let(:query_string) { subject.send(:query).to_s }
7
+
8
+ it { expect(subject).to respond_to(:where) }
9
+ describe '#where' do
10
+ let(:subject) { query_proxy.where(:name) }
11
+
12
+ it { expect(subject).to be_a(OData::Model::QueryProxy) }
13
+
14
+ it 'sets up last criteria properly' do
15
+ expect(subject.last_criteria).to be_a(OData::Query::Criteria)
16
+ expect(subject.last_criteria.property).to eq(Product.property_map[:name])
17
+ end
18
+ end
19
+
20
+ it { expect(subject).to respond_to(:is) }
21
+ describe '#is' do
22
+ %w{eq ne gt lt ge le}.each do |operator|
23
+ describe "with :#{operator} operator" do
24
+ let(:subject) { query_proxy.where(:rating).is(operator.to_sym => 4) }
25
+
26
+ it { expect(subject).to be_a(OData::Model::QueryProxy) }
27
+
28
+ it 'sets up last criteria properly' do
29
+ expect(subject.last_criteria).to be_a(OData::Query::Criteria)
30
+ expect(subject.last_criteria.property).to eq(Product.property_map[:rating])
31
+ expect(subject.last_criteria.operator).to eq(operator.to_sym)
32
+ expect(subject.last_criteria.value).to eq(4)
33
+ end
34
+
35
+ it 'properly generates query' do
36
+ expect(query_string).to eq("Products?$filter=Rating #{operator} 4")
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ it { expect(subject).to respond_to(:limit) }
43
+ describe '#limit' do
44
+ let(:subject) { query_proxy.limit(3) }
45
+
46
+ it { expect(subject).to be_a(OData::Model::QueryProxy) }
47
+
48
+ it 'properly generates query' do
49
+ expect(query_string).to eq('Products?$top=3')
50
+ end
51
+ end
52
+
53
+ it { expect(subject).to respond_to(:skip) }
54
+ describe '#skip' do
55
+ let(:subject) { query_proxy.skip(6) }
56
+
57
+ it { expect(subject).to be_a(OData::Model::QueryProxy) }
58
+
59
+ it 'properly generates query' do
60
+ expect(query_string).to eq('Products?$skip=6')
61
+ end
62
+ end
63
+
64
+ it { pending; expect(subject).to respond_to(:expand) }
65
+ describe '#expand' do
66
+ it { pending; fail }
67
+ end
68
+
69
+ it { expect(subject).to respond_to(:select) }
70
+ describe '#select' do
71
+ let(:subject) { query_proxy.select(:name) }
72
+
73
+ it { expect(subject).to be_a(OData::Model::QueryProxy) }
74
+
75
+ it 'properly generates query' do
76
+ expect(query_string).to eq('Products?$select=Name')
77
+ end
78
+ end
79
+
80
+ it { expect(subject).to respond_to(:order_by) }
81
+ describe '#order_by' do
82
+ let(:subject) { query_proxy.order_by(:rating) }
83
+
84
+ it { expect(subject).to be_a(OData::Model::QueryProxy) }
85
+
86
+ it 'properly generates query' do
87
+ expect(query_string).to eq('Products?$orderby=Rating')
88
+ end
89
+ end
90
+
91
+ it { pending; expect(subject).to respond_to(:and) }
92
+ describe '#and' do
93
+ it { pending; fail }
94
+ end
95
+
96
+ it { pending; expect(subject).to respond_to(:or) }
97
+ describe '#or' do
98
+ it { pending; fail }
99
+ end
100
+
101
+ it { pending; expect(subject).to respond_to(:not) }
102
+ describe '#not' do
103
+ it { pending; fail }
104
+ end
105
+
106
+ it { expect(subject).to respond_to(:each) }
107
+ describe '#each' do
108
+ it 'returns model instances in turn' do
109
+ counter = 0
110
+ subject.each do |model|
111
+ expect(model).to be_a(Product)
112
+ counter += 1
113
+ end
114
+ expect(counter).to eq(11)
115
+ end
116
+ end
117
+ end
data/spec/spec_helper.rb CHANGED
@@ -16,7 +16,7 @@ require 'odata/model'
16
16
  # Suppressing a deprecation warning
17
17
  I18n.enforce_available_locales = false
18
18
 
19
- OData::Service.open('http://services.odata.org/OData/OData.svc')
19
+ OData::Service.open('http://services.odata.org/OData/OData.svc', name: 'ODataDemo')
20
20
 
21
21
  require 'example_models/bare_model'
22
22
  require 'example_models/odatademo_product'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: odata-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Thompson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-18 00:00:00.000000000 Z
11
+ date: 2014-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.8.2
47
+ version: 0.9.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.8.2
54
+ version: 0.9.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: codeclimate-test-reporter
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.2'
89
+ version: '0.5'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.2'
96
+ version: '0.5'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: activesupport
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -133,6 +133,7 @@ files:
133
133
  - ".rspec"
134
134
  - ".ruby-version"
135
135
  - ".travis.yml"
136
+ - CHANGELOG.md
136
137
  - Gemfile
137
138
  - LICENSE.txt
138
139
  - README.md
@@ -143,20 +144,16 @@ files:
143
144
  - lib/odata/model/configuration.rb
144
145
  - lib/odata/model/persistence.rb
145
146
  - lib/odata/model/query.rb
147
+ - lib/odata/model/query_proxy.rb
146
148
  - lib/odata/model/version.rb
147
- - lib/odata/query/builder.rb
148
149
  - odata-model.gemspec
149
150
  - spec/example_models/bare_model.rb
150
151
  - spec/example_models/odatademo_product.rb
151
152
  - spec/model/active_model_lint_spec.rb
152
153
  - spec/model/property_defaults_spec.rb
153
154
  - spec/model/query_interface_spec.rb
155
+ - spec/model/query_proxy_spec.rb
154
156
  - spec/model/service_integration_spec.rb
155
- - spec/query/builder/filters_spec.rb
156
- - spec/query/builder/order_by_spec.rb
157
- - spec/query/builder/pagination_spec.rb
158
- - spec/query/builder/select_spec.rb
159
- - spec/query/builder_spec.rb
160
157
  - spec/spec_helper.rb
161
158
  homepage: https://github.com/ruby-odata/odata-model
162
159
  licenses:
@@ -188,10 +185,6 @@ test_files:
188
185
  - spec/model/active_model_lint_spec.rb
189
186
  - spec/model/property_defaults_spec.rb
190
187
  - spec/model/query_interface_spec.rb
188
+ - spec/model/query_proxy_spec.rb
191
189
  - spec/model/service_integration_spec.rb
192
- - spec/query/builder/filters_spec.rb
193
- - spec/query/builder/order_by_spec.rb
194
- - spec/query/builder/pagination_spec.rb
195
- - spec/query/builder/select_spec.rb
196
- - spec/query/builder_spec.rb
197
190
  - spec/spec_helper.rb
@@ -1,219 +0,0 @@
1
- module OData
2
- class Query
3
- # Provides a OData::Model aware means of building up queries using chained
4
- # methods. Also implements the Enumerable module to support working with
5
- # the results of any query in a sane way.
6
- class Builder
7
- include Enumerable
8
-
9
- SUPPORTED_OPERATIONS = [:eq, :ne, :gt, :ge, :lt, :le, :not]
10
-
11
- # Sets up a new Query Builder.
12
- # @param model [OData::Model] the model to build the query for
13
- def initialize(model)
14
- @entity_set = model.odata_entity_set
15
- @property_map = model.property_map
16
- end
17
-
18
- def each
19
- # TODO implement
20
- end
21
-
22
- # Set the number of entities to skip for the final query.
23
- # @param value [to_i,nil]
24
- # @return [self]
25
- def skip(value)
26
- value = nil if value == 0
27
- query_structure[:skip] = value.try(:to_i)
28
- self
29
- end
30
-
31
- # Set the number of entities to return in the final query.
32
- # @param value [to_i,nil]
33
- # @return [self]
34
- def limit(value)
35
- value = nil if value == 0
36
- query_structure[:top] = value.try(:to_i)
37
- self
38
- end
39
-
40
- # Set the options for ordering the final query.
41
- # @param args [Symbol,Hash]
42
- # @return [self]
43
- def order_by(*args)
44
- validate_order_by_arguments(args)
45
- query_structure[:orderby] += process_order_by_arguments(args)
46
- self
47
- end
48
-
49
- # Set the properties to select with the final query.
50
- # @param args [Array<Symbol>]
51
- # @return self
52
- def select(*args)
53
- args.each {|arg| query_structure[:select] << arg.to_sym}
54
- self
55
- end
56
-
57
- # Sets up a new filter condition on the provided property mapping.
58
- # @param value [to_s]
59
- # @return self
60
- def where(value)
61
- last_filter = query_structure[:filter].last
62
- clause = {
63
- property: lookup_property_name(value),
64
- opeartion: nil,
65
- argument: nil
66
- }
67
-
68
- if last_filter.is_a?(Array)
69
- last_filter << clause
70
- else
71
- query_structure[:filter] << [clause]
72
- end
73
- self
74
- end
75
-
76
- # Sets the operation and argument for the last filter condition started
77
- # by #where, #and or #or.
78
- # @param value [Hash]
79
- # @return self
80
- def is(value)
81
- value = value.first
82
- validate_is_argument(value)
83
- last_filter = query_structure[:filter].last.last
84
- if last_filter[:operation].nil? && last_filter[:argument].nil?
85
- last_filter[:operation] = value[0].to_sym
86
- last_filter[:argument] = value[1]
87
- else
88
- query_structure[:filter].last << {
89
- property: last_filter[:property],
90
- operation: value[0].to_sym,
91
- argument: value[1]
92
- }
93
- end
94
- self
95
- end
96
-
97
- # Adds another filter to the last supplied clause.
98
- # @param value [to_s]
99
- # @return self
100
- def and(value)
101
- query_structure[:filter].last << {
102
- property: lookup_property_name(value),
103
- opeartion: nil,
104
- argument: nil
105
- }
106
- self
107
- end
108
-
109
- # Adds an alternate filter after the last supplied clause.
110
- # @param value [to_s]
111
- # @return self
112
- def or(value)
113
- query_structure[:filter] << [{
114
- property: lookup_property_name(value),
115
- opeartion: nil,
116
- argument: nil
117
- }]
118
- self
119
- end
120
-
121
- # Returns the current query structure as a valid query string.
122
- def to_s
123
- # TODO validate the actual query structure
124
-
125
- query_array = []
126
- query_array << filters_to_query
127
- query_array << orderby_to_query
128
- query_array << select_to_query
129
- query_array << top_to_query
130
- query_array << skip_to_query
131
- query_array.compact!
132
-
133
- query_string = query_array.join('&')
134
- "#{entity_set.name}?#{query_string}"
135
- end
136
-
137
- private
138
-
139
- def query_structure
140
- @query_structure ||= {
141
- top: nil,
142
- skip: nil,
143
- orderby: [],
144
- select: [],
145
- filter: []
146
- }
147
- end
148
-
149
- def entity_set
150
- @entity_set
151
- end
152
-
153
- def skip_to_query
154
- return nil if query_structure[:skip].nil?
155
- "$skip=#{query_structure[:skip]}"
156
- end
157
-
158
- def top_to_query
159
- return nil if query_structure[:top].nil?
160
- "$top=#{query_structure[:top]}"
161
- end
162
-
163
- def orderby_to_query
164
- return nil if query_structure[:orderby].empty?
165
- "$orderby=#{query_structure[:orderby].join(',')}"
166
- end
167
-
168
- def select_to_query
169
- return nil if query_structure[:select].empty?
170
- "$select=#{query_structure[:select].join(',')}"
171
- end
172
-
173
- def filters_to_query
174
- str = "$filter="
175
- clauses = []
176
- query_structure[:filter].each do |clause|
177
- clause_filters = []
178
- clause.each do |filter|
179
- clause_filters << "#{filter[:property]} #{filter[:operation]} #{filter[:argument]}"
180
- end
181
- clauses << clause_filters.join(' and ')
182
- end
183
- clauses.collect! {|clause| "(#{clause})"}
184
- str << clauses.join(' or ')
185
- str
186
- end
187
-
188
- def validate_order_by_arguments(args)
189
- args.each do |arg|
190
- unless arg.is_a?(Hash) || arg.is_a?(Symbol)
191
- raise ArgumentError, 'must be a Hash or Symbol'
192
- end
193
- end
194
- end
195
-
196
- def validate_is_argument(value)
197
- raise ArgumentError, 'argument must be a hash' unless value.size == 2
198
- raise ArgumentError, "unsupported operation: #{value[0]}" unless SUPPORTED_OPERATIONS.include?(value[0].to_sym)
199
- end
200
-
201
- def process_order_by_arguments(args)
202
- args.collect do |arg|
203
- case arg
204
- when is_a?(Symbol)
205
- lookup_property_name(arg)
206
- when is_a?(Hash)
207
- arg.each do |key, value|
208
- "#{lookup_property_name(key)} #{value}"
209
- end
210
- end
211
- end
212
- end
213
-
214
- def lookup_property_name(mapping)
215
- @property_map[mapping.to_s.to_sym]
216
- end
217
- end
218
- end
219
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe OData::Query::Builder do
4
- let(:subject) { OData::Query::Builder.new(Product) }
5
-
6
- describe 'filter method' do
7
- describe '#where' do
8
- it { expect(subject).to respond_to(:where) }
9
-
10
- it { expect(subject.where(:name)).to be_a(OData::Query::Builder) }
11
- it { expect(subject.where(:name)).to eq(subject) }
12
- end
13
-
14
- describe '#is' do
15
- let(:subject) { OData::Query::Builder.new(Product).where(:name) }
16
-
17
- it { expect(subject).to respond_to(:is) }
18
-
19
- it { expect(subject.is(eq: 'Bread')).to be_a(OData::Query::Builder) }
20
- it { expect(subject.is(eq: 'Bread')).to eq(subject) }
21
- end
22
-
23
- describe '#and' do
24
- let(:subject) { OData::Query::Builder.new(Product).where(:name).is(eq: 'Bread') }
25
-
26
- it { expect(subject).to respond_to(:and) }
27
-
28
- it { expect(subject.and(:name)).to be_a(OData::Query::Builder) }
29
- it { expect(subject.and(:name)).to eq(subject) }
30
- end
31
-
32
- describe '#or' do
33
- let(:subject) { OData::Query::Builder.new(Product).where(:name).is(eq: 'Bread') }
34
-
35
- it { expect(subject).to respond_to(:or) }
36
-
37
- it { expect(subject.or(:name)).to be_a(OData::Query::Builder) }
38
- it { expect(subject.or(:name)).to eq(subject) }
39
- end
40
- end
41
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe OData::Query::Builder do
4
- let(:subject) { OData::Query::Builder.new(Product) }
5
-
6
- describe '#order_by' do
7
- it { expect(subject).to respond_to(:order_by) }
8
-
9
- describe 'accepts Symbols' do
10
- it { expect(subject.order_by(:name)).to be_a(OData::Query::Builder) }
11
- it { expect(subject.order_by(:name)).to eq(subject) }
12
-
13
- it { expect(subject.order_by(:price, :rating)).to be_a(OData::Query::Builder) }
14
- it { expect(subject.order_by(:price, :rating)).to eq(subject) }
15
- end
16
-
17
- describe 'accepts a Hash' do
18
- it { expect(subject.order_by(name: :asc)).to be_a(OData::Query::Builder) }
19
- it { expect(subject.order_by(name: :asc)).to eq(subject) }
20
- end
21
- end
22
- end
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe OData::Query::Builder do
4
- let(:subject) { OData::Query::Builder.new(Product) }
5
-
6
- describe 'pagination method' do
7
- describe '#skip' do
8
- it { expect(subject).to respond_to(:skip) }
9
- it { expect(subject.skip(5)).to be_a(OData::Query::Builder) }
10
- it { expect(subject.skip(5)).to eq(subject) }
11
- end
12
-
13
- describe '#limit' do
14
- it { expect(subject).to respond_to(:limit) }
15
- it { expect(subject.limit(5)).to be_a(OData::Query::Builder) }
16
- it { expect(subject.limit(5)).to eq(subject) }
17
- end
18
- end
19
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe OData::Query::Builder do
4
- let(:subject) { OData::Query::Builder.new(Product) }
5
-
6
- describe '#select' do
7
- it { expect(subject).to respond_to(:select) }
8
-
9
- it { expect(subject.select(:name, :description)).to be_a(OData::Query::Builder) }
10
- it { expect(subject.select(:name, :description)).to eq(subject) }
11
- end
12
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe OData::Query::Builder do
4
- let(:subject) { OData::Query::Builder.new(Product) }
5
-
6
- describe '#to_s' do
7
- it 'properly builds queries' do
8
- query_string = "Products?$filter=(Name eq 'Bread')"
9
- query = subject.where(:name).is(eq: "'Bread'")
10
- expect(query.to_s).to eq(query_string)
11
- end
12
-
13
- it 'properly builds queries' do
14
- query_string = "Products?$filter=(Name eq 'Bread') or (Name eq 'Milk')"
15
- query = subject.where(:name).is(eq: "'Bread'").or(:name).is(eq: "'Milk'")
16
- expect(query.to_s).to eq(query_string)
17
- end
18
-
19
- it 'properly builds queries' do
20
- query_string = 'Products?$filter=(Price lt 15 and Rating gt 3)'
21
- query = subject.where(:price).is(lt: 15).and(:rating).is(gt: 3)
22
- expect(query.to_s).to eq(query_string)
23
- end
24
- end
25
- end