doodle 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -2
- data/lib/doodle.rb +24 -30
- data/lib/doodle/version.rb +1 -1
- metadata +1 -1
data/History.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 0.1.3 / 2008-05-01
|
2
|
+
- really avoid wierd interaction with ActiveRecord this time
|
3
|
+
- also, managed to get rid of crufty reliance on inspect and found
|
4
|
+
a tidy way to determine singletons :)
|
5
|
+
|
1
6
|
== 0.1.2 / 2008-05-01
|
2
7
|
- avoid wierd interaction with ActiveRecord (where calling inspect on a
|
3
8
|
class hits the database). Thanks again to Ryan Garver.
|
@@ -6,7 +11,6 @@
|
|
6
11
|
- changed name of #parent to #doodle_parent to avoid clash with
|
7
12
|
ActiveSupport (thanks to Ryan Garver for reporting this)
|
8
13
|
|
9
|
-
|
10
14
|
== 0.1.0 / 2008-04-26
|
11
15
|
- doodle's first beta version - the API should remain stable from now on
|
12
16
|
- created a Google group: http://groups.google.com/group/ruby-doodle
|
@@ -25,7 +29,6 @@
|
|
25
29
|
- removed redundant methods & excised some cruft
|
26
30
|
- refactored project to use newgem
|
27
31
|
|
28
|
-
|
29
32
|
== 0.0.11 / 2008-04-13
|
30
33
|
- refactored attributes and conversions
|
31
34
|
|
data/lib/doodle.rb
CHANGED
@@ -59,20 +59,15 @@ class Doodle
|
|
59
59
|
end
|
60
60
|
# what kind of object are we dealing with?
|
61
61
|
def doodle_category(obj)
|
62
|
-
# note[this uses regex match on object's inspect string - kludgy
|
63
|
-
# - is there a better way?]
|
64
62
|
return :nil if obj.class == NilClass
|
65
|
-
|
66
|
-
|
67
|
-
:instance_singleton_class
|
68
|
-
when /#<Class:[A-Z]/
|
69
|
-
:class_singleton_class
|
70
|
-
else
|
71
|
-
if obj.kind_of?(Module)
|
63
|
+
if obj.kind_of?(Module)
|
64
|
+
if obj.ancestors.include?(obj)
|
72
65
|
:class
|
73
66
|
else
|
74
|
-
:
|
67
|
+
:singleton_class
|
75
68
|
end
|
69
|
+
else
|
70
|
+
:instance
|
76
71
|
end
|
77
72
|
end
|
78
73
|
end
|
@@ -135,11 +130,9 @@ class Doodle
|
|
135
130
|
case Doodle::Utils.doodle_category(self)
|
136
131
|
when :instance
|
137
132
|
klass = self.class
|
138
|
-
when :instance_singleton_class
|
139
|
-
klass = nil
|
140
133
|
when :class
|
141
134
|
klass = superclass
|
142
|
-
when :
|
135
|
+
when :singleton_class
|
143
136
|
klass = nil
|
144
137
|
end
|
145
138
|
klasses = []
|
@@ -246,10 +239,6 @@ class Doodle
|
|
246
239
|
@errors = []
|
247
240
|
@doodle_parent = nil
|
248
241
|
end
|
249
|
-
#real_inspect = Object.instance_method(:inspect)
|
250
|
-
#define_method :real_inspect do
|
251
|
-
# real_inspect.bind(self).call
|
252
|
-
#end
|
253
242
|
def inspect
|
254
243
|
''
|
255
244
|
end
|
@@ -452,16 +441,17 @@ class Doodle
|
|
452
441
|
|
453
442
|
# set an attribute by name - apply validation if defined
|
454
443
|
def _setter(name, *args, &block)
|
455
|
-
Doodle::Debug.d { [:_setter, name, args] }
|
444
|
+
#Doodle::Debug.d { [:_setter, name, args] }
|
456
445
|
ivar = "@#{name}"
|
457
446
|
if block_given?
|
458
447
|
args.unshift(DeferredBlock.new(block))
|
459
448
|
end
|
460
449
|
if att = lookup_attribute(name)
|
461
|
-
Doodle::Debug.d { [:_setter, name, args] }
|
450
|
+
#Doodle::Debug.d { [:_setter, name, args] }
|
462
451
|
v = instance_variable_set(ivar, att.validate(self, *args))
|
452
|
+
#v = instance_variable_set(ivar, *args)
|
463
453
|
else
|
464
|
-
Doodle::Debug.d { [:_setter, "no attribute"] }
|
454
|
+
#Doodle::Debug.d { [:_setter, "no attribute"] }
|
465
455
|
v = instance_variable_set(ivar, *args)
|
466
456
|
end
|
467
457
|
validate!(false)
|
@@ -524,10 +514,14 @@ class Doodle
|
|
524
514
|
|
525
515
|
# validate that args meet rules defined with +must+
|
526
516
|
def validate(owner, *args)
|
527
|
-
Doodle::Debug.d { [:validate, self, :owner, owner, :args, args ] }
|
517
|
+
#Doodle::Debug.d { [:validate, self, :owner, owner, :args, args ] }
|
518
|
+
# if I bypass convert here, the AR inspect wierdness stops
|
519
|
+
# so what is going on?
|
520
|
+
#return args.first
|
528
521
|
value = convert(owner, *args)
|
522
|
+
#return args.first
|
529
523
|
validations.each do |v|
|
530
|
-
Doodle::Debug.d { [:validate, self, v, args, value] }
|
524
|
+
#Doodle::Debug.d { [:validate, self, v, args, value] }
|
531
525
|
if !v.block[value]
|
532
526
|
owner.handle_error name, ValidationError, "#{ name } must #{ v.message } - got #{ value.class }(#{ value.inspect })", [caller[-1]]
|
533
527
|
end
|
@@ -694,22 +688,22 @@ class Doodle
|
|
694
688
|
# validate this object by applying all validations in sequence
|
695
689
|
# - if all == true, validate all attributes, e.g. when loaded from YAML, else validate at object level only
|
696
690
|
def validate!(all = true)
|
697
|
-
Doodle::Debug.d { [:validate!, all, caller] }
|
691
|
+
#Doodle::Debug.d { [:validate!, all, caller] }
|
698
692
|
if all
|
699
693
|
clear_errors
|
700
694
|
end
|
701
695
|
if __doodle__.validation_on
|
702
696
|
if self.class == Class
|
703
697
|
attribs = class_attributes
|
704
|
-
Doodle::Debug.d { [:validate!, "using class_attributes", class_attributes] }
|
698
|
+
#Doodle::Debug.d { [:validate!, "using class_attributes", class_attributes] }
|
705
699
|
else
|
706
700
|
attribs = attributes
|
707
|
-
Doodle::Debug.d { [:validate!, "using instance_attributes", attributes] }
|
701
|
+
#Doodle::Debug.d { [:validate!, "using instance_attributes", attributes] }
|
708
702
|
end
|
709
703
|
attribs.each do |name, att|
|
710
704
|
# treat default as special case
|
711
705
|
if att.default_defined?
|
712
|
-
Doodle::Debug.d { [:validate!, "default_defined - breaking" ]}
|
706
|
+
#Doodle::Debug.d { [:validate!, "default_defined - breaking" ]}
|
713
707
|
break
|
714
708
|
end
|
715
709
|
ivar_name = "@#{att.name}"
|
@@ -718,8 +712,8 @@ class Doodle
|
|
718
712
|
# validations are applied to raw instance variables
|
719
713
|
# e.g. when loaded from YAML
|
720
714
|
if all
|
721
|
-
Doodle::Debug.d { [:validate!, :sending, att.name, instance_variable_get(ivar_name) ] }
|
722
|
-
__send__(att.name, instance_variable_get(ivar_name))
|
715
|
+
#Doodle::Debug.d { [:validate!, :sending, att.name, instance_variable_get(ivar_name) ] }
|
716
|
+
__send__("#{att.name}=", instance_variable_get(ivar_name))
|
723
717
|
end
|
724
718
|
elsif self.class != Class
|
725
719
|
handle_error name, Doodle::ValidationError, "#{self} missing required attribute '#{name}'", [caller[-1]]
|
@@ -727,9 +721,9 @@ class Doodle
|
|
727
721
|
end
|
728
722
|
# now apply instance level validations
|
729
723
|
|
730
|
-
Doodle::Debug.d { [:validate!, "validations", validations ]}
|
724
|
+
#Doodle::Debug.d { [:validate!, "validations", validations ]}
|
731
725
|
validations.each do |v|
|
732
|
-
Doodle::Debug.d { [:validate!, self, v ] }
|
726
|
+
#Doodle::Debug.d { [:validate!, self, v ] }
|
733
727
|
begin
|
734
728
|
if !instance_eval(&v.block)
|
735
729
|
handle_error self, ValidationError, "#{ self.class } must #{ v.message }", [caller[-1]]
|
data/lib/doodle/version.rb
CHANGED