simple_model 1.2.26 → 1.2.27
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 +8 -8
- data/benchmarks/simple_model.rb +68 -13
- data/gemfiles/4.2.gemfile +2 -2
- data/lib/simple_model/attributes.rb +84 -66
- data/lib/simple_model/extend_core.rb +1 -1
- data/lib/simple_model/version.rb +1 -1
- data/spec/attributes_spec.rb +414 -246
- data/spec/base_spec.rb +176 -0
- data/spec/error_helpers_spec.rb +1 -1
- data/spec/extend_core_spec.rb +54 -53
- metadata +4 -4
- data/spec/simple_model_spec.rb +0 -247
data/spec/base_spec.rb
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
require 'spec_helper.rb'
|
2
|
+
|
3
|
+
describe SimpleModel::Base do
|
4
|
+
# We need a clean class for each spec
|
5
|
+
|
6
|
+
around(:each) do |example|
|
7
|
+
class BaseTest < SimpleModel::Base; end
|
8
|
+
|
9
|
+
example.run
|
10
|
+
|
11
|
+
Object.send(:remove_const,:BaseTest) if defined?(:BaseTest)
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
context 'action methods' do
|
16
|
+
describe '#save' do
|
17
|
+
it "should perform the supplied methods" do
|
18
|
+
BaseTest.save :test
|
19
|
+
BaseTest.has_attribute :foo
|
20
|
+
BaseTest.send(:define_method, :test) do
|
21
|
+
self.foo = "test"
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
|
25
|
+
base_test = BaseTest.new()
|
26
|
+
|
27
|
+
base_test.save
|
28
|
+
base_test.foo.should eql("test")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be false if validation fails" do
|
32
|
+
BaseTest.save :test
|
33
|
+
BaseTest.has_attribute :foo
|
34
|
+
BaseTest.validates :foo, :presence => true
|
35
|
+
BaseTest.send(:define_method, :test) do
|
36
|
+
return true
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
base_test = BaseTest.new()
|
41
|
+
expect(base_test).to_not be_valid
|
42
|
+
expect(base_test.save).to eql(false)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#save!' do
|
47
|
+
it "should perform the supplied methods" do
|
48
|
+
BaseTest.save :test
|
49
|
+
BaseTest.has_attribute :foo
|
50
|
+
BaseTest.send(:define_method, :test) do
|
51
|
+
self.foo = "test"
|
52
|
+
return true
|
53
|
+
end
|
54
|
+
|
55
|
+
base_test = BaseTest.new()
|
56
|
+
|
57
|
+
base_test.save!
|
58
|
+
base_test.foo.should eql("test")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should be false if validation fails" do
|
62
|
+
BaseTest.save :test
|
63
|
+
BaseTest.has_attribute :foo
|
64
|
+
BaseTest.validates :foo, :presence => true
|
65
|
+
BaseTest.send(:define_method, :test) do
|
66
|
+
return true
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
base_test = BaseTest.new()
|
71
|
+
expect(base_test).to_not be_valid
|
72
|
+
expect{base_test.save!}.to raise_error(SimpleModel::ValidationError)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#destroy' do
|
77
|
+
it "should not preform validation by default" do
|
78
|
+
BaseTest.destroy :test
|
79
|
+
BaseTest.has_attribute :foo
|
80
|
+
BaseTest.validates :foo, :presence => true
|
81
|
+
BaseTest.send(:define_method, :test) do
|
82
|
+
return true
|
83
|
+
end
|
84
|
+
|
85
|
+
base_test = BaseTest.new()
|
86
|
+
expect(base_test.destroy).to eql(true)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
context 'Callbacks' do
|
93
|
+
before(:each) do
|
94
|
+
class BaseTest < SimpleModel::Base
|
95
|
+
save :my_save_method
|
96
|
+
before_validation :set_foo
|
97
|
+
after_validation :set_bar
|
98
|
+
attr_accessor :foo,:bar
|
99
|
+
validates :foo, :presence => true
|
100
|
+
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def my_save_method
|
105
|
+
true
|
106
|
+
end
|
107
|
+
|
108
|
+
def set_foo
|
109
|
+
self.foo = "foo"
|
110
|
+
end
|
111
|
+
|
112
|
+
def set_bar
|
113
|
+
self.bar = "bar"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
let(:base_test) { BaseTest.new() }
|
119
|
+
|
120
|
+
it "should implement ActiveModel::Validations::Callbacks" do
|
121
|
+
base_test.valid?
|
122
|
+
|
123
|
+
expect(base_test.foo).to eql('foo')
|
124
|
+
expect(base_test.bar).to eql('bar')
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should implement ActiveModel::Callbacks" do
|
128
|
+
base_test.save
|
129
|
+
|
130
|
+
expect(base_test.foo).to eql('foo')
|
131
|
+
expect(base_test.bar).to eql('bar')
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
context "regression tests" do
|
137
|
+
before(:each) do
|
138
|
+
class TestStuff < SimpleModel::Base
|
139
|
+
has_attribute :bar
|
140
|
+
validates_presence_of :bar
|
141
|
+
end
|
142
|
+
|
143
|
+
class NewTestStuff < TestStuff
|
144
|
+
has_boolean :foo
|
145
|
+
end
|
146
|
+
|
147
|
+
class OtherStuff < NewTestStuff
|
148
|
+
has_attribute :other
|
149
|
+
validates_numericality_of :other
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
it "should merge defined attributes when class are inherited" do
|
154
|
+
NewTestStuff.attribute_defined?(:bar).blank?.should eql(false)
|
155
|
+
NewTestStuff.attribute_defined?(:foo).blank?.should eql(false)
|
156
|
+
end
|
157
|
+
it "should merge defined attributes when class are inherited" do
|
158
|
+
TestStuff.new.respond_to?(:bar_will_change!).should eql(true)
|
159
|
+
t = OtherStuff.new
|
160
|
+
t.bar = [1,2,4]
|
161
|
+
NewTestStuff.new.respond_to?(:bar_will_change!).should eql(true)
|
162
|
+
NewTestStuff.new.respond_to?(:foo_will_change!).should eql(true)
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should not throw exception method missing" do
|
166
|
+
o = OtherStuff.new
|
167
|
+
lambda { o.valid? }.should_not raise_error
|
168
|
+
end
|
169
|
+
|
170
|
+
after(:each) do
|
171
|
+
[:OtherStuff,:NewTestStuff].each do |con|
|
172
|
+
Object.send(:remove_const,con)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
data/spec/error_helpers_spec.rb
CHANGED
data/spec/extend_core_spec.rb
CHANGED
@@ -4,32 +4,32 @@ describe SimpleModel::ExtendCore, 'Float.rb' do
|
|
4
4
|
include SimpleModel::ExtendCore
|
5
5
|
end
|
6
6
|
|
7
|
-
describe
|
7
|
+
describe '#round_to' do
|
8
8
|
it "should return float rounded to specified precision" do
|
9
|
-
0.5122.round_to.
|
10
|
-
0.3333.round_to(1).
|
11
|
-
0.33335.round_to(2).
|
12
|
-
0.33335.round_to(4).
|
9
|
+
expect(0.5122.round_to).to eql(1.0)
|
10
|
+
expect(0.3333.round_to(1)).to eql(0.3)
|
11
|
+
expect(0.33335.round_to(2)).to eql(0.33)
|
12
|
+
expect(0.33335.round_to(4)).to eql(0.3334)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
describe
|
17
|
-
it
|
18
|
-
|
19
|
-
end
|
16
|
+
describe '#to_currency_s' do
|
17
|
+
it { expect(0.333.to_currency_s).to be_a(String) }
|
18
|
+
|
20
19
|
it "should prefix string with currency symbol" do
|
21
|
-
5.12.to_currency_s.include?("$").
|
20
|
+
expect(5.12.to_currency_s.include?("$")).to eql(true)
|
22
21
|
end
|
23
|
-
|
24
|
-
|
22
|
+
|
23
|
+
it "should pad with zeros for cents" do
|
24
|
+
expect(5.0.to_currency_s).to eql("$5.00")
|
25
25
|
end
|
26
26
|
it "should round string to nearest tenth" do
|
27
|
-
0.333.to_currency_s.
|
27
|
+
expect(0.333.to_currency_s).to eql("$0.33")
|
28
28
|
end
|
29
29
|
it "should add commas to long numbers" do
|
30
|
-
500000000000.0.to_currency_s.
|
31
|
-
50000000000.0.to_currency_s.
|
32
|
-
5000000000.0.to_currency_s.
|
30
|
+
expect(500000000000.0.to_currency_s).to eql("$500,000,000,000.00")
|
31
|
+
expect(50000000000.0.to_currency_s).to eql("$50,000,000,000.00")
|
32
|
+
expect(5000000000.0.to_currency_s).to eql("$5,000,000,000.00")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -38,60 +38,61 @@ describe SimpleModel::ExtendCore, 'String.rb' do
|
|
38
38
|
before(:all) do
|
39
39
|
include SimpleModel::ExtendCore
|
40
40
|
end
|
41
|
-
|
41
|
+
describe '#safe_datetime_string' do
|
42
42
|
it "should set US formated datetime string to international" do
|
43
|
-
"12/31/2010".safe_datetime_string.
|
44
|
-
"12/31/2010T23:31:59".safe_datetime_string.
|
45
|
-
"12/31/2010 23:31:59".safe_datetime_string.
|
43
|
+
expect("12/31/2010".safe_datetime_string).to eql("2010-12-31")
|
44
|
+
expect("12/31/2010T23:31:59".safe_datetime_string).to eql("2010-12-31T23:31:59")
|
45
|
+
expect("12/31/2010 23:31:59".safe_datetime_string).to eql("2010-12-31 23:31:59")
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
49
|
-
|
48
|
+
|
49
|
+
describe '#to_b' do
|
50
50
|
it "should return a Boolean" do
|
51
|
-
"1".to_b.class.
|
52
|
-
"".to_b.class.
|
51
|
+
expect("1".to_b.class).to eql(TrueClass)
|
52
|
+
expect("".to_b.class).to eql(FalseClass)
|
53
53
|
end
|
54
54
|
it "should return true if string is '1' or 't' or 'true'"do
|
55
55
|
['1','t','true'].each do |s|
|
56
|
-
s.to_b.
|
56
|
+
expect(s.to_b).to eql(true)
|
57
57
|
end
|
58
|
-
end
|
58
|
+
end
|
59
59
|
end
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
"\/Date(1310669017000)\/".to_date.
|
70
|
-
"\/Date(1310669017000)\/".to_date.
|
61
|
+
describe '#to_date' do
|
62
|
+
context "US formatted date strings" do
|
63
|
+
it {expect {"12/31/2010".to_date}.to_not raise_error }
|
64
|
+
it {expect("12/31/2010".to_date).to be_a(Date)}
|
65
|
+
it {expect("12/31/2010".to_date).to eql(Date.parse("2010-12-31"))}
|
66
|
+
end
|
67
|
+
context "C# JSON datetime stamp" do
|
68
|
+
it { expect {"\/Date(1310669017000)\/".to_date}.to_not raise_error }
|
69
|
+
it { expect("\/Date(1310669017000)\/".to_date).to be_a(Date) }
|
70
|
+
it { expect("\/Date(1310669017000)\/".to_date).to eql(Date.parse("2011-07-14")) }
|
71
71
|
end
|
72
72
|
end
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
"12/31/2010 12:00:00".to_time.
|
78
|
-
"12/31/2010 12:00:00".to_time.
|
73
|
+
|
74
|
+
describe '#to_time' do
|
75
|
+
context "US formatted date strings" do
|
76
|
+
it { expect {"12/31/2010 12:00:00".to_time}.to_not raise_error }
|
77
|
+
it { expect("12/31/2010 12:00:00".to_time).to be_kind_of(Time) }
|
78
|
+
it { expect("12/31/2010 12:00:00".to_time).to eql(Time.parse("2010-12-31 12:00:00")) }
|
79
79
|
end
|
80
|
-
|
81
|
-
|
82
|
-
"\/Date(1310669017000)\/".to_time.
|
80
|
+
|
81
|
+
context "C# JSON datetime stamp" do
|
82
|
+
it { expect {"\/Date(1310669017000)\/".to_time}.to_not raise_error }
|
83
|
+
it { expect("\/Date(1310669017000)\/".to_time).to be_kind_of(Time) }
|
83
84
|
end
|
84
85
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
"$5,000.006".to_f.
|
86
|
+
|
87
|
+
describe '#to_f' do
|
88
|
+
context "contains non-numeric values" do
|
89
|
+
it { expect("$5,000.006".to_f).to eql(5000.006) }
|
89
90
|
end
|
90
91
|
end
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
"$5,000.006".to_currency.
|
92
|
+
|
93
|
+
describe '#to_currency' do
|
94
|
+
context "contains non-numeric values" do
|
95
|
+
it { expect("$5,000.006".to_currency).to eql(BigDecimal("5000.006")) }
|
95
96
|
end
|
96
97
|
end
|
97
98
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua T Mckinney
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -125,9 +125,9 @@ files:
|
|
125
125
|
- lib/simple_model/version.rb
|
126
126
|
- simple_model.gemspec
|
127
127
|
- spec/attributes_spec.rb
|
128
|
+
- spec/base_spec.rb
|
128
129
|
- spec/error_helpers_spec.rb
|
129
130
|
- spec/extend_core_spec.rb
|
130
|
-
- spec/simple_model_spec.rb
|
131
131
|
- spec/spec_helper.rb
|
132
132
|
homepage: ''
|
133
133
|
licenses: []
|
@@ -154,7 +154,7 @@ specification_version: 4
|
|
154
154
|
summary: Simpifies building tableless models or models backed by webservices
|
155
155
|
test_files:
|
156
156
|
- spec/attributes_spec.rb
|
157
|
+
- spec/base_spec.rb
|
157
158
|
- spec/error_helpers_spec.rb
|
158
159
|
- spec/extend_core_spec.rb
|
159
|
-
- spec/simple_model_spec.rb
|
160
160
|
- spec/spec_helper.rb
|
data/spec/simple_model_spec.rb
DELETED
@@ -1,247 +0,0 @@
|
|
1
|
-
require 'spec_helper.rb'
|
2
|
-
|
3
|
-
describe SimpleModel do
|
4
|
-
context 'action methods' do
|
5
|
-
describe "save" do
|
6
|
-
it "should perform the supplied methods" do
|
7
|
-
class TestStuff < SimpleModel::Base
|
8
|
-
save :test
|
9
|
-
attr_accessor :foo
|
10
|
-
|
11
|
-
def test
|
12
|
-
self.foo = "test"
|
13
|
-
return true
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
t = TestStuff.new
|
18
|
-
t.save
|
19
|
-
t.foo.should eql("test")
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should be false if validation fails" do
|
23
|
-
class TestStuff < SimpleModel::Base
|
24
|
-
save :test
|
25
|
-
has_decimal :price
|
26
|
-
validates_inclusion_of :price, :in => 10..25
|
27
|
-
validates :price, :presence => true
|
28
|
-
|
29
|
-
|
30
|
-
def test
|
31
|
-
true
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
t = TestStuff.new
|
36
|
-
t.save.should eql(false)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "destroy" do
|
41
|
-
it "should not preform validation by default" do
|
42
|
-
class TestStuff < SimpleModel::Base
|
43
|
-
destroy :test
|
44
|
-
attr_accessor :foo
|
45
|
-
validates :foo, :presence => true
|
46
|
-
def test
|
47
|
-
return true
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
t = TestStuff.new
|
52
|
-
t.destroy.should eql(true)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
context "action methods that end with '!'" do
|
56
|
-
it 'should raise exception if validation fails' do
|
57
|
-
class TestStuff < SimpleModel::Base
|
58
|
-
save :my_save_method
|
59
|
-
has_attributes :foo
|
60
|
-
|
61
|
-
def my_save_method
|
62
|
-
false
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
t = TestStuff.new
|
67
|
-
lambda {t.save!}.should raise_error(SimpleModel::ActionError)
|
68
|
-
end
|
69
|
-
it 'should raise exception if validation fails' do
|
70
|
-
class TestStuff < SimpleModel::Base
|
71
|
-
save :my_save_method
|
72
|
-
has_attributes :foo
|
73
|
-
validate :validates_bar
|
74
|
-
|
75
|
-
def my_save_method
|
76
|
-
self.errors.blank?
|
77
|
-
end
|
78
|
-
|
79
|
-
def validates_bar
|
80
|
-
self.errors.add(:foo, "bar")
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
t = TestStuff.new
|
85
|
-
lambda {t.save!}.should raise_error(SimpleModel::ValidationError)
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
|
-
it 'Should add a boolean setter' do
|
93
|
-
class TestStuff < SimpleModel::Base
|
94
|
-
has_booleans :test_boolean
|
95
|
-
end
|
96
|
-
TestStuff.new.methods.include?(:test_boolean).should eql(true)
|
97
|
-
#a.test.should eql(false)
|
98
|
-
end
|
99
|
-
it 'Should add a boolean setter' do
|
100
|
-
class TestStuff < SimpleModel::Base
|
101
|
-
has_booleans :test_boolean
|
102
|
-
end
|
103
|
-
t = TestStuff.new
|
104
|
-
t.methods.include?(:test_boolean).should eql(true)
|
105
|
-
t.test_boolean = true
|
106
|
-
t.test_boolean.should eql(true)
|
107
|
-
#a.test.should eql(false)
|
108
|
-
end
|
109
|
-
it 'Should add a error setter' do
|
110
|
-
|
111
|
-
class TestStuff < SimpleModel::Base
|
112
|
-
has_attributes :test_attr
|
113
|
-
end
|
114
|
-
a = TestStuff.new
|
115
|
-
|
116
|
-
a.errors.add(:test_attr, "test")
|
117
|
-
a.errors?.should eql(true)
|
118
|
-
end
|
119
|
-
|
120
|
-
it 'Should include validation callbacks' do
|
121
|
-
class TestStuff < SimpleModel::Base
|
122
|
-
end
|
123
|
-
TestStuff.respond_to?(:before_validation).should eql(true)
|
124
|
-
TestStuff.respond_to?(:after_save).should eql(true)
|
125
|
-
|
126
|
-
end
|
127
|
-
|
128
|
-
it 'Should perform validation callbacks' do
|
129
|
-
class TestStuff < SimpleModel::Base
|
130
|
-
before_validation :set_foo
|
131
|
-
after_validation :set_bar
|
132
|
-
attr_accessor :foo,:bar
|
133
|
-
validates :foo, :presence => true
|
134
|
-
|
135
|
-
|
136
|
-
private
|
137
|
-
def set_foo
|
138
|
-
self.foo = "foo"
|
139
|
-
end
|
140
|
-
|
141
|
-
def set_bar
|
142
|
-
self.bar = "bar"
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
t = TestStuff.new
|
147
|
-
t.valid?
|
148
|
-
t.foo.should eql('foo')
|
149
|
-
t.bar.should eql('bar')
|
150
|
-
end
|
151
|
-
|
152
|
-
it "should run save and validation callbacks on save" do
|
153
|
-
class TestStuff < SimpleModel::Base
|
154
|
-
save :my_save_method
|
155
|
-
before_save :set_foo
|
156
|
-
after_validation :set_bar
|
157
|
-
attr_accessor :foo,:bar
|
158
|
-
validates :foo, :presence => true
|
159
|
-
|
160
|
-
|
161
|
-
private
|
162
|
-
|
163
|
-
def my_save_method
|
164
|
-
true
|
165
|
-
end
|
166
|
-
|
167
|
-
def set_foo
|
168
|
-
self.foo = "foo"
|
169
|
-
end
|
170
|
-
|
171
|
-
def set_bar
|
172
|
-
self.bar = "bar"
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
t = TestStuff.new
|
177
|
-
t.save
|
178
|
-
t.foo.should eql('foo')
|
179
|
-
t.bar.should eql('bar')
|
180
|
-
end
|
181
|
-
|
182
|
-
it 'Should implement ActiveModel::Dirty' do
|
183
|
-
class TestStuff < SimpleModel::Base
|
184
|
-
save :my_save_method
|
185
|
-
has_attributes :foo,:bar, :default => "def"
|
186
|
-
has_boolean :boo,:bad, :default => true
|
187
|
-
def my_save_method
|
188
|
-
true
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
t = TestStuff.new
|
193
|
-
t.foo = "bar"
|
194
|
-
t.foo_changed?.should eql(true)
|
195
|
-
t.respond_to?(:foo_will_change!).should eql(true)
|
196
|
-
t.respond_to?(:boo_will_change!).should eql(true)
|
197
|
-
t.foo_change.should eql(["def","bar"])
|
198
|
-
t.changed?.should eql(true)
|
199
|
-
t.save
|
200
|
-
t.changed?.should eql(false)
|
201
|
-
end
|
202
|
-
|
203
|
-
context "regression tests" do
|
204
|
-
before(:each) do
|
205
|
-
class TestStuff < SimpleModel::Base
|
206
|
-
has_attribute :bar
|
207
|
-
validates_presence_of :bar
|
208
|
-
end
|
209
|
-
|
210
|
-
class NewTestStuff < TestStuff
|
211
|
-
has_boolean :foo
|
212
|
-
end
|
213
|
-
|
214
|
-
class OtherStuff < NewTestStuff
|
215
|
-
has_attribute :other
|
216
|
-
validates_numericality_of :other
|
217
|
-
end
|
218
|
-
|
219
|
-
end
|
220
|
-
it "should merge defined attributes when class are inherited" do
|
221
|
-
NewTestStuff.attribute_defined?(:bar).blank?.should eql(false)
|
222
|
-
NewTestStuff.attribute_defined?(:foo).blank?.should eql(false)
|
223
|
-
end
|
224
|
-
it "should merge defined attributes when class are inherited" do
|
225
|
-
TestStuff.new.respond_to?(:bar_will_change!).should eql(true)
|
226
|
-
t = OtherStuff.new
|
227
|
-
t.bar = [1,2,4]
|
228
|
-
NewTestStuff.new.respond_to?(:bar_will_change!).should eql(true)
|
229
|
-
NewTestStuff.new.respond_to?(:foo_will_change!).should eql(true)
|
230
|
-
end
|
231
|
-
|
232
|
-
it "should not throw exception method missing" do
|
233
|
-
o = OtherStuff.new
|
234
|
-
lambda { o.valid? }.should_not raise_error
|
235
|
-
end
|
236
|
-
|
237
|
-
after(:each) do
|
238
|
-
[:OtherStuff,:NewTestStuff].each do |con|
|
239
|
-
Object.send(:remove_const,con)
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
after(:each) do
|
245
|
-
Object.send(:remove_const,:TestStuff)
|
246
|
-
end
|
247
|
-
end
|