doodle 0.1.8 → 0.1.9

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.
@@ -48,28 +48,42 @@ describe Doodle, 'class attributes:' do
48
48
  }.should_not raise_error
49
49
  end
50
50
 
51
- it 'should be possible to set a singleton variable without setting a newly added instance var' do
52
- pending 'figuring out if this is a pathological case and if so how to handle it' do
53
- proc {
54
- foo = Bar.new
55
- class << foo
56
- has :svar, :init => 43
57
- end
58
- class Bar < Doodle
59
- has :ivar
60
- end
61
- foo.svar = 44
62
- }.should_not raise_error
63
- end
51
+ it 'should not be possible to set a singleton variable without setting a newly added instance var' do
52
+ proc {
53
+ foo = Bar.new
54
+ class << foo
55
+ has :svar, :init => 43
56
+ end
57
+ class Bar < Doodle
58
+ has :ivar
59
+ end
60
+ foo.svar = 44
61
+ }.should raise_error(Doodle::ValidationError)
64
62
  end
65
63
 
64
+ it 'should be possible to set a singleton variable along with setting a newly added instance var using defer_validation' do
65
+ proc {
66
+ foo = Bar.new
67
+ class << foo
68
+ has :svar, :init => 43
69
+ end
70
+ class Bar < Doodle
71
+ has :ivar
72
+ end
73
+ foo.doodle.defer_validation do
74
+ svar 44
75
+ ivar 42
76
+ end
77
+ }.should_not raise_error
78
+ end
79
+
66
80
  it 'should validate class var' do
67
81
  proc { Foo.cvar = "Hello" }.should raise_error(Doodle::ValidationError)
68
82
  end
69
83
 
70
84
  it 'should be possible to read initialized class var' do
71
85
  #pending 'getting this working' do
72
- proc { Foo.cvar == 1 }.should_not raise_error
86
+ proc { Foo.cvar == 1 }.should_not raise_error
73
87
  #end
74
88
  end
75
89
  end
@@ -2,53 +2,51 @@ require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
  require 'date'
3
3
 
4
4
  describe Doodle, 'conversions' do
5
- after :each do
6
- undefine_const(:Foo)
7
- end
8
- before(:each) do
9
- raise_if_defined(:Foo)
10
- class Foo < Doodle
11
- has :start do
12
- default { Date.today }
13
- from String do |s|
14
- Doodle::Debug.d { [:converting_from, String, s] }
15
- Date.parse(s)
5
+ temporary_constant(:Foo) do
6
+ before(:each) do
7
+ class Foo < Doodle
8
+ has :start do
9
+ default { Date.today }
10
+ from String do |s|
11
+ Doodle::Debug.d { [:converting_from, String, s] }
12
+ Date.parse(s)
13
+ end
14
+ from Integer do |jd|
15
+ Doodle::Debug.d { [:converting_from, Integer, jd] }
16
+ Date.new(*Date.send(:jd_to_civil, jd))
17
+ end
16
18
  end
17
- from Integer do |jd|
18
- Doodle::Debug.d { [:converting_from, Integer, jd] }
19
- Date.new(*Date.send(:jd_to_civil, jd))
19
+ from String do |s|
20
+ Doodle::Debug.d { [:from, self, self.class] }
21
+ new(:start => s)
20
22
  end
21
23
  end
22
- from String do |s|
23
- Doodle::Debug.d { [:from, self, self.class] }
24
- new(:start => s)
25
- end
26
24
  end
27
- end
28
25
 
29
- it 'should have default date == today' do
30
- foo = Foo.new
31
- foo.start.should == Date.today
32
- end
26
+ it 'should have default date == today' do
27
+ foo = Foo.new
28
+ foo.start.should == Date.today
29
+ end
33
30
 
34
- it 'should convert String to Date' do
35
- foo = Foo.new(:start => '2007-12-31')
36
- foo.start.should == Date.new(2007, 12, 31)
37
- end
31
+ it 'should convert String to Date' do
32
+ foo = Foo.new(:start => '2007-12-31')
33
+ foo.start.should == Date.new(2007, 12, 31)
34
+ end
38
35
 
39
- it 'should convert Integer representing Julian date to Date' do
40
- foo = Foo.new(:start => 2454428)
41
- foo.start.should == Date.new(2007, 11, 23)
42
- end
36
+ it 'should convert Integer representing Julian date to Date' do
37
+ foo = Foo.new(:start => 2454428)
38
+ foo.start.should == Date.new(2007, 11, 23)
39
+ end
43
40
 
44
- it 'should allow from' do
45
- foo = Foo.from("2007-12-31")
46
- foo.start.should == Date.new(2007, 12, 31)
47
- end
41
+ it 'should allow from' do
42
+ foo = Foo.from("2007-12-31")
43
+ foo.start.should == Date.new(2007, 12, 31)
44
+ end
45
+
46
+ it 'should return class_conversions' do
47
+ Foo.doodle.conversions.keys.should == [String]
48
+ end
48
49
 
49
- it 'should return class_conversions' do
50
- Foo.doodle.conversions.keys.should == [String]
51
50
  end
52
51
 
53
52
  end
54
-
@@ -30,7 +30,7 @@ describe Doodle, 'instance attributes' do
30
30
  it 'should list instance attributes' do
31
31
  @foo.doodle.attributes.keys.should_be [:name]
32
32
  end
33
-
33
+
34
34
  it 'should list all instance attributes(false) at class level' do
35
35
  Foo.doodle.attributes(false).keys.should_be [:name]
36
36
  end
@@ -70,7 +70,7 @@ describe Doodle, 'class attributes(false)' do
70
70
  it "should list all class's own attributes" do
71
71
  Foo.singleton_class.doodle.attributes(false).keys.should_be [:metadata]
72
72
  end
73
-
73
+
74
74
  it "should list all class's own attributes" do
75
75
  Foo.singleton_class.doodle.attributes.keys.should_be [:metadata]
76
76
  end
@@ -90,7 +90,7 @@ describe Doodle, 'inherited class attributes(false)' do
90
90
  class Bar < Foo
91
91
  has :location, :default => nil
92
92
  class << self
93
- has :doc
93
+ has :notes
94
94
  end
95
95
  end
96
96
  @foo = Foo.new
@@ -135,27 +135,27 @@ describe Doodle, 'inherited class attributes(false)' do
135
135
  Foo.metadata.should_be 'Foo metadata'
136
136
  @foo.class.metadata.should_be 'Foo metadata'
137
137
  end
138
-
138
+
139
139
  it "should list class's own attributes" do
140
140
  Foo.singleton_class.doodle.attributes(false).keys.should_be [:metadata]
141
141
  end
142
-
142
+
143
143
  it "should list all class's own attributes" do
144
144
  Foo.singleton_class.doodle.attributes.keys.should_be [:metadata]
145
145
  end
146
146
 
147
147
  it "should list class's own attributes(false)" do
148
- Bar.singleton_class.doodle.attributes(false).keys.should_be [:doc]
148
+ Bar.singleton_class.doodle.attributes(false).keys.should_be [:notes]
149
149
  end
150
150
 
151
151
  it "should list all singleton class attributes" do
152
- Bar.singleton_class.doodle.attributes.keys.should_be [:doc]
152
+ Bar.singleton_class.doodle.attributes.keys.should_be [:notes]
153
153
  end
154
154
 
155
155
  it "should list all inherited meta class attributes" do
156
- Bar.doodle.class_attributes.keys.should_be [:metadata, :doc]
156
+ Bar.doodle.class_attributes.keys.should_be [:metadata, :notes]
157
157
  end
158
-
158
+
159
159
  it "should list all inherited class's attributes" do
160
160
  Bar.doodle.attributes.keys.should_be [:name, :location]
161
161
  end
@@ -165,7 +165,7 @@ end
165
165
  describe Doodle, 'singleton class attributes' do
166
166
  temporary_constant :Foo do
167
167
  before(:each) do
168
-
168
+
169
169
  class Foo
170
170
  include Doodle::Core
171
171
  has :name, :default => nil
@@ -181,7 +181,7 @@ describe Doodle, 'singleton class attributes' do
181
181
  after :each do
182
182
  remove_ivars :foo
183
183
  end
184
-
184
+
185
185
  it 'should allow creation of singleton class attributes' do
186
186
  @foo.special = 42
187
187
  @foo.special.should_be 42
@@ -215,7 +215,7 @@ describe Doodle, 'inherited singleton class attributes' do
215
215
  class Bar < Foo
216
216
  has :info, :default => nil
217
217
  class << self
218
- has :doc
218
+ has :notes
219
219
  end
220
220
  end
221
221
 
