doodle 0.1.1 → 0.1.2
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.
- data/History.txt +6 -0
- data/lib/doodle.rb +8 -40
- data/lib/doodle/datatypes.rb +13 -6
- data/lib/doodle/version.rb +1 -1
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
== 0.1.2 / 2008-05-01
|
2
|
+
- avoid wierd interaction with ActiveRecord (where calling inspect on a
|
3
|
+
class hits the database). Thanks again to Ryan Garver.
|
4
|
+
|
1
5
|
== 0.1.1 / 2008-04-28
|
2
6
|
- changed name of #parent to #doodle_parent to avoid clash with
|
3
7
|
ActiveSupport (thanks to Ryan Garver for reporting this)
|
4
8
|
|
9
|
+
|
5
10
|
== 0.1.0 / 2008-04-26
|
6
11
|
- doodle's first beta version - the API should remain stable from now on
|
7
12
|
- created a Google group: http://groups.google.com/group/ruby-doodle
|
@@ -20,6 +25,7 @@
|
|
20
25
|
- removed redundant methods & excised some cruft
|
21
26
|
- refactored project to use newgem
|
22
27
|
|
28
|
+
|
23
29
|
== 0.0.11 / 2008-04-13
|
24
30
|
- refactored attributes and conversions
|
25
31
|
|
data/lib/doodle.rb
CHANGED
@@ -62,7 +62,7 @@ class Doodle
|
|
62
62
|
# note[this uses regex match on object's inspect string - kludgy
|
63
63
|
# - is there a better way?]
|
64
64
|
return :nil if obj.class == NilClass
|
65
|
-
case obj.
|
65
|
+
case obj.inspect
|
66
66
|
when /#<Class:#<.*0x[a-z0-9]+>+$/
|
67
67
|
:instance_singleton_class
|
68
68
|
when /#<Class:[A-Z]/
|
@@ -246,10 +246,10 @@ class Doodle
|
|
246
246
|
@errors = []
|
247
247
|
@doodle_parent = nil
|
248
248
|
end
|
249
|
-
real_inspect = Object.instance_method(:inspect)
|
250
|
-
define_method :real_inspect do
|
251
|
-
|
252
|
-
end
|
249
|
+
#real_inspect = Object.instance_method(:inspect)
|
250
|
+
#define_method :real_inspect do
|
251
|
+
# real_inspect.bind(self).call
|
252
|
+
#end
|
253
253
|
def inspect
|
254
254
|
''
|
255
255
|
end
|
@@ -261,45 +261,13 @@ class Doodle
|
|
261
261
|
# (hack to fool yaml and anything else that queries instance_variables)
|
262
262
|
meth = Object.instance_method(:instance_variables)
|
263
263
|
define_method :instance_variables do
|
264
|
-
meth.bind(self).call.reject{ |x| x =~ /@__doodle__/}
|
264
|
+
meth.bind(self).call.reject{ |x| x.to_s =~ /@__doodle__/}
|
265
265
|
end
|
266
266
|
|
267
267
|
# hide @__doodle__ from inspect
|
268
|
-
|
269
|
-
|
270
|
-
# #<Foo:0xb7c52d28 @name="Arthur Dent", @age=42>
|
271
|
-
# #<Class:#<Foo:0xb7de0064>>
|
272
|
-
# #<Class:Class>
|
273
|
-
# #<Class:#<Class:#<Foo:0xb7de0064>>>
|
274
|
-
|
275
|
-
# strip off all trailing > (count them = nesting)
|
276
|
-
# take leading chars up to first space (or EOS)
|
277
|
-
# rebuild rest
|
278
|
-
|
279
|
-
real_inspect = Object.instance_method(:inspect)
|
280
|
-
define_method :real_inspect do
|
281
|
-
real_inspect.bind(self).call
|
282
|
-
end
|
283
|
-
define_method :inspect do
|
284
|
-
# have to handle some built-ins as special case
|
285
|
-
built_in = Doodle::BuiltIns::BUILTINS.select{ |x| self.kind_of?(x) }.first
|
286
|
-
if built_in
|
287
|
-
built_in.instance_method(:inspect).bind(self).call
|
288
|
-
else
|
289
|
-
istr = real_inspect.bind(self).call
|
290
|
-
str = istr.gsub(/(>+$)/, '')
|
291
|
-
trailing = $1
|
292
|
-
klass = str.split(/\s/, 2).first
|
293
|
-
ivars = self.kind_of?(Module) ? [] : instance_variables
|
294
|
-
separator = ivars.size > 0 ? ' ' : ''
|
295
|
-
|
296
|
-
#pp [:istr, istr, :str, str, :trailing, trailing, :klass, klass]
|
297
|
-
# note to self: changing klass to <self.class will highlight cases that need the hack in parents
|
298
|
-
#%[<#{self.class}#{separator}#{instance_variables.map{|x| "#{x}=#{instance_variable_get(x).inspect}"}.join(' ')}#{trailing}]
|
299
|
-
%[#{klass}#{separator}#{ivars.map{|x| "#{x}=#{instance_variable_get(x).inspect}"}.join(' ')}#{trailing}]
|
300
|
-
end
|
268
|
+
def inspect
|
269
|
+
super.gsub(/\s*@__doodle__=,/,'').gsub(/,?\s*@__doodle__=/,'')
|
301
270
|
end
|
302
|
-
|
303
271
|
end
|
304
272
|
|
305
273
|
# the core module of Doodle - to get most facilities provided by Doodle
|
data/lib/doodle/datatypes.rb
CHANGED
@@ -40,7 +40,7 @@ end
|
|
40
40
|
### user code
|
41
41
|
require 'date'
|
42
42
|
require 'uri'
|
43
|
-
|
43
|
+
require 'rfc822'
|
44
44
|
|
45
45
|
# note: this doesn't have to be in Doodle namespace
|
46
46
|
class Doodle
|
@@ -51,7 +51,7 @@ class Doodle
|
|
51
51
|
n.to_i
|
52
52
|
end
|
53
53
|
from String do |n|
|
54
|
-
n =~ /[0-9]+(.[0-9]+)?/ or raise "#{name} must be numeric"
|
54
|
+
n =~ /[0-9]+(.[0-9]+)?/ or raise ArgumentError, "#{name} must be numeric"
|
55
55
|
n.to_i
|
56
56
|
end
|
57
57
|
end
|
@@ -74,7 +74,7 @@ class Doodle
|
|
74
74
|
if params.key?(:size)
|
75
75
|
size = params.delete(:size)
|
76
76
|
# size should be a Range
|
77
|
-
size.kind_of?(Range) or raise ArgumentError, ":size should be a Range", caller[-1]
|
77
|
+
size.kind_of?(Range) or raise ArgumentError, "#{name}: size should be a Range", [caller[-1]]
|
78
78
|
end
|
79
79
|
define name, params, block, { :kind => String } do
|
80
80
|
from String do |s|
|
@@ -108,10 +108,16 @@ class Doodle
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def email(name, params = { }, &block)
|
111
|
-
|
111
|
+
# for max length, see http://www.imc.org/ietf-fax/archive2/msg01578.html
|
112
|
+
# 384 = 128+1+255
|
113
|
+
string(name, { :max => 384 }.merge(params), &block).instance_eval do
|
112
114
|
must "be valid email address" do |s|
|
113
|
-
|
114
|
-
|
115
|
+
if RUBY_VERSION >= '1.9.0'
|
116
|
+
# the regex fails in 1.9 with illegal utf byte sequence error
|
117
|
+
s =~ /\A.*@.*\z/
|
118
|
+
else
|
119
|
+
s =~ RFC822::EmailAddress
|
120
|
+
end
|
115
121
|
end
|
116
122
|
end
|
117
123
|
end
|
@@ -136,6 +142,7 @@ class Doodle
|
|
136
142
|
str =~ /\d+\.\d+.\d+/
|
137
143
|
end
|
138
144
|
from Array do |a|
|
145
|
+
a.size == 3 or raise ArgumentError, "#{name}: version array argument must contain exactly 3 elements", [caller[-1]]
|
139
146
|
a.join('.')
|
140
147
|
end
|
141
148
|
end
|
data/lib/doodle/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doodle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean O'Halpin
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-05-01 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|