frodata 0.9.1 → 0.9.2b

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: 95944116dffa1ce9127d4836d239f21e1344952a
4
- data.tar.gz: 9078d6e3859ff61e1c7300806a9603c23783be33
3
+ metadata.gz: 3dedcb00937ab1990ed95efd42b3e8642cf5455b
4
+ data.tar.gz: 9bb87a5f001789cf7faab8601890b46a61af8145
5
5
  SHA512:
6
- metadata.gz: 7969fbe5c4b221bbb47cd270f9247754d286dd55c13cba397e80c6c4149674e2e2086dede8699f6ad1775d230d030c268ffa0ce684966c9755c2cdedbf28f303
7
- data.tar.gz: cbdc81d7bb914049756edb595e8dc306a3e0551cd945bef1bffcd7f7bbfcff23c3952ae4c96034949b480c0e51bf9527f0d79baa866cc071571e4fdf9da0a081
6
+ metadata.gz: ef9e60b6641d846ce4fff2eb0a8f942ed059034f963c78517a6d506aad2116f50bbd7567a0dd4f8e35c2cc87c189399686870fc1a76d386f2697f46947fbb98b
7
+ data.tar.gz: d013d2fff11d0134354583fe232cbc10c3bff5b3fe885b25951e48ee1f1415157ad475c6879f122ddd2a5d4b3452615e3334ce982b6c3f5a23eb7cf70fd50379
data/.gitlab-ci.yml ADDED
@@ -0,0 +1,9 @@
1
+ rspec:
2
+ image: ruby:2.2
3
+ script:
4
+ - bundle install --path /cache --jobs $(nproc)
5
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
6
+ - chmod +x ./cc-test-reporter
7
+ - ./cc-test-reporter before-build
8
+ - bundle exec rspec
9
+ - ./cc-test-reporter after-build --exit-code $?
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.9.2b
4
+
5
+ * Fix broken stack traces in response errors
6
+ * Ensure that `Service#service_url` always returns a string
7
+
8
+ ## 0.9.2
9
+
10
+ * Ignore connection options when connection object is passed in
11
+ * Don't send `Accept` header unless explicitly configured
12
+ * Use middleware for request/response logging
13
+ * Specifying an adapter is no longer necessary when passing a block to the constructor
14
+
3
15
  ## 0.9.1
4
16
 
5
17
  * [New] Raising specific error classes instead of `RuntimeError` when request fails
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # FrOData
1
+ # FrOData - Free OData V4.0 library for Ruby
2
2
 
3
3
  The FrOData gem provides a simple wrapper around the OData Version 4.0 API protocol.
4
4
  It has the ability to automatically inspect compliant APIs and expose the relevant Ruby objects dynamically.
@@ -8,12 +8,11 @@ It also provides a set of code generation tools for quickly bootstrapping more c
8
8
 
9
9
  If you need a gem to integration with OData Version 3, you can use James Thompson's [original OData gem][ruby-odata], upon which this gem is based.
10
10
 