@@ -229,11 +229,11 @@ describe Doodle, 'inherited singleton class attributes' do
229
229
  has :extra
230
230
  end
231
231
  end
232
-
232
+
233
233
  after :each do
234
234
  remove_ivars :foo, :bar, :bar2
235
235
  end
236
-
236
+
237
237
  it 'should allow creation of singleton class attributes' do
238
238
  @foo.special = 42
239
239
  @foo.special.should_be 42
@@ -259,13 +259,13 @@ describe Doodle, 'inherited singleton class attributes' do
259
259
  @foo.singleton_class.doodle.attributes.keys.should_be [:special]
260
260
  @bar.singleton_class.doodle.attributes.keys.should_be [:extra]
261
261
  end
262
-
262
+
263
263
  it 'should keep meta attributes separate' do
264
264
  @foo.special = 'foo special'
265
265
  @foo.special.should_be 'foo special'
266
266
 
267
267
  # CHECK
268
-
268
+
269
269
  # note: you cannot set any other values on @bar until you have set @bar.extra because it's defined as required
270
270
  @bar.extra = 'bar extra'
271
271
  @bar.extra.should_be 'bar extra'
@@ -273,8 +273,8 @@ describe Doodle, 'inherited singleton class attributes' do
273
273
  Foo.metadata.should_be 'Foo meta'
274
274
  Bar.metadata = 'Bar meta'
275
275
  Bar.metadata.should_be 'Bar meta'
276
- Bar.doc = 'Bar doc'
277
- Bar.doc.should_be 'Bar doc'
276
+ Bar.notes = 'Bar notes'
277
+ Bar.notes.should_be 'Bar notes'
278
278
 
279
279
  # now make sure they haven't bumped each other off
280
280
  @foo.special.should_be 'foo special'
@@ -282,7 +282,7 @@ describe Doodle, 'inherited singleton class attributes' do
282
282
  @bar.extra.should_be 'bar extra'
283
283
  Foo.metadata.should_be 'Foo meta'
284
284
  Bar.metadata.should_be 'Bar meta'
285
- Bar.doc.should_be 'Bar doc'
285
+ Bar.notes.should_be 'Bar notes'
286
286
  end
287
287
 
288
288
  it 'should inherit singleton methods from class' do
@@ -298,19 +298,19 @@ describe Doodle, 'inherited singleton class attributes' do
298
298
  end
299
299
  end
300
300
  end
301
-
301
+
302
302
  it 'should behave predictably when setting singleton attributes' do
303
303
  @bar.extra = 'bar extra'
304
304
  @bar.extra.should_be 'bar extra'
305
305
  @bar.singleton_class.metadata = 'bar meta metadata'
306
306
  if RUBY_VERSION < '1.9.0'
307
307
  @bar.singleton_class.metadata.should_be 'bar meta metadata'
308
- @bar.singleton_class.doc = 'bar doc'
309
- @bar.singleton_class.doc.should_be 'bar doc'
308
+ @bar.singleton_class.notes = 'bar notes'
309
+ @bar.singleton_class.notes.should_be 'bar notes'
310
310
  else
311
311
  pending 'figuring out why this fails in 1.9'
312
312
  end
313
- proc { @foo.singleton_class.doc = 1 }.should raise_error(NoMethodError)
313
+ proc { @foo.singleton_class.notes = 1 }.should raise_error(NoMethodError)
314
314
  end
315
315
  end
316
316
  end
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe Doodle, 'has Class' do
4
- temporary_constant :Foo, :Bar do
4
+ temporary_constant :Foo, :Bar, :AudioClip do
5
5
  it "should convert 'has Bar' into 'has :bar, :kind => Bar'" do
6
6
  class Bar
7
7
  end
@@ -41,5 +41,23 @@ describe Doodle, 'has Class' do
41
41
  proc { Foo.new(:bar => Bar.new) }.should_not raise_error
42
42
  proc { Foo.new(:bar => "Hello") }.should raise_error(Doodle::ValidationError)
43
43
  end
