lhs 24.1.0 → 24.1.1

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
  SHA256:
3
- metadata.gz: a87032458b0558f6659a20e25b28b4f2523533fb9775f44148adeca6c4109263
4
- data.tar.gz: 3395b718c795e0128bb8e33d646b2319720c6280c9eff1f32f498485a3f9bad4
3
+ metadata.gz: 00243f3b3ea3dd2e97864c126dc7b8177c3f6e38cd217aba7c1a2843d9215d4c
4
+ data.tar.gz: 2c63934cbc1752513d1336997d2c9743c40b518d31b177d30f18a6ffe00ea99a
5
5
  SHA512:
6
- metadata.gz: d0ac63a7eaed408a1612ff55db6388f3b375458d60ee9e4e6ea70f9399800a022456c4cce030a593b902ffc775c4a9deac17b7a801613ac7df4b69ca199d5849
7
- data.tar.gz: 64135aa329e9127e04664a43746cd1e4d57236d3dc7ea405e74553cd0b9ef3cd01d479f70ff4dc66c44930010fae56be8780e719a0504bde6907def5832d5c7a
6
+ metadata.gz: 492a78447b6b7985bed8a82025a95551f94943f6e712d09863ca99d3952bb16a26da46a88d6fc1edc5cb744dae230eab22319a038c3a0e67e76747e406afd2aa
7
+ data.tar.gz: 274eacd3f4815d81514b7273d6613851be0eb6427cd7c9fca1c0a8105cd5a28e62e1f5b740ad31331446a10d2cfe6fdc13c64808fb957511cbcf6b4e7790dc99
@@ -47,7 +47,7 @@ class LHS::Collection < LHS::Proxy
47
47
  if item.is_a?(LHS::Data) && item._request && !item._request.response.success?
48
48
  nil
49
49
  else
50
- item
50
+ cast_item(item)
51
51
  end
52
52
  end.compact
53
53
  end
@@ -55,10 +55,18 @@ class LHS::Collection < LHS::Proxy
55
55
  private
56
56
 
57
57
  def cast_item(item)
58
- record_by_href = LHS::Record.for_url(item[:href]) if item[:href]
59
58
  data = LHS::Data.new(item, @parent, @record)
60
- return (record_by_href || @record).new(data) if record_by_href || @record
61
- data
59
+ (record_by_href(item) || @record)&.new(data) || data
60
+ end
61
+
62
+ def record_by_href(item)
63
+ return if plain_value?(item) || item[:href].blank?
64
+
65
+ LHS::Record.for_url(item[:href])
66
+ end
67
+
68
+ def plain_value?(item)
69
+ item.is_a?(String) || item.is_a?(Numeric) || item.is_a?(TrueClass) || item.is_a?(FalseClass)
62
70
  end
63
71
  end
64
72
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LHS
4
- VERSION = '24.1.0'
4
+ VERSION = '24.1.1'
5
5
  end
@@ -6,6 +6,11 @@ describe LHS::Record do
6
6
  before do
7
7
  class Place < LHS::Record
8
8
  endpoint 'http://datastore/places/{id}'
9
+ endpoint 'http://datastore/users/{user_id}/places/{id}'
10
+
11
+ def display_name
12
+ "*#{name}*"
13
+ end
9
14
  end
10
15
 
11
16
  class User < LHS::Record
@@ -24,14 +29,24 @@ describe LHS::Record do
24
29
  items: [
25
30
  {
26
31
  href: 'http://datastore/users/123/places/789'
32
+ }, {
33
+ href: 'http://datastore/users/123/places/790'
27
34
  }
28
35
  ],
29
- total: 4,
36
+ total: 2,
30
37
  offset: 0,
31
38
  limit: 10
32
39
  }.to_json)
33
40
 
34
41
  stub_request(:get, 'http://datastore/users/123/places/789?limit=100')
