adaptation 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -2,3 +2,5 @@
2
2
  - changed script/mom to mom as a standalone executable (like adaptation)
3
3
  * 0.0.4
4
4
  - added console and debugger
5
+ * 0.0.5
6
+ - migrated to ActiveRrecord validations
@@ -89,23 +89,18 @@ module Adaptation
89
89
  # has_one :attribute, :type
90
90
  # has_one :text, :owner
91
91
  # validates_presence_of :owner, :type
92
- # validates_value :type, "indexed"
92
+ # validates_value_of :type, "indexed"
93
93
  # end
94
94
  #
95
95
  #
96
96
  class Message
97
97
 
98
- @@validations = {}
99
- @@default_error_messages = {
100
- :invalid_value => "Invalid value",
101
- :must_be_present => "Must be present"
102
- }
103
- @@errors = []
104
98
  @@classes_with_brothers = []
105
99
  cattr_reader :classes_with_brothers
106
100
  cattr_reader :validations
107
101
  cattr_reader :objects
108
102
 
103
+ include Validateable
109
104
  include ROXML
110
105
 
111
106
  def to_hash
@@ -217,6 +212,7 @@ module Adaptation
217
212
  klass = get_class_object(symbols[1].to_s.capitalize)
218
213
  end
219
214
  xml_object symbols[1], klass
215
+ validates_associated symbols[1]
220
216
  end
221
217
  when :attribute
222
218
  @attributes = [] if @attributes.nil?
@@ -234,7 +230,7 @@ module Adaptation
234
230
  @texts << symbols[1]
235
231
  xml_text symbols[1]
236
232
  end
237
- end
233
+ end
238
234
  end
239
235
 
240
236
  def self.has_text
@@ -281,229 +277,26 @@ module Adaptation
281
277
 
282
278
  if configuration[:in]
283
279
  xml_object configuration[:in], klass, ROXML::TAG_ARRAY, configuration[:in].to_s
280
+ validates_associated configuration[:in]
284
281
  else
285
282
  xml_object options[0], klass, ROXML::TAG_ARRAY #, options[0].to_s
283
+ validates_associated options[0]
286
284
  end
287
285
  end
288
286
  end
289
287
 
290
288
  def self.get_class_object(searched_class)
291
- #class_object = nil
292
- #ObjectSpace.each_object(Class){|aClass|
293
- # class_object = aClass if aClass.to_s == searched_class
294
- #}
295
- #if class_object.nil?
296
- # raise Exception.new("Unknown class #{searched_class}.")
297
- #else
298
- # return class_object
299
- #end
300
289
  Object.const_get searched_class
301
290
  end
302
291
 