44
+ it "should apply validations for 'has Bar' as if 'has :bar, :kind => Bar' was used" do
45
+ class Bar
46
+ end
47
+ class Foo < Doodle
48
+ has Bar
49
+ end
50
+ proc { Foo.new(:bar => Bar.new) }.should_not raise_error
51
+ proc { Foo.new(:bar => "Hello") }.should raise_error(Doodle::ValidationError)
52
+ end
53
+ it "should apply validations for 'has Bar' as if 'has :bar, :kind => Bar' was used" do
54
+ class Bar
55
+ end
56
+ class Foo < Doodle
57
+ has Bar
58
+ end
59
+ proc { Foo.new(:bar => Bar.new) }.should_not raise_error
60
+ proc { Foo.new(:bar => "Hello") }.should raise_error(Doodle::ValidationError)
61
+ end
44
62
  end
45
63
  end
@@ -17,37 +17,37 @@ describe Doodle, 'init' do
17
17
  end
18
18
  end
19
19
  it 'should have instance attribute init via class' do
20
- Foo.doodle.attributes[:moniker].init.should == 'D1'
20
+ Foo.doodle.attributes[:moniker].init.should_be 'D1'
21
21
  end
22
22
  it 'should have instance attribute init via instance' do
23
- @foo.doodle.attributes[:moniker].init.should == 'D1'
23
+ @foo.doodle.attributes[:moniker].init.should_be 'D1'
24
24
  end
25
25
  it 'should have class attribute init via class.singleton_class' do
26
- Foo.singleton_class.doodle.attributes(false)[:metadata].init.should == 'D2'
26
+ Foo.singleton_class.doodle.attributes(false)[:metadata].init.should_be 'D2'
27
27
  end
28
28
  it 'should have class attribute init via class.singleton_class' do
29
- Foo.singleton_class.doodle.attributes[:metadata].init.should == 'D2'
29
+ Foo.singleton_class.doodle.attributes[:metadata].init.should_be 'D2'
30
30
  end
31
31
  it 'should have singleton attribute init via instance.singleton_class' do
32
- @foo.singleton_class.doodle.attributes(false)[:special].init.should == 'D3'
32
+ @foo.singleton_class.doodle.attributes(false)[:special].init.should_be 'D3'
33
33
  end
34
34
  it 'should have singleton attribute init via instance.singleton_class' do
35
- @foo.singleton_class.doodle.attributes[:special].init.should == 'D3'
35
+ @foo.singleton_class.doodle.attributes[:special].init.should_be 'D3'
36
36
  end
37
37
  it 'should have an attribute :moniker from init' do
38
- @foo.moniker.should == 'D1'
38
+ @foo.moniker.should_be 'D1'
39
39
  end
40
40
  it 'should have an instance_variable for attribute :moniker' do
41
- @foo.instance_variables.map{ |x| x.to_sym }.include?(:@moniker).should == true
41
+ @foo.instance_variables.map{ |x| x.to_sym }.include?(:@moniker).should_be true
42
42
  end
43
43
  it 'should have an initialized class attribute :metadata' do
44
44
  #pending 'deciding how this should work' do
45
- Foo.metadata.should == 'D2'
45
+ Foo.metadata.should_be 'D2'
46
46
  #end
47
47
  end
48
48
  it 'should have an initialized singleton attribute :special' do
49
49
  #pending 'deciding how this should work' do
50
- @foo.special.should == 'D3'
50
+ @foo.special.should_be 'D3'
51
51
  #end
52
52
  end
53
53
  end
@@ -60,7 +60,7 @@ describe Doodle, 'init' do
60
60
  has :value, :init => nil
61
61
  end
62
62
  foo = Foo.new
63
- foo.value.should == nil
63
+ foo.value.should_be nil
64
64
  end
65
65
  end
66
66
  temporary_constant :Foo do
@@ -69,7 +69,7 @@ describe Doodle, 'init' do
69
69
  has :value, :init => true
70
70
  end
71
71
  foo = Foo.new
72
- foo.value.should == true
72
+ foo.value.should_be true
73
73
  end
74
74
  end
75
75
  temporary_constant :Foo do
@@ -78,7 +78,7 @@ describe Doodle, 'init' do
78
78
  has :value, :init => 42
79
79
  end
80
80
  foo = Foo.new
81
- foo.value.should == 42
81
+ foo.value.should_be 42
82
82
  end
83
83
  end
84
84
  temporary_constant :Foo do
@@ -87,20 +87,26 @@ describe Doodle, 'init' do
87
87
  has :value, :init => proc { 42 }
88
88
  end
89
89
  foo = Foo.new
90
- foo.value.call.should == 42
90
+ foo.value.call.should_be 42
91
91
  end
92
92
  end
93
93
  temporary_constant :Foo do
