flexirest 1.8.7 → 1.8.8

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
  SHA256:
3
- metadata.gz: 6fa38d8d7f9ee0f19744e46cfa7a3d0b22eb9d149dce1f5b025beb0f1bbbc6f1
4
- data.tar.gz: b2ae4157a3f0fdb754d0a5e1599051be5658a6b342fd9b3d588b4d79b7ed312a
3
+ metadata.gz: 034246a4c82d512ced039ae0265091d40688183c762e1094c12f0dca31439a55
4
+ data.tar.gz: 65545b4903a74eae1140866589f97be1bf664b2df052bc515a243e29844ab543
5
5
  SHA512:
6
- metadata.gz: 2ada072dd254ce8818178de8dab0f72a676e47c0c39e3bc2419b33c3c81ba64e2e9a428bedc42ddcd95d785a2ae3fcafdcecd52fe4f6935e4dd6e0fdc31d7c83
7
- data.tar.gz: eb67f39a6697f1e0e48ae8a11037c275f631334d59df36b243e2d5ae2a20e798c8fd614d4a1bb69a561f84db2452af2b6bae417df903b0c0a99b264d9a0555df
6
+ metadata.gz: fa7bd3620f69ec7ba0ba6493d86bae8aef4c889e5f3ed536d2bd801c6b62a8f9248bd80338901eff4b0435a2aa26589672ea03ddd6e81a4c1bc99cb66387651b
7
+ data.tar.gz: e73ba209c5dd7e98a370e8ac2fab285f98cb948b81f56a3cc23f63ad9f3035ba385de0292546943f1ca63d8eca30e9f0795f1ee3f60268b1b8a9bfe2c0a69deb
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ spec/reports
14
14
  test/tmp
15
15
  test/version_tmp
16
16
  tmp
17
+ .idea/
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.8.8
4
+
5
+ Fix:
6
+
7
+ - Use custom type and name for JSON-API fields (thanks to François Ferrandis for the PR).
8
+ - Fix Faraday error classes to match current ones in Faraday (thanks to François Ferrandis for the PR).
9
+
3
10
  ## 1.8.7
4
11
 
5
12
  Fix:
@@ -24,7 +24,7 @@ module Flexirest
24
24
 
25
25
  def make_safe_request(path, &block)
26
26
  block.call
27
- rescue Faraday::Error::TimeoutError
27
+ rescue Faraday::TimeoutError
28
28
  raise Flexirest::TimeoutException.new("Timed out getting #{full_url(path)}")
29
29
  rescue Faraday::ConnectionFailed => e1
30
30
  if e1.respond_to?(:cause) && e1.cause.is_a?(Net::OpenTimeout)
@@ -292,12 +292,14 @@ module Flexirest
292
292
 
293
293
  # Retrieve the linked resource id and its pluralized type name
294
294
  rel_id = relationships[name]['data']['id']
295
- plural_name = name.pluralize
295
+
296
+ type_name = relationships[name]['data']['type']
297
+ plural_type_name = type_name.pluralize
296
298
 
297
299
  # Traverse through the included object, and find the included
298
300
  # linked resource, based on the given id and pluralized type name
299
301
  linked_resource = included.select do |i|
300
- i['id'] == rel_id && i['type'] == plural_name
302
+ i['id'] == rel_id && i['type'] == plural_type_name
301
303
  end
302
304
 
303
305
  return linked_resource, rel_id, true
@@ -313,12 +315,15 @@ module Flexirest
313
315
 
314
316
  # Retrieve the linked resources ids
315
317
  rel_ids = relationships[name]['data'].map { |r| r['id'] }
316
- plural_name = name.pluralize
318
+
319
+ # Index the linked resources' id and types that we need to
320
+ # retrieve from the included resources
321
+ relations_to_include = relationships[name]['data'].map { |r| [r['id'], r['type']] }.to_set
317
322
 
318
323
  # Traverse through the included object, and find the included
319
324
  # linked resources, based on the given ids and type name
320
325
  linked_resources = included.select do |i|
321
- rel_ids.include?(i['id']) && i['type'] == plural_name
326
+ relations_to_include.include?([i['id'], i['type']])
322
327
  end
