active_type 0.6.0 → 0.6.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 +4 -4
- data/README.md +21 -0
- data/active_type.gemspec +1 -1
- data/gemfiles/Gemfile.3.2.mysql2.lock +1 -1
- data/gemfiles/Gemfile.3.2.sqlite3.lock +1 -1
- data/gemfiles/Gemfile.4.0.sqlite3.lock +1 -1
- data/gemfiles/Gemfile.4.1.sqlite3.lock +1 -1
- data/gemfiles/Gemfile.4.2.1.mysql2.lock +1 -1
- data/gemfiles/Gemfile.4.2.1.pg.lock +1 -1
- data/gemfiles/Gemfile.4.2.1.sqlite3.lock +1 -1
- data/gemfiles/Gemfile.5.0.0.mysql2.lock +1 -1
- data/gemfiles/Gemfile.5.0.0.pg.lock +1 -1
- data/gemfiles/Gemfile.5.0.0.sqlite3.lock +1 -1
- data/lib/active_type/version.rb +1 -1
- metadata +3 -53
- data/spec/active_type/extended_record/single_table_inheritance_spec.rb +0 -62
- data/spec/active_type/extended_record_spec.rb +0 -233
- data/spec/active_type/nested_attributes_spec.rb +0 -704
- data/spec/active_type/object_spec.rb +0 -463
- data/spec/active_type/record_spec.rb +0 -274
- data/spec/active_type/util_spec.rb +0 -142
- data/spec/integration/holidays_spec.rb +0 -102
- data/spec/integration/shape_spec.rb +0 -110
- data/spec/integration/sign_in_spec.rb +0 -101
- data/spec/integration/sign_up_spec.rb +0 -102
- data/spec/shared_examples/accessors.rb +0 -24
- data/spec/shared_examples/belongs_to.rb +0 -17
- data/spec/shared_examples/coercible_columns.rb +0 -248
- data/spec/shared_examples/constructor.rb +0 -30
- data/spec/shared_examples/defaults.rb +0 -60
- data/spec/shared_examples/dirty_tracking.rb +0 -40
- data/spec/shared_examples/dupable.rb +0 -31
- data/spec/shared_examples/mass_assignment.rb +0 -26
- data/spec/spec_helper.rb +0 -28
- data/spec/support/database.rb +0 -53
- data/spec/support/database.sample.yml +0 -3
- data/spec/support/error_on.rb +0 -12
- data/spec/support/i18n.rb +0 -1
- data/spec/support/protected_params.rb +0 -20
- data/spec/support/time_zone.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92c728f619a6d8e84a202bb91649085ebf7af041
|
4
|
+
data.tar.gz: ebdfd555c423a97ac64092948b5b1fae8523f1ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1cbed5159da5c1b41e18da5c3656c5a2d2ccef766e317e25272fa7212cd17671754614c1b7ecf2648547808bc23001aa69a4112227348490deacfcc15ea8438
|
7
|
+
data.tar.gz: ba963a430fc2d990c7bfc566d63adbdccbcf60f95dc65d504428c05b4313dad3c8af98c408654a34660030a571a8a50bf989d5a9ae1bcbb79c7a78fe6619f840
|
data/README.md
CHANGED
@@ -164,6 +164,27 @@ SignIn.new(email: "tobias@example.org").nickname # "tobias"
|
|
164
164
|
SignIn.new(email: "tobias@example.org", :nickname => "kratob").nickname # "kratob"
|
165
165
|
```
|
166
166
|
|
167
|
+
### Overriding accessors
|
168
|
+
|
169
|
+
You can override attribute getters and setters using `super`:
|
170
|
+
|
171
|
+
```
|
172
|
+
class SignIn < ActiveType::Object
|
173
|
+
|
174
|
+
attribute :email, :string
|
175
|
+
attribute :nickname, :string
|
176
|
+
|
177
|
+
def email
|
178
|
+
super.downcase
|
179
|
+
end
|
180
|
+
|
181
|
+
def nickname=(value)
|
182
|
+
super(value.titeleize)
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
```
|
187
|
+
|
167
188
|
### Nested attributes
|
168
189
|
|
169
190
|
ActiveType supports its own variant of nested attributes via the `nests_one` /
|
data/active_type.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = s.summary
|
12
12
|
s.license = 'MIT'
|
13
13
|
|
14
|
-
s.files = `git ls-files -z`.split("\x0")
|
14
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
15
15
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
16
16
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
17
17
|
s.require_paths = ["lib"]
|
data/lib/active_type/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_type
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Kraze
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-12-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -103,31 +103,6 @@ files:
|
|
103
103
|
- lib/active_type/util.rb
|
104
104
|
- lib/active_type/version.rb
|
105
105
|
- lib/active_type/virtual_attributes.rb
|
106
|
-
- spec/active_type/extended_record/single_table_inheritance_spec.rb
|
107
|
-
- spec/active_type/extended_record_spec.rb
|
108
|
-
- spec/active_type/nested_attributes_spec.rb
|
109
|
-
- spec/active_type/object_spec.rb
|
110
|
-
- spec/active_type/record_spec.rb
|
111
|
-
- spec/active_type/util_spec.rb
|
112
|
-
- spec/integration/holidays_spec.rb
|
113
|
-
- spec/integration/shape_spec.rb
|
114
|
-
- spec/integration/sign_in_spec.rb
|
115
|
-
- spec/integration/sign_up_spec.rb
|
116
|
-
- spec/shared_examples/accessors.rb
|
117
|
-
- spec/shared_examples/belongs_to.rb
|
118
|
-
- spec/shared_examples/coercible_columns.rb
|
119
|
-
- spec/shared_examples/constructor.rb
|
120
|
-
- spec/shared_examples/defaults.rb
|
121
|
-
- spec/shared_examples/dirty_tracking.rb
|
122
|
-
- spec/shared_examples/dupable.rb
|
123
|
-
- spec/shared_examples/mass_assignment.rb
|
124
|
-
- spec/spec_helper.rb
|
125
|
-
- spec/support/database.rb
|
126
|
-
- spec/support/database.sample.yml
|
127
|
-
- spec/support/error_on.rb
|
128
|
-
- spec/support/i18n.rb
|
129
|
-
- spec/support/protected_params.rb
|
130
|
-
- spec/support/time_zone.rb
|
131
106
|
homepage: https://github.com/makandra/active_type
|
132
107
|
licenses:
|
133
108
|
- MIT
|
@@ -152,29 +127,4 @@ rubygems_version: 2.4.5.1
|
|
152
127
|
signing_key:
|
153
128
|
specification_version: 4
|
154
129
|
summary: Make any Ruby object quack like ActiveRecord
|
155
|
-
test_files:
|
156
|
-
- spec/active_type/extended_record/single_table_inheritance_spec.rb
|
157
|
-
- spec/active_type/extended_record_spec.rb
|
158
|
-
- spec/active_type/nested_attributes_spec.rb
|
159
|
-
- spec/active_type/object_spec.rb
|
160
|
-
- spec/active_type/record_spec.rb
|
161
|
-
- spec/active_type/util_spec.rb
|
162
|
-
- spec/integration/holidays_spec.rb
|
163
|
-
- spec/integration/shape_spec.rb
|
164
|
-
- spec/integration/sign_in_spec.rb
|
165
|
-
- spec/integration/sign_up_spec.rb
|
166
|
-
- spec/shared_examples/accessors.rb
|
167
|
-
- spec/shared_examples/belongs_to.rb
|
168
|
-
- spec/shared_examples/coercible_columns.rb
|
169
|
-
- spec/shared_examples/constructor.rb
|
170
|
-
- spec/shared_examples/defaults.rb
|
171
|
-
- spec/shared_examples/dirty_tracking.rb
|
172
|
-
- spec/shared_examples/dupable.rb
|
173
|
-
- spec/shared_examples/mass_assignment.rb
|
174
|
-
- spec/spec_helper.rb
|
175
|
-
- spec/support/database.rb
|
176
|
-
- spec/support/database.sample.yml
|
177
|
-
- spec/support/error_on.rb
|
178
|
-
- spec/support/i18n.rb
|
179
|
-
- spec/support/protected_params.rb
|
180
|
-
- spec/support/time_zone.rb
|
130
|
+
test_files: []
|
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module STISpec
|
4
|
-
|
5
|
-
class Parent < ActiveRecord::Base
|
6
|
-
self.table_name = 'sti_records'
|
7
|
-
end
|
8
|
-
|
9
|
-
class Child < Parent
|
10
|
-
end
|
11
|
-
|
12
|
-
class ExtendedChild < ActiveType::Record[Child]
|
13
|
-
end
|
14
|
-
|
15
|
-
class ExtendedExtendedChild < ActiveType::Record[ExtendedChild]
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
|
21
|
-
describe 'ActiveType::Record[STIModel]' do
|
22
|
-
|
23
|
-
describe 'persistence' do
|
24
|
-
|
25
|
-
def should_save_and_load(save_as, load_as)
|
26
|
-
record = save_as.new(:persisted_string => "string")
|
27
|
-
expect(record.save).to eq(true)
|
28
|
-
|
29
|
-
reloaded_child = load_as.find(record.id)
|
30
|
-
expect(reloaded_child.persisted_string).to eq("string")
|
31
|
-
expect(reloaded_child).to be_a(load_as)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'can save and load the active type record' do
|
35
|
-
|
36
|
-
should_save_and_load(STISpec::ExtendedChild, STISpec::ExtendedChild)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'can save as base and load as active type record' do
|
40
|
-
should_save_and_load(STISpec::Child, STISpec::ExtendedChild)
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'can save as active type and load as base record' do
|
44
|
-
should_save_and_load(STISpec::ExtendedChild, STISpec::Child)
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'can load via the base class and convert to active type record' do
|
48
|
-
record = STISpec::ExtendedChild.new(:persisted_string => "string")
|
49
|
-
expect(record.save).to eq(true)
|
50
|
-
|
51
|
-
reloaded_child = STISpec::Child.find(record.id).becomes(STISpec::ExtendedChild)
|
52
|
-
expect(reloaded_child.persisted_string).to eq("string")
|
53
|
-
expect(reloaded_child).to be_a(STISpec::ExtendedChild)
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'can save classes further down the inheritance tree' do
|
57
|
-
should_save_and_load(STISpec::ExtendedExtendedChild, STISpec::ExtendedExtendedChild)
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
@@ -1,233 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module ExtendedRecordSpec
|
4
|
-
|
5
|
-
class BaseRecord < ActiveRecord::Base
|
6
|
-
self.table_name = 'records'
|
7
|
-
end
|
8
|
-
|
9
|
-
class BaseActiveTypeRecord < ActiveType::Record
|
10
|
-
self.table_name = 'records'
|
11
|
-
|
12
|
-
attribute :virtual_string, :string
|
13
|
-
end
|
14
|
-
|
15
|
-
class ExtendedRecord < ActiveType::Record[BaseRecord]
|
16
|
-
attribute :another_virtual_string, :string
|
17
|
-
end
|
18
|
-
|
19
|
-
class ExtendedActiveTypeRecord < ActiveType::Record[BaseActiveTypeRecord]
|
20
|
-
attribute :another_virtual_string, :string
|
21
|
-
end
|
22
|
-
|
23
|
-
class InheritingFromExtendedRecord < ExtendedRecord
|
24
|
-
attribute :yet_another_virtual_string, :string
|
25
|
-
end
|
26
|
-
|
27
|
-
class ExtendedRecordWithValidations < ExtendedActiveTypeRecord
|
28
|
-
validates :persisted_string, :presence => true
|
29
|
-
validates :virtual_string, :presence => true
|
30
|
-
validates :another_virtual_string, :presence => true
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
describe "ActiveType::Record[ActiveRecord::Base]" do
|
37
|
-
|
38
|
-
subject { ExtendedRecordSpec::ExtendedRecord.new }
|
39
|
-
|
40
|
-
it 'is inherits from the base type' do
|
41
|
-
expect(subject).to be_a(ExtendedRecordSpec::BaseRecord)
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'has the same model name as the base class' do
|
45
|
-
expect(subject.class.model_name.singular).to eq(ExtendedRecordSpec::BaseRecord.model_name.singular)
|
46
|
-
end
|
47
|
-
|
48
|
-
describe 'constructors' do
|
49
|
-
subject { ExtendedRecordSpec::ExtendedRecord }
|
50
|
-
|
51
|
-
it_should_behave_like 'ActiveRecord-like constructors', { :persisted_string => "persisted string", :another_virtual_string => "another virtual string" }
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '#attributes' do
|
55
|
-
|
56
|
-
it 'returns a hash of virtual and persisted attributes' do
|
57
|
-
subject.persisted_string = "string"
|
58
|
-
subject.another_virtual_string = "string"
|
59
|
-
|
60
|
-
expect(subject.attributes).to eq({
|
61
|
-
"another_virtual_string" => "string",
|
62
|
-
"id" => nil,
|
63
|
-
"persisted_string" => "string",
|
64
|
-
"persisted_integer" => nil,
|
65
|
-
"persisted_time" => nil,
|
66
|
-
"persisted_date" => nil,
|
67
|
-
"persisted_boolean" => nil
|
68
|
-
})
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
describe 'accessors' do
|
74
|
-
it_should_behave_like 'ActiveRecord-like accessors', { :persisted_string => "persisted string", :another_virtual_string => "another virtual string" }
|
75
|
-
end
|
76
|
-
|
77
|
-
describe 'persistence' do
|
78
|
-
it 'persists to the database' do
|
79
|
-
subject.persisted_string = "persisted string"
|
80
|
-
expect(subject.save).to eq(true)
|
81
|
-
|
82
|
-
expect(subject.class.find(subject.id).persisted_string).to eq("persisted string")
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe '.find' do
|
87
|
-
it 'returns an instance of the extended model' do
|
88
|
-
subject.save
|
89
|
-
|
90
|
-
expect(subject.class.find(subject.id)).to be_a(subject.class)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '.base_class' do
|
95
|
-
it 'is the base class inherited from' do
|
96
|
-
expect(subject.class.base_class).to eq(ExtendedRecordSpec::BaseRecord)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
describe "class ... < ActiveType::Record[ActiveRecord::Base]" do
|
103
|
-
|
104
|
-
subject { ExtendedRecordSpec::InheritingFromExtendedRecord.new }
|
105
|
-
|
106
|
-
it 'is inherits from the base type' do
|
107
|
-
expect(subject).to be_a(ExtendedRecordSpec::ExtendedRecord)
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'has the same model name as the base class' do
|
111
|
-
expect(subject.class.model_name.singular).to eq(ExtendedRecordSpec::BaseRecord.model_name.singular)
|
112
|
-
end
|
113
|
-
|
114
|
-
describe '#attributes' do
|
115
|
-
|
116
|
-
it 'returns a hash of virtual and persisted attributes' do
|
117
|
-
subject.persisted_string = "string"
|
118
|
-
subject.another_virtual_string = "string"
|
119
|
-
subject.yet_another_virtual_string = "string"
|
120
|
-
|
121
|
-
expect(subject.attributes).to eq({
|
122
|
-
"another_virtual_string" => "string",
|
123
|
-
"yet_another_virtual_string" => "string",
|
124
|
-
"id" => nil,
|
125
|
-
"persisted_string" => "string",
|
126
|
-
"persisted_integer" => nil,
|
127
|
-
"persisted_time" => nil,
|
128
|
-
"persisted_date" => nil,
|
129
|
-
"persisted_boolean" => nil
|
130
|
-
})
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
describe 'persistence' do
|
136
|
-
it 'persists to the database' do
|
137
|
-
subject.persisted_string = "persisted string"
|
138
|
-
expect(subject.save).to eq(true)
|
139
|
-
|
140
|
-
expect(subject.class.find(subject.id).persisted_string).to eq("persisted string")
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
describe '.find' do
|
145
|
-
it 'returns an instance of the inheriting model' do
|
146
|
-
subject.save
|
147
|
-
|
148
|
-
expect(subject.class.find(subject.id)).to be_a(subject.class)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
end
|
153
|
-
|
154
|
-
describe "ActiveType::Record[ActiveType::Record]" do
|
155
|
-
|
156
|
-
subject { ExtendedRecordSpec::ExtendedActiveTypeRecord.new }
|
157
|
-
|
158
|
-
it 'is inherits from the base type' do
|
159
|
-
expect(subject).to be_a(ExtendedRecordSpec::BaseActiveTypeRecord)
|
160
|
-
end
|
161
|
-
|
162
|
-
it 'has the same model name as the base class' do
|
163
|
-
expect(subject.class.model_name.singular).to eq(ExtendedRecordSpec::BaseActiveTypeRecord.model_name.singular)
|
164
|
-
end
|
165
|
-
|
166
|
-
describe 'constructors' do
|
167
|
-
subject { ExtendedRecordSpec::ExtendedActiveTypeRecord }
|
168
|
-
|
169
|
-
it_should_behave_like 'ActiveRecord-like constructors', { :persisted_string => "persisted string", :virtual_string => "virtual string", :another_virtual_string => "another virtual string" }
|
170
|
-
end
|
171
|
-
|
172
|
-
describe '#attributes' do
|
173
|
-
|
174
|
-
it 'returns a hash of virtual and persisted attributes' do
|
175
|
-
subject.persisted_string = "string"
|
176
|
-
subject.virtual_string = "string"
|
177
|
-
|
178
|
-
expect(subject.attributes).to eq({
|
179
|
-
"virtual_string" => "string",
|
180
|
-
"another_virtual_string" => nil,
|
181
|
-
"id" => nil,
|
182
|
-
"persisted_string" => "string",
|
183
|
-
"persisted_integer" => nil,
|
184
|
-
"persisted_time" => nil,
|
185
|
-
"persisted_date" => nil,
|
186
|
-
"persisted_boolean" => nil
|
187
|
-
})
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
describe 'accessors' do
|
193
|
-
it_should_behave_like 'ActiveRecord-like accessors', { :persisted_string => "persisted string", :virtual_string => "virtual string", :another_virtual_string => "another virtual string" }
|
194
|
-
end
|
195
|
-
|
196
|
-
describe 'validations' do
|
197
|
-
subject { ExtendedRecordSpec::ExtendedRecordWithValidations.new }
|
198
|
-
|
199
|
-
it 'has 1 error_on' do
|
200
|
-
expect(subject.error_on(:persisted_string).size).to eq(1)
|
201
|
-
end
|
202
|
-
it 'has 1 error_on' do
|
203
|
-
expect(subject.error_on(:virtual_string).size).to eq(1)
|
204
|
-
end
|
205
|
-
it 'has 1 error_on' do
|
206
|
-
expect(subject.error_on(:another_virtual_string).size).to eq(1)
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
describe 'persistence' do
|
211
|
-
it 'persists to the database' do
|
212
|
-
subject.persisted_string = "persisted string"
|
213
|
-
expect(subject.save).to eq(true)
|
214
|
-
|
215
|
-
expect(subject.class.find(subject.id).persisted_string).to eq("persisted string")
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
describe '.find' do
|
220
|
-
it 'returns an instance of the extended model' do
|
221
|
-
subject.save
|
222
|
-
|
223
|
-
expect(subject.class.find(subject.id)).to be_a(subject.class)
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
describe '.base_class' do
|
228
|
-
it 'is the base class inherited from' do
|
229
|
-
expect(subject.class.base_class).to eq(ExtendedRecordSpec::BaseActiveTypeRecord)
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
end
|