braque 0.1.3 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7877495074bf14604179991d76599e5bfc508716
4
- data.tar.gz: c08da9d09ed4e53b9179b5c3188073dd025e2b95
3
+ metadata.gz: 3e8bbfc9dc19e8eb3f4130366f9aa757bbb122ae
4
+ data.tar.gz: e574170f094b58b9f624a04461986978cd35de83
5
5
  SHA512:
6
- metadata.gz: f9df5a71dc0428f62e763b14dd3b68e5c363ef7a1d6118b407878cd6e0627ef54dfc1c13d54544e81fc73c93ec6d3e5c027bd986ee738f18d74644c29d4ac45a
7
- data.tar.gz: 02fcb2222b97b54c8216b5024f12b8fb57f55e9ec4901fd2d7e81dd2b82c1451065fb62e340318aae7546299d9b2434636e3379e9fb8c2146a6bc746f51cf1cd
6
+ metadata.gz: 8900c7e630a9e9a68c0ed67141895543205949bae1dde1192c543821b8394c75bf9922298449886120ae558f25c0a58243040fd372ccd859770e8ebf54bd94b2
7
+ data.tar.gz: 6ea404e052ea8412412635cc5d1abba74ae5a270ca29d0e8ab621d3a342f18d91db2e46a7e99bba928fe7780889e665e675dbce6bf51c571af99a7eb9e73ad6e
@@ -19,11 +19,11 @@ module Braque
19
19
  collection_hash[:total_pages] = 1
20
20
  collection_hash[:current_page] = 1
21
21
  collection_hash[:_links] = {}
22
- collection_hash[:_links][:self] = { href: "#{hyperclient_model_collection.first.class.api_root}/#{hyperclient_model_collection.first.class.collection_method_name}" }
23
- collection_hash[:_links][:next] = { href: "#{hyperclient_model_collection.first.class.api_root}/#{hyperclient_model_collection.first.class.collection_method_name}" }
24
- collection_hash[:_links][:prev] = { href: "#{hyperclient_model_collection.first.class.api_root}/#{hyperclient_model_collection.first.class.collection_method_name}" }
22
+ collection_hash[:_links][:self] = { href: "#{hyperclient_model.class.api_root}/#{hyperclient_model.class.collection_method_name}" }
23
+ collection_hash[:_links][:next] = { href: "#{hyperclient_model.class.api_root}/#{hyperclient_model.class.collection_method_name}" }
24
+ collection_hash[:_links][:prev] = { href: "#{hyperclient_model.class.api_root}/#{hyperclient_model.class.collection_method_name}" }
25
25
  collection_hash[:_embedded] = {}
26
- collection_hash[:_embedded][hyperclient_model_collection.first.class.collection_method_name] = embedded_elements_for_collection(hyperclient_model_collection, options)
26
+ collection_hash[:_embedded][hyperclient_model.class.collection_method_name] = embedded_elements_for_collection(hyperclient_model_collection, options)
27
27
  JSON.parse collection_hash.to_json
28
28
  end
29
29
 
data/lib/braque/model.rb CHANGED
@@ -6,6 +6,7 @@ module Braque
6
6
  included do
7
7
  class_attribute :api_root
8
8
  class_attribute :api_token
9
+ class_attribute :accept_header
9
10
 
10
11
  # NOTE: This assumes that the related API uses an ID attribute to
11
12
  # define the resource. Rails will use this field to construct
@@ -15,7 +16,7 @@ module Braque
15
16
  # in client apps if some other scheme is more advisable.
16
17
  #
17
18
  def to_param
18
- "#{id}"
19
+ id.to_s
19
20
  end
20
21
 
21
22
  # NOTE: This assumes that the related API uses an ID field exclusively
@@ -35,7 +36,7 @@ module Braque
35
36
  end
36
37
 
37
38
  def destroy
38
- response = self.class.client.method(self.class.instance_method_name).call(resource_find_options)._delete
39
+ self.class.client.method(self.class.instance_method_name).call(resource_find_options)._delete
39
40
  end
40
41
 
41
42
  class_eval <<-WRITER
@@ -86,7 +87,8 @@ module Braque
86
87
 
87
88
  def client
88
89
  Hyperclient.new(api_root) do |client|
89
- client.headers['Http-Authorization'] = api_token
90
+ client.headers['Http-Authorization'] = api_token if api_token
91
+ client.headers['Accept'] = accept_header if accept_header
90
92
  end
