dao 2.2.3 → 3.1.0
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/Rakefile +68 -113
- data/TODO +3 -9
- data/a.rb +25 -0
- data/dao.gemspec +70 -14
- data/lib/dao.rb +8 -8
- data/lib/dao/api.rb +1 -0
- data/lib/dao/api/context.rb +48 -23
- data/lib/dao/api/dsl.rb +1 -1
- data/lib/dao/api/interfaces.rb +149 -117
- data/lib/dao/api/modes.rb +24 -23
- data/lib/dao/api/routes.rb +9 -0
- data/lib/dao/data.rb +9 -2
- data/lib/dao/errors.rb +15 -11
- data/lib/dao/form.rb +46 -37
- data/lib/dao/interface.rb +1 -1
- data/lib/dao/mode.rb +45 -20
- data/lib/dao/params.rb +35 -53
- data/lib/dao/path.rb +6 -9
- data/lib/dao/rails/lib/generators/dao/templates/api.rb +1 -1
- data/lib/dao/rails/lib/generators/dao/templates/dao_helper.rb +16 -0
- data/lib/dao/result.rb +26 -133
- data/lib/dao/route.rb +87 -0
- data/lib/dao/status.rb +96 -94
- data/lib/dao/support.rb +5 -3
- data/lib/dao/validations.rb +46 -442
- data/lib/dao/validations/base.rb +68 -0
- data/lib/dao/validations/common.rb +463 -0
- data/test/dao_test.rb +214 -33
- metadata +20 -112
- data/lib/dao/rails/app/api.rb +0 -55
- data/lib/dao/rails/app/controllers/api_controller.rb +0 -99
- data/sample/rails_app/Gemfile +0 -33
- data/sample/rails_app/Gemfile.lock +0 -88
- data/sample/rails_app/README +0 -1
- data/sample/rails_app/Rakefile +0 -7
- data/sample/rails_app/app/api.rb +0 -55
- data/sample/rails_app/app/controllers/api_controller.rb +0 -99
- data/sample/rails_app/app/controllers/application_controller.rb +0 -3
- data/sample/rails_app/app/helpers/application_helper.rb +0 -2
- data/sample/rails_app/app/views/layouts/application.html.erb +0 -14
- data/sample/rails_app/config.ru +0 -4
- data/sample/rails_app/config/application.rb +0 -51
- data/sample/rails_app/config/boot.rb +0 -13
- data/sample/rails_app/config/database.yml +0 -22
- data/sample/rails_app/config/environment.rb +0 -5
- data/sample/rails_app/config/environments/development.rb +0 -26
- data/sample/rails_app/config/environments/production.rb +0 -49
- data/sample/rails_app/config/environments/test.rb +0 -35
- data/sample/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/sample/rails_app/config/initializers/inflections.rb +0 -10
- data/sample/rails_app/config/initializers/mime_types.rb +0 -5
- data/sample/rails_app/config/initializers/secret_token.rb +0 -7
- data/sample/rails_app/config/initializers/session_store.rb +0 -8
- data/sample/rails_app/config/locales/en.yml +0 -5
- data/sample/rails_app/config/routes.rb +0 -62
- data/sample/rails_app/db/development.sqlite3 +0 -0
- data/sample/rails_app/db/seeds.rb +0 -7
- data/sample/rails_app/doc/README_FOR_APP +0 -2
- data/sample/rails_app/log/development.log +0 -27
- data/sample/rails_app/log/production.log +0 -0
- data/sample/rails_app/log/server.log +0 -0
- data/sample/rails_app/log/test.log +0 -0
- data/sample/rails_app/pubic/javascripts/dao.js +0 -148
- data/sample/rails_app/public/404.html +0 -26
- data/sample/rails_app/public/422.html +0 -26
- data/sample/rails_app/public/500.html +0 -26
- data/sample/rails_app/public/favicon.ico +0 -0
- data/sample/rails_app/public/images/rails.png +0 -0
- data/sample/rails_app/public/index.html +0 -239
- data/sample/rails_app/public/javascripts/application.js +0 -2
- data/sample/rails_app/public/javascripts/controls.js +0 -965
- data/sample/rails_app/public/javascripts/dragdrop.js +0 -974
- data/sample/rails_app/public/javascripts/effects.js +0 -1123
- data/sample/rails_app/public/javascripts/prototype.js +0 -6001
- data/sample/rails_app/public/javascripts/rails.js +0 -175
- data/sample/rails_app/public/robots.txt +0 -5
- data/sample/rails_app/script/rails +0 -6
- data/sample/rails_app/test/performance/browsing_test.rb +0 -9
- data/sample/rails_app/test/test_helper.rb +0 -13
data/lib/dao/support.rb
CHANGED
@@ -23,7 +23,6 @@ module Dao
|
|
23
23
|
end
|
24
24
|
|
25
25
|
%w( to_dao as_dao ).each do |method|
|
26
|
-
|
27
26
|
module_eval <<-__, __FILE__, __LINE__ - 1
|
28
27
|
|
29
28
|
def #{ method }(object, *args, &block)
|
@@ -47,10 +46,9 @@ module Dao
|
|
47
46
|
__
|
48
47
|
end
|
49
48
|
|
50
|
-
|
51
49
|
def unindent!(s)
|
52
50
|
margin = nil
|
53
|
-
s.
|
51
|
+
s.each_line do |line|
|
54
52
|
next if line =~ %r/^\s*$/
|
55
53
|
margin = line[%r/^\s*/] and break
|
56
54
|
end
|
@@ -67,4 +65,8 @@ module Dao
|
|
67
65
|
def name_for(path, *keys)
|
68
66
|
Form.name_for(path, *keys)
|
69
67
|
end
|
68
|
+
|
69
|
+
def parse(*args, &block)
|
70
|
+
Params.process(*args, &block)
|
71
|
+
end
|
70
72
|
end
|
data/lib/dao/validations.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Dao
|
2
2
|
class Validations < ::Map
|
3
|
+
# supporting classes
|
4
|
+
#
|
3
5
|
class Callback < ::Proc
|
4
6
|
attr :options
|
5
7
|
|
@@ -27,62 +29,38 @@ module Dao
|
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
|
-
|
31
32
|
# class methods
|
32
33
|
#
|
33
34
|
class << Validations
|
34
35
|
def for(*args, &block)
|
35
36
|
new(*args, &block)
|
36
37
|
end
|
37
|
-
|
38
|
-
def cast(*args)
|
39
|
-
if args.size == 1
|
40
|
-
value = args.first
|
41
|
-
value.is_a?(self) ? value : self.for(value)
|
42
|
-
else
|
43
|
-
self.for(*args)
|
44
|
-
end
|
45
|
-
end
|
46
38
|
end
|
47
39
|
|
48
40
|
# instance methods
|
49
41
|
#
|
50
|
-
attr_accessor :
|
42
|
+
attr_accessor :map
|
43
|
+
attr_accessor :errors
|
44
|
+
attr_accessor :status
|
51
45
|
attr_accessor :ran
|
52
46
|
|
53
47
|
def initialize(*args, &block)
|
54
|
-
@
|
48
|
+
@map = args.first.is_a?(Map) ? args.shift : Map.new
|
49
|
+
options = Map.options_for!(args)
|
50
|
+
|
51
|
+
@errors = options[:errors] || Errors.new
|
52
|
+
@status = options[:status] || Status.default
|
53
|
+
|
54
|
+
@map.extend(InstanceExec) unless @map.respond_to?(:instance_exec)
|
55
55
|
@ran = false
|
56
56
|
super
|
57
57
|
end
|
58
58
|
alias_method('ran?', 'ran')
|
59
59
|
|
60
|
-
def params
|
61
|
-
result.params
|
62
|
-
end
|
63
|
-
|
64
|
-
def data
|
65
|
-
result.data
|
66
|
-
end
|
67
|
-
|
68
60
|
def errors
|
69
|
-
|
61
|
+
@map.errors
|
70
62
|
end
|
71
63
|
|
72
|
-
def each(&block)
|
73
|
-
depth_first_each(&block)
|
74
|
-
end
|
75
|
-
|
76
|
-
def size
|
77
|
-
size = 0
|
78
|
-
depth_first_each{ size += 1 }
|
79
|
-
size
|
80
|
-
end
|
81
|
-
alias_method('count', 'size')
|
82
|
-
alias_method('length', 'size')
|
83
|
-
|
84
|
-
Cleared = 'Cleared'.freeze unless defined?(Cleared)
|
85
|
-
|
86
64
|
def run
|
87
65
|
previous_errors = []
|
88
66
|
new_errors = []
|
@@ -97,14 +75,11 @@ module Dao
|
|
97
75
|
next unless callback and callback.respond_to?(:to_proc)
|
98
76
|
|
99
77
|
number_of_errors = errors.size
|
100
|
-
value =
|
78
|
+
value = @map.get(keys)
|
101
79
|
returned =
|
102
80
|
catch(:valid) do
|
103
|
-
|
104
|
-
|
105
|
-
else
|
106
|
-
callback.call(value)
|
107
|
-
end
|
81
|
+
args = [value, map].slice(0, callback.arity)
|
82
|
+
@map.instance_exec(*args, &callback)
|
108
83
|
end
|
109
84
|
|
110
85
|
case returned
|
@@ -147,428 +122,57 @@ module Dao
|
|
147
122
|
@ran = true
|
148
123
|
return self
|
149
124
|
end
|
125
|
+
Cleared = 'Cleared'.freeze unless defined?(Cleared)
|
150
126
|
|
151
127
|
def run!
|
152
128
|
errors.clear!
|
153
129
|
run
|
154
130
|
end
|
155
131
|
|
156
|
-
|
132
|
+
def each(&block)
|
133
|
+
depth_first_each(&block)
|
134
|
+
end
|
135
|
+
|
136
|
+
def size
|
137
|
+
size = 0
|
138
|
+
depth_first_each{ size += 1 }
|
139
|
+
size
|
140
|
+
end
|
141
|
+
alias_method('count', 'size')
|
142
|
+
alias_method('length', 'size')
|
157
143
|
|
158
144
|
def add(*args, &block)
|
159
145
|
options = Dao.map_for(args.last.is_a?(Hash) ? args.pop : {})
|
160
146
|
block = args.pop if args.last.respond_to?(:call)
|
161
|
-
block ||=
|
147
|
+
block ||= NotBlank
|
162
148
|
callback = Callback.new(options, &block)
|
163
149
|
set(args => Callback::Chain.new) unless has?(args)
|
164
150
|
get(args).add(callback)
|
165
151
|
callback
|
166
152
|
end
|
153
|
+
NotBlank = lambda{|value| !value.to_s.strip.empty?} unless defined?(NotBlank)
|
167
154
|
end
|
168
155
|
|
169
|
-
|
170
|
-
|
171
|
-
options = Dao.options_for!(args)
|
172
|
-
|
173
|
-
message = options[:message]
|
174
|
-
|
175
|
-
if options[:in].is_a?(Range)
|
176
|
-
options[:minimum] = options[:in].begin
|
177
|
-
options[:maximum] = options[:in].end
|
178
|
-
end
|
179
|
-
minimum = options[:minimum] || 1
|
180
|
-
maximum = options[:maximum]
|
181
|
-
|
182
|
-
too_short = options[:too_short] || message || 'is too short'
|
183
|
-
too_long = options[:too_long] || message || 'is too long'
|
184
|
-
|
185
|
-
allow_nil = options[:allow_nil]
|
186
|
-
allow_blank = options[:allow_blank]
|
187
|
-
|
188
|
-
minimum = Float(minimum)
|
189
|
-
maximum = Float(maximum) if maximum
|
190
|
-
|
191
|
-
block =
|
192
|
-
lambda do |value|
|
193
|
-
map = Dao.map(:valid => true)
|
194
|
-
|
195
|
-
if value.nil? and allow_nil
|
196
|
-
map[:valid] = true
|
197
|
-
throw(:valid, map)
|
198
|
-
end
|
199
|
-
|
200
|
-
value = value.to_s.strip
|
201
|
-
|
202
|
-
if value.empty? and allow_blank
|
203
|
-
map[:valid] = true
|
204
|
-
throw(:valid, map)
|
205
|
-
end
|
206
|
-
|
207
|
-
if value.size < minimum
|
208
|
-
map[:message] = too_short
|
209
|
-
map[:valid] = false
|
210
|
-
throw(:valid, map)
|
211
|
-
end
|
212
|
-
|
213
|
-
if(maximum and(value.size > maximum))
|
214
|
-
map[:message] = too_long
|
215
|
-
map[:valid] = false
|
216
|
-
throw(:valid, map)
|
217
|
-
end
|
218
|
-
|
219
|
-
map
|
220
|
-
end
|
221
|
-
|
222
|
-
validates(*args, &block)
|
223
|
-
end
|
224
|
-
|
225
|
-
def validates_word_count_of(*args)
|
226
|
-
options = Dao.options_for!(args)
|
227
|
-
|
228
|
-
message = options[:message]
|
229
|
-
|
230
|
-
if options[:in].is_a?(Range)
|
231
|
-
options[:minimum] = options[:in].begin
|
232
|
-
options[:maximum] = options[:in].end
|
233
|
-
end
|
234
|
-
minimum = options[:minimum] || 1
|
235
|
-
maximum = options[:maximum]
|
236
|
-
|
237
|
-
too_short = options[:too_short] || message || 'is too short'
|
238
|
-
too_long = options[:too_long] || message || 'is too long'
|
239
|
-
|
240
|
-
allow_nil = options[:allow_nil]
|
241
|
-
allow_blank = options[:allow_blank]
|
242
|
-
|
243
|
-
minimum = Float(minimum)
|
244
|
-
maximum = Float(maximum) if maximum
|
245
|
-
|
246
|
-
block =
|
247
|
-
lambda do |value|
|
248
|
-
map = Dao.map(:valid => true)
|
249
|
-
|
250
|
-
if value.nil? and allow_nil
|
251
|
-
map[:valid] = true
|
252
|
-
throw(:valid, map)
|
253
|
-
end
|
254
|
-
|
255
|
-
value = value.to_s.strip
|
256
|
-
|
257
|
-
if value.empty? and allow_blank
|
258
|
-
map[:valid] = true
|
259
|
-
throw(:valid, map)
|
260
|
-
end
|
261
|
-
|
262
|
-
words = value.split(/\s+/)
|
263
|
-
|
264
|
-
if words.size < minimum
|
265
|
-
map[:message] = too_short
|
266
|
-
map[:valid] = false
|
267
|
-
throw(:valid, map)
|
268
|
-
end
|
269
|
-
|
270
|
-
if(maximum and(words.size > maximum))
|
271
|
-
map[:message] = too_long
|
272
|
-
map[:valid] = false
|
273
|
-
throw(:valid, map)
|
274
|
-
end
|
275
|
-
|
276
|
-
map
|
277
|
-
end
|
278
|
-
|
279
|
-
validates(*args, &block)
|
280
|
-
end
|
281
|
-
|
282
|
-
def validates_as_email(*args)
|
283
|
-
options = Dao.options_for!(args)
|
284
|
-
|
285
|
-
message = options[:message] || "doesn't look like an email (username@domain.com)"
|
286
|
-
|
287
|
-
allow_nil = options[:allow_nil]
|
288
|
-
allow_blank = options[:allow_blank]
|
289
|
-
|
290
|
-
block =
|
291
|
-
lambda do |value|
|
292
|
-
map = Dao.map(:valid => true)
|
293
|
-
|
294
|
-
if value.nil? and allow_nil
|
295
|
-
map[:valid] = true
|
296
|
-
throw(:valid, map)
|
297
|
-
end
|
298
|
-
|
299
|
-
value = value.to_s.strip
|
300
|
-
|
301
|
-
if value.empty? and allow_blank
|
302
|
-
map[:valid] = true
|
303
|
-
throw(:valid, map)
|
304
|
-
end
|
305
|
-
|
306
|
-
parts = value.split(/@/)
|
307
|
-
|
308
|
-
unless parts.size == 2
|
309
|
-
map[:valid] = false
|
310
|
-
throw(:valid, map)
|
311
|
-
end
|
312
|
-
|
313
|
-
map
|
314
|
-
end
|
315
|
-
|
316
|
-
args.push(:message => message)
|
317
|
-
validates(*args, &block)
|
318
|
-
end
|
319
|
-
|
320
|
-
def validates_as_url(*args)
|
321
|
-
options = Dao.options_for!(args)
|
322
|
-
|
323
|
-
message = options[:message] || "doesn't look like a url (http://domain.com)"
|
324
|
-
|
325
|
-
allow_nil = options[:allow_nil]
|
326
|
-
allow_blank = options[:allow_blank]
|
327
|
-
|
328
|
-
block =
|
329
|
-
lambda do |value|
|
330
|
-
map = Dao.map(:valid => true)
|
331
|
-
|
332
|
-
if value.nil? and allow_nil
|
333
|
-
map[:valid] = true
|
334
|
-
throw(:valid, map)
|
335
|
-
end
|
336
|
-
|
337
|
-
value = value.to_s.strip
|
338
|
-
|
339
|
-
if value.empty? and allow_blank
|
340
|
-
map[:valid] = true
|
341
|
-
throw(:valid, map)
|
342
|
-
end
|
343
|
-
|
344
|
-
parts = value.split(%r|://|)
|
345
|
-
|
346
|
-
unless parts.size >= 2
|
347
|
-
map[:valid] = false
|
348
|
-
throw(:valid, map)
|
349
|
-
end
|
350
|
-
|
351
|
-
map
|
352
|
-
end
|
353
|
-
|
354
|
-
args.push(:message => message)
|
355
|
-
validates(*args, &block)
|
356
|
-
end
|
357
|
-
|
358
|
-
def validates_as_phone(*args)
|
359
|
-
options = Dao.options_for!(args)
|
360
|
-
|
361
|
-
message = options[:message] || "doesn't look like a phone number (012.345.6789)"
|
362
|
-
|
363
|
-
allow_nil = options[:allow_nil]
|
364
|
-
allow_blank = options[:allow_blank]
|
365
|
-
|
366
|
-
block =
|
367
|
-
lambda do |value|
|
368
|
-
map = Dao.map(:valid => true)
|
369
|
-
|
370
|
-
if value.nil? and allow_nil
|
371
|
-
map[:valid] = true
|
372
|
-
throw(:valid, map)
|
373
|
-
end
|
374
|
-
|
375
|
-
value = value.to_s.strip
|
376
|
-
|
377
|
-
if value.empty? and allow_blank
|
378
|
-
map[:valid] = true
|
379
|
-
throw(:valid, map)
|
380
|
-
end
|
381
|
-
|
382
|
-
parts = value.scan(/\d+/)
|
383
|
-
|
384
|
-
unless parts.size >= 1
|
385
|
-
map[:valid] = false
|
386
|
-
throw(:valid, map)
|
387
|
-
end
|
388
|
-
|
389
|
-
map
|
390
|
-
end
|
391
|
-
|
392
|
-
args.push(:message => message)
|
393
|
-
validates(*args, &block)
|
394
|
-
end
|
395
|
-
|
396
|
-
def validates_presence_of(*args)
|
397
|
-
options = Dao.options_for!(args)
|
398
|
-
|
399
|
-
message = options[:message] || 'is blank or missing'
|
400
|
-
|
401
|
-
allow_nil = options[:allow_nil]
|
402
|
-
allow_blank = options[:allow_blank]
|
403
|
-
|
404
|
-
block =
|
405
|
-
lambda do |value|
|
406
|
-
map = Dao.map(:valid => true)
|
407
|
-
|
408
|
-
if value.nil?
|
409
|
-
unless allow_nil
|
410
|
-
map[:message] = message
|
411
|
-
map[:valid] = false
|
412
|
-
throw(:valid, map)
|
413
|
-
end
|
414
|
-
end
|
415
|
-
|
416
|
-
value = value.to_s.strip
|
417
|
-
|
418
|
-
if value.empty?
|
419
|
-
unless allow_blank
|
420
|
-
map[:message] = message
|
421
|
-
map[:valid] = false
|
422
|
-
throw(:valid, map)
|
423
|
-
end
|
424
|
-
end
|
425
|
-
|
426
|
-
map
|
427
|
-
end
|
428
|
-
|
429
|
-
validates(*args, &block)
|
430
|
-
end
|
431
|
-
|
432
|
-
def validates_any_of(*args)
|
433
|
-
options = Dao.options_for!(args)
|
434
|
-
list = args
|
435
|
-
|
436
|
-
list.each do |args|
|
437
|
-
candidates = list.dup
|
438
|
-
candidates.delete(args)
|
439
|
-
|
440
|
-
message = options[:message] || "(or #{ candidates.map{|candidate| Array(candidate).join('.')}.join(', ') } ) is blank or missing"
|
441
|
-
allow_nil = options[:allow_nil]
|
442
|
-
allow_blank = options[:allow_blank]
|
443
|
-
|
444
|
-
result = self.result
|
445
|
-
|
446
|
-
block =
|
447
|
-
lambda do |value|
|
448
|
-
map = Dao.map(:valid => true)
|
449
|
-
values = list.map{|key| result.get(key)}
|
450
|
-
valid = false
|
451
|
-
values.each do |val|
|
452
|
-
if val
|
453
|
-
valid = true
|
454
|
-
break
|
455
|
-
end
|
456
|
-
|
457
|
-
if val.nil?
|
458
|
-
if allow_nil
|
459
|
-
valid = true
|
460
|
-
break
|
461
|
-
end
|
462
|
-
end
|
463
|
-
|
464
|
-
val = val.to_s.strip
|
465
|
-
|
466
|
-
if val.empty?
|
467
|
-
if allow_blank
|
468
|
-
valid = true
|
469
|
-
break
|
470
|
-
end
|
471
|
-
end
|
472
|
-
end
|
473
|
-
|
474
|
-
unless valid
|
475
|
-
if value.nil?
|
476
|
-
unless allow_nil
|
477
|
-
map[:message] = message
|
478
|
-
map[:valid] = false
|
479
|
-
throw(:valid, map)
|
480
|
-
end
|
481
|
-
end
|
482
|
-
|
483
|
-
value = value.to_s.strip
|
484
|
-
|
485
|
-
if value.empty?
|
486
|
-
unless allow_blank
|
487
|
-
map[:message] = message
|
488
|
-
map[:valid] = false
|
489
|
-
throw(:valid, map)
|
490
|
-
end
|
491
|
-
end
|
492
|
-
end
|
493
|
-
|
494
|
-
map
|
495
|
-
end
|
496
|
-
validates(*args, &block)
|
497
|
-
end
|
498
|
-
end
|
499
|
-
|
500
|
-
def validates_all_of(*args)
|
501
|
-
options = Dao.options_for!(args)
|
502
|
-
list = args
|
503
|
-
|
504
|
-
list.each do |args|
|
505
|
-
candidates = list.dup
|
506
|
-
candidates.delete(args)
|
507
|
-
|
508
|
-
message = options[:message] || "(and #{ candidates.map{|candidate| Array(candidate).join('.')}.join(', ') } ) is blank or missing"
|
509
|
-
allow_nil = options[:allow_nil]
|
510
|
-
allow_blank = options[:allow_blank]
|
511
|
-
|
512
|
-
result = self.result
|
513
|
-
|
514
|
-
block =
|
515
|
-
lambda do |value|
|
516
|
-
map = Dao.map(:valid => true)
|
517
|
-
|
518
|
-
values = list.map{|key| result.get(key)}
|
519
|
-
valid = true
|
520
|
-
values.each do |val|
|
521
|
-
if val
|
522
|
-
break
|
523
|
-
end
|
156
|
+
Dao.load('validations/base.rb')
|
157
|
+
Dao.load('validations/common.rb')
|
524
158
|
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
end
|
531
|
-
|
532
|
-
val = val.to_s.strip
|
533
|
-
|
534
|
-
if val.empty?
|
535
|
-
unless allow_blank
|
536
|
-
valid = false
|
537
|
-
break
|
538
|
-
end
|
539
|
-
end
|
540
|
-
end
|
541
|
-
|
542
|
-
unless valid
|
543
|
-
if value.nil?
|
544
|
-
unless allow_nil
|
545
|
-
map[:message] = message
|
546
|
-
map[:valid] = false
|
547
|
-
throw(:valid, map)
|
548
|
-
end
|
549
|
-
end
|
550
|
-
|
551
|
-
value = value.to_s.strip
|
552
|
-
|
553
|
-
if value.empty?
|
554
|
-
unless allow_blank
|
555
|
-
map[:message] = message
|
556
|
-
map[:valid] = false
|
557
|
-
throw(:valid, map)
|
558
|
-
end
|
559
|
-
end
|
560
|
-
end
|
561
|
-
|
562
|
-
map
|
563
|
-
end
|
564
|
-
validates(*args, &block)
|
159
|
+
module Validations::Mixin
|
160
|
+
def self.included(other)
|
161
|
+
other.module_eval do
|
162
|
+
include Validations::Base
|
163
|
+
include Validations::Common
|
565
164
|
end
|
165
|
+
super
|
566
166
|
end
|
567
|
-
end
|
568
167
|
|
569
|
-
|
570
|
-
|
571
|
-
|
168
|
+
def self.list
|
169
|
+
@list ||= (
|
170
|
+
c = Class.new
|
171
|
+
a = c.instance_methods
|
172
|
+
c.class_eval{ include Validations::Mixin }
|
173
|
+
b = c.instance_methods
|
174
|
+
b - a
|
175
|
+
)
|
572
176
|
end
|
573
177
|
end
|
574
178
|
end
|