42
+ .to_return(
43
+ body: {
44
+ href: 'http://datastore/users/123/places/789?limit=100',
45
+ name: 'Mc Donalds'
46
+ }.to_json
47
+ )
48
+
49
+ stub_request(:get, 'http://datastore/users/123/places/790?limit=100')
35
50
  .to_return(
36
51
  status: 404,
37
52
  body: {
@@ -51,17 +66,25 @@ describe LHS::Record do
51
66
  end
52
67
 
53
68
  context '.compact' do
54
-
55
69
  it 'removes linked resouces which could not get fetched' do
56
- expect(places.compact.length).to eq 0
57
- expect(places.length).not_to eq 0 # leaves the original intact
70
+ expect(places.compact.length).to eq 1
71
+ expect(places.length).not_to eq 1 # leaves the original intact
72
+ end
73
+ end
74
+
75
+ context 'record casting' do
76
+ let(:expected_display_name) { '*Mc Donalds*' }
77
+
78
+ it 'finds the right record class' do
79
+ expect(places.first.display_name).to eq expected_display_name
80
+ expect(places.compact.map(&:display_name)).to eq [expected_display_name]
58
81
  end
59
82
  end
60
83
 
61
84
  context '.compact!' do
62
85
  it 'removes linked resouces which could not get fetched' do
63
- expect(places.compact!.length).to eq 0
64
- expect(places.length).to eq 0 # and changes the original intact
86
+ expect(places.compact!.length).to eq 1
87
+ expect(places.length).to eq 1 # and changes the original intact
65
88
  end
66
89
  end
67
90
  end
@@ -8,6 +8,14 @@ describe LHS::Record do
8
8
  class Customer < LHS::Record
9
9
  endpoint 'http://datastore/customers/{id}'
10
10
  end
11
+
12
+ class User < LHS::Record
13
+ endpoint 'http://datastore/users/{id}'
14
+ endpoint 'http://datastore/customers/{customer_id}/users/{id}'
15
+ def reversed_name
16
+ name.split.reverse.join(' ')
17
+ end
18
+ end
11
19
  end
12
20
 
13
21
  let!(:customer_request) do
@@ -18,6 +26,9 @@ describe LHS::Record do
18
26
  },
19
27
  'contact_addresses' => {
20
28
  'href' => "http://datastore/contact_addresses"
29
+ },
30
+ 'users' => {
31
+ 'href' => 'http://datastore/customers/1/users'
21
32
  }
22
33
  }.to_json)
23
34
  end
@@ -49,5 +60,37 @@ describe LHS::Record do
49
60
  assert_requested(electronic_addresses_request)
50
61
  assert_requested(contact_addresses_request)
51
62
  end
63
+
64
+ describe 'mapping related classes correctly' do
65
+ before do
66
+ stub_request(:get, 'http://datastore/customers/1/users?limit=100').to_return(
67
+ status: 200,
68
+ body: {
69
+ href: 'http://datastore/customers/1/users?offset=0&limit=100',
70
+ items: [
71
+ { href: 'http://datastore/customers/1/users/1' }
72
+ ],
73
+ total: 1,
74
+ offset: 0,
75
+ limit: 10
76
+ }.to_json
77
+ )
78
+
79
+ stub_request(:get, 'http://datastore/customers/1/users/1?limit=100')
80
+ .with(headers: { 'Authentication' => 'Bearer 123' })
81
+ .to_return(body: { href: 'http://datastore/users/1', name: 'Elizabeth Baker' }.to_json)
82
+ end
83
+
84
+ it 'maps correctly' do
85
+ users = Customer
86
+ .includes(:users)
87
+ .references(users: referencing_options)
88
+ .find(1)
89
+ .users
90
+
91
+ expect(users.first.reversed_name).to be_present
92
+ end
93
+ end
94
+
52
95
  end
53
96
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhs
3
3
  version: !ruby/object:Gem::Version
4
- version: 24.1.0
4
+ version: 24.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/local-ch/lhs/graphs/contributors
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-12 00:00:00.000000000 Z
11
+ date: 2020-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -552,7 +552,7 @@ homepage: https://github.com/local-ch/lhs
552
552
  licenses:
553
553
  - GPL-3.0
554
554
  metadata: {}
555
- post_install_message:
555
+ post_install_message:
556
556
  rdoc_options: []
557
557
  require_paths:
558
558
  - lib
@@ -568,8 +568,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
568
568
  version: '0'
569
569
  requirements:
570
570
  - Ruby >= 2.3.0
571
- rubygems_version: 3.0.6
572
- signing_key:
571
+ rubygems_version: 3.0.3
572
+ signing_key:
573
573
  specification_version: 4
574
574
  summary: 'REST services accelerator: Rails gem providing an easy, active-record-like
575
575
  interface for http (hypermedia) json services'