323
328
 
324
329
  return linked_resources, rel_ids, true
@@ -1,3 +1,3 @@
1
1
  module Flexirest
2
- VERSION = "1.8.7"
2
+ VERSION = "1.8.8"
3
3
  end
@@ -186,7 +186,7 @@ describe Flexirest::Connection do
186
186
  end
187
187
 
188
188
  it "should retry once in the event of a connection failed" do
189
- stub_request(:get, "www.example.com/foo").to_raise(Faraday::Error::ConnectionFailed.new("Foo"))
189
+ stub_request(:get, "www.example.com/foo").to_raise(Faraday::ConnectionFailed.new("Foo"))
190
190
  expect { @connection.get("/foo") }.to raise_error(Flexirest::BaseException)
191
191
  end
192
192
 
@@ -15,7 +15,9 @@ end
15
15
  class JsonAPIExampleArticle < Flexirest::Base
16
16
  proxy :json_api
17
17
  has_many :tags, JsonAPIAssociationExampleTag
18
+ has_one :main_theme, JsonAPIAssociationExampleTag
18
19
  has_one :author, JsonAPIAssociationExampleAuthor
20
+ has_many :co_authors, JsonAPIAssociationExampleAuthor
19
21
 
20
22
  faker1 = {
21
23
  data: {
@@ -74,7 +76,7 @@ class JsonAPIExampleArticle < Flexirest::Base
74
76
  },
75
77
  included: [
76
78
  { id: 1, type: 'tags', attributes: { item: 'item three' },
77
- relationships: { 'authors' => { data: [{ id: 1, type: 'tags' }] } } },
79
+ relationships: { 'authors' => { data: [{ id: 1, type: 'authors' }] } } },
78
80
  { id: 1, type: 'authors', attributes: { item: 'item two' } }
79
81
  ]
80
82
  }
@@ -102,6 +104,20 @@ class JsonAPIExampleArticle < Flexirest::Base
102
104
  { id: 2, type: 'tags', attributes: { item: 'item three' } }
103
105
  ]
104
106
  }
107
+ faker8 = {
108
+ data: {
109
+ id: 1, type: 'articles', attributes: { item: 'item one' },
110
+ relationships: {
111
+ 'main_theme' => { data: { id: 1, type: 'tags' } },
112
+ 'co_authors' => { data: [{ id: 1, type: 'authors' }, { id: 2, type: 'authors' }] },
113
+ }
114
+ },
115
+ included: [
116
+ { id: 1, type: 'tags', attributes: { item: 'item one' } },
117
+ { id: 1, type: 'authors', attributes: { item: 'item one' } },
118
+ { id: 2, type: 'authors', attributes: { item: 'item two' } },
119
+ ]
120
+ }
105
121
 
106
122
  get(
107
123
  :find,
@@ -151,6 +167,13 @@ class JsonAPIExampleArticle < Flexirest::Base
151
167
  fake: faker7.to_json,
152
168
  fake_content_type: 'application/vnd.api+json'
153
169
  )
170
+
171
+ get(
172
+ :custom_relationship_name,
173
+ '/articles/:id',
174
+ fake: faker8.to_json,
175
+ fake_content_type: 'application/vnd.api+json'
176
+ )
154
177
  end
155
178
 
156
179
  module JsonAPIExample
@@ -324,6 +347,12 @@ describe 'JSON API' do
324
347
  it 'should retrieve empty array if the plural relationship type is empty' do
325
348
  expect(subject.includes(:tags).no_assocs(1).tags).to be_empty
326
349
  end
350
+
351
+ it 'should retrieve associations that have a name that differs from their type name' do
352
+ parsed = subject.includes(:main_theme, :co_authors).custom_relationship_name(1)
353
+ expect(parsed.main_theme).to be_an_instance_of(JsonAPIAssociationExampleTag)
354
+ expect(parsed.co_authors).to be_an_instance_of(Flexirest::ResultIterator)
355
+ end
327
356
  end
328
357
 
329
358
  context 'lazy loading' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flexirest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.7
4
+ version: 1.8.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Jeffries
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-06 00:00:00.000000000 Z
11
+ date: 2020-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler