adequate_serialization 2.0.0 → 2.0.1

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: 85146c58398835d031d5a5f1acf857314053bd3a3eeef74a9a805c01b595dd8d
4
- data.tar.gz: fe2b4c681f16af90ee97689fffb85d6dba5444de178bfd6b2a8eba97cbf9b62c
3
+ metadata.gz: 273a3e30de9eed1f993b3f83aae405a660bc84aea6f9bf59682c7d99ca838a9c
4
+ data.tar.gz: e3ec7712f4f66088ec4017b4add90977c3282b0d057362bc14d4bf2ed30c1c49
5
5
  SHA512:
6
- metadata.gz: 2c885c5465c961352409433e327baf8b6a1983b7a0a0342c74faa69446cc1ea2acc3ad616e4621f4ed601e40182fba843cabec4f52e6a1869471824887061b5d
7
- data.tar.gz: 312bea7bb4ea77435edad2131d085a28a7a709ec01ee737558c1ba37191d5f9bf97f02d174ab457b26390bbe7875b090cbf283389122f15b231ef58c60be79ac
6
+ metadata.gz: ebf077cfd6ddfbd155a45fcdbff67ab31f003adc2df6567e1d672cee581b6fbd58e021ceb7a011fd98e54cdecf4a3f9cfbab346b3c6e996defbb34669bdd1050
7
+ data.tar.gz: 5a2641ee46b36951066f77670b15fe80fe8b48bbaa41808a3d359a2c8fcf89766b7e638b435dffceaf1dc90e905bd1ffc73ca0559100781763d1e5bea433165a
@@ -6,6 +6,18 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.0.1] - 2020-01-02
10
+
11
+ ### Added
12
+
13
+ - The top level `AdequateSerialization::associate_cache` method for arbitrarily associating caches between records. Useful for things like polymorphic associations which cannot be performed automatically.
14
+
15
+ ### Changed
16
+
17
+ - Fixed the active job queue setting configuration so that it will properly update ActiveJob when using Sidekiq.
18
+ - Fixed the cache busting for regular has_many relationships.
19
+ - Changed the name of the `::serialized_associations` method to `::associated_caches` to be more clear.
20
+
9
21
  ## [2.0.0] - 2019-12-31
10
22
 
11
23
  ### Added
@@ -46,7 +58,9 @@ end
46
58
 
47
59
  - No longer trigger another query when the `ActiveRecord` relation being serialized isn't loaded.
48
60
 
49
- [unreleased]: https://github.com/CultureHQ/adequate_serialization/compare/v1.0.1...HEAD
61
+ [unreleased]: https://github.com/CultureHQ/adequate_serialization/compare/v2.0.1...HEAD
62
+ [2.0.1]: https://github.com/CultureHQ/adequate_serialization/compare/v2.0.0...v2.0.1
63
+ [2.0.0]: https://github.com/CultureHQ/adequate_serialization/compare/v1.0.1...v2.0.0
50
64
  [1.0.1]: https://github.com/CultureHQ/adequate_serialization/compare/v1.0.0...v1.0.1
51
65
  [1.0.0]: https://github.com/CultureHQ/adequate_serialization/compare/v0.1.1...v1.0.0
52
66
  [0.1.1]: https://github.com/CultureHQ/adequate_serialization/compare/fcc7c7...v0.1.1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- adequate_serialization (2.0.0)
4
+ adequate_serialization (2.0.1)
5
5
  oj (~> 3.10)
6
6
 
7
7
  GEM
@@ -76,7 +76,7 @@ GEM
76
76
  i18n (1.7.0)
77
77
  concurrent-ruby (~> 1.0)
78
78
  jaro_winkler (1.5.4)
79
- json (2.2.0)
79
+ json (2.3.0)
80
80
  loofah (2.4.0)
81
81
  crass (~> 1.0.2)
82
82
  nokogiri (>= 1.5.9)
@@ -94,7 +94,7 @@ GEM
94
94
  mini_portile2 (~> 2.4.0)
95
95
  oj (3.10.0)
96
96
  parallel (1.19.1)
97
- parser (2.6.5.0)
97
+ parser (2.7.0.1)
98
98
  ast (~> 2.4.0)
99
99
  rack (2.0.8)
100
100
  rack-test (1.1.0)
@@ -150,7 +150,7 @@ GEM
150
150
  sqlite3 (1.4.2)
151
151
  thor (0.20.3)
152
152
  thread_safe (0.3.6)
153
- tzinfo (1.2.5)
153
+ tzinfo (1.2.6)
154
154
  thread_safe (~> 0.1)
155
155
  unicode-display_width (1.6.0)
156
156
  websocket-driver (0.7.1)
@@ -10,14 +10,36 @@ module AdequateSerialization
10
10
  end
11
11
 
12
12
  class << self