91
93
  end
92
94
  end
@@ -1,3 +1,3 @@
1
1
  module Braque
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Hyperclient header configuration' do
4
+ let(:root_request) { WebMock.stub_request(:get, 'http://localhost:9292/') }
5
+
6
+ before do
7
+ root_request
8
+ end
9
+
10
+ context 'with a Braque::Model class that defines an api token' do
11
+ class Mantle
12
+ include ::Braque::Model
13
+ self.api_root = 'http://localhost:9292'
14
+ self.api_token = 'replace-me'
15
+ end
16
+
17
+ it 'passes api_token via Http-Authorization headers with requests' do
18
+ Mantle.client._get
19
+ expect(
20
+ root_request
21
+ .with(headers: { 'Http-Authorization' => Mantle.api_token })
22
+ ).to have_been_requested
23
+ end
24
+
25
+ it 'passes default Hyperclient Accept headers with requests' do
26
+ Mantle.client._get
27
+ expect(
28
+ root_request
29
+ .with(headers: { 'Accept' => 'application/hal+json,application/json' })
30
+ ).to have_been_requested
31
+ end
32
+ end
33
+
34
+ context 'with a Braque::Model class that defines an accept_header' do
35
+ class Subduction
36
+ include ::Braque::Model
37
+ self.api_root = 'http://localhost:9292'
38
+ self.accept_header = 'application/vnd.earth-v1+json'
39
+ end
40
+
41
+ it 'includes class defined accept_header with request headers' do
42
+ Subduction.client._get
43
+ expect(
44
+ root_request
45
+ .with(headers: { 'Accept' => 'application/vnd.earth-v1+json' })
46
+ ).to have_been_requested
47
+ end
48
+ end
49
+ end
@@ -1,7 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- require 'spec_helper'
4
-
5
3
  RSpec.describe Braque::Collection do
6
4
  before(:all) do
7
5
  class BraqueClass
@@ -58,9 +56,9 @@ RSpec.describe Braque::Collection do
58
56
  expect(@linked_array.first.id).to eq 1
59
57
  expect(@linked_array.first.title).to eq @array.first[:title]
60
58
  expect(@linked_array.first.class.name).to eq 'BraqueClass'
61
- expect(@linked_array[1].id).to eq 2
62
- expect(@linked_array[1].title).to eq @array[1][:title]
63
- expect(@linked_array[1].class.name).to eq 'BraqueClass'
59
+ expect(@linked_array.last.id).to eq 2
60
+ expect(@linked_array.last.title).to eq @array[1][:title]
61
+ expect(@linked_array.last.class.name).to eq 'BraqueClass'
64
62
  end
65
63
 
66
64
  it 'responds to previous_link with the correct value' do
@@ -6,6 +6,7 @@ RSpec.describe Braque::Model, type: :model do
6
6
  include ::Braque::Model
7
7
  self.api_root = 'http://localhost:9292'
8
8
  self.api_token = 'replace-me'
9
+ self.accept_header = 'application/vnd.el-nino-v1+json'
9
10
  attribute :id
10
11
  attribute :title
11
12
  attribute :token
@@ -20,12 +21,14 @@ RSpec.describe Braque::Model, type: :model do
20
21
  let(:root_request) do
21
22
  WebMock.stub_request(:get, "#{Breeze.api_root}/")
22
23
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
24
+ .with(headers: { 'Accept' => Breeze.accept_header })
23
25
  .to_return(status: 200, body: root_response)
24
26
  end
25
27
 
26
28
  let(:root_request_with_token_resource_path) do
27
29
  WebMock.stub_request(:get, "#{Breeze.api_root}/")
28
30
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
31
+ .with(headers: { 'Accept' => Breeze.accept_header })
29
32
  .to_return(status: 200, body: root_response_with_token_resource_path)
30
33
  end
31
34
 
@@ -48,6 +51,7 @@ RSpec.describe Braque::Model, type: :model do
48
51
  root_request
49
52
  @collection_request = WebMock.stub_request(:get, "#{Breeze.api_root}/breezes")
50
53
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
54
+ .with(headers: { 'Accept' => Breeze.accept_header })
51
55
  .to_return(status: 200, body: collection_response)
52
56
  @breezes = Breeze.list
53
57
  end
@@ -58,16 +62,18 @@ RSpec.describe Braque::Model, type: :model do
58
62
  expect(@collection_request).to have_been_requested