303
- def self.get_validations_array
304
- validations_arrays = self.has_brothers?
305
- if validations_arrays.nil?
306
- validations_arrays = [self.to_s]
307
- end
308
-
309
- validations_arrays.each do |va|
310
- @@validations[va] = [] if @@validations[va].nil?
311
- end
312
-
313
- validations_arrays
314
- end
315
-
316
- def self.validates_value(*options)
317
- get_validations_array.each do |va|
318
-
319
- validation = Validation.new {|message|
320
- configuration = {:message => @@default_error_messages[:invalid_value] }
321
- brothers_containers = self.has_brothers?
322
- if !brothers_containers
323
- unless (message.send(options[0]) == options[1].to_s)
324
- @@errors << [options[0], message.send(options[0]), configuration[:message]]
325
- end
326
- else
327
- brothers_containers.each do |bc|
328
- elements = message.search_objects(bc.split(":")[1].to_sym)
329
- bad_element = nil
330
- elements.each do |e|
331
- if e.send(options[0]) != options[1].to_s
332
- bad_element = e
333
- break
334
- end
335
- end
336
- unless bad_element.nil?
337
- @@errors << [options[0], bad_element.send(options[0]), configuration[:message]]
338
- end
339
-
340
- #container = nil
341
- #begin
342
- # container = message.send(bc.split(":")[1].to_sym)
343
- #rescue Exception => e
344
- # container = nil
345
- # next
346
- #end
347
- #
348
- #if container
349
- # bad_son = nil
350
- # container.each do |son|
351
- # if son.send(options[0]) != options[1].to_s
352
- # bad_son = son
353
- # break
354
- # end
355
- # end
356
- # unless bad_son.nil?
357
- # @@errors << [options[0], bad_son.send(options[0]), configuration[:message]]
358
- # end
359
- #end
360
- end
361
-
362
- end
363
-
364
- #if belongs_to.nil?
365
- # unless (message.send(options[0]) == options[1].to_s)
366
- # @@errors << [options[0], message.send(options[0]), configuration[:message]]
367
- # end
368
- #else
369
- # found = false
370
- # message.send(belongs_to).each do |son|
371
- # if son.send(options[0]) == options[1].to_s
372
- # found = true
373
- # break
374
- # end
375
- # end
376
- # unless found
377
- # @@errors << [options[0], message.send(options[0]), configuration[:message]]
378
- # end
379
- #end
380
- }
381
-
382
- validation.vid = "#{self.to_s} validates_value #{options.map{|o| o.to_s + " "}}"
383
- validation_already_present = false
384
- @@validations[va].each do |v|
385
- if v.vid == validation.vid
386
- validation_already_present = true
387
- break
388
- end
389
- end
390
- if !validation_already_present
391
- @@validations[va] << validation
392
- end
393
-
394
- end
395
- end
396
-
397
- def self.validates_presence_of *options
398
- get_validations_array.each do |va|
399
-
400
- validation = Validation.new {|message|
401
- configuration = {:message => @@default_error_messages[:must_be_present]}
402
- options.each do |o|
403
- brothers_containers = self.has_brothers?
404
- if !brothers_containers
405
- if message.send(o).nil?
406
- @@errors << [o, message.send(o), configuration[:message]]
407
- end
408
- else
409
- brothers_containers.each do |bc|
410
- elements = message.search_objects(bc.split(":")[1].to_sym)
411
- elements.each do |e|
412
- if e.send(o).nil?
413
- @@errors << [o, e.send(o), configuration[:message]]
414
- end
415
- end
416
-
417
- #container = nil
418
- #begin
419
- # container = message.send(bc.split(":")[1].to_sym)
420
- #rescue Exception => e
421
- # container = nil
422
- # next
423
- #end
424
- #
425
- #if container
426
- # container.each do |son|
427
- # if son.send(o).nil?
428
- # @@errors << [o, son.send(o), configuration[:message]]
429
- # break
430
- # end
431
- # end
432
- #end
433
-
434
- end
435
-
436
- end
437
- end
438
- }
439
- validation.vid = "#{self.to_s} validates_presence_of #{options.map{|o| o.to_s + " "}}"
440
- validation_already_present = false
441
- @@validations[va].each do |v|
442
- if v.vid == validation.vid
443
- validation_already_present = true
444
- break
445
- end
446
- end
447
- if !validation_already_present
448
- @@validations[va] << validation
449
- end
450
- end
451
- end
452
-
453
- def self.validates_uniqueness_of(*options)
454
- end
455
-
456
292
  def self.to_object xml_message
457
293
  parse xml_message
458
294
  end
459
295
 
460
296
  def check
461
- clear_errors
462
-
463
- @@validations.each_key do |k|
464
- son = k.split(":")[1]
465
- unless son.nil?
466
- objects = self.search_objects(son.to_sym)
467
- unless objects.empty?
468
- #if self.has_son? son.to_sym
469
- @@validations[k].each do |v|
470
- v.call(self)
471
- end
472
- end
473
- end
474
- end
475
-
476
- unless @@validations[self.class.to_s].nil?
477
- @@validations[self.class.to_s].each do |v|
478
- v.call(self)
479
- end
480
- end
481
-
482
- unless @@errors.empty?
483
- error = "Errors found in XML message:\n"
484
- @@errors.each do |e|
485
- error << " #{e[0]}: #{e[2]}\n"
486
- error << " #{e[1]}\n"
487
- end
488
- puts "#{error}"
489
- return false
490
- end
491
-
492
- return true
493
- end
494
-
495
- def get_errors
496
- @@errors
497
- end
498
-
499
- def clear_errors
500
- @@errors = []
297
+ valid?
501
298
  end