13
- attr_accessor :active_job_queue
13
+ attr_reader :active_job_queue
14
14
 
15
+ # Configure the queue name that AdequateSerialization will use when
16
+ # enqueuing jobs to bust associated caches.
17
+ def active_job_queue=(queue_name)
18
+ require 'adequate_serialization/rails/cache_refresh'
19
+ CacheRefresh::CacheRefreshJob.queue_name = queue_name
20
+ end
21
+
22
+ # Associate one or more caches with an active record such that when the
23
+ # record is updated the associated object caches are also updated.
24
+ def associate_cache(active_record, *association_names)
25
+ require 'adequate_serialization/rails/cache_refresh'
26
+
27
+ unless active_record.respond_to?(:associate_cache)
28
+ active_record.extend(CacheRefresh)
29
+ end
30
+
31
+ association_names.each do |association_name|
32
+ active_record.associate_cache(association_name)
33
+ end
34
+ end
35
+
36
+ # DSL-like block for parity with other Ruby/Rails libraries.
15
37
  def configure
16
38
  yield self
17
39
  end
18
40
  end
19
41
 
20
- self.active_job_queue = :default
42
+ @active_job_queue = :default
21
43
  end
22
44
 
23
45
  require 'adequate_serialization/attribute'
@@ -2,7 +2,7 @@
2
2
 
3
3
  module AdequateSerialization
4
4
  module CacheBusting
5
- class InverseNotFoundError < StandardError
5
+ class InverseNotFoundError < Error
6
6
  def initialize(record, association)
7
7
  super(<<~MSG)
8
8
  In order to be able to bust the associated cache for #{record}'s
@@ -14,7 +14,7 @@ module AdequateSerialization
14
14
  end
15
15
  end
16
16
 
17
- class TouchNotFoundError < StandardError
17
+ class TouchNotFoundError < Error
18
18
  def initialize(record, associated, inverse)
19
19
  super(<<~MSG)
20
20
  #{record} serializes all of the associated #{associated} records,
@@ -40,15 +40,12 @@ module AdequateSerialization
40
40
  using(
41
41
  Module.new do
42
42
  refine ActiveRecord::Base.singleton_class do
43
- def setup_serialize_association(association_name)
43
+ def setup_association_cache(association_name)
44
44
  unless defined?(ActiveJob)
45
45
  raise ActiveJobNotFoundError.new(name, association_name)
46
46
  end
47
47
 
48
- require 'adequate_serialization/rails/cache_refresh'
49
- extend(CacheRefresh) unless respond_to?(:serialize_association)
50
-
51
- serialize_association(association_name)
48
+ AdequateSerialization.associate_cache(self, association_name)
52
49
  end
53
50
  end
54
51
 
@@ -80,7 +77,7 @@ module AdequateSerialization
80
77
  # Hooks into the serialized class and adds cache busting behavior on
81
78
  # commit that will loop through the associated records
82
79
  def setup_has_some
83
- active_record.setup_serialize_association(name)
80
+ klass.setup_association_cache(inverse_of.name)
84
81
  end
85
82
  end
86
83
 
@@ -90,7 +87,7 @@ module AdequateSerialization
90
87
  raise InverseNotFoundError.new(active_record.name, name)
91
88
  end
92
89
 
93
- klass.setup_serialize_association(inverse_of.name)
90
+ klass.setup_association_cache(inverse_of.name)
94
91
  end
95
92
  end
96
93
  end
@@ -33,11 +33,11 @@ module AdequateSerialization
33
33
  end
34
34
  )
35
35
 
36
- queue_as -> { AdequateSerialization.active_job_queue }
36
+ queue_as AdequateSerialization.active_job_queue
37
37
  discard_on ActiveJob::DeserializationError
38
38
 
39
39
  def perform(record)
40
- record.class.serialized_associations.each do |association|
40
+ record.class.associated_caches.each do |association|
41
41
  record.public_send(association).refresh
42
42
  end
43
43
  end
@@ -47,14 +47,14 @@ module AdequateSerialization
47
47
  base.after_update_commit { CacheRefreshJob.perform_later(self) }
48
48
  end
49
49
 
50
- def serialize_association(association)
51
- serialized_associations << association
50
+ def associate_cache(association)
51
+ associated_caches << association
52
52
  end
53
53
 
54
54
  # The associations that serialize this object in their responses, so that we
55
55
  # know to bust their cache when this object is updated.
56
- def serialized_associations
57
- @serialized_associations ||= []
56
+ def associated_caches
57
+ @associated_caches ||= []
58
58
  end
59
59
  end
60
60
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AdequateSerialization
4
- VERSION = '2.0.0'
4
+ VERSION = '2.0.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adequate_serialization
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Deisz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-31 00:00:00.000000000 Z
11
+ date: 2020-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj