odata4 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +1 -0
- data/lib/odata4/entity.rb +13 -5
- data/lib/odata4/properties/collection.rb +50 -0
- data/lib/odata4/properties.rb +1 -0
- data/lib/odata4/query.rb +7 -5
- data/lib/odata4/schema.rb +8 -2
- data/lib/odata4/service/request.rb +81 -0
- data/lib/odata4/{query/result → service/response}/atom.rb +9 -10
- data/lib/odata4/{query/result → service/response}/json.rb +9 -10
- data/lib/odata4/service/response/plain.rb +36 -0
- data/lib/odata4/service/response/xml.rb +40 -0
- data/lib/odata4/service/response.rb +160 -0
- data/lib/odata4/service.rb +12 -80
- data/lib/odata4/version.rb +1 -1
- data/lib/odata4.rb +0 -3
- data/spec/fixtures/files/entity_to_xml.xml +1 -1
- data/spec/fixtures/files/error.xml +5 -0
- data/spec/fixtures/vcr_cassettes/service/request_specs.yml +193 -0
- data/spec/odata4/properties/collection_spec.rb +44 -0
- data/spec/odata4/query_spec.rb +2 -2
- data/spec/odata4/service/request_spec.rb +49 -0
- data/spec/odata4/service/response_spec.rb +77 -0
- metadata +19 -7
- data/lib/odata4/query/result.rb +0 -84
- data/spec/odata4/query/result_spec.rb +0 -53
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: odata4
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christoph Wagner
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-02-
|
12
|
+
date: 2018-02-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -212,6 +212,7 @@ files:
|
|
212
212
|
- lib/odata4/properties.rb
|
213
213
|
- lib/odata4/properties/binary.rb
|
214
214
|
- lib/odata4/properties/boolean.rb
|
215
|
+
- lib/odata4/properties/collection.rb
|
215
216
|
- lib/odata4/properties/date.rb
|
216
217
|
- lib/odata4/properties/date_time.rb
|
217
218
|
- lib/odata4/properties/date_time_offset.rb
|
@@ -238,16 +239,20 @@ files:
|
|
238
239
|
- lib/odata4/query/criteria/lambda_operators.rb
|
239
240
|
- lib/odata4/query/criteria/string_functions.rb
|
240
241
|
- lib/odata4/query/in_batches.rb
|
241
|
-
- lib/odata4/query/result.rb
|
242
|
-
- lib/odata4/query/result/atom.rb
|
243
|
-
- lib/odata4/query/result/json.rb
|
244
242
|
- lib/odata4/railtie.rb
|
245
243
|
- lib/odata4/schema.rb
|
246
244
|
- lib/odata4/service.rb
|
245
|
+
- lib/odata4/service/request.rb
|
246
|
+
- lib/odata4/service/response.rb
|
247
|
+
- lib/odata4/service/response/atom.rb
|
248
|
+
- lib/odata4/service/response/json.rb
|
249
|
+
- lib/odata4/service/response/plain.rb
|
250
|
+
- lib/odata4/service/response/xml.rb
|
247
251
|
- lib/odata4/service_registry.rb
|
248
252
|
- lib/odata4/version.rb
|
249
253
|
- odata4.gemspec
|
250
254
|
- spec/fixtures/files/entity_to_xml.xml
|
255
|
+
- spec/fixtures/files/error.xml
|
251
256
|
- spec/fixtures/files/metadata.xml
|
252
257
|
- spec/fixtures/files/product_0.json
|
253
258
|
- spec/fixtures/files/product_0.xml
|
@@ -264,6 +269,7 @@ files:
|
|
264
269
|
- spec/fixtures/vcr_cassettes/navigation_property_proxy_specs.yml
|
265
270
|
- spec/fixtures/vcr_cassettes/query/result_specs.yml
|
266
271
|
- spec/fixtures/vcr_cassettes/query_specs.yml
|
272
|
+
- spec/fixtures/vcr_cassettes/service/request_specs.yml
|
267
273
|
- spec/fixtures/vcr_cassettes/service_registry_specs.yml
|
268
274
|
- spec/fixtures/vcr_cassettes/service_specs.yml
|
269
275
|
- spec/fixtures/vcr_cassettes/usage_example_specs.yml
|
@@ -277,6 +283,7 @@ files:
|
|
277
283
|
- spec/odata4/navigation_property_spec.rb
|
278
284
|
- spec/odata4/properties/binary_spec.rb
|
279
285
|
- spec/odata4/properties/boolean_spec.rb
|
286
|
+
- spec/odata4/properties/collection_spec.rb
|
280
287
|
- spec/odata4/properties/date_spec.rb
|
281
288
|
- spec/odata4/properties/date_time_offset_spec.rb
|
282
289
|
- spec/odata4/properties/date_time_spec.rb
|
@@ -294,9 +301,10 @@ files:
|
|
294
301
|
- spec/odata4/property_registry_spec.rb
|
295
302
|
- spec/odata4/property_spec.rb
|
296
303
|
- spec/odata4/query/criteria_spec.rb
|
297
|
-
- spec/odata4/query/result_spec.rb
|
298
304
|
- spec/odata4/query_spec.rb
|
299
305
|
- spec/odata4/schema_spec.rb
|
306
|
+
- spec/odata4/service/request_spec.rb
|
307
|
+
- spec/odata4/service/response_spec.rb
|
300
308
|
- spec/odata4/service_registry_spec.rb
|
301
309
|
- spec/odata4/service_spec.rb
|
302
310
|
- spec/odata4/usage_example_spec.rb
|
@@ -329,6 +337,7 @@ specification_version: 4
|
|
329
337
|
summary: Simple OData library
|
330
338
|
test_files:
|
331
339
|
- spec/fixtures/files/entity_to_xml.xml
|
340
|
+
- spec/fixtures/files/error.xml
|
332
341
|
- spec/fixtures/files/metadata.xml
|
333
342
|
- spec/fixtures/files/product_0.json
|
334
343
|
- spec/fixtures/files/product_0.xml
|
@@ -345,6 +354,7 @@ test_files:
|
|
345
354
|
- spec/fixtures/vcr_cassettes/navigation_property_proxy_specs.yml
|
346
355
|
- spec/fixtures/vcr_cassettes/query/result_specs.yml
|
347
356
|
- spec/fixtures/vcr_cassettes/query_specs.yml
|
357
|
+
- spec/fixtures/vcr_cassettes/service/request_specs.yml
|
348
358
|
- spec/fixtures/vcr_cassettes/service_registry_specs.yml
|
349
359
|
- spec/fixtures/vcr_cassettes/service_specs.yml
|
350
360
|
- spec/fixtures/vcr_cassettes/usage_example_specs.yml
|
@@ -358,6 +368,7 @@ test_files:
|
|
358
368
|
- spec/odata4/navigation_property_spec.rb
|
359
369
|
- spec/odata4/properties/binary_spec.rb
|
360
370
|
- spec/odata4/properties/boolean_spec.rb
|
371
|
+
- spec/odata4/properties/collection_spec.rb
|
361
372
|
- spec/odata4/properties/date_spec.rb
|
362
373
|
- spec/odata4/properties/date_time_offset_spec.rb
|
363
374
|
- spec/odata4/properties/date_time_spec.rb
|
@@ -375,9 +386,10 @@ test_files:
|
|
375
386
|
- spec/odata4/property_registry_spec.rb
|
376
387
|
- spec/odata4/property_spec.rb
|
377
388
|
- spec/odata4/query/criteria_spec.rb
|
378
|
-
- spec/odata4/query/result_spec.rb
|
379
389
|
- spec/odata4/query_spec.rb
|
380
390
|
- spec/odata4/schema_spec.rb
|
391
|
+
- spec/odata4/service/request_spec.rb
|
392
|
+
- spec/odata4/service/response_spec.rb
|
381
393
|
- spec/odata4/service_registry_spec.rb
|
382
394
|
- spec/odata4/service_spec.rb
|
383
395
|
- spec/odata4/usage_example_spec.rb
|
data/lib/odata4/query/result.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
module OData4
|
2
|
-
class Query
|
3
|
-
# Represents the results of executing a OData4::Query.
|
4
|
-
# @api private
|
5
|
-
class Result
|
6
|
-
include Enumerable
|
7
|
-
|
8
|
-
attr_reader :query
|
9
|
-
|
10
|
-
# Initialize a result with the query and the result.
|
11
|
-
# @param query [OData4::Query]
|
12
|
-
# @param result [Typhoeus::Result]
|
13
|
-
def initialize(query, result)
|
14
|
-
@query = query
|
15
|
-
@result = result
|
16
|
-
check_result_type
|
17
|
-
end
|
18
|
-
|
19
|
-
# Provided for Enumerable functionality
|
20
|
-
# @param block [block] a block to evaluate
|
21
|
-
# @return [OData4::Entity] each entity in turn for the query result
|
22
|
-
def each(&block)
|
23
|
-
unless empty?
|
24
|
-
process_results(&block)
|
25
|
-
until next_page.nil?
|
26
|
-
# ensure query gets executed with the same options
|
27
|
-
result = query.execute(next_page_url)
|
28
|
-
process_results(&block)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# Checks whether the result set contains any results
|
34
|
-
# @return [Boolean]
|
35
|
-
def empty?
|
36
|
-
@empty_result ||= find_entities.empty?
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
attr_accessor :result
|
42
|
-
|
43
|
-
def check_result_type
|
44
|
-
# Dynamically extend instance with methods for
|
45
|
-
# processing the current result type
|
46
|
-
if is_atom_result?
|
47
|
-
extend OData4::Query::Result::Atom
|
48
|
-
elsif is_json_result?
|
49
|
-
extend OData4::Query::Result::JSON
|
50
|
-
elsif result.body.empty?
|
51
|
-
# Some services (*cough* Microsoft *cough*) return
|
52
|
-
# an empty response with no `Content-Type` header set.
|
53
|
-
# We catch that here and bypass content type detection.
|
54
|
-
@empty_result = true
|
55
|
-
else
|
56
|
-
raise ArgumentError, "Invalid result type '#{content_type}'"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def is_atom_result?
|
61
|
-
content_type =~ /#{Regexp.escape OData4::Service::MIME_TYPES[:atom]}/
|
62
|
-
end
|
63
|
-
|
64
|
-
def is_json_result?
|
65
|
-
content_type =~ /#{Regexp.escape OData4::Service::MIME_TYPES[:json]}/
|
66
|
-
end
|
67
|
-
|
68
|
-
def content_type
|
69
|
-
result.headers['Content-Type'] || ''
|
70
|
-
end
|
71
|
-
|
72
|
-
def service
|
73
|
-
query.entity_set.service
|
74
|
-
end
|
75
|
-
|
76
|
-
def entity_options
|
77
|
-
query.entity_set.entity_options
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
require 'odata4/query/result/atom'
|
84
|
-
require 'odata4/query/result/json'
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
shared_examples 'valid result' do
|
4
|
-
it { expect(result.count).to eq(11) }
|
5
|
-
|
6
|
-
describe '#empty?' do
|
7
|
-
it { expect(result).to respond_to(:empty?) }
|
8
|
-
it { expect(result.empty?).to eq(false) }
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '#each' do
|
12
|
-
it { expect(result).to respond_to(:each) }
|
13
|
-
it 'returns just OData4::Entities of the right type' do
|
14
|
-
result.each do |entity|
|
15
|
-
expect(entity).to be_a(OData4::Entity)
|
16
|
-
expect(entity.type).to eq('ODataDemo.Product')
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe OData4::Query::Result, vcr: {cassette_name: 'query/result_specs'} do
|
23
|
-
before(:example) do
|
24
|
-
OData4::Service.open('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
|
25
|
-
end
|
26
|
-
|
27
|
-
let(:entity_set) { OData4::ServiceRegistry['ODataDemo']['Products'] }
|
28
|
-
# let(:subject) { entity_set.query.execute }
|
29
|
-
|
30
|
-
let(:response) do
|
31
|
-
response = double('response')
|
32
|
-
allow(response).to receive_messages(
|
33
|
-
headers: { 'Content-Type' => content_type },
|
34
|
-
body: response_body
|
35
|
-
)
|
36
|
-
response
|
37
|
-
end
|
38
|
-
let(:result) { OData4::Query::Result.new(entity_set.query, response) }
|
39
|
-
|
40
|
-
context 'with Atom Result' do
|
41
|
-
let(:content_type) { 'application/atom+xml' }
|
42
|
-
let(:response_body) { File.read('spec/fixtures/files/products.xml') }
|
43
|
-
|
44
|
-
it_behaves_like 'valid result'
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'with JSON Result' do
|
48
|
-
let(:content_type) { 'application/json' }
|
49
|
-
let(:response_body) { File.read('spec/fixtures/files/products.json') }
|
50
|
-
|
51
|
-
it_behaves_like 'valid result'
|
52
|
-
end
|
53
|
-
end
|