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.
@@ -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.open('http://services.odata.org/V4/OData/OData.svc', metadata_file: metadata_file)
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.open('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
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) }
@@ -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.open('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
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.open('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
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.open('http://services.odata.org/V4/OData/OData.svc', metadata_file: metadata_file)
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') }
@@ -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.open('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
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.open('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo')
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.open('http://services.odata.org/V4/OData/OData.svc', name: 'ODataDemo', metadata_file: metadata_file)
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' }
@@ -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.open('http://services.odata.org/V4/OData/OData.svc', metadata_file: metadata_file)
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.open(service_url, name: 'ODataDemo', metadata_file: metadata_file) }
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, response, entity_set.query) }
25
- let(:service) { OData4::Service.open(service_url, name: 'ODataDemo', metadata_file: metadata_file) }
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
- code: response_status,
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.open('http://services.odata.org/V4/OData/OData.svc', name: 'demoService') }
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(:[]) }
@@ -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.open(service_url, name: 'ODataDemo', metadata_file: metadata_file) }
6
+ let(:subject) { OData4::Service.new(service_url, name: 'ODataDemo', metadata_file: metadata_file) }
7
7
 
8
- describe '.open' do
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.open(service_url, name: 'ODataDemo')
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.open(service_url, name: 'ODataDemo')
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.open(service_url, name: 'ODataDemo') }
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 :typhoeus
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.8.2
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-04-26 00:00:00.000000000 Z
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: typhoeus
155
+ name: faraday
156
156
  requirement: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - "~>"
159
159
  - !ruby/object:Gem::Version
160
- version: '1.3'
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: '1.3'
167
+ version: '0.15'
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: andand
170
170
  requirement: !ruby/object:Gem::Requirement