odata4 0.8.2 → 0.9.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +112 -54
- data/lib/odata4.rb +2 -1
- data/lib/odata4/service.rb +31 -29
- data/lib/odata4/service/request.rb +26 -22
- data/lib/odata4/service/response.rb +31 -22
- data/lib/odata4/version.rb +1 -1
- data/odata4.gemspec +1 -1
- data/spec/fixtures/vcr_cassettes/entity_set_specs.yml +287 -0
- data/spec/fixtures/vcr_cassettes/query_specs.yml +397 -0
- data/spec/fixtures/vcr_cassettes/usage_example_specs.yml +582 -1
- data/spec/odata4/entity_container_spec.rb +1 -1
- data/spec/odata4/entity_set_spec.rb +1 -1
- data/spec/odata4/entity_spec.rb +1 -1
- data/spec/odata4/navigation_property/proxy_spec.rb +1 -1
- data/spec/odata4/property_spec.rb +1 -1
- data/spec/odata4/query_spec.rb +1 -1
- data/spec/odata4/schema/complex_type_spec.rb +1 -1
- data/spec/odata4/schema/enum_type_spec.rb +1 -1
- data/spec/odata4/schema_spec.rb +1 -1
- data/spec/odata4/service/request_spec.rb +1 -1
- data/spec/odata4/service/response_spec.rb +3 -3
- data/spec/odata4/service_registry_spec.rb +1 -1
- data/spec/odata4/service_spec.rb +66 -5
- data/spec/odata4/usage_example_spec.rb +13 -1
- data/spec/support/vcr.rb +1 -1
- metadata +5 -5
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe OData4::EntityContainer do
|
4
4
|
let(:subject) { OData4::EntityContainer.new(service) }
|
5
5
|
let(:service) do
|
6
|
-
OData4::Service.
|
6
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', metadata_file: metadata_file)
|
7
7
|
end
|
8
8
|
let(:metadata_file) { 'spec/fixtures/files/metadata.xml' }
|
9
9
|
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OData4::EntitySet, vcr: {cassette_name: 'entity_set_specs'} do
|
4
4
|
before(:example) do
|
5
|
-
OData4::Service.
|
5
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
|
6
6
|
end
|
7
7
|
|
8
8
|
let(:subject) { OData4::EntitySet.new(options) }
|
data/spec/odata4/entity_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require_relative 'entity/shared_examples'
|
|
3
3
|
|
4
4
|
describe OData4::Entity, vcr: {cassette_name: 'entity_specs'} do
|
5
5
|
before(:example) do
|
6
|
-
OData4::Service.
|
6
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:subject) { OData4::Entity.new(options) }
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OData4::NavigationProperty::Proxy, vcr: {cassette_name: 'navigation_property_proxy_specs'} do
|
4
4
|
before :each do
|
5
|
-
OData4::Service.
|
5
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
|
6
6
|
end
|
7
7
|
|
8
8
|
let(:entity) { OData4::ServiceRegistry['ODataDemo']['Products'][1] }
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OData4::Property do
|
4
4
|
let(:service) do
|
5
|
-
OData4::Service.
|
5
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', metadata_file: metadata_file)
|
6
6
|
end
|
7
7
|
let(:metadata_file) { 'spec/fixtures/files/metadata.xml' }
|
8
8
|
let(:subject) { OData4::Property.new('PropertyName', '1') }
|
data/spec/odata4/query_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OData4::Query, vcr: {cassette_name: 'query_specs'} do
|
4
4
|
before(:example) do
|
5
|
-
OData4::Service.
|
5
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
|
6
6
|
end
|
7
7
|
|
8
8
|
let(:subject) { OData4::Query.new(entity_set) }
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OData4::Schema::ComplexType, vcr: {cassette_name: 'schema/complex_type_specs'} do
|
4
4
|
before(:example) do
|
5
|
-
OData4::Service.
|
5
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
|
6
6
|
end
|
7
7
|
|
8
8
|
let(:service) { OData4::ServiceRegistry['ODataDemo'] }
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OData4::Schema::EnumType, vcr: {cassette_name: 'schema/enum_type_specs'} do
|
4
4
|
before(:example) do
|
5
|
-
OData4::Service.
|
5
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo', metadata_file: metadata_file)
|
6
6
|
end
|
7
7
|
|
8
8
|
let(:metadata_file) { 'spec/fixtures/files/metadata.xml' }
|
data/spec/odata4/schema_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe OData4::Schema do
|
4
4
|
let(:subject) { OData4::Schema.new(schema_xml, service) }
|
5
5
|
let(:service) do
|
6
|
-
OData4::Service.
|
6
|
+
OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', metadata_file: metadata_file)
|
7
7
|
end
|
8
8
|
let(:metadata_file) { 'spec/fixtures/files/metadata.xml' }
|
9
9
|
let(:schema_xml) { service.metadata.xpath('//Schema').first }
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OData4::Service::Request, vcr: {cassette_name: 'service/request_specs'} do
|
4
4
|
let(:subject) { OData4::Service::Request.new(service, 'Products') }
|
5
|
-
let(:service) { OData4::Service.
|
5
|
+
let(:service) { OData4::Service.new(service_url, name: 'ODataDemo', metadata_file: metadata_file) }
|
6
6
|
let(:service_url) { 'http://services.odata.org/V4/OData/OData.svc' }
|
7
7
|
let(:metadata_file) { 'spec/fixtures/files/metadata.xml' }
|
8
8
|
|
@@ -21,8 +21,8 @@ shared_examples 'a valid response' do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe OData4::Service::Response, vcr: {cassette_name: 'service/response_specs'} do
|
24
|
-
let(:subject) { OData4::Service::Response.new(service,
|
25
|
-
let(:service) { OData4::Service.
|
24
|
+
let(:subject) { OData4::Service::Response.new(service, entity_set.query) { response } }
|
25
|
+
let(:service) { OData4::Service.new(service_url, name: 'ODataDemo', metadata_file: metadata_file) }
|
26
26
|
let(:service_url) { 'http://services.odata.org/V4/OData/OData.svc' }
|
27
27
|
let(:metadata_file) { 'spec/fixtures/files/metadata.xml' }
|
28
28
|
let(:entity_set) { service['Products'] }
|
@@ -30,7 +30,7 @@ describe OData4::Service::Response, vcr: {cassette_name: 'service/response_specs
|
|
30
30
|
response = double('response')
|
31
31
|
allow(response).to receive_messages(
|
32
32
|
headers: { 'Content-Type' => content_type },
|
33
|
-
|
33
|
+
status: response_status,
|
34
34
|
body: response_body
|
35
35
|
)
|
36
36
|
response
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OData4::ServiceRegistry, vcr: {cassette_name: 'service_registry_specs'} do
|
4
4
|
let(:subject) { OData4::ServiceRegistry }
|
5
|
-
let(:sample_service) { OData4::Service.
|
5
|
+
let(:sample_service) { OData4::Service.new('http://services.odata.org/V4/OData/OData.svc', name: 'demoService') }
|
6
6
|
|
7
7
|
it { expect(subject).to respond_to(:add) }
|
8
8
|
it { expect(subject).to respond_to(:[]) }
|
data/spec/odata4/service_spec.rb
CHANGED
@@ -3,25 +3,86 @@ require 'spec_helper'
|
|
3
3
|
describe OData4::Service, vcr: {cassette_name: 'service_specs'} do
|
4
4
|
let(:service_url) { 'http://services.odata.org/V4/OData/OData.svc' }
|
5
5
|
let(:metadata_file) { 'spec/fixtures/files/metadata.xml' }
|
6
|
-
let(:subject) { OData4::Service.
|
6
|
+
let(:subject) { OData4::Service.new(service_url, name: 'ODataDemo', metadata_file: metadata_file) }
|
7
7
|
|
8
|
-
describe '.
|
9
|
-
it { expect(OData4::Service).to respond_to(:open) }
|
8
|
+
describe '.new' do
|
10
9
|
it 'adds itself to OData4::ServiceRegistry on creation' do
|
11
10
|
expect(OData4::ServiceRegistry['ODataDemo']).to be_nil
|
12
11
|
expect(OData4::ServiceRegistry[service_url]).to be_nil
|
13
12
|
|
14
|
-
service = OData4::Service.
|
13
|
+
service = OData4::Service.new(service_url, name: 'ODataDemo')
|
15
14
|
|
16
15
|
expect(OData4::ServiceRegistry['ODataDemo']).to eq(service)
|
17
16
|
expect(OData4::ServiceRegistry[service_url]).to eq(service)
|
18
17
|
end
|
18
|
+
|
19
19
|
it 'registers custom types on creation' do
|
20
|
-
service = OData4::Service.
|
20
|
+
service = OData4::Service.new(service_url, name: 'ODataDemo')
|
21
21
|
|
22
22
|
expect(OData4::PropertyRegistry['ODataDemo.Address']).to be_a(Class)
|
23
23
|
expect(OData4::PropertyRegistry['ODataDemo.ProductStatus']).to be_a(Class)
|
24
24
|
end
|
25
|
+
|
26
|
+
it 'allows connection to be set by passing it instead of service_url' do
|
27
|
+
connection = Faraday.new(service_url)
|
28
|
+
service = OData4::Service.new(connection)
|
29
|
+
expect(service.connection).to eq(connection)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'allows connection to be customized via options hash' do
|
33
|
+
service = OData4::Service.new(service_url, connection: {
|
34
|
+
headers: { 'X-Custom-Header' => 'foo' }
|
35
|
+
})
|
36
|
+
expect(service.connection.headers).to include('X-Custom-Header' => 'foo')
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'allows connection to be customized via block argument' do
|
40
|
+
service = OData4::Service.new(service_url) do |conn|
|
41
|
+
conn.headers['X-Custom-Header'] = 'foo'
|
42
|
+
conn.adapter Faraday.default_adapter
|
43
|
+
end
|
44
|
+
expect(service.connection.headers).to include('X-Custom-Header' => 'foo')
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'allows logger to be set via option' do
|
48
|
+
logger = Logger.new(STDERR).tap { |l| l.level = Logger::ERROR }
|
49
|
+
service = OData4::Service.new(service_url, logger: logger)
|
50
|
+
expect(service.logger).to eq(logger)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#connection' do
|
55
|
+
it 'returns the connection object used by the service' do
|
56
|
+
expect(subject.connection).to be_a(Faraday::Connection)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'uses the service URL as URL prefix' do
|
60
|
+
expect(subject.connection.url_prefix.to_s).to eq(subject.service_url)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#logger' do
|
65
|
+
let(:logger) { Logger.new(STDERR).tap { |l| l.level = Logger::ERROR } }
|
66
|
+
|
67
|
+
it 'returns the logger used by the service' do
|
68
|
+
expect(subject.logger).to be_a(Logger)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'returns the default logger if none was set' do
|
72
|
+
expect(subject.logger.level).to eq(Logger::WARN)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'uses Rails logger if available' do
|
76
|
+
stub_const 'Rails', Class.new { def self.logger; end }
|
77
|
+
allow(Rails).to receive(:logger).and_return(logger)
|
78
|
+
expect(subject.logger).to eq(logger)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'allows logger to be set via attribute writer' do
|
82
|
+
expect(subject.logger).not_to eq(logger)
|
83
|
+
subject.logger = logger
|
84
|
+
expect(subject.logger).to eq(logger)
|
85
|
+
end
|
25
86
|
end
|
26
87
|
|
27
88
|
describe '#service_url' do
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'Usage examples', vcr: { cassette_name: 'usage_example_specs' } do
|
4
4
|
let(:service_url) { 'http://services.odata.org/V4/OData/OData.svc' }
|
5
|
-
let(:service) { OData4::Service.
|
5
|
+
let(:service) { OData4::Service.new(service_url, name: 'ODataDemo') }
|
6
6
|
|
7
7
|
describe 'getting information' do
|
8
8
|
it 'returns the service URL' do
|
@@ -173,4 +173,16 @@ describe 'Usage examples', vcr: { cassette_name: 'usage_example_specs' } do
|
|
173
173
|
expect(product["Price"]).to eq(3.5)
|
174
174
|
end
|
175
175
|
end
|
176
|
+
|
177
|
+
describe 'headers and authorization' do
|
178
|
+
it 'using HTTP Basic auth' do
|
179
|
+
service.connection.basic_auth('username', 'password')
|
180
|
+
expect(service['Products'][2]).to be_a(OData4::Entity)
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'using token auth' do
|
184
|
+
service.connection.authorization(:Bearer, 'token')
|
185
|
+
expect(service['Products'][3]).to be_a(OData4::Entity)
|
186
|
+
end
|
187
|
+
end
|
176
188
|
end
|
data/spec/support/vcr.rb
CHANGED
@@ -2,7 +2,7 @@ require 'vcr'
|
|
2
2
|
|
3
3
|
VCR.configure do |c|
|
4
4
|
c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
|
5
|
-
c.hook_into :
|
5
|
+
c.hook_into :faraday
|
6
6
|
c.default_cassette_options = { record: :new_episodes }
|
7
7
|
c.debug_logger = File.open(ENV['VCR_LOG'], 'w') if ENV['VCR_LOG']
|
8
8
|
c.configure_rspec_metadata!
|
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.
|
4
|
+
version: 0.9.0
|
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-
|
12
|
+
date: 2018-05-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -152,19 +152,19 @@ dependencies:
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '1.8'
|
154
154
|
- !ruby/object:Gem::Dependency
|
155
|
-
name:
|
155
|
+
name: faraday
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
158
|
- - "~>"
|
159
159
|
- !ruby/object:Gem::Version
|
160
|
-
version: '
|
160
|
+
version: '0.15'
|
161
161
|
type: :runtime
|
162
162
|
prerelease: false
|
163
163
|
version_requirements: !ruby/object:Gem::Requirement
|
164
164
|
requirements:
|
165
165
|
- - "~>"
|
166
166
|
- !ruby/object:Gem::Version
|
167
|
-
version: '
|
167
|
+
version: '0.15'
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: andand
|
170
170
|
requirement: !ruby/object:Gem::Requirement
|