502
299
 
503
300
  end
504
301
 
505
- class Validation < Proc
506
- attr_accessor :vid
507
- end
508
-
509
302
  end
@@ -280,15 +280,6 @@ class Test::Unit::TestCase
280
280
 
281
281
  # this method is repeated many times all over the code!
282
282
  def get_class_object(searched_class) #:nodoc:
283
- #class_object = nil
284
- #ObjectSpace.each_object(Class){|aClass|
285
- # class_object = aClass if aClass.to_s == searched_class
286
- #}
287
- #if class_object.nil?
288
- # raise Exception.new("Unknown class #{searched_class}.")
289
- #else
290
- # return class_object
291
- #end
292
283
  Object.const_get searched_class
293
284
  end
294
285
 
@@ -0,0 +1,61 @@
1
+ module Validateable
2
+
3
+ [:save, :save!, :update_attribute].each{|attr| define_method(attr){}}
4
+
5
+ def method_missing(symbol, *params)
6
+ if(symbol.to_s =~ /(.*)_before_type_cast$/)
7
+ send($1)
8
+ end
9
+ end
10
+
11
+ def self.append_features(base)
12
+ super
13
+ base.send(:include, ActiveRecord::Validations)
14
+ end
15
+
16
+ end
17
+
18
+ module ActiveRecord
19
+ module Validations
20
+ module ClassMethods
21
+
22
+ def validates_value_of(*attr_names)
23
+ configuration = {
24
+ :message => 'value doesn\'t exist'
25
+ }
26
+ configuration.update(attr_names.pop) if attr_names.last.is_a?(Hash)
27
+
28
+ if configuration[:in].nil?
29
+ validates_each(attr_names, configuration) do |record, attr_name, value|
30
+ if (attr_names[1].to_s != record.send(attr_names[0].to_sym))
31
+ record.errors.add(attr_name, configuration[:message])
32
+ end
33
+ end
34
+ else
35
+ validates_each(attr_names, configuration) do |record, attr_name, value|
36
+ found = false
37
+ record.send(configuration[:in]).each do |s|
38
+ if (attr_names[1].to_s == s.send(attr_names[0].to_sym))
39
+ found = true
40
+ break
41
+ end
42
+ end
43
+ record.errors.add(attr_name, configuration[:message]) unless found
44
+ end
45
+ end
46
+ end
47
+
48
+ def validates_as_email(*attr_names)
49
+ configuration = {
50
+ :message => 'is an invalid email',
51
+ :with => RFC822::EmailAddress,
52
+ :allow_nil => true }
53
+ configuration.update(attr_names.pop) if attr_names.last.is_a?(Hash)
54
+
55
+ validates_format_of attr_names, configuration
56
+ end
57
+
58
+ end
59
+ end
60
+ end
61
+
data/lib/adaptation.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'roxml'
2
2
  require 'yaml'
3
3
  require 'active_record'
4
+ require 'adaptation/validateable'
4
5
  require 'adaptation/message'
5
6
  require 'adaptation/adaptor'
6
7
  require 'adaptation/base'
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: adaptation
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.4
7
- date: 2008-06-11 00:00:00 +02:00
6
+ version: 0.0.5
7
+ date: 2008-07-24 00:00:00 +02:00
8
8
  summary: Framework to facilitate web-application interaction.
9
9
  require_paths:
10
10
  - lib
@@ -50,6 +50,7 @@ files:
50
50
  - lib/adaptation/test
51
51
  - lib/adaptation/test/fake_fixtures.rb
52
52
  - lib/adaptation/test/test_help.rb
53
+ - lib/adaptation/validateable.rb
53
54
  - lib/commands.rb
54
55
  - lib/rails_generator
55
56
  - lib/rails_generator/options.rb