activerecord-typedstore 1.1.2 → 1.1.3
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 +5 -5
- data/.travis.yml +3 -8
- data/Rakefile +1 -1
- data/activerecord-typedstore.gemspec +1 -1
- data/gemfiles/{Gemfile.ar-3.2 → Gemfile.ar-5.2} +2 -2
- data/lib/active_record/typed_store/extension.rb +29 -16
- data/lib/active_record/typed_store/version.rb +1 -1
- metadata +6 -8
- data/gemfiles/Gemfile.ar-4.0 +0 -11
- data/gemfiles/Gemfile.ar-4.1 +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ab5f09b64721a41a7eae679a4ae848813504913d1d87815c035352da6b3134eb
|
4
|
+
data.tar.gz: bc9d48e95b48f9ad9d5b7e02f1edd9a1ce1004e8c93bfb6d18fc4d944d63c161
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbd034206f96e1063bdb078417b685148346edeeb36968068bd54a2a8e95321ec56d5aa69b50851238607a862a01cba1a1770ac541e283eba12735c11dd84f5a
|
7
|
+
data.tar.gz: f04cdc9a39338b8b0fcc164da82f4b472acbf7e59543e6f8ebf5b51300e5bf55f4cb01d602a7dfc083833fef38069ed468049a49be3b6ff45b84dac7e0f86952
|
data/.travis.yml
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
3
|
rvm:
|
4
|
-
- 2.
|
5
|
-
- 2.2
|
6
|
-
- 2.3.0
|
4
|
+
- 2.3.5
|
5
|
+
- 2.4.2
|
7
6
|
gemfile:
|
8
7
|
- gemfiles/Gemfile.ar-4.2
|
9
8
|
- gemfiles/Gemfile.ar-5.0
|
9
|
+
- gemfiles/Gemfile.ar-5.1
|
10
10
|
|
11
11
|
env:
|
12
12
|
- TIMEZONE_AWARE=1 POSTGRES=1 MYSQL=1
|
@@ -21,8 +21,3 @@ cache: bundler
|
|
21
21
|
before_script:
|
22
22
|
- mysql -e 'create database typed_store_test;'
|
23
23
|
- psql -c 'create database typed_store_test;' -U postgres
|
24
|
-
|
25
|
-
matrix:
|
26
|
-
exclude:
|
27
|
-
- rvm: 2.1
|
28
|
-
gemfile: gemfiles/Gemfile.ar-5.0
|
data/Rakefile
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'activerecord', '>= 4.2', '< 5.
|
21
|
+
spec.add_dependency 'activerecord', '>= 4.2', '< 5.3'
|
22
22
|
|
23
23
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
24
24
|
spec.add_development_dependency 'rake', '~> 10'
|
@@ -1,11 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'activerecord', '
|
3
|
+
gem 'activerecord', ['>= 5.2.0.beta1', '< 5.3']
|
4
4
|
gem 'bundler', '~> 1.3'
|
5
5
|
gem 'rake'
|
6
6
|
gem 'rspec'
|
7
7
|
gem 'sqlite3'
|
8
8
|
gem 'pg', '~> 0.11'
|
9
|
-
gem 'mysql2', '
|
9
|
+
gem 'mysql2', ['>= 0.3.13', '< 0.5']
|
10
10
|
gem 'database_cleaner'
|
11
11
|
gem 'coveralls', require: false
|
@@ -8,19 +8,17 @@ module ActiveRecord::TypedStore
|
|
8
8
|
|
9
9
|
included do
|
10
10
|
class_attribute :typed_stores
|
11
|
+
self.typed_stores = {}
|
11
12
|
end
|
12
13
|
|
13
14
|
module ClassMethods
|
14
15
|
def store_accessors
|
15
|
-
|
16
|
-
typed_stores.values.map(&:accessors).flatten
|
16
|
+
typed_stores.each_value.flat_map(&:accessors)
|
17
17
|
end
|
18
18
|
|
19
19
|
def typed_store(store_attribute, options={}, &block)
|
20
20
|
dsl = DSL.new(store_attribute, options, &block)
|
21
|
-
self.typed_stores
|
22
|
-
self.typed_stores = typed_stores.deep_dup
|
23
|
-
self.typed_stores[store_attribute] = dsl
|
21
|
+
self.typed_stores = self.typed_stores.merge(store_attribute => dsl)
|
24
22
|
|
25
23
|
typed_klass = TypedHash.create(dsl.fields.values)
|
26
24
|
const_set("#{store_attribute}_hash".camelize, typed_klass)
|
@@ -29,11 +27,26 @@ module ActiveRecord::TypedStore
|
|
29
27
|
Type.new(typed_klass, dsl.coder, subtype)
|
30
28
|
end
|
31
29
|
store_accessor(store_attribute, dsl.accessors)
|
30
|
+
|
31
|
+
dsl.accessors.each do |accessor_name|
|
32
|
+
define_method("#{accessor_name}_changed?") do
|
33
|
+
send("#{store_attribute}_changed?") &&
|
34
|
+
send(store_attribute)[accessor_name] != send("#{store_attribute}_was")[accessor_name]
|
35
|
+
end
|
36
|
+
|
37
|
+
define_method("#{accessor_name}_was") do
|
38
|
+
send("#{store_attribute}_was")[accessor_name]
|
39
|
+
end
|
40
|
+
|
41
|
+
define_method("restore_#{accessor_name}!") do
|
42
|
+
send("#{accessor_name}=", send("#{accessor_name}_was"))
|
43
|
+
end
|
44
|
+
end
|
32
45
|
end
|
33
46
|
|
34
47
|
def define_attribute_methods
|
35
48
|
super
|
36
|
-
define_typed_store_attribute_methods
|
49
|
+
define_typed_store_attribute_methods
|
37
50
|
end
|
38
51
|
|
39
52
|
def undefine_attribute_methods # :nodoc:
|
@@ -57,6 +70,16 @@ module ActiveRecord::TypedStore
|
|
57
70
|
end
|
58
71
|
end
|
59
72
|
|
73
|
+
def changes
|
74
|
+
changes = super
|
75
|
+
self.class.store_accessors.each do |attr|
|
76
|
+
if send("#{attr}_changed?")
|
77
|
+
changes[attr] = [send("#{attr}_was"), send(attr)]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
changes
|
81
|
+
end
|
82
|
+
|
60
83
|
def clear_attribute_change(attr_name)
|
61
84
|
return if self.class.store_accessors.include?(normalize_attribute(attr_name))
|
62
85
|
super
|
@@ -69,16 +92,6 @@ module ActiveRecord::TypedStore
|
|
69
92
|
super
|
70
93
|
end
|
71
94
|
|
72
|
-
def write_store_attribute(store_attribute, key, value)
|
73
|
-
if typed_stores && typed_stores[store_attribute]
|
74
|
-
prev_value = read_store_attribute(store_attribute, key)
|
75
|
-
new_value = typed_stores[store_attribute].fields[key].cast(value)
|
76
|
-
attribute_will_change!(key.to_s) if new_value != prev_value
|
77
|
-
end
|
78
|
-
|
79
|
-
super
|
80
|
-
end
|
81
|
-
|
82
95
|
def query_attribute(attr_name)
|
83
96
|
if self.class.store_accessors.include?(attr_name.to_sym)
|
84
97
|
value = public_send(attr_name)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-typedstore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '4.2'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '5.
|
22
|
+
version: '5.3'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '4.2'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '5.
|
32
|
+
version: '5.3'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: bundler
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,12 +157,10 @@ files:
|
|
157
157
|
- README.md
|
158
158
|
- Rakefile
|
159
159
|
- activerecord-typedstore.gemspec
|
160
|
-
- gemfiles/Gemfile.ar-3.2
|
161
|
-
- gemfiles/Gemfile.ar-4.0
|
162
|
-
- gemfiles/Gemfile.ar-4.1
|
163
160
|
- gemfiles/Gemfile.ar-4.2
|
164
161
|
- gemfiles/Gemfile.ar-5.0
|
165
162
|
- gemfiles/Gemfile.ar-5.1
|
163
|
+
- gemfiles/Gemfile.ar-5.2
|
166
164
|
- lib/active_record/typed_store.rb
|
167
165
|
- lib/active_record/typed_store/dsl.rb
|
168
166
|
- lib/active_record/typed_store/extension.rb
|
@@ -196,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
194
|
version: '0'
|
197
195
|
requirements: []
|
198
196
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.
|
197
|
+
rubygems_version: 2.7.3
|
200
198
|
signing_key:
|
201
199
|
specification_version: 4
|
202
200
|
summary: Add type casting and full method attributes support to АctiveRecord store
|
data/gemfiles/Gemfile.ar-4.0
DELETED
data/gemfiles/Gemfile.ar-4.1
DELETED