sbf-dm-validations 1.3.0.beta

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.
Files changed (185) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +38 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +468 -0
  5. data/.travis.yml +51 -0
  6. data/Gemfile +60 -0
  7. data/LICENSE +21 -0
  8. data/README.rdoc +122 -0
  9. data/Rakefile +4 -0
  10. data/dm-validations.gemspec +20 -0
  11. data/lib/data_mapper/core.rb +1 -0
  12. data/lib/data_mapper/support/assertions.rb +1 -0
  13. data/lib/data_mapper/support/equalizer.rb +1 -0
  14. data/lib/data_mapper/support/ordered_set.rb +2 -0
  15. data/lib/data_mapper/validation/backward.rb +205 -0
  16. data/lib/data_mapper/validation/context.rb +57 -0
  17. data/lib/data_mapper/validation/contextual_rule_set.rb +210 -0
  18. data/lib/data_mapper/validation/exceptions.rb +7 -0
  19. data/lib/data_mapper/validation/inferred.rb +264 -0
  20. data/lib/data_mapper/validation/macros.rb +449 -0
  21. data/lib/data_mapper/validation/message_transformer.rb +111 -0
  22. data/lib/data_mapper/validation/model_extensions.rb +17 -0
  23. data/lib/data_mapper/validation/resource_extensions.rb +131 -0
  24. data/lib/data_mapper/validation/rule/absence.rb +31 -0
  25. data/lib/data_mapper/validation/rule/acceptance.rb +49 -0
  26. data/lib/data_mapper/validation/rule/block.rb +37 -0
  27. data/lib/data_mapper/validation/rule/confirmation.rb +47 -0
  28. data/lib/data_mapper/validation/rule/format/proc.rb +34 -0
  29. data/lib/data_mapper/validation/rule/format/regexp.rb +51 -0
  30. data/lib/data_mapper/validation/rule/format.rb +86 -0
  31. data/lib/data_mapper/validation/rule/formats/email.rb +54 -0
  32. data/lib/data_mapper/validation/rule/formats/url.rb +13 -0
  33. data/lib/data_mapper/validation/rule/length/equal.rb +48 -0
  34. data/lib/data_mapper/validation/rule/length/maximum.rb +50 -0
  35. data/lib/data_mapper/validation/rule/length/minimum.rb +50 -0
  36. data/lib/data_mapper/validation/rule/length/range.rb +50 -0
  37. data/lib/data_mapper/validation/rule/length.rb +96 -0
  38. data/lib/data_mapper/validation/rule/method.rb +42 -0
  39. data/lib/data_mapper/validation/rule/numericalness/equal.rb +34 -0
  40. data/lib/data_mapper/validation/rule/numericalness/greater_than.rb +34 -0
  41. data/lib/data_mapper/validation/rule/numericalness/greater_than_or_equal.rb +34 -0
  42. data/lib/data_mapper/validation/rule/numericalness/integer.rb +41 -0
  43. data/lib/data_mapper/validation/rule/numericalness/less_than.rb +34 -0
  44. data/lib/data_mapper/validation/rule/numericalness/less_than_or_equal.rb +34 -0
  45. data/lib/data_mapper/validation/rule/numericalness/not_equal.rb +34 -0
  46. data/lib/data_mapper/validation/rule/numericalness/numeric.rb +68 -0
  47. data/lib/data_mapper/validation/rule/numericalness.rb +91 -0
  48. data/lib/data_mapper/validation/rule/presence.rb +52 -0
  49. data/lib/data_mapper/validation/rule/primitive_type.rb +32 -0
  50. data/lib/data_mapper/validation/rule/uniqueness.rb +64 -0
  51. data/lib/data_mapper/validation/rule/within/range/bounded.rb +29 -0
  52. data/lib/data_mapper/validation/rule/within/range/unbounded_begin.rb +29 -0
  53. data/lib/data_mapper/validation/rule/within/range/unbounded_end.rb +29 -0
  54. data/lib/data_mapper/validation/rule/within/range.rb +55 -0
  55. data/lib/data_mapper/validation/rule/within/set.rb +45 -0
  56. data/lib/data_mapper/validation/rule/within.rb +32 -0
  57. data/lib/data_mapper/validation/rule.rb +232 -0
  58. data/lib/data_mapper/validation/rule_set.rb +157 -0
  59. data/lib/data_mapper/validation/support/object.rb +19 -0
  60. data/lib/data_mapper/validation/support/ordered_hash.rb +434 -0
  61. data/lib/data_mapper/validation/version.rb +5 -0
  62. data/lib/data_mapper/validation/violation.rb +136 -0
  63. data/lib/data_mapper/validation/violation_set.rb +115 -0
  64. data/lib/data_mapper/validation.rb +105 -0
  65. data/lib/dm-validations.rb +24 -0
  66. data/spec/data_mapper/validation/resource_extensions/save_spec.rb +56 -0
  67. data/spec/data_mapper/validation/resource_extensions/validate_spec.rb +103 -0
  68. data/spec/fixtures/barcode.rb +40 -0
  69. data/spec/fixtures/basketball_court.rb +58 -0
  70. data/spec/fixtures/basketball_player.rb +34 -0
  71. data/spec/fixtures/beta_tester_account.rb +33 -0
  72. data/spec/fixtures/bill_of_landing.rb +47 -0
  73. data/spec/fixtures/boat_dock.rb +26 -0
  74. data/spec/fixtures/city.rb +24 -0
  75. data/spec/fixtures/company.rb +93 -0
  76. data/spec/fixtures/corporate_world.rb +39 -0
  77. data/spec/fixtures/country.rb +24 -0
  78. data/spec/fixtures/ethernet_frame.rb +56 -0
  79. data/spec/fixtures/event.rb +44 -0
  80. data/spec/fixtures/g3_concert.rb +57 -0
  81. data/spec/fixtures/integer_dumped_as_string_property.rb +24 -0
  82. data/spec/fixtures/jabberwock.rb +27 -0
  83. data/spec/fixtures/kayak.rb +28 -0
  84. data/spec/fixtures/lernean_hydra.rb +39 -0
  85. data/spec/fixtures/llama_spaceship.rb +15 -0
  86. data/spec/fixtures/mathematical_function.rb +34 -0
  87. data/spec/fixtures/memory_object.rb +35 -0
  88. data/spec/fixtures/mittelschnauzer.rb +39 -0
  89. data/spec/fixtures/motor_launch.rb +21 -0
  90. data/spec/fixtures/multibyte.rb +16 -0
  91. data/spec/fixtures/page.rb +32 -0
  92. data/spec/fixtures/phone_number.rb +28 -0
  93. data/spec/fixtures/pirogue.rb +28 -0
  94. data/spec/fixtures/programming_language.rb +83 -0
  95. data/spec/fixtures/reservation.rb +38 -0
  96. data/spec/fixtures/scm_operation.rb +56 -0
  97. data/spec/fixtures/sms_message.rb +22 -0
  98. data/spec/fixtures/udp_packet.rb +49 -0
  99. data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +90 -0
  100. data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
  101. data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
  102. data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
  103. data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +57 -0
  104. data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
  105. data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
  106. data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
  107. data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
  108. data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
  109. data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
  110. data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
  111. data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
  112. data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +48 -0
  113. data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +35 -0
  114. data/spec/integration/automatic_validation/spec_helper.rb +57 -0
  115. data/spec/integration/block_validator/spec_helper.rb +5 -0
  116. data/spec/integration/conditional_validation/if_condition_spec.rb +63 -0
  117. data/spec/integration/conditional_validation/spec_helper.rb +5 -0
  118. data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
  119. data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
  120. data/spec/integration/datamapper_models/association_validation_spec.rb +29 -0
  121. data/spec/integration/datamapper_models/inheritance_spec.rb +82 -0
  122. data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
  123. data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
  124. data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
  125. data/spec/integration/format_validator/email_format_validator_spec.rb +139 -0
  126. data/spec/integration/format_validator/format_validator_spec.rb +64 -0
  127. data/spec/integration/format_validator/regexp_validator_spec.rb +33 -0
  128. data/spec/integration/format_validator/spec_helper.rb +5 -0
  129. data/spec/integration/format_validator/url_format_validator_spec.rb +91 -0
  130. data/spec/integration/length_validator/default_value_spec.rb +14 -0
  131. data/spec/integration/length_validator/equality_spec.rb +83 -0
  132. data/spec/integration/length_validator/error_message_spec.rb +22 -0
  133. data/spec/integration/length_validator/maximum_spec.rb +47 -0
  134. data/spec/integration/length_validator/minimum_spec.rb +54 -0
  135. data/spec/integration/length_validator/range_spec.rb +87 -0
  136. data/spec/integration/length_validator/spec_helper.rb +7 -0
  137. data/spec/integration/method_validator/method_validator_spec.rb +243 -0
  138. data/spec/integration/method_validator/spec_helper.rb +5 -0
  139. data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
  140. data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
  141. data/spec/integration/numeric_validator/float_type_spec.rb +90 -0
  142. data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
  143. data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +36 -0
  144. data/spec/integration/numeric_validator/integer_only_true_spec.rb +91 -0
  145. data/spec/integration/numeric_validator/integer_type_spec.rb +86 -0
  146. data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
  147. data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
  148. data/spec/integration/numeric_validator/spec_helper.rb +5 -0
  149. data/spec/integration/primitive_validator/primitive_validator_spec.rb +112 -0
  150. data/spec/integration/primitive_validator/spec_helper.rb +5 -0
  151. data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
  152. data/spec/integration/required_field_validator/association_spec.rb +69 -0
  153. data/spec/integration/required_field_validator/boolean_type_value_spec.rb +164 -0
  154. data/spec/integration/required_field_validator/date_type_value_spec.rb +127 -0
  155. data/spec/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
  156. data/spec/integration/required_field_validator/float_type_value_spec.rb +131 -0
  157. data/spec/integration/required_field_validator/integer_type_value_spec.rb +99 -0
  158. data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
  159. data/spec/integration/required_field_validator/shared_examples.rb +27 -0
  160. data/spec/integration/required_field_validator/spec_helper.rb +7 -0
  161. data/spec/integration/required_field_validator/string_type_value_spec.rb +167 -0
  162. data/spec/integration/required_field_validator/text_type_value_spec.rb +49 -0
  163. data/spec/integration/shared/default_validation_context.rb +13 -0
  164. data/spec/integration/shared/valid_and_invalid_model.rb +35 -0
  165. data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
  166. data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
  167. data/spec/integration/within_validator/spec_helper.rb +5 -0
  168. data/spec/integration/within_validator/within_validator_spec.rb +168 -0
  169. data/spec/public/resource_spec.rb +113 -0
  170. data/spec/spec_helper.rb +28 -0
  171. data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
  172. data/spec/unit/contextual_validators/execution_spec.rb +48 -0
  173. data/spec/unit/contextual_validators/spec_helper.rb +37 -0
  174. data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
  175. data/spec/unit/generic_validator/optional_spec.rb +54 -0
  176. data/spec/unit/validators/within_validator_spec.rb +23 -0
  177. data/spec/unit/violation_set/adding_spec.rb +54 -0
  178. data/spec/unit/violation_set/emptiness_spec.rb +38 -0
  179. data/spec/unit/violation_set/enumerable_spec.rb +32 -0
  180. data/spec/unit/violation_set/reading_spec.rb +35 -0
  181. data/spec/unit/violation_set/respond_to_spec.rb +15 -0
  182. data/tasks/spec.rake +21 -0
  183. data/tasks/yard.rake +9 -0
  184. data/tasks/yardstick.rake +19 -0
  185. metadata +245 -0
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+ class BillOfLading
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include DataMapper::Resource
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+ property :id, Serial
18
+
19
+ property :doc_no, String, :auto_validation => false
20
+ property :email, String, :auto_validation => false
21
+ property :username, String, :auto_validation => false
22
+ property :url, String, :auto_validation => false
23
+ property :bank_url, URI, :auto_validation => false
24
+ property :code, String, :auto_validation => false, :default => "123456"
25
+
26
+ #
27
+ # Validations
28
+ #
29
+
30
+ # this is a trivial example
31
+ validates_format_of :doc_no, :with => lambda { |code|
32
+ code =~ /\AA\d{4}\z/ || code =~ /\A[B-Z]\d{6}X12\z/
33
+ }
34
+
35
+ validates_format_of :email, :as => :email_address
36
+ validates_format_of :url, :as => :url, :allow_nil => false, :allow_blank => false
37
+
38
+ validates_format_of :username, :with => /[a-z]/, :message => 'Username must have at least one letter', :allow_nil => true
39
+ validates_format_of :code, :with => /\d{5,6}/, :message => 'Code format is invalid'
40
+ end
41
+
42
+ class SurrenderBillOfLading < BillOfLading
43
+ validates_format_of :bank_url, :as => :url, :allow_nil => false, :allow_blank => false
44
+ end
45
+ end # Fixtures
46
+ end # Validations
47
+ end # DataMapper
@@ -0,0 +1,26 @@
1
+ module DataMapper
2
+ module Validation
3
+ module Fixtures
4
+ class BoatDock
5
+ #
6
+ # Behaviors
7
+ #
8
+
9
+ include DataMapper::Resource
10
+
11
+ #
12
+ # Properties
13
+ #
14
+
15
+ property :id, Serial
16
+ property :name, String, :auto_validation => false, :default => "I'm a long string"
17
+
18
+ #
19
+ # Validations
20
+ #
21
+
22
+ validates_length_of :name, :min => 3
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class City
4
+ #
5
+ # Behaviors
6
+ #
7
+
8
+ include DataMapper::Resource
9
+
10
+ #
11
+ # Properties
12
+ #
13
+
14
+ property :id, Serial
15
+ property :name, String
16
+
17
+ property :founded_in, Integer, :auto_validation => false
18
+
19
+ #
20
+ # Validations
21
+ #
22
+
23
+ validates_numericality_of :founded_in, :message => "Foundation year must be an integer"
24
+ end
@@ -0,0 +1,93 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+ class Company
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include DataMapper::Resource
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+ property :id, Serial
18
+ property :title, String
19
+ property :type, Discriminator
20
+
21
+
22
+ #
23
+ # Validations
24
+ #
25
+
26
+ validates_presence_of :title, :message => "Company name is a required field"
27
+
28
+ end
29
+
30
+ class ServiceCompany < Company
31
+
32
+ #
33
+ # Properties
34
+ #
35
+
36
+ without_auto_validations do
37
+ property :area_of_expertise, String, :length => (1..60)
38
+ end
39
+
40
+ #
41
+ # Validations
42
+ #
43
+
44
+ validates_presence_of :area_of_expertise
45
+ end
46
+
47
+ class ProductCompany < Company
48
+
49
+ #
50
+ # Properties
51
+ #
52
+
53
+ without_auto_validations do
54
+ property :flagship_product, String, :length => (1..60)
55
+ end
56
+
57
+ #
58
+ # Validations
59
+ #
60
+
61
+ validates_presence_of :title, :message => "Product company must have a name"
62
+ validates_presence_of :flagship_product
63
+ end
64
+
65
+ class Product
66
+ #
67
+ # Behaviors
68
+ #
69
+
70
+ include DataMapper::Resource
71
+
72
+ #
73
+ # Properties
74
+ #
75
+
76
+ property :id, Serial
77
+ property :name, String, :required => true
78
+
79
+ #
80
+ # Associations
81
+ #
82
+
83
+ belongs_to :company, :model => DataMapper::Validations::Fixtures::ProductCompany
84
+
85
+ #
86
+ # Validations
87
+ #
88
+
89
+ validates_presence_of :company
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+ class Organisation
7
+ include DataMapper::Resource
8
+
9
+ property :id, Serial
10
+ property :name, String
11
+ property :domain, String, :unique_index => true
12
+
13
+ validates_uniqueness_of :domain, :allow_nil => true
14
+ end
15
+
16
+ class Department
17
+ include DataMapper::Resource
18
+
19
+ property :id, Serial
20
+ property :name, String, :unique_index => true
21
+
22
+ validates_uniqueness_of :name
23
+ end
24
+
25
+ class User
26
+ include DataMapper::Resource
27
+
28
+ property :id, Serial
29
+ property :user_name, String
30
+
31
+ belongs_to :organisation
32
+ belongs_to :department
33
+
34
+ validates_uniqueness_of :user_name, :when => :signing_up_for_department_account, :scope => [:department]
35
+ validates_uniqueness_of :user_name, :when => :signing_up_for_organization_account, :scope => [:organisation]
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class Country
4
+ #
5
+ # Behaviors
6
+ #
7
+
8
+ include DataMapper::Resource
9
+
10
+ #
11
+ # Properties
12
+ #
13
+
14
+ property :id, Serial
15
+ property :name, String
16
+
17
+ property :area, Integer
18
+
19
+ #
20
+ # Validations
21
+ #
22
+
23
+ validates_numericality_of :area, :message => "Please use integers to specify area"
24
+ end
@@ -0,0 +1,56 @@
1
+ module DataMapper
2
+ module Validation
3
+ module Fixtures
4
+
5
+ # for pedants: we refer to DIX Ethernet here
6
+ class EthernetFrame
7
+
8
+ #
9
+ # Behaviors
10
+ #
11
+
12
+ include DataMapper::Resource
13
+
14
+ #
15
+ # Properties
16
+ #
17
+
18
+ attr_accessor :link_support_fragmentation
19
+
20
+ # we have to have a key in a DM resource
21
+ property :id, Serial
22
+
23
+ without_auto_validations do
24
+ property :destination_mac, String
25
+ property :source_mac, String
26
+ property :ether_type, String
27
+ property :payload, Text
28
+ property :crc, String
29
+ end
30
+
31
+ #
32
+ # Validations
33
+ #
34
+
35
+ validates_length_of :destination_mac, :source_mac, :equals => 6
36
+ validates_length_of :ether_type, :equals => 2
37
+ validates_length_of :payload, :min => 46, :max => 1500, :unless => :link_support_fragmentation
38
+ # :is is alias for :equal
39
+ validates_length_of :crc, :is => 4
40
+
41
+ def self.valid_instance
42
+ # these are obvisouly not bits, and not in hexadecimal
43
+ # format either, but give fixture models some slack
44
+ attributes = {
45
+ :destination_mac => "7b7d93",
46
+ :source_mac => "abe763",
47
+ :ether_type => "88",
48
+ :payload => "Imagine yourself a beautiful bag full of bits here",
49
+ :crc => "4132"
50
+ }
51
+ new(attributes)
52
+ end
53
+ end # EthernetFrame
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+
7
+ class Event
8
+ #
9
+ # Behaviors
10
+ #
11
+
12
+ include ::DataMapper::Resource
13
+
14
+ #
15
+ # Properties
16
+ #
17
+
18
+ property :id, Serial
19
+ property :name, String, :required => true
20
+
21
+ property :starts_at, DateTime
22
+ property :ends_at, DateTime
23
+
24
+ #
25
+ # Validations
26
+ #
27
+
28
+ validates_with_method :starts_at, :method => :ensure_dates_order_is_correct
29
+
30
+ #
31
+ # API
32
+ #
33
+
34
+ def ensure_dates_order_is_correct
35
+ if starts_at && ends_at && (starts_at <= ends_at)
36
+ true
37
+ else
38
+ [false, "Start time cannot be after end time"]
39
+ end
40
+ end
41
+ end # Event
42
+ end # Fixtures
43
+ end # Validations
44
+ end # DataMapper
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+ class G3Concert
7
+ #
8
+ # Bahaviors
9
+ #
10
+
11
+ include ::DataMapper::Validations
12
+
13
+ #
14
+ # Attributes
15
+ #
16
+
17
+ attr_accessor :year, :participants, :city, :planned
18
+
19
+ #
20
+ # Validations
21
+ #
22
+
23
+ validates_with_block :participants, :unless => :planned do
24
+ if self.class.known_performances.any? { |perf| perf == self }
25
+ true
26
+ else
27
+ [false, "this G3 is probably yet to take place"]
28
+ end
29
+ end
30
+
31
+ #
32
+ # API
33
+ #
34
+
35
+ def initialize(attributes = {})
36
+ attributes.each do |key, value|
37
+ self.send("#{key}=", value)
38
+ end
39
+ end
40
+
41
+ def ==(other)
42
+ other.year == self.year && other.participants == self.participants && other.city == self.city
43
+ end
44
+
45
+ # obvisouly this is intentionally shortened list ;)
46
+ def self.known_performances
47
+ [
48
+ new(:year => 2004, :participants => "Joe Satriani, Steve Vai, Yngwie Malmsteen", :city => "Denver"),
49
+ new(:year => 1996, :participants => "Joe Satriani, Steve Vai, Eric Johnson", :city => "San Francisco"),
50
+ new(:year => 2001, :participants => "Joe Satriani, Steve Vai, John Petrucci", :city => "Los Angeles"),
51
+ new(:year => 2002, :participants => "Joe Satriani, Steve Vai, John Petrucci", :city => "Los Angeles")
52
+ ]
53
+ end
54
+ end # G3Concert
55
+ end # Fixtures
56
+ end # Validations
57
+ end # DataMapper
@@ -0,0 +1,24 @@
1
+ # Property to test dumped_as != loaded_as behaviour
2
+ module DataMapper
3
+ class Property
4
+ class IntegerDumpedAsStringProperty < DataMapper::Property::Object
5
+ load_as ::Integer
6
+ dump_as ::String
7
+
8
+ accept_options :length
9
+
10
+ DEFAULT_LENGTH = 50
11
+ length(DEFAULT_LENGTH)
12
+
13
+ attr_reader :length
14
+
15
+ def dump(value)
16
+ value.nil? ? nil : value.to_s
17
+ end
18
+
19
+ def load(value)
20
+ value.nil? ? nil : value.to_i
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ module DataMapper
2
+ module Validation
3
+ module Fixtures
4
+
5
+ class Jabberwock
6
+ #
7
+ # Behaviors
8
+ #
9
+
10
+ include DataMapper::Resource
11
+
12
+ #
13
+ # Properties
14
+ #
15
+
16
+ property :id, Serial
17
+ property :snickersnack, String
18
+
19
+ #
20
+ # Validations
21
+ #
22
+
23
+ validates_length_of :snickersnack, :within => 3..40, :message => "worble warble"
24
+ end # Jabberwock
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,28 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+ class Kayak
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include ::DataMapper::Resource
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+ property :id, Serial
18
+ property :salesman, String, :auto_validation => false
19
+
20
+ #
21
+ # Validations
22
+ #
23
+
24
+ validates_absence_of :salesman, :on => :sale
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+ class LerneanHydra
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include DataMapper::Resource
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+ property :id, Serial
18
+
19
+ without_auto_validations do
20
+ property :head_count, Float
21
+ end
22
+
23
+ #
24
+ # Validations
25
+ #
26
+
27
+ validates_numericality_of :head_count, :eq => 9, :message => "Lernean hydra is said to have exactly 9 heads"
28
+
29
+ def self.valid_instance(overrides = {})
30
+ defaults = {
31
+ :head_count => 9
32
+ }
33
+
34
+ new(defaults.merge(overrides))
35
+ end
36
+ end
37
+ end # Fixtures
38
+ end # Validations
39
+ end # DataMapper
@@ -0,0 +1,15 @@
1
+ module DataMapper
2
+ module Validations
3
+ module Fixtures
4
+ class LlamaSpaceship
5
+ include DataMapper::Resource
6
+
7
+ property :id, Serial
8
+ property :type, String
9
+ property :color, String
10
+
11
+ validates_format_of :color, :with => /^red|black$/, :if => Proc.new { |spaceship| spaceship.type == "standard" }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+ class MathematicalFunction
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include ::DataMapper::Resource
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+ property :id, Serial
18
+ property :input, Float, :auto_validation => false
19
+ property :output, Float, :auto_validation => false
20
+
21
+ #
22
+ # Validations
23
+ #
24
+
25
+ # function domain
26
+ # don't ask me what function that is
27
+ validates_within :input, :set => (1..n)
28
+
29
+ # function range
30
+ validates_within :output, :set => (-n..0), :message => "Negative values or zero only, please"
31
+ end # MathematicalFunction
32
+ end # Fixtures
33
+ end # Validations
34
+ end # DataMapper
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.join(File.dirname(__FILE__),'integer_dumped_as_string_property')
4
+
5
+ module DataMapper
6
+ module Validation
7
+ module Fixtures
8
+ class MemoryObject
9
+ #
10
+ # Behaviors
11
+ #
12
+
13
+ include ::DataMapper::Resource
14
+
15
+ #
16
+ # Properties
17
+ #
18
+
19
+ property :id, Serial
20
+ property :marked, Boolean, :auto_validation => false
21
+ property :color, String, :auto_validation => false
22
+
23
+ property :stupid_integer, IntegerDumpedAsStringProperty, :auto_validation => false
24
+
25
+ #
26
+ # Validations
27
+ #
28
+
29
+ validates_primitive_type_of :marked
30
+ validates_primitive_type_of :color
31
+ validates_primitive_type_of :stupid_integer
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ module DataMapper
2
+ module Validation
3
+ module Fixtures
4
+ # Mittelschauzer is a type of dog. The More You Know.
5
+ class Mittelschnauzer
6
+
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include DataMapper::Resource
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+ without_auto_validations do
18
+ property :name, String, :key => true
19
+ property :height, Float
20
+ end
21
+
22
+ attr_accessor :owner
23
+
24
+ #
25
+ # Validations
26
+ #
27
+
28
+ validates_length_of :name, :min => 2, :allow_nil => false
29
+ validates_length_of :owner, :min => 2
30
+
31
+ validates_numericality_of :height, :lt => 55.2
32
+
33
+ def self.valid_instance
34
+ new(:name => "Roudolf Wilde", :height => 50.4, :owner => 'don')
35
+ end
36
+ end # Mittelschnauzer
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ module DataMapper
2
+ module Validation
3
+ module Fixtures
4
+
5
+ class MotorLaunch
6
+ #
7
+ # Behaviors
8
+ #
9
+
10
+ include DataMapper::Resource
11
+
12
+ #
13
+ # Properties
14
+ #
15
+
16
+ property :id, Serial
17
+ property :name, String, :auto_validation => false
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ # coding: utf-8
2
+
3
+ module DataMapper
4
+ module Validation
5
+ module Fixtures
6
+ class Multibyte
7
+ include DataMapper::Resource
8
+
9
+ property :id, Serial
10
+ property :name, String
11
+
12
+ validates_length_of :name, :is => 20
13
+ end
14
+ end
15
+ end
16
+ end