11
+ [![Gem Version](https://badge.fury.io/rb/frodata.svg)](https://badge.fury.io/rb/frodata)
11
12
  [![Build Status](https://app.codeship.com/projects/da1eb540-ce3f-0135-2ddc-161d5c3cc5fd/status?branch=master)](https://app.codeship.com/projects/262148)
12
- [![Maintainability](https://api.codeclimate.com/v1/badges/f151944dc05b2c7268e5/maintainability)](https://codeclimate.com/github/wrstudios/frodata/maintainability)
13
- [![Test Coverage](https://api.codeclimate.com/v1/badges/f151944dc05b2c7268e5/test_coverage)](https://codeclimate.com/github/wrstudios/frodata/test_coverage)
14
- [![Dependency Status](https://gemnasium.com/badges/github.com/wrstudios/frodata.svg)](https://gemnasium.com/github.com/wrstudios/frodata)
13
+ [![Maintainability](https://api.codeclimate.com/v1/badges/2425311d859408ef8798/maintainability)](https://codeclimate.com/github/wrstudios/frodata/maintainability)
14
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/2425311d859408ef8798/test_coverage)](https://codeclimate.com/github/wrstudios/frodata/test_coverage)
15
15
  [![Documentation](http://inch-ci.org/github/wrstudios/frodata.png?branch=master)](http://www.rubydoc.info/github/wrstudios/frodata/master)
16
- [![Gem Version](https://badge.fury.io/rb/frodata.svg)](https://badge.fury.io/rb/frodata)
17
16
 
18
17
  ## Installation
19
18
 
@@ -106,7 +105,7 @@ This allows you to e.g. set custom headers (such as `Authorization`) that may be
106
105
 
107
106
  ##### Using Authentication Helpers
108
107
 
109
- You may also set up authorization by directly accessing the underlying `Faraday::Connection` object (as explained in [Advanced Customization](#advanced-connection-customization) below).
108
+ You may also set up authorization by directly accessing the underlying `Faraday::Connection` object `yield`ed to the constructor (as explained in [Advanced Customization](#advanced-connection-customization) below).
110
109
  This allows you to make use of Faraday's [authentication helpers][faraday-auth], such as `basic_auth` or `token_auth`.
111
110
 
112
111
  For instance, if your service requires HTTP basic authentication:
@@ -114,12 +113,11 @@ For instance, if your service requires HTTP basic authentication:
114
113
  ```ruby
115
114
  service = FrOData::Service.new('http://services.odata.org/V4/OData/OData.svc', {
116
115
  name: 'ODataDemo'
117
- })
118
- service.connection.basic_auth('username', 'password')
116
+ }) do |conn|
117
+ conn.basic_auth('username', 'password')
118
+ end
119
119
  ```
120
120
 
121
- You may also use these helpers when passing a block to the constructor (see second example [below](#passing-a-block-to-the-constructor)).
122
-
123
121
  [http-auth]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
124
122
  [faraday]: https://github.com/lostisland/faraday
125
123
  [faraday-auth]: https://github.com/lostisland/faraday#authentication
@@ -144,6 +142,8 @@ In this case, you'll be setting the service URL on the connection object, as sho
144
142
  service = FrOData::Service.new(conn, name: 'ODataDemo')
145
143
  ```
146
144
 
145
+ **NOTE**: if you use this method, any options set via the `:connection` options key will be ignored.
146
+
147
147
  ##### Passing a block to the constructor
148
148
 
149
149
  Alternatively, the connection object is also `yield`ed by the constructor, so you may customize it by passing a block argument.
@@ -157,21 +157,6 @@ For instance, if you wanted to use [Typhoeus][typhoeus] as your HTTP library:
157
157
  end
158
158
  ```
159
159
 
160
- **IMPORTANT**
161
-
162
- Please be aware that if you use this method to customize the connection, you must ALWAYS specify an adapter:
163
-
164
- ```ruby
165
- service = FrOData::Service.new('http://services.odata.org/V4/OData/OData.svc', {
166
- name: 'ODataDemo'
167
- }) do |conn|
168
- conn.basic_auth('username', 'password')
169
- conn.adapter Faraday.default_adapter
170
- end
171
- ```
172
-
173
- Otherwise, your requests WILL fail!
174
-
175
160
  [typhoeus]: https://github.com/typhoeus/typhoeus
176
161
 
177
162
  ### Exploring a Service
@@ -395,14 +380,6 @@ You should refer to the published RubyDocs for full details on the various capab
395
380
  * [FrOData::Query](http://rubydoc.info/github/wrstudios/frodata/master/FrOData/Query)
396
381
  * [FrOData::Query::Criteria](http://rubydoc.info/github/wrstudios/frodata/master/FrOData/Query/Criteria)
397
382
 
398
- ## To Do
399
-
400
- [x] ~Lenient property validation~
401
- [ ] Write support (create/update/delete)
402
- [ ] Support for invoking [Operations][odata-ops] (Functions/Actions)
403
- [ ] [Property facets][odata-facets]
404
- [ ] Annotations
405
-
406
383
  [odata-facets]: http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part3-csdl/odata-v4.0-errata03-os-part3-csdl-complete.html#_Toc453752528
407
384
  [odata-ops]: http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part1-protocol/odata-v4.0-errata03-os-part1-protocol-complete.html#_Toc453752307
408
385
 
@@ -8,6 +8,7 @@ module FrOData
8
8
  attr_reader :response
9
9
 
10
10
  def initialize(response, message = nil)
11
+ super(message)
11
12
  @message = message
12
13
  @response = response
13
14
  end
@@ -31,14 +31,14 @@ module FrOData
31
31
  # @param options [Hash] options to pass to the service
32
32
  # @return [FrOData::Service] an instance of the service
33
33
  def initialize(service_url, options = {}, &block)
34
+ @options = default_options.merge(options)
34
35
  if service_url.is_a? Faraday::Connection
35
36
  @connection = service_url
36
- @service_url = connection.url_prefix
37
+ @service_url = connection.url_prefix.to_s
37
38
  else
38
39
  @service_url = service_url
39
- @connection = Faraday.new(service_url, options[:connection], &block)
40
+ @connection = default_connection(&block)
40
41
  end
41
- @options = default_options.merge(options)
42
42
  FrOData::ServiceRegistry.add(self)
43
43
  register_custom_types
44
44
  end
@@ -151,6 +151,7 @@ module FrOData
151
151
  # @param options [Hash] additional request options
152
152
  # @return [FrOData::Service::Response]
153
153
  def execute(url_chunk, options = {})
154
+ options = (@options[:request] || {}).merge(options)
154
155
  Request.new(self, url_chunk, options).execute
155
156
  end
156
157
 
@@ -225,6 +226,15 @@ module FrOData
225
226
  end
226
227
  end
227
228
 
229
+ def default_connection(&block)
230
+ Faraday.new(service_url, options[:connection]) do |conn|
231
+ conn.request :url_encoded
232
+ conn.response :logger, logger
233
+ yield conn if block_given?
234
+ conn.adapter Faraday.default_adapter unless conn.builder.send(:adapter_set?)
235
+ end
236
+ end
237
+
228
238
  def read_metadata
229
239
  # From file, good for debugging
230
240
  if options[:metadata_file]
@@ -44,12 +44,9 @@ module FrOData
44
44
 
45
45
  # Execute the request
46
46
  #
47
- # @param additional_options [Hash] Request options to pass to Faraday
47
+ # @param request_options [Hash] Request options to pass to Faraday
48
48
  # @return [FrOData::Service::Response]
49
- def execute(additional_options = {})
50
- request_options = service.options[:request].merge(additional_options)
51
-
52
- logger.info "Requesting #{method.to_s.upcase} #{url}..."
49
+ def execute(request_options = {})
53
50
  Response.new(service, query) do
54
51
  connection.run_request(method, url_chunk, nil, headers) do |conn|
55
52
  conn.options.merge! request_options
@@ -61,14 +58,8 @@ module FrOData
61
58
 
62
59
  attr_reader :url_chunk
63
60
 
64
- def connection
65
- service.connection
66
- end
67
-
68
61
  def default_headers
69
62
  {
70
- 'Accept' => content_type,
71
- 'Content-Type' => content_type,
72
63
  'OData-Version' => '4.0'
73
64
  }
74
65
  end
@@ -77,6 +68,10 @@ module FrOData
77
68
  default_headers.merge(@options[:headers] || {})
78
69
  end
79
70
 
71
+ def connection
72
+ service.connection
73
+ end
74
+
80
75
  def logger
81
76
  service.logger
82
77
  end
@@ -96,7 +96,7 @@ module FrOData
96
96
  # @return [self]
97
97
  def validate_response!
98
98
  if error = FrOData::Errors::ERROR_MAP[status]
99
- raise error, response, error_message
99
+ raise error.new(response, error_message)
100
100
  end
101
101
  end
102
102
 
@@ -104,11 +104,6 @@ module FrOData
104
104
 
105
105
  def execute(&block)
106
106
  @response = block.call
107
- logger.debug <<-EOS
108
- [FrOData: #{service.name}] Received response:
109
- Headers: #{response.headers}
110
- Body: #{response.body}
111
- EOS
112
107
  check_content_type
113
108
  validate_response!
114
109
  rescue Faraday::TimeoutError
@@ -1,3 +1,3 @@
1
1
  module FrOData
2
- VERSION = '0.9.1'
2
+ VERSION = '0.9.2b'
3
3
  end
@@ -27,6 +27,7 @@ describe FrOData::Service, vcr: {cassette_name: 'service_specs'} do
27
27
  connection = Faraday.new(service_url)
28
28
  service = FrOData::Service.new(connection)
29
29
  expect(service.connection).to eq(connection)
30
+ expect(service.service_url).to eq(service_url)
30
31
  end
31
32
 
32
33
  it 'allows connection to be customized via options hash' do
@@ -36,10 +37,19 @@ describe FrOData::Service, vcr: {cassette_name: 'service_specs'} do
36
37
  expect(service.connection.headers).to include('X-Custom-Header' => 'foo')
37
38
  end
38
39
 
40
+ it 'ignores connection options when connetion is passed in' do
41
+ connection = Faraday.new(service_url, {
42
+ headers: { 'X-Custom-Header' => 'foo' }
43
+ })
44
+ service = FrOData::Service.new(connection, connection: {
45
+ headers: { 'X-Custom-Header' => 'bar' }
46
+ })
47
+ expect(service.connection.headers).to include('X-Custom-Header' => 'foo')
48
+ end
49
+
39
50
  it 'allows connection to be customized via block argument' do
40
51
  service = FrOData::Service.new(service_url) do |conn|
41
52
  conn.headers['X-Custom-Header'] = 'foo'
42
- conn.adapter Faraday.default_adapter
43
53
  end
44
54
  expect(service.connection.headers).to include('X-Custom-Header' => 'foo')
45
55
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: frodata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2b
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-05-16 00:00:00.000000000 Z
12
+ date: 2018-05-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -189,6 +189,7 @@ extra_rdoc_files: []
189
189
  files:
190
190
  - ".autotest"
191
191
  - ".gitignore"
192
+ - ".gitlab-ci.yml"
192
193
  - ".rspec"
193
194
  - ".ruby-gemset"
194
195
  - ".ruby-version"
@@ -328,9 +329,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
328
329
  version: '0'
329
330
  required_rubygems_version: !ruby/object:Gem::Requirement
330
331
  requirements:
331
- - - ">="
332
+ - - ">"
332
333
  - !ruby/object:Gem::Version
333
- version: '0'
334
+ version: 1.3.1
334
335
  requirements: []
335
336
  rubyforge_project:
336
337
  rubygems_version: 2.6.14