59
63
  end
60
64
  it 'returns an array of items' do
61
- expect(@breezes.count).to be 1
65
+ expect(@breezes.count).to be 2
62
66
  expect(@breezes.first).to be_a_kind_of Breeze
67
+ expect(@breezes).to be_a_kind_of Array
63
68
  end
64
69
  it 'returns items with the correct class' do
65
70
  expect(@breezes.first).to be_a_kind_of Breeze
66
71
  end
67
72
  it 'returns an array of items with the correct attributes' do
68
- breeze = @breezes.first
69
- expect(breeze.id).to eq collection_response['_embedded']['breezes'].first['id']
70
- expect(breeze.title).to eq collection_response['_embedded']['breezes'].first['title']
73
+ @breezes.each_with_index do |breeze, index|
74
+ expect(breeze.id).to eq collection_response['_embedded']['breezes'][index]['id']
75
+ expect(breeze.title).to eq collection_response['_embedded']['breezes'][index]['title']
76
+ end
71
77
  end
72
78
  end
73
79
  context 'with an errored response' do
@@ -75,6 +81,7 @@ RSpec.describe Braque::Model, type: :model do
75
81
  root_request
76
82
  @collection_request = WebMock.stub_request(:get, "#{Breeze.api_root}/breezes")
77
83
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
84
+ .with(headers: { 'Accept' => Breeze.accept_header })
78
85
  .to_return(status: 500)
79
86
  end
80
87
  it 'returns a Faraday::ClientError error' do
@@ -90,6 +97,7 @@ RSpec.describe Braque::Model, type: :model do
90
97
  root_request
91
98
  @collection_request = WebMock.stub_request(:get, "#{Breeze.api_root}/breezes")
92
99
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
100
+ .with(headers: { 'Accept' => Breeze.accept_header })
93
101
  .with(query: 'ids%5B0%5D=1&ids%5B1%5D=2')
94
102
  .to_return(status: 200, body: collection_response)
95
103
  @breezes = Breeze.list('ids[]' => [1, 2])
@@ -106,6 +114,7 @@ RSpec.describe Braque::Model, type: :model do
106
114
  root_request
107
115
  @resource_request = WebMock.stub_request(:get, "#{Breeze.api_root}/breezes/1")
108
116
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
117
+ .with(headers: { 'Accept' => Breeze.accept_header })
109
118
  .to_return(status: 200, body: resource_response)
110
119
  @breeze = Breeze.find(id: 1)
111
120
  end
@@ -128,6 +137,7 @@ RSpec.describe Braque::Model, type: :model do
128
137
  root_request
129
138
  @resource_request = WebMock.stub_request(:get, "#{Breeze.api_root}/breezes/1")
130
139
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
140
+ .with(headers: { 'Accept' => Breeze.accept_header })
131
141
  .to_return(status: 500)
132
142
  end
133
143
  it 'returns a Faraday::ClientError error' do
@@ -149,6 +159,7 @@ RSpec.describe Braque::Model, type: :model do
149
159
  root_request_with_token_resource_path
150
160
  @resource_request = WebMock.stub_request(:get, "#{Breeze.api_root}/breezes/1?token=123")
151
161
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
162
+ .with(headers: { 'Accept' => Breeze.accept_header })
152
163
  .to_return(status: 200, body: resource_response)
153
164
  @breeze = Breeze.find(id: 1, token: 123)
154
165
  end
@@ -175,6 +186,7 @@ RSpec.describe Braque::Model, type: :model do
175
186
  root_request
176
187
  @create_request = WebMock.stub_request(:post, "#{Breeze.api_root}/breezes")
177
188
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
189
+ .with(headers: { 'Accept' => Breeze.accept_header })
178
190
  .to_return(status: 201, body: resource_response)
179
191
  @params = { title: 'What a nice breeze.' }
180
192
  @breeze = Breeze.create(@params)
@@ -199,6 +211,7 @@ RSpec.describe Braque::Model, type: :model do
199
211
  root_request
200
212
  @create_request = WebMock.stub_request(:post, "#{Breeze.api_root}/breezes")
201
213
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
214
+ .with(headers: { 'Accept' => Breeze.accept_header })
202
215
  .to_return(status: 500)
203
216
  end
204
217
  it 'returns a Faraday::ClientError error' do
@@ -221,6 +234,7 @@ RSpec.describe Braque::Model, type: :model do
221
234
  root_request
