activerecord-typedstore 1.0.1 → 1.1.0
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 +4 -4
- data/activerecord-typedstore.gemspec +1 -1
- data/gemfiles/Gemfile.ar-5.1 +11 -0
- data/lib/active_record/typed_store/dsl.rb +10 -4
- data/lib/active_record/typed_store/extension.rb +8 -1
- data/lib/active_record/typed_store/version.rb +1 -1
- data/spec/active_record/typed_store_spec.rb +5 -0
- data/spec/support/models.rb +6 -4
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9f474258f3d2248355c75bfaaed2439a6f17d01
|
4
|
+
data.tar.gz: a7f227175a6583d765931a9feda03e8ede33b4b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2f2191bb5cec0d4e138b3adeafdd6a779bd032f31c2d93f8862484676afd5683f6fdb7bf230ebe3f6f9a0e9843f6d0b58f1278917c5db5488f684ff6664a978
|
7
|
+
data.tar.gz: 4f74a8624f48916154ffa549d5e0320c3679db8534280c4593669bc4a2f000d32bdd3947dd2e673b75fae4d8708102b8c3c5492a9c76cece3ea6a9026c177cb6
|
@@ -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.2'
|
22
22
|
|
23
23
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
24
24
|
spec.add_development_dependency 'rake', '~> 10'
|
@@ -4,16 +4,22 @@ module ActiveRecord::TypedStore
|
|
4
4
|
class DSL
|
5
5
|
attr_reader :fields, :coder
|
6
6
|
|
7
|
-
def initialize(options)
|
8
|
-
@coder = options.fetch(:coder) { default_coder }
|
7
|
+
def initialize(attribute_name, options)
|
8
|
+
@coder = options.fetch(:coder) { default_coder(attribute_name) }
|
9
9
|
@accessors = options[:accessors]
|
10
10
|
@accessors = [] if options[:accessors] == false
|
11
11
|
@fields = {}
|
12
12
|
yield self
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
if ActiveRecord.gem_version < Gem::Version.new('5.1.0')
|
16
|
+
def default_coder(attribute_name)
|
17
|
+
ActiveRecord::Coders::YAMLColumn.new
|
18
|
+
end
|
19
|
+
else
|
20
|
+
def default_coder(attribute_name)
|
21
|
+
ActiveRecord::Coders::YAMLColumn.new(attribute_name)
|
22
|
+
end
|
17
23
|
end
|
18
24
|
|
19
25
|
def accessors
|
@@ -17,7 +17,7 @@ module ActiveRecord::TypedStore
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def typed_store(store_attribute, options={}, &block)
|
20
|
-
dsl = DSL.new(options, &block)
|
20
|
+
dsl = DSL.new(store_attribute, options, &block)
|
21
21
|
self.typed_stores ||= {}
|
22
22
|
self.typed_stores[store_attribute] = dsl
|
23
23
|
|
@@ -61,6 +61,13 @@ module ActiveRecord::TypedStore
|
|
61
61
|
super
|
62
62
|
end
|
63
63
|
|
64
|
+
def read_attribute(attr_name)
|
65
|
+
if self.class.store_accessors.include?(attr_name.to_sym)
|
66
|
+
return public_send(attr_name)
|
67
|
+
end
|
68
|
+
super
|
69
|
+
end
|
70
|
+
|
64
71
|
def write_store_attribute(store_attribute, key, value)
|
65
72
|
if typed_stores && typed_stores[store_attribute]
|
66
73
|
prev_value = read_store_attribute(store_attribute, key)
|
@@ -140,6 +140,11 @@ shared_examples 'any model' do
|
|
140
140
|
it 'is initialized at nil if :default is not defined' do
|
141
141
|
expect(model.no_default).to be_nil
|
142
142
|
end
|
143
|
+
|
144
|
+
it 'is accessible throught #read_attribute' do
|
145
|
+
model.name = 'foo'
|
146
|
+
expect(model.read_attribute(:name)).to be == 'foo'
|
147
|
+
end
|
143
148
|
end
|
144
149
|
|
145
150
|
describe 'string attribute' do
|
data/spec/support/models.rb
CHANGED
@@ -6,12 +6,13 @@ AR_VERSION = Gem::Version.new(ActiveRecord::VERSION::STRING)
|
|
6
6
|
AR_4_0 = Gem::Version.new('4.0')
|
7
7
|
AR_4_1 = Gem::Version.new('4.1.0.beta')
|
8
8
|
AR_4_2 = Gem::Version.new('4.2.0-rc1')
|
9
|
+
AR_5_0 = Gem::Version.new('5.0.0')
|
9
10
|
|
10
11
|
ActiveRecord::Base.time_zone_aware_attributes = ENV['TIMEZONE_AWARE'] != '0'
|
11
12
|
ActiveRecord::Base.configurations = {
|
12
|
-
'test_sqlite3' => {adapter
|
13
|
-
'test_postgresql' => {adapter
|
14
|
-
'test_mysql' => {adapter
|
13
|
+
'test_sqlite3' => { 'adapter' => 'sqlite3', 'database' => '/tmp/typed_store.db' },
|
14
|
+
'test_postgresql' => { 'adapter' => 'postgresql', 'database' => 'typed_store_test', 'username' => 'postgres' },
|
15
|
+
'test_mysql' => { 'adapter' => 'mysql2', 'database' => 'typed_store_test', 'username' => 'travis' },
|
15
16
|
}
|
16
17
|
|
17
18
|
def define_columns(t)
|
@@ -76,7 +77,8 @@ def define_store_with_attributes(**options)
|
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|
79
|
-
|
80
|
+
MigrationClass = AR_VERSION >= AR_5_0 ? ActiveRecord::Migration["5.0"] : ActiveRecord::Migration
|
81
|
+
class CreateAllTables < MigrationClass
|
80
82
|
|
81
83
|
def self.recreate_table(name, *args, &block)
|
82
84
|
execute "drop table if exists #{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.0
|
4
|
+
version: 1.1.0
|
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: 2017-05-18 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.2'
|
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.2'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: bundler
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- gemfiles/Gemfile.ar-4.1
|
163
163
|
- gemfiles/Gemfile.ar-4.2
|
164
164
|
- gemfiles/Gemfile.ar-5.0
|
165
|
+
- gemfiles/Gemfile.ar-5.1
|
165
166
|
- lib/active_record/typed_store.rb
|
166
167
|
- lib/active_record/typed_store/dsl.rb
|
167
168
|
- lib/active_record/typed_store/extension.rb
|