94
94
  it 'should evaluate value when block given as :init' do
95
95
  class Foo < Doodle
96
- has :value do
96
+ has :value, :kind => Integer do
97
97
  init do
98
98
  42
99
99
  end
100
100
  end
101
+ has :name, :kind => String do
102
+ init do
103
+ "foo"
104
+ end
105
+ end
101
106
  end
102
107
  foo = Foo.new
103
- foo.value.should == 42
108
+ foo.value.should_be 42
109
+ foo.name.should_be "foo"
104
110
  end
105
111
  end
106
112
  end
@@ -0,0 +1,122 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ require 'yaml'
3
+
4
+ describe 'Doodle', 'initialization of scalar attributes from hash' do
5
+ temporary_constant :Foo, :Bar do
6
+ before :each do
7
+ class Bar < Doodle
8
+ has :name, :kind => String
9
+ has :count, :kind => Integer
10
+ end
11
+ class Foo < Doodle
12
+ has Bar
13
+ has :v2, :kind => String, :default => "bar"
14
+ end
15
+ end
16
+
17
+ it 'should initialize an attribute from a hash' do
18
+ foo = Foo do
19
+ bar :name => "hello", :count => 1
20
+ end
21
+ foo.bar.name.should_be "hello"
22
+ foo.bar.count.should_be 1
23
+ end
24
+ it 'should fail trying to initialize with incorrect keyword values' do
25
+ proc {
26
+ foo = Foo do
27
+ bar :name => 1, :count => "hello"
28
+ end
29
+ }.should raise_error(Doodle::ValidationError)
30
+ end
31
+ it 'should work with positional args' do
32
+ foo = nil
33
+ proc {
34
+ foo = Foo do
35
+ bar "hello", 1
36
+ end
37
+ }.should_not raise_error
38
+ foo.bar.name.should_be "hello"
39
+ foo.bar.count.should_be 1
40
+ end
41
+ it 'should work with block initialization' do
42
+ foo = nil
43
+ proc {
44
+ foo = Foo do
45
+ bar do
46
+ name "hello"
47
+ count 1
48
+ end
49
+ end
50
+ }.should_not raise_error
51
+ foo.bar.name.should_be "hello"
52
+ foo.bar.count.should_be 1
53
+ end
54
+ it 'should work with arg and block initialization' do
55
+ foo = nil
56
+ proc {
57
+ foo = Foo do
58
+ bar "hello" do
59
+ count 1
60
+ end
61
+ end
62
+ }.should_not raise_error
63
+ foo.bar.name.should_be "hello"
64
+ foo.bar.count.should_be 1
65
+ end
66
+ it 'should work with keyword and block initialization' do
67
+ foo = nil
68
+ proc {
69
+ foo = Foo do
70
+ bar :name => "hello" do
71
+ count 1
72
+ end
73
+ end
74
+ }.should_not raise_error
75
+ foo.bar.name.should_be "hello"
76
+ foo.bar.count.should_be 1
77
+ end
78
+ it 'should raise error with invalid keyword and block initialization' do
79
+ foo = nil
80
+ proc {
81
+ foo = Foo do
82
+ bar :name => 1 do
83
+ count "hello"
84
+ end
85
+ end
86
+ }.should raise_error(Doodle::ValidationError)
87
+ end
88
+ it 'should raise error with keyword and invalid block initialization' do
89
+ foo = nil
90
+ proc {
91
+ foo = Foo do
92
+ bar :name => "hello" do
93
+ count "hello"
94
+ end
95
+ end
96
+ }.should raise_error(Doodle::ValidationError)
97
+ end
98
+ it 'should initialize non-Doodle or Proc with simple value' do
99
+ foo = nil
100
+ proc {
101
+ foo = Foo do
102
+ bar :name => "hello", :count => 1
103
+ v2 "Hello"
104
+ end
105
+ }.should_not raise_error
106
+ foo.bar.name.should_be "hello"
107
+ foo.bar.count.should_be 1
108
+ foo.v2.should_be "Hello"
109
+ end
110
+ it 'should fail trying to initialize an inappropriate attribute (not a Doodle or Proc) from a block' do
111
+ proc {
112
+ foo = Foo do
113
+ bar :name => "hello", :count => 1
114
+ v2 do
115
+ "Hello"
116
+ end
117
+ end
118
+ }.should raise_error(ArgumentError)
119
+ end
120
+ end
121
+ end
122
+