odata4 0.8.2 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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