active_type 0.4.4 → 0.4.5
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/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/README.md +4 -4
- data/gemfiles/Gemfile.3.2.mysql2 +1 -1
- data/gemfiles/Gemfile.3.2.mysql2.lock +16 -11
- data/gemfiles/Gemfile.3.2.sqlite3 +1 -1
- data/gemfiles/Gemfile.3.2.sqlite3.lock +16 -11
- data/gemfiles/Gemfile.4.0.sqlite3 +1 -1
- data/gemfiles/Gemfile.4.0.sqlite3.lock +16 -11
- data/gemfiles/Gemfile.4.1.sqlite3 +1 -1
- data/gemfiles/Gemfile.4.1.sqlite3.lock +16 -11
- data/gemfiles/Gemfile.4.2.1.mysql2 +1 -1
- data/gemfiles/Gemfile.4.2.1.mysql2.lock +16 -11
- data/gemfiles/Gemfile.4.2.1.pg +1 -1
- data/gemfiles/Gemfile.4.2.1.pg.lock +16 -11
- data/gemfiles/Gemfile.4.2.1.sqlite3 +1 -1
- data/gemfiles/Gemfile.4.2.1.sqlite3.lock +16 -11
- data/lib/active_type/version.rb +1 -1
- data/lib/active_type/virtual_attributes.rb +1 -1
- data/spec/active_type/extended_record/single_table_inheritance_spec.rb +6 -6
- data/spec/active_type/extended_record_spec.rb +32 -26
- data/spec/active_type/nested_attributes_spec.rb +51 -51
- data/spec/active_type/object_spec.rb +44 -33
- data/spec/active_type/record_spec.rb +15 -11
- data/spec/active_type/util_spec.rb +25 -25
- data/spec/integration/holidays_spec.rb +13 -13
- data/spec/integration/shape_spec.rb +12 -14
- data/spec/integration/sign_in_spec.rb +12 -12
- data/spec/integration/sign_up_spec.rb +9 -9
- data/spec/shared_examples/accessors.rb +3 -3
- data/spec/shared_examples/belongs_to.rb +2 -2
- data/spec/shared_examples/coercible_columns.rb +27 -27
- data/spec/shared_examples/constructor.rb +2 -2
- data/spec/shared_examples/defaults.rb +10 -10
- data/spec/shared_examples/dirty_tracking.rb +4 -4
- data/spec/shared_examples/dupable.rb +4 -4
- data/spec/shared_examples/mass_assignment.rb +1 -1
- metadata +2 -2
@@ -40,7 +40,7 @@ describe SignUpSpec::User do
|
|
40
40
|
subject.email = "email"
|
41
41
|
subject.password = "password"
|
42
42
|
|
43
|
-
subject.
|
43
|
+
expect(subject).to be_valid
|
44
44
|
end
|
45
45
|
|
46
46
|
end
|
@@ -52,26 +52,26 @@ describe SignUpSpec::SignUp do
|
|
52
52
|
subject.password = "password"
|
53
53
|
subject.terms = true
|
54
54
|
|
55
|
-
subject.
|
56
|
-
subject.errors['email'].
|
55
|
+
expect(subject).not_to be_valid
|
56
|
+
expect(subject.errors['email']).to eq(["can't be blank"])
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'is invalid without accepted terms' do
|
60
60
|
subject.email = "email"
|
61
61
|
subject.password = "password"
|
62
62
|
|
63
|
-
subject.
|
64
|
-
subject.errors['terms'].
|
63
|
+
expect(subject).not_to be_valid
|
64
|
+
expect(subject.errors['terms']).to eq(["must be accepted"])
|
65
65
|
end
|
66
66
|
|
67
67
|
context 'with invalid data' do
|
68
68
|
|
69
69
|
it 'does not save' do
|
70
|
-
subject.save.
|
70
|
+
expect(subject.save).to be_falsey
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'does not send an email' do
|
74
|
-
subject.
|
74
|
+
expect(subject).not_to receive :send_welcome_email
|
75
75
|
subject.save
|
76
76
|
end
|
77
77
|
|
@@ -87,11 +87,11 @@ describe SignUpSpec::SignUp do
|
|
87
87
|
|
88
88
|
it 'does save' do
|
89
89
|
subject.valid?
|
90
|
-
subject.save.
|
90
|
+
expect(subject.save).to eq(true)
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'sends the email' do
|
94
|
-
subject.
|
94
|
+
expect(subject).to receive :send_welcome_email
|
95
95
|
|
96
96
|
subject.save
|
97
97
|
end
|
@@ -20,21 +20,21 @@ shared_examples_for "ActiveRecord-like accessors" do |attributes|
|
|
20
20
|
it 'allows to read and write' do
|
21
21
|
attributes.each do |key, value|
|
22
22
|
subject.send("#{key}=", value)
|
23
|
-
subject.send(key).
|
23
|
+
expect(subject.send(key)).to eq(value)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'allows to read via []' do
|
28
28
|
attributes.each do |key, value|
|
29
29
|
subject.send("#{key}=", value)
|
30
|
-
subject[key].
|
30
|
+
expect(subject[key]).to eq(value)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'allows to write via []=' do
|
35
35
|
attributes.each do |key, value|
|
36
36
|
subject[key] = value
|
37
|
-
subject.send(key).
|
37
|
+
expect(subject.send(key)).to eq(value)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -5,13 +5,13 @@ shared_examples_for 'a belongs_to association' do |association, klass|
|
|
5
5
|
it 'sets the id when assigning a record' do
|
6
6
|
subject.send("#{association}=", record)
|
7
7
|
|
8
|
-
subject.send("#{association}_id").
|
8
|
+
expect(subject.send("#{association}_id")).to eq(record.id)
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'sets the record when assigning an id' do
|
12
12
|
subject.send("#{association}_id=", record.id)
|
13
13
|
|
14
|
-
subject.send("#{association}").
|
14
|
+
expect(subject.send("#{association}")).to eq(record)
|
15
15
|
end
|
16
16
|
|
17
17
|
end
|
@@ -6,19 +6,19 @@ end
|
|
6
6
|
shared_examples_for 'a coercible string column' do |column|
|
7
7
|
|
8
8
|
it 'is nil by default' do
|
9
|
-
subject.send(column).
|
9
|
+
expect(subject.send(column)).to be_nil
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'leaves strings alone' do
|
13
13
|
subject.send(:"#{column}=", "string")
|
14
14
|
|
15
|
-
subject.send(column).
|
15
|
+
expect(subject.send(column)).to eq("string")
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'does not convert blank' do
|
19
19
|
subject.send(:"#{column}=", "")
|
20
20
|
|
21
|
-
subject.send(column).
|
21
|
+
expect(subject.send(column)).to eq("")
|
22
22
|
end
|
23
23
|
|
24
24
|
end
|
@@ -27,25 +27,25 @@ end
|
|
27
27
|
shared_examples_for 'a coercible integer column' do |column|
|
28
28
|
|
29
29
|
it 'is nil by default' do
|
30
|
-
subject.send(column).
|
30
|
+
expect(subject.send(column)).to be_nil
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'leaves integers alone' do
|
34
34
|
subject.send(:"#{column}=", 10)
|
35
35
|
|
36
|
-
subject.send(column).
|
36
|
+
expect(subject.send(column)).to eq(10)
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'converts strings to integers' do
|
40
40
|
subject.send(:"#{column}=", "10")
|
41
41
|
|
42
|
-
subject.send(column).
|
42
|
+
expect(subject.send(column)).to eq(10)
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'converts blank to nil' do
|
46
46
|
subject.send(:"#{column}=", "")
|
47
47
|
|
48
|
-
subject.send(column).
|
48
|
+
expect(subject.send(column)).to be_nil
|
49
49
|
end
|
50
50
|
|
51
51
|
end
|
@@ -54,26 +54,26 @@ end
|
|
54
54
|
shared_examples_for 'a coercible date column' do |column|
|
55
55
|
|
56
56
|
it 'is nil by default' do
|
57
|
-
subject.send(column).
|
57
|
+
expect(subject.send(column)).to be_nil
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'leaves dates alone' do
|
61
61
|
date = Date.today
|
62
62
|
subject.send(:"#{column}=", date)
|
63
63
|
|
64
|
-
subject.send(column).
|
64
|
+
expect(subject.send(column)).to eq(date)
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'converts strings to dates' do
|
68
68
|
subject.send(:"#{column}=", "2010-10-01")
|
69
69
|
|
70
|
-
subject.send(column).
|
70
|
+
expect(subject.send(column)).to eq(Date.new(2010, 10, 1))
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'converts blank to nil' do
|
74
74
|
subject.send(:"#{column}=", "")
|
75
75
|
|
76
|
-
subject.send(column).
|
76
|
+
expect(subject.send(column)).to be_nil
|
77
77
|
end
|
78
78
|
|
79
79
|
end
|
@@ -105,26 +105,26 @@ shared_examples_for 'a coercible time column' do |column|
|
|
105
105
|
comparison.persisted_time = time
|
106
106
|
|
107
107
|
result = subject.send(column)
|
108
|
-
result.
|
109
|
-
result.zone.
|
108
|
+
expect(result).to eq(comparison.persisted_time)
|
109
|
+
expect(result.zone).to eq(comparison.persisted_time.zone)
|
110
110
|
end
|
111
111
|
|
112
112
|
|
113
113
|
it 'is nil by default' do
|
114
|
-
subject.send(column).
|
114
|
+
expect(subject.send(column)).to be_nil
|
115
115
|
end
|
116
116
|
|
117
117
|
it 'leaves times alone' do
|
118
118
|
time = Time.now
|
119
119
|
subject.send(:"#{column}=", time)
|
120
120
|
|
121
|
-
subject.send(column).
|
121
|
+
expect(subject.send(column)).to eq(time)
|
122
122
|
end
|
123
123
|
|
124
124
|
it 'converts strings to times' do
|
125
125
|
subject.send(:"#{column}=", "2010-10-01 12:15")
|
126
126
|
|
127
|
-
subject.send(column).
|
127
|
+
expect(subject.send(column)).to eq(Time.local(2010, 10, 1, 12, 15))
|
128
128
|
end
|
129
129
|
|
130
130
|
it 'behaves consistently with ActiveRecord' do
|
@@ -161,68 +161,68 @@ end
|
|
161
161
|
shared_examples_for 'a coercible boolean column' do |column|
|
162
162
|
|
163
163
|
it 'is nil by default' do
|
164
|
-
subject.send(column).
|
164
|
+
expect(subject.send(column)).to be_nil
|
165
165
|
end
|
166
166
|
|
167
167
|
it 'leaves booleans alone' do
|
168
168
|
subject.send(:"#{column}=", true)
|
169
169
|
|
170
|
-
subject.send(column).
|
170
|
+
expect(subject.send(column)).to eq(true)
|
171
171
|
end
|
172
172
|
|
173
173
|
it 'converts 1 to true' do
|
174
174
|
subject.send(:"#{column}=", "1")
|
175
175
|
|
176
|
-
subject.send(column).
|
176
|
+
expect(subject.send(column)).to eq(true)
|
177
177
|
end
|
178
178
|
|
179
179
|
it 'converts 0 to false' do
|
180
180
|
subject.send(:"#{column}=", "0")
|
181
181
|
|
182
|
-
subject.send(column).
|
182
|
+
expect(subject.send(column)).to eq(false)
|
183
183
|
end
|
184
184
|
|
185
185
|
it 'converts "" to nil' do
|
186
186
|
subject.send(:"#{column}=", "")
|
187
187
|
|
188
|
-
subject.send(column).
|
188
|
+
expect(subject.send(column)).to be_nil
|
189
189
|
end
|
190
190
|
|
191
191
|
it 'converts "true" to true' do
|
192
192
|
subject.send(:"#{column}=", "true")
|
193
193
|
|
194
|
-
subject.send(column).
|
194
|
+
expect(subject.send(column)).to eq(true)
|
195
195
|
end
|
196
196
|
|
197
197
|
it 'converts "false" to false' do
|
198
198
|
subject.send(:"#{column}=", "false")
|
199
199
|
|
200
|
-
subject.send(column).
|
200
|
+
expect(subject.send(column)).to eq(false)
|
201
201
|
end
|
202
202
|
|
203
203
|
end
|
204
204
|
|
205
205
|
shared_examples_for 'an untyped column' do |column|
|
206
206
|
it 'is nil by default' do
|
207
|
-
subject.send(column).
|
207
|
+
expect(subject.send(column)).to be_nil
|
208
208
|
end
|
209
209
|
|
210
210
|
it 'leaves strings alone' do
|
211
211
|
subject.send(:"#{column}=", "string")
|
212
212
|
|
213
|
-
subject.send(column).
|
213
|
+
expect(subject.send(column)).to eq("string")
|
214
214
|
end
|
215
215
|
|
216
216
|
it 'leaves integers alone' do
|
217
217
|
subject.send(:"#{column}=", 17)
|
218
218
|
|
219
|
-
subject.send(column).
|
219
|
+
expect(subject.send(column)).to eq(17)
|
220
220
|
end
|
221
221
|
|
222
222
|
it 'leaves objects alone' do
|
223
223
|
object = Object.new
|
224
224
|
subject.send(:"#{column}=", object)
|
225
225
|
|
226
|
-
subject.send(column).
|
226
|
+
expect(subject.send(column)).to eq(object)
|
227
227
|
end
|
228
228
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
shared_examples_for 'ActiveRecord-like constructors' do |attributes|
|
2
2
|
|
3
3
|
it 'return a new record' do
|
4
|
-
subject.new.
|
4
|
+
expect(subject.new).to be_new_record
|
5
5
|
end
|
6
6
|
|
7
7
|
it 'assigns given attributes' do
|
8
8
|
record = subject.new(attributes)
|
9
9
|
|
10
10
|
attributes.each do |key, value|
|
11
|
-
record.send(key).
|
11
|
+
expect(record.send(key)).to eq(value)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -16,45 +16,45 @@ shared_examples_for "a class accepting attribute defaults" do |klass|
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'can have static defaults' do
|
19
|
-
subject.static_string.
|
19
|
+
expect(subject.static_string).to eq("static string")
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'can have dynamic defaults' do
|
23
|
-
subject.dynamic_string.
|
23
|
+
expect(subject.dynamic_string).to eq("dynamic string")
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'can have defaults refering to instance methods' do
|
27
|
-
subject.referential_string.
|
27
|
+
expect(subject.referential_string).to eq("value")
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'typecasts defaults' do
|
31
|
-
subject.number.
|
31
|
+
expect(subject.number).to eq(10)
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'computes defaults lazily' do
|
35
|
-
subject.
|
36
|
-
subject.computed.
|
35
|
+
expect(subject).to receive(:compute).and_return("computed")
|
36
|
+
expect(subject.computed).to eq("computed")
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'does not compute defaults more than once' do
|
40
|
-
subject.
|
40
|
+
expect(subject).to receive(:compute).exactly(:once).and_return(nil)
|
41
41
|
subject.computed
|
42
42
|
subject.computed
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'does not compute defaults when overriden' do
|
46
46
|
subject.computed = 'not computed'
|
47
|
-
subject.computed.
|
47
|
+
expect(subject.computed).to eq('not computed')
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'does not use defaults when overriden' do
|
51
51
|
subject.static_string = "my string"
|
52
|
-
subject.static_string.
|
52
|
+
expect(subject.static_string).to eq("my string")
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'does not use defaults when overriden with nil' do
|
56
56
|
subject.static_string = nil
|
57
|
-
subject.static_string.
|
57
|
+
expect(subject.static_string).to eq(nil)
|
58
58
|
end
|
59
59
|
|
60
60
|
end
|
@@ -9,7 +9,7 @@ shared_examples_for "a class supporting dirty tracking for virtual attributes" d
|
|
9
9
|
describe '#virtual_attribute_was' do
|
10
10
|
|
11
11
|
it 'always returns nil, since there can be no previously saved value' do
|
12
|
-
subject.virtual_attribute_was.
|
12
|
+
expect(subject.virtual_attribute_was).to be_nil
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
@@ -18,12 +18,12 @@ shared_examples_for "a class supporting dirty tracking for virtual attributes" d
|
|
18
18
|
|
19
19
|
it 'returns true if the attribute is not nil' do
|
20
20
|
subject.virtual_attribute = 'foo'
|
21
|
-
subject.virtual_attribute_changed
|
21
|
+
expect(subject.virtual_attribute_changed?).to eq(true)
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'returns false if the attribute is nil' do
|
25
25
|
subject.virtual_attribute = nil
|
26
|
-
subject.virtual_attribute_changed
|
26
|
+
expect(subject.virtual_attribute_changed?).to be_falsey
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
@@ -31,7 +31,7 @@ shared_examples_for "a class supporting dirty tracking for virtual attributes" d
|
|
31
31
|
describe '#virtual_attribute_will_change!' do
|
32
32
|
|
33
33
|
it 'is implemented for compatibility with ActiveModel::Dirty, but does nothing' do
|
34
|
-
subject.
|
34
|
+
expect(subject).to respond_to(:virtual_attribute_will_change!)
|
35
35
|
expect { subject.virtual_attribute_will_change! }.to_not raise_error
|
36
36
|
end
|
37
37
|
|
@@ -13,8 +13,8 @@ shared_examples_for "a class supporting dup for attributes" do |klass|
|
|
13
13
|
duped = subject.dup
|
14
14
|
duped.attribute = "bar"
|
15
15
|
|
16
|
-
subject.attribute.
|
17
|
-
duped.attribute.
|
16
|
+
expect(subject.attribute).to eq("foo")
|
17
|
+
expect(duped.attribute).to eq("bar")
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'does a deep copy' do
|
@@ -22,8 +22,8 @@ shared_examples_for "a class supporting dup for attributes" do |klass|
|
|
22
22
|
duped = subject.dup
|
23
23
|
duped.attribute.merge!(:foo => "baz")
|
24
24
|
|
25
|
-
subject.attribute.
|
26
|
-
duped.attribute.
|
25
|
+
expect(subject.attribute).to eq({ :foo => "bar" })
|
26
|
+
expect(duped.attribute).to eq({ :foo => "baz" })
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
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.4.
|
4
|
+
version: 0.4.5
|
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-01
|
12
|
+
date: 2016-02-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|