222
235
  @save_request = WebMock.stub_request(:patch, "#{Breeze.api_root}/breezes/1")
223
236
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
237
+ .with(headers: { 'Accept' => Breeze.accept_header })
224
238
  .to_return(status: 200, body: resource_response)
225
239
  @params = { title: 'What a nice breeze.' }
226
240
  @breeze = Breeze.new(id: 1).save(@params)
@@ -245,6 +259,7 @@ RSpec.describe Braque::Model, type: :model do
245
259
  root_request
246
260
  @save_request = WebMock.stub_request(:patch, "#{Breeze.api_root}/breezes/1")
247
261
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
262
+ .with(headers: { 'Accept' => Breeze.accept_header })
248
263
  .to_return(status: 500)
249
264
  end
250
265
  it 'returns a Faraday::ClientError error' do
@@ -267,6 +282,7 @@ RSpec.describe Braque::Model, type: :model do
267
282
  root_request_with_token_resource_path
268
283
  @save_request = WebMock.stub_request(:patch, "#{Breeze.api_root}/breezes/1?token=123")
269
284
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
285
+ .with(headers: { 'Accept' => Breeze.accept_header })
270
286
  .to_return(status: 200, body: resource_response)
271
287
  @params = { title: 'What a nice breeze.' }
272
288
  @breeze = Breeze.new(id: 1, token: 123).save(@params)
@@ -297,6 +313,7 @@ RSpec.describe Braque::Model, type: :model do
297
313
  root_request
298
314
  @destroy_request = WebMock.stub_request(:delete, "#{Breeze.api_root}/breezes/1")
299
315
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
316
+ .with(headers: { 'Accept' => Breeze.accept_header })
300
317
  .to_return(status: 200)
301
318
  @breeze = Breeze.new(id: 1).destroy
302
319
  end
@@ -313,6 +330,7 @@ RSpec.describe Braque::Model, type: :model do
313
330
  root_request
314
331
  @destroy_request = WebMock.stub_request(:delete, "#{Breeze.api_root}/breezes/1")
315
332
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
333
+ .with(headers: { 'Accept' => Breeze.accept_header })
316
334
  .to_return(status: 500)
317
335
  end
318
336
  it 'returns a Faraday::ClientError error' do
@@ -335,6 +353,7 @@ RSpec.describe Braque::Model, type: :model do
335
353
  root_request_with_token_resource_path
336
354
  @destroy_request = WebMock.stub_request(:delete, "#{Breeze.api_root}/breezes/1?token=123")
337
355
  .with(headers: { 'Http-Authorization' => Breeze.api_token })
356
+ .with(headers: { 'Accept' => Breeze.accept_header })
338
357
  .to_return(status: 200)
339
358
  @breeze = Breeze.new(id: 1, token: 123).destroy
340
359
  end
@@ -10,9 +10,19 @@
10
10
  "_embedded":{
11
11
  "breezes":[
12
12
  {
13
- "id":1,
13
+ "id":0,
14
14
  "token":123,
15
15
  "title":"Southerly Breeze",
16
+ "_links":{
17
+ "self":{
18
+ "href":"http://localhost:9292/breezes/0"
19
+ }
20
+ }
21
+ },
22
+ {
23
+ "id":1,
24
+ "token":234,
25
+ "title":"Westerly Breeze",
16
26
  "_links":{
17
27
  "self":{
18
28
  "href":"http://localhost:9292/breezes/1"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: braque
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dylan Fareed
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-17 00:00:00.000000000 Z
11
+ date: 2015-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hyperclient
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: active_attr
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.5
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.8.5
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -68,6 +68,7 @@ files:
68
68
  - lib/braque/helpers/hypermedia_responses_helper.rb
69
69
  - lib/braque/model.rb
70
70
  - lib/braque/version.rb
71
+ - spec/braque/client_headers_spec.rb
71
72
  - spec/braque/collection_spec.rb
72
73
  - spec/braque/helpers/hypermedia_responses_helper_spec.rb
73
74
  - spec/braque/model_spec.rb
@@ -98,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
99
  version: '0'
99
100
  requirements: []
100
101
  rubyforge_project:
101
- rubygems_version: 2.2.2
102
+ rubygems_version: 2.4.8
102
103
  signing_key:
103
104
  specification_version: 4
104
105
  summary: Braque provides a simple interface for interacting with Hypermedia API services