spicerack 0.25.1 → 0.25.6

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: 6587267192854028eb32a5c72e3e10b1cc26fb3916188db4f63dd63d3b1d1dda
4
- data.tar.gz: 16772d83f89184b5abd70c8d8ecf6a401394a9805138d15ab0170dcc72862282
3
+ metadata.gz: 3cfb6a17458b48287381371a6e44d136dc14a8f4e0bd5f603c23e1924498f540
4
+ data.tar.gz: 5f8ba478c03f48a472f91204036335bf422ae92cacbd5a894eb3d2a25196d56d
5
5
  SHA512:
6
- metadata.gz: 6827d51cff1f0c5aa1fcacf46edd0ec7b165d8932960f51823733a2060436f504baff9abfe0bcef879e6be6b43f7113eec5014b2ed6696eef577cd11bef825b3
7
- data.tar.gz: c89f4b299347a0135372315086e2b1e7be2d93d54bc42e7853bd1c57869f24bbc4c891384af044de2314c82f5c7b46902ad2d0fd430375fdcbebc3c2465f6396
6
+ metadata.gz: 4e4be218c9d409619a1997e39edf2864c66b379be63eaeb308a157b89d7aafef7173b04a4e206a31178f8891a24307babc07c99e266fd06ce356f3a031821d2e
7
+ data.tar.gz: fd4eac37af22f80cbcde47d02a6b0ae9c574f4abe4f5a591389c2665830dc200c8e3630e4b9a926cf146f7cfcd2c6c4da843be2dd0e334d2906cb944c873f02b
@@ -3,6 +3,7 @@
3
3
  require "active_model"
4
4
 
5
5
  module Spicerack
6
+ # Provides on-demand synchronization between a `data' object and ActiveModel::Attributes
6
7
  module HashModel
7
8
  extend ActiveSupport::Concern
8
9
 
@@ -23,6 +24,7 @@ module Spicerack
23
24
  private
24
25
 
25
26
  def field(name, type = Type::Value.new, **options)
27
+ name = name.to_s
26
28
  _fields << name
27
29
  attribute(name, type, **options)
28
30
  define_field_methods(name)
@@ -30,12 +32,36 @@ module Spicerack
30
32
 
31
33
  def define_field_methods(name)
32
34
  define_method("#{name}?".to_sym) { data[name].present? }
33
- define_method("#{name}=".to_sym) { |value| data[name] = value }
35
+ define_method("#{name}=".to_sym) do |value|
36
+ data[name] = value
37
+ synchronize_attribute_from_datastore(name)
38
+ end
34
39
  define_method(name) do
35
- write_attribute(name, data[name] || attribute(name))
40
+ synchronize_attribute_from_datastore(name)
36
41
  attribute(name)
37
42
  end
38
43
  end
39
44
  end
45
+
46
+ private
47
+
48
+ # The data object can be anything from a normal hash to a hash-like object backed by redis.
49
+ def synchronize_attribute_from_datastore(name)
50
+ value_from_datastore = data[name]
51
+ value_from_attribute = attribute(name)
52
+ return if value_from_datastore == value_from_attribute
53
+
54
+ value = value_from_datastore || value_from_attribute
55
+
56
+ # Otherwise, the dataset is value takes priority and is written as the attribute value
57
+ # ActiveModel changed the interface to this method between Rails 6.0 and 6.1
58
+ # This method is a patch which allows this class to work with either version
59
+ # Once support for pre rails 6.0 is sunset this should likely be removed
60
+ if respond_to?(:_write_attribute, true)
61
+ _write_attribute(name, value)
62
+ else
63
+ write_attribute(name, value)
64
+ end
65
+ end
40
66
  end
41
67
  end
@@ -20,7 +20,7 @@ RSpec::Matchers.define :define_field do |field, type = nil, default: nil|
20
20
  match do
21
21
  expect(test_subject.attribute_types[field.to_s].type).to eq type unless type.nil?
22
22
  expect(test_subject._default_attributes[field.to_s].value).to eq default unless default.nil?
23
- expect(test_subject._fields).to include field
23
+ expect(test_subject._fields).to include field.to_s
24
24
  end
25
25
  description { "define field #{field}" }
26
26
  failure_message { "expected #{test_subject} to define field #{field} #{with_details(type, default)}" }
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Spicerack
4
4
  # This constant is managed by spicerack
5
- VERSION = "0.25.1"
5
+ VERSION = "0.25.6"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spicerack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.1
4
+ version: 0.25.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Garside
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2020-10-13 00:00:00.000000000 Z
15
+ date: 2021-02-24 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: around_the_world
@@ -20,70 +20,70 @@ dependencies:
20
20
  requirements:
21
21
  - - '='
22
22
  - !ruby/object:Gem::Version
23
- version: 0.25.1
23
+ version: 0.25.6
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - '='
29
29
  - !ruby/object:Gem::Version
30
- version: 0.25.1
30
+ version: 0.25.6
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: redis_hash
33
33
  requirement: !ruby/object:Gem::Requirement
34
34
  requirements:
35
35
  - - '='
36
36
  - !ruby/object:Gem::Version
37
- version: 0.25.1
37
+ version: 0.25.6
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  requirements:
42
42
  - - '='
43
43
  - !ruby/object:Gem::Version
44
- version: 0.25.1
44
+ version: 0.25.6
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: short_circu_it
47
47
  requirement: !ruby/object:Gem::Requirement
48
48
  requirements:
49
49
  - - '='
50
50
  - !ruby/object:Gem::Version
51
- version: 0.25.1
51
+ version: 0.25.6
52
52
  type: :runtime
53
53
  prerelease: false
54
54
  version_requirements: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - '='
57
57
  - !ruby/object:Gem::Version
58
- version: 0.25.1
58
+ version: 0.25.6
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: technologic
61
61
  requirement: !ruby/object:Gem::Requirement
62
62
  requirements:
63
63
  - - '='
64
64
  - !ruby/object:Gem::Version
65
- version: 0.25.1
65
+ version: 0.25.6
66
66
  type: :runtime
67
67
  prerelease: false
68
68
  version_requirements: !ruby/object:Gem::Requirement
69
69
  requirements:
70
70
  - - '='
71
71
  - !ruby/object:Gem::Version
72
- version: 0.25.1
72
+ version: 0.25.6
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: tablesalt
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - '='
78
78
  - !ruby/object:Gem::Version
79
- version: 0.25.1
79
+ version: 0.25.6
80
80
  type: :runtime
81
81
  prerelease: false
82
82
  version_requirements: !ruby/object:Gem::Requirement
83
83
  requirements:
84
84
  - - '='
85
85
  - !ruby/object:Gem::Version
86
- version: 0.25.1
86
+ version: 0.25.6
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: bundler
89
89
  requirement: !ruby/object:Gem::Requirement
@@ -146,20 +146,20 @@ dependencies:
146
146
  requirements:
147
147
  - - ">="
148
148
  - !ruby/object:Gem::Version
149
- version: '1.8'
149
+ version: '2.0'
150
150
  - - "<"
151
151
  - !ruby/object:Gem::Version
152
- version: '2.0'
152
+ version: '3.0'
153
153
  type: :development
154
154
  prerelease: false
155
155
  version_requirements: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: '1.8'
159
+ version: '2.0'
160
160
  - - "<"
161
161
  - !ruby/object:Gem::Version
162
- version: '2.0'
162
+ version: '3.0'
163
163
  - !ruby/object:Gem::Dependency
164
164
  name: pry
165
165
  requirement: !ruby/object:Gem::Requirement
@@ -208,28 +208,28 @@ dependencies:
208
208
  requirements:
209
209
  - - '='
210
210
  - !ruby/object:Gem::Version
211
- version: 0.25.1
211
+ version: 0.25.6
212
212
  type: :development
213
213
  prerelease: false
214
214
  version_requirements: !ruby/object:Gem::Requirement
215
215
  requirements:
216
216
  - - '='
217
217
  - !ruby/object:Gem::Version
218
- version: 0.25.1
218
+ version: 0.25.6
219
219
  - !ruby/object:Gem::Dependency
220
220
  name: spicerack-styleguide
221
221
  requirement: !ruby/object:Gem::Requirement
222
222
  requirements:
223
223
  - - '='
224
224
  - !ruby/object:Gem::Version
225
- version: 0.25.1
225
+ version: 0.25.6
226
226
  type: :development
227
227
  prerelease: false
228
228
  version_requirements: !ruby/object:Gem::Requirement
229
229
  requirements:
230
230
  - - '='
231
231
  - !ruby/object:Gem::Version
232
- version: 0.25.1
232
+ version: 0.25.6
233
233
  - !ruby/object:Gem::Dependency
234
234
  name: will_paginate
235
235
  requirement: !ruby/object:Gem::Requirement