lhs 18.0.1 → 18.0.2

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: d04ba2057e1535e9a26b924e5bc9d3e9a86ddf77e6c626f1c7375ea808d928a0
4
- data.tar.gz: 25532cfc5d304b31e1d61de0e9e059d7ffe94ae147a9c362d3410e6f4979cb75
3
+ metadata.gz: a8fbb44e36e8084a69be5ffd72ec91f10d6d76833aa7af2051da5a75078eb1cc
4
+ data.tar.gz: 606eee69ad3c2672d1a47b7a0fce0fa28d53ff4ebb7cb49fefbb3417fa6e9646
5
5
  SHA512:
6
- metadata.gz: 455ded1d51459437e1887c6f81ddf13d4a7f0df80f7b22dc6a7194b0d5e2a30461e410986a406fdda3d7918f639065a1d3d38314504727c6dcbd8381b106122c
7
- data.tar.gz: 7d5341a694feea1b308823bc7e997128b0ae0f209ed8997473c69804babcbdd1def2d4d6eb5ccaa38ce84a97415e1e8450b9cfb0a4455dbe5d50d921bf5bc8fb
6
+ metadata.gz: 7de12cf03b8070bf8eacceb74f1ce517f4493d25cac3a96c3b6c7a829b1c9042a052a1569fc4e836e24efaf5e6dc24564b0e4b027d746527ba0ab515712d0e0f
7
+ data.tar.gz: b53a6aa74e78dbfcb55326c405c347bfe7dbb712dc740fcfc795164ca55c25018f85443ee92b7c622d1cefea50ce7a8f1aa3d6eee50abf5084f5158ab6f31819
@@ -12,6 +12,10 @@ class LHS::Proxy
12
12
 
13
13
  delegate :dig, :fetch, to: :_raw, allow_nil: true
14
14
 
15
+ def clear_cache!
16
+ @cache = nil
17
+ end
18
+
15
19
  private
16
20
 
17
21
  def set(name, value)
@@ -117,9 +121,5 @@ class LHS::Proxy
117
121
  def cache
118
122
  @cache ||= Concurrent::Map.new
119
123
  end
120
-
121
- def clear_cache!
122
- @cache = nil
123
- end
124
124
  end
125
125
  end
@@ -166,6 +166,7 @@ class LHS::Record
166
166
  else
167
167
  handle_include(includes, data, nil, references[includes])
168
168
  end
169
+ data.clear_cache! # as we just included new nested resources
169
170
  end
170
171
 
171
172
  def handle_include(included, data, sub_includes = nil, reference = nil)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LHS
4
- VERSION = '18.0.1'
4
+ VERSION = '18.0.2'
5
5
  end
@@ -46,7 +46,6 @@ describe LHS::Record do
46
46
  end
47
47
 
48
48
  context 'custom class_name' do
49
-
50
49
  before do
51
50
  module Uberall
52
51
  class Location < LHS::Record
@@ -20,7 +20,6 @@ describe LHS::Record do
20
20
  end
21
21
 
22
22
  context 'has_one' do
23
-
24
23
  before do
25
24
  class Transaction < LHS::Record
26
25
  endpoint 'http://myservice/transactions'
@@ -49,23 +48,6 @@ describe LHS::Record do
49
48
  expect(user._root._raw).to eq transaction._raw
50
49
  expect(user.parent._raw).to eq transaction._raw
51
50
  end
52
-
53
- it 'caches the relation in memory' do
54
- allow(LHS::Record).to receive(:for_url).and_return(User)
55
- user_object_id = transaction.user.object_id
56
- expect(transaction.user.object_id).to eql(user_object_id)
57
- transaction2 = Transaction.find(2)
58
- expect(transaction2.user.object_id).not_to eql(user_object_id)
59
- end
60
-
61
- it 'recalculates cache for relation when it was modified' do
62
- allow(LHS::Record).to receive(:for_url).and_return(Comment)
63
- expect(user.comments).to be_blank
64
- comments_object_id = user.comments.object_id
65
- user.comments = [Comment.new]
66
- expect(user.comments.object_id).not_to eql(comments_object_id)
67
- expect(user.comments).not_to be_blank
68
- end
69
51
  end
70
52
 
71
53
  context 'custom class_name' do
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ describe LHS::Record do
6
+ context 'cache' do
7
+ let(:transaction) { Transaction.find(1) }
8
+ let(:user) { transaction.user }
9
+
10
+ before do
11
+ class Transaction < LHS::Record
12
+ endpoint 'http://myservice/transactions'
13
+ endpoint 'http://myservice/transactions/{id}'
14
+ has_one :user
15
+ end
16
+
17
+ class User < LHS::Record
18
+ has_many :comments
19
+
20
+ def email
21
+ self[:email_address]
22
+ end
23
+ end
24
+
25
+ class Comment < LHS::Record
26
+ end
27
+
28
+ [1, 2].each do |id|
29
+ stub_request(:get, "http://myservice/transactions/#{id}")
30
+ .to_return(body: {
31
+ user: {
32
+ email_address: 'steve@local.ch',
33
+ comments: []
34
+ }
35
+ }.to_json)
36
+ end
37
+ end
38
+
39
+ it 'caches the relation in memory' do
40
+ allow(LHS::Record).to receive(:for_url).and_return(User)
41
+ user_object_id = transaction.user.object_id
42
+ expect(transaction.user.object_id).to eql(user_object_id)
43
+ transaction2 = Transaction.find(2)
44
+ expect(transaction2.user.object_id).not_to eql(user_object_id)
45
+ end
46
+
47
+ it 'recalculates cache for relation when it was modified' do
48
+ allow(LHS::Record).to receive(:for_url).and_return(Comment)
49
+ expect(user.comments).to be_blank
50
+ comments_object_id = user.comments.object_id
51
+ user.comments = [Comment.new]
52
+ expect(user.comments.object_id).not_to eql(comments_object_id)
53
+ expect(user.comments).not_to be_blank
54
+ end
55
+ end
56
+
57
+ context 'clear cache' do
58
+ before do
59
+ class Place < LHS::Record
60
+ endpoint 'https://datastore/places/{id}', followlocation: true, headers: { 'Prefer' => 'redirect-strategy=redirect-over-not-found' }
61
+ has_many :available_assets
62
+ end
63
+
64
+ class AvailableAsset < LHS::Record
65
+ end
66
+
67
+ stub_request(:get, "http://datastore/places/#{place_id}/available-assets?limit=100")
68
+ .to_return(body: {
69
+ total: available_assets.size,
70
+ items: available_assets
71
+ }.to_json)
72
+ end
73
+
74
+ let(:place_id) { SecureRandom.urlsafe_base64 }
75
+
76
+ let(:place_hash) do
77
+ {
78
+ href: "https://datastore/places/#{place_id}",
79
+ id: place_id,
80
+ available_assets: { href: "http://datastore/places/#{place_id}/available-assets?offset=0&limit=10" }
81
+ }
82
+ end
83
+
84
+ let(:available_asset_hash) do
85
+ { asset_code: 'OPENING_HOURS' }
86
+ end
87
+
88
+ let(:available_assets) { [available_asset_hash] }
89
+
90
+ it 'clears the cache when using find' do
91
+ stub_request(:get, place_hash[:href])
92
+ .to_return(body: place_hash.to_json)
93
+ place = Place
94
+ .options(auth: { bearer: 'XYZ' })
95
+ .includes_all(:available_assets)
96
+ .find(place_id)
97
+ expect(place.available_assets.first).to be_a(AvailableAsset)
98
+ end
99
+
100
+ it 'clears the cache when using where' do
101
+ stub_request(:get, place_hash[:href])
102
+ .to_return(body: place_hash.to_json)
103
+ place = Place
104
+ .options(auth: { bearer: 'XYZ' })
105
+ .includes_all(:available_assets)
106
+ .where(id: place_id)
107
+ expect(place.available_assets.first).to be_a(AvailableAsset)
108
+ end
109
+
110
+ it 'clears the cache when using find_by' do
111
+ stub_request(:get, "https://datastore/places/#{place_id}?limit=1")
112
+ .to_return(body: place_hash.to_json)
113
+ place = Place
114
+ .options(auth: { bearer: 'XYZ' })
115
+ .includes_all(:available_assets)
116
+ .find_by(id: place_id)
117
+ expect(place.available_assets.first).to be_a(AvailableAsset)
118
+ end
119
+ end
120
+
121
+ 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: 18.0.1
4
+ version: 18.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/local-ch/lhs/graphs/contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-04 00:00:00.000000000 Z
11
+ date: 2019-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -427,6 +427,7 @@ files:
427
427
  - spec/record/pagination_spec.rb
428
428
  - spec/record/persisted_spec.rb
429
429
  - spec/record/references_spec.rb
430
+ - spec/record/relation_caching_spec.rb
430
431
  - spec/record/reload_by_id_spec.rb
431
432
  - spec/record/reload_spec.rb
432
433
  - spec/record/request_spec.rb
@@ -626,6 +627,7 @@ test_files:
626
627
  - spec/record/pagination_spec.rb
627
628
  - spec/record/persisted_spec.rb
628
629
  - spec/record/references_spec.rb
630
+ - spec/record/relation_caching_spec.rb
629
631
  - spec/record/reload_by_id_spec.rb
630
632
  - spec/record/reload_spec.rb
631
633
  - spec/record/request_spec.rb