aequitas 0.0.1

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 (216) hide show
  1. data/.gitignore +4 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE +21 -0
  5. data/README.rdoc +125 -0
  6. data/Rakefile +25 -0
  7. data/VERSION +1 -0
  8. data/aequitas.gemspec +20 -0
  9. data/lib/aequitas.rb +80 -0
  10. data/lib/aequitas/class_methods.rb +26 -0
  11. data/lib/aequitas/context.rb +53 -0
  12. data/lib/aequitas/contextual_rule_set.rb +221 -0
  13. data/lib/aequitas/exceptions.rb +10 -0
  14. data/lib/aequitas/macros.rb +466 -0
  15. data/lib/aequitas/message_transformer.rb +127 -0
  16. data/lib/aequitas/rule.rb +153 -0
  17. data/lib/aequitas/rule/absence.rb +14 -0
  18. data/lib/aequitas/rule/absence/blank.rb +21 -0
  19. data/lib/aequitas/rule/absence/nil.rb +21 -0
  20. data/lib/aequitas/rule/acceptance.rb +36 -0
  21. data/lib/aequitas/rule/block.rb +33 -0
  22. data/lib/aequitas/rule/confirmation.rb +41 -0
  23. data/lib/aequitas/rule/format.rb +81 -0
  24. data/lib/aequitas/rule/format/proc.rb +28 -0
  25. data/lib/aequitas/rule/format/regexp.rb +44 -0
  26. data/lib/aequitas/rule/formats/email.rb +52 -0
  27. data/lib/aequitas/rule/formats/url.rb +14 -0
  28. data/lib/aequitas/rule/guard.rb +51 -0
  29. data/lib/aequitas/rule/length.rb +87 -0
  30. data/lib/aequitas/rule/length/equal.rb +46 -0
  31. data/lib/aequitas/rule/length/maximum.rb +46 -0
  32. data/lib/aequitas/rule/length/minimum.rb +46 -0
  33. data/lib/aequitas/rule/length/range.rb +46 -0
  34. data/lib/aequitas/rule/method.rb +31 -0
  35. data/lib/aequitas/rule/numericalness.rb +85 -0
  36. data/lib/aequitas/rule/numericalness/equal.rb +30 -0
  37. data/lib/aequitas/rule/numericalness/greater_than.rb +30 -0
  38. data/lib/aequitas/rule/numericalness/greater_than_or_equal.rb +30 -0
  39. data/lib/aequitas/rule/numericalness/integer.rb +37 -0
  40. data/lib/aequitas/rule/numericalness/less_than.rb +30 -0
  41. data/lib/aequitas/rule/numericalness/less_than_or_equal.rb +30 -0
  42. data/lib/aequitas/rule/numericalness/non_integer.rb +64 -0
  43. data/lib/aequitas/rule/numericalness/not_equal.rb +30 -0
  44. data/lib/aequitas/rule/presence.rb +14 -0
  45. data/lib/aequitas/rule/presence/not_blank.rb +21 -0
  46. data/lib/aequitas/rule/presence/not_nil.rb +21 -0
  47. data/lib/aequitas/rule/primitive_type.rb +28 -0
  48. data/lib/aequitas/rule/skip_condition.rb +104 -0
  49. data/lib/aequitas/rule/within.rb +28 -0
  50. data/lib/aequitas/rule/within/range.rb +53 -0
  51. data/lib/aequitas/rule/within/range/bounded.rb +25 -0
  52. data/lib/aequitas/rule/within/range/unbounded_begin.rb +25 -0
  53. data/lib/aequitas/rule/within/range/unbounded_end.rb +25 -0
  54. data/lib/aequitas/rule/within/set.rb +39 -0
  55. data/lib/aequitas/rule_set.rb +80 -0
  56. data/lib/aequitas/support/blank.rb +22 -0
  57. data/lib/aequitas/support/equalizable.rb +113 -0
  58. data/lib/aequitas/support/ordered_hash.rb +438 -0
  59. data/lib/aequitas/version.rb +5 -0
  60. data/lib/aequitas/violation.rb +116 -0
  61. data/lib/aequitas/violation_set.rb +123 -0
  62. data/lib/aequitas/virtus.rb +29 -0
  63. data/lib/aequitas/virtus/inline_attribute_rule_extractor.rb +41 -0
  64. data/lib/aequitas/virtus/inline_attribute_rule_extractor/boolean.rb +17 -0
  65. data/lib/aequitas/virtus/inline_attribute_rule_extractor/object.rb +25 -0
  66. data/lib/aequitas/virtus/inline_attribute_rule_extractor/string.rb +27 -0
  67. data/spec/integration/aequitas/macros/validates_absence_of_spec.rb +19 -0
  68. data/spec/integration/aequitas/macros/validates_acceptance_of_spec.rb +19 -0
  69. data/spec/integration/aequitas/macros/validates_confirmation_of_spec.rb +25 -0
  70. data/spec/integration/aequitas/macros/validates_format_of_spec.rb +87 -0
  71. data/spec/integration/aequitas/macros/validates_length_of.rb +77 -0
  72. data/spec/integration/aequitas/macros/validates_numericalness_of_spec.rb +221 -0
  73. data/spec/integration/aequitas/macros/validates_presence_of_spec.rb +19 -0
  74. data/spec/integration/aequitas/macros/validates_with_block.rb +23 -0
  75. data/spec/integration/aequitas/macros/validates_with_method.rb +19 -0
  76. data/spec/integration/aequitas/macros/validates_within.rb +87 -0
  77. data/spec/integration/shared/macros/integration_spec.rb +67 -0
  78. data/spec/integration/virtus/boolean/presence_spec.rb +49 -0
  79. data/spec/integration/virtus/string/format/email_address_spec.rb +55 -0
  80. data/spec/integration/virtus/string/format/regexp_spec.rb +55 -0
  81. data/spec/integration/virtus/string/format/url_spec.rb +55 -0
  82. data/spec/integration/virtus/string/length/equal_spec.rb +49 -0
  83. data/spec/integration/virtus/string/length/range_spec.rb +49 -0
  84. data/spec/integration/virtus/string/presence_spec.rb +49 -0
  85. data/spec/rcov.opts +6 -0
  86. data/spec/spec_helper.rb +5 -0
  87. data/spec/suite.rb +5 -0
  88. data/spec/unit/aequitas/rule/absence/blank_spec.rb +45 -0
  89. data/spec/unit/aequitas/rule/acceptance_spec.rb +71 -0
  90. data/spec/unit/aequitas/rule/confirmation_spec.rb +80 -0
  91. data/spec/unit/aequitas/rule/guard_spec.rb +120 -0
  92. data/spec/unit/aequitas/rule/skip_condition_spec.rb +170 -0
  93. data/spec/unit/aequitas/rule_spec.rb +40 -0
  94. data/spec/unit/aequitas/support/blank_spec.rb +83 -0
  95. data/spec/unit/aequitas/support/equalizable/equalizer_spec.rb +21 -0
  96. data/spec/unit/aequitas/support/equalizable_spec.rb +67 -0
  97. data/spec/unit/aequitas/violation_set_spec.rb +154 -0
  98. data/spec_legacy/fixtures/barcode.rb +40 -0
  99. data/spec_legacy/fixtures/basketball_court.rb +58 -0
  100. data/spec_legacy/fixtures/basketball_player.rb +34 -0
  101. data/spec_legacy/fixtures/beta_tester_account.rb +33 -0
  102. data/spec_legacy/fixtures/bill_of_landing.rb +47 -0
  103. data/spec_legacy/fixtures/boat_dock.rb +26 -0
  104. data/spec_legacy/fixtures/city.rb +24 -0
  105. data/spec_legacy/fixtures/company.rb +93 -0
  106. data/spec_legacy/fixtures/corporate_world.rb +39 -0
  107. data/spec_legacy/fixtures/country.rb +24 -0
  108. data/spec_legacy/fixtures/ethernet_frame.rb +56 -0
  109. data/spec_legacy/fixtures/event.rb +44 -0
  110. data/spec_legacy/fixtures/g3_concert.rb +57 -0
  111. data/spec_legacy/fixtures/jabberwock.rb +27 -0
  112. data/spec_legacy/fixtures/kayak.rb +28 -0
  113. data/spec_legacy/fixtures/lernean_hydra.rb +39 -0
  114. data/spec_legacy/fixtures/llama_spaceship.rb +15 -0
  115. data/spec_legacy/fixtures/mathematical_function.rb +34 -0
  116. data/spec_legacy/fixtures/memory_object.rb +30 -0
  117. data/spec_legacy/fixtures/mittelschnauzer.rb +39 -0
  118. data/spec_legacy/fixtures/motor_launch.rb +21 -0
  119. data/spec_legacy/fixtures/multibyte.rb +16 -0
  120. data/spec_legacy/fixtures/page.rb +32 -0
  121. data/spec_legacy/fixtures/phone_number.rb +28 -0
  122. data/spec_legacy/fixtures/pirogue.rb +28 -0
  123. data/spec_legacy/fixtures/programming_language.rb +83 -0
  124. data/spec_legacy/fixtures/reservation.rb +38 -0
  125. data/spec_legacy/fixtures/scm_operation.rb +56 -0
  126. data/spec_legacy/fixtures/sms_message.rb +22 -0
  127. data/spec_legacy/fixtures/udp_packet.rb +49 -0
  128. data/spec_legacy/integration/absent_field_validator/absent_field_validator_spec.rb +90 -0
  129. data/spec_legacy/integration/absent_field_validator/spec_helper.rb +7 -0
  130. data/spec_legacy/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
  131. data/spec_legacy/integration/acceptance_validator/spec_helper.rb +7 -0
  132. data/spec_legacy/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +57 -0
  133. data/spec_legacy/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
  134. data/spec_legacy/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
  135. data/spec_legacy/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
  136. data/spec_legacy/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
  137. data/spec_legacy/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
  138. data/spec_legacy/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
  139. data/spec_legacy/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
  140. data/spec_legacy/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
  141. data/spec_legacy/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +48 -0
  142. data/spec_legacy/integration/automatic_validation/inferred_within_validation_spec.rb +35 -0
  143. data/spec_legacy/integration/automatic_validation/spec_helper.rb +57 -0
  144. data/spec_legacy/integration/block_validator/block_validator_spec.rb +32 -0
  145. data/spec_legacy/integration/block_validator/spec_helper.rb +5 -0
  146. data/spec_legacy/integration/conditional_validation/if_condition_spec.rb +63 -0
  147. data/spec_legacy/integration/conditional_validation/spec_helper.rb +5 -0
  148. data/spec_legacy/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
  149. data/spec_legacy/integration/confirmation_validator/spec_helper.rb +5 -0
  150. data/spec_legacy/integration/datamapper_models/association_validation_spec.rb +29 -0
  151. data/spec_legacy/integration/datamapper_models/inheritance_spec.rb +82 -0
  152. data/spec_legacy/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
  153. data/spec_legacy/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
  154. data/spec_legacy/integration/duplicated_validations/spec_helper.rb +5 -0
  155. data/spec_legacy/integration/format_validator/email_format_validator_spec.rb +139 -0
  156. data/spec_legacy/integration/format_validator/format_validator_spec.rb +64 -0
  157. data/spec_legacy/integration/format_validator/regexp_validator_spec.rb +33 -0
  158. data/spec_legacy/integration/format_validator/spec_helper.rb +5 -0
  159. data/spec_legacy/integration/format_validator/url_format_validator_spec.rb +93 -0
  160. data/spec_legacy/integration/length_validator/default_value_spec.rb +14 -0
  161. data/spec_legacy/integration/length_validator/equality_spec.rb +87 -0
  162. data/spec_legacy/integration/length_validator/error_message_spec.rb +22 -0
  163. data/spec_legacy/integration/length_validator/maximum_spec.rb +49 -0
  164. data/spec_legacy/integration/length_validator/minimum_spec.rb +54 -0
  165. data/spec_legacy/integration/length_validator/range_spec.rb +87 -0
  166. data/spec_legacy/integration/length_validator/spec_helper.rb +7 -0
  167. data/spec_legacy/integration/method_validator/method_validator_spec.rb +242 -0
  168. data/spec_legacy/integration/method_validator/spec_helper.rb +5 -0
  169. data/spec_legacy/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
  170. data/spec_legacy/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
  171. data/spec_legacy/integration/numeric_validator/float_type_spec.rb +90 -0
  172. data/spec_legacy/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
  173. data/spec_legacy/integration/numeric_validator/gte_with_float_type_spec.rb +37 -0
  174. data/spec_legacy/integration/numeric_validator/integer_only_true_spec.rb +91 -0
  175. data/spec_legacy/integration/numeric_validator/integer_type_spec.rb +86 -0
  176. data/spec_legacy/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
  177. data/spec_legacy/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
  178. data/spec_legacy/integration/numeric_validator/spec_helper.rb +5 -0
  179. data/spec_legacy/integration/primitive_validator/primitive_validator_spec.rb +92 -0
  180. data/spec_legacy/integration/primitive_validator/spec_helper.rb +5 -0
  181. data/spec_legacy/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
  182. data/spec_legacy/integration/required_field_validator/association_spec.rb +69 -0
  183. data/spec_legacy/integration/required_field_validator/boolean_type_value_spec.rb +164 -0
  184. data/spec_legacy/integration/required_field_validator/date_type_value_spec.rb +127 -0
  185. data/spec_legacy/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
  186. data/spec_legacy/integration/required_field_validator/float_type_value_spec.rb +131 -0
  187. data/spec_legacy/integration/required_field_validator/integer_type_value_spec.rb +99 -0
  188. data/spec_legacy/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
  189. data/spec_legacy/integration/required_field_validator/shared_examples.rb +26 -0
  190. data/spec_legacy/integration/required_field_validator/spec_helper.rb +7 -0
  191. data/spec_legacy/integration/required_field_validator/string_type_value_spec.rb +167 -0
  192. data/spec_legacy/integration/required_field_validator/text_type_value_spec.rb +49 -0
  193. data/spec_legacy/integration/shared/default_validation_context.rb +13 -0
  194. data/spec_legacy/integration/shared/valid_and_invalid_model.rb +35 -0
  195. data/spec_legacy/integration/uniqueness_validator/spec_helper.rb +5 -0
  196. data/spec_legacy/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
  197. data/spec_legacy/integration/within_validator/spec_helper.rb +5 -0
  198. data/spec_legacy/integration/within_validator/within_validator_spec.rb +168 -0
  199. data/spec_legacy/public/resource_spec.rb +105 -0
  200. data/spec_legacy/spec.opts +4 -0
  201. data/spec_legacy/spec_helper.rb +29 -0
  202. data/spec_legacy/unit/contextual_validators/emptiness_spec.rb +50 -0
  203. data/spec_legacy/unit/contextual_validators/execution_spec.rb +48 -0
  204. data/spec_legacy/unit/contextual_validators/spec_helper.rb +37 -0
  205. data/spec_legacy/unit/generic_validator/equality_operator_spec.rb +26 -0
  206. data/spec_legacy/unit/generic_validator/optional_spec.rb +54 -0
  207. data/spec_legacy/unit/validators/within_validator_spec.rb +23 -0
  208. data/spec_legacy/unit/violation_set/adding_spec.rb +54 -0
  209. data/spec_legacy/unit/violation_set/emptiness_spec.rb +38 -0
  210. data/spec_legacy/unit/violation_set/enumerable_spec.rb +32 -0
  211. data/spec_legacy/unit/violation_set/reading_spec.rb +35 -0
  212. data/spec_legacy/unit/violation_set/respond_to_spec.rb +15 -0
  213. data/tasks/spec.rake +38 -0
  214. data/tasks/yard.rake +9 -0
  215. data/tasks/yardstick.rake +19 -0
  216. metadata +302 -0
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'DataMapper::Validations::Fixtures::LlamaSpaceship' do
4
+ before :all do
5
+ DataMapper::Validations::Fixtures::LlamaSpaceship.auto_migrate!
6
+ end
7
+
8
+ it "validates even non dirty attributes" do
9
+ spaceship = DataMapper::Validations::Fixtures::LlamaSpaceship.create(:type => "custom", :color => "pink")
10
+ spaceship.type = "standard"
11
+ spaceship.should_not be_valid
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'spec_helper'
4
+ require 'integration/duplicated_validations/spec_helper'
5
+
6
+ describe 'DataMapper::Validations::Fixtures::Page' do
7
+ before :all do
8
+ DataMapper::Validations::Fixtures::Page.auto_migrate!
9
+
10
+ @model = DataMapper::Validations::Fixtures::Page.new(:id => 1024)
11
+ end
12
+
13
+ describe "without body" do
14
+ before :all do
15
+ @model.body = nil
16
+ end
17
+
18
+ it_should_behave_like "invalid model"
19
+
20
+ it "does not have duplicated error messages" do
21
+ @model.errors.on(:body).should == ["Body must not be blank"]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ # make sure you check out spec/fixtures to see fixture models
2
+ # already written
3
+ #
4
+ # DataMapper developers feels strongly against foobars in the spec
5
+ # suite
@@ -0,0 +1,139 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+ require 'integration/format_validator/spec_helper'
4
+
5
+ describe 'DataMapper::Validations::Fixtures::BillOfLading' do
6
+ before :all do
7
+ DataMapper::Validations::Fixtures::BillOfLading.auto_migrate!
8
+ end
9
+
10
+ def valid_attributes
11
+ { :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
12
+ end
13
+
14
+ @valid_email_addresses = [
15
+ '+1~1+@example.com',
16
+ '{_dave_}@example.com',
17
+ '"[[ dave ]]"@example.com',
18
+ 'dave."dave"@example.com',
19
+ 'test@example.com',
20
+ 'test@example.co.uk',
21
+ 'test@example.com.br',
22
+ '"J. P. \'s-Gravezande, a.k.a. The Hacker!"@example.com',
23
+ 'me@[187.223.45.119]',
24
+ 'someone@123.com',
25
+ 'simon&garfunkel@songs.com'].each do |email|
26
+
27
+ describe "with email value of #{email} (RFC2822 compliant)" do
28
+ before :all do
29
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:email => email))
30
+ end
31
+
32
+ it_should_behave_like "valid model"
33
+ end
34
+ end
35
+
36
+
37
+ @invalid_email_addresses = [
38
+ '-- dave --@example.com',
39
+ '[dave]@example.com',
40
+ '.dave@example.com',
41
+ 'Max@Job 3:14',
42
+ 'Job@Book of Job',
43
+ 'test@localhost',
44
+ 'J. P. \'s-Gravezande, a.k.a. The Hacker!@example.com',
45
+ "test@example.com\nsomething after the newline"].each do |email|
46
+ describe "with email value of #{email} (non RFC2822 compliant)" do
47
+ before :all do
48
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:email => email))
49
+ end
50
+
51
+ it_should_behave_like "invalid model"
52
+ end
53
+ end
54
+
55
+ describe "with valid email including unicode characters" do
56
+ before :all do
57
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:email => 'pelé@gmail.com'))
58
+ end
59
+
60
+ if (RUBY_VERSION == '1.9.2' && RUBY_ENGINE == 'jruby') || RUBY_VERSION == '1.9.3'
61
+ # Not supported on jruby 1.9 or 1.9.3 yet - see formats/email.rb
62
+ it 'should not raise an error' do
63
+ lambda { @model.valid? }.should_not raise_error
64
+ end
65
+ else
66
+ # Unicode emails not supported on MRI18
67
+ unless !defined?(RUBY_ENGINE) && RUBY_VERSION == '1.8.7'
68
+ it 'should behave like valid model' do
69
+ @model.should be_valid
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+
76
+ it 'should have a pre-defined URL format' do
77
+ bad = [ 'http:// example.com',
78
+ 'ftp://example.com',
79
+ 'http://.com',
80
+ 'http://',
81
+ 'test',
82
+ '...'
83
+ ]
84
+
85
+ good = [
86
+ 'http://example.com',
87
+ 'http://www.example.com',
88
+ ]
89
+
90
+ bol = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.except(:url))
91
+ bol.should_not be_valid
92
+ bol.errors.on(:url).should == [ 'Url has an invalid format' ]
93
+
94
+ bad.map do |e|
95
+ bol.url = e
96
+ bol.valid?
97
+ bol.errors.on(:url).should == [ 'Url has an invalid format' ]
98
+ end
99
+
100
+ good.map do |e|
101
+ bol.url = e
102
+ bol.valid?
103
+ bol.errors.on(:url).should be_nil
104
+ end
105
+
106
+ end
107
+
108
+ describe 'with a regexp' do
109
+ before do
110
+ @bol = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes)
111
+ @bol.should be_valid
112
+ end
113
+
114
+ describe 'if matched' do
115
+ before do
116
+ @bol.username = 'a12345'
117
+ end
118
+
119
+ it 'should validate' do
120
+ @bol.should be_valid
121
+ end
122
+ end
123
+
124
+ describe 'if not matched' do
125
+ before do
126
+ @bol.username = '12345'
127
+ end
128
+
129
+ it 'should not validate' do
130
+ @bol.should_not be_valid
131
+ end
132
+
133
+ it 'should set an error message' do
134
+ @bol.valid?
135
+ @bol.errors.on(:username).should == [ 'Username must have at least one letter' ]
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+ require 'integration/format_validator/spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BillOfLading' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BillOfLading.auto_migrate!
7
+ end
8
+
9
+ def valid_attributes
10
+ { :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
11
+ end
12
+
13
+ describe "with doc no with value of 'BAD CODE :)'" do
14
+ before :all do
15
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:doc_no => 'BAD CODE :)'))
16
+ end
17
+
18
+ it_should_behave_like 'invalid model'
19
+
20
+ it "has meaningful error message on invalid field" do
21
+ @model.errors.on(:doc_no).should == [ 'Doc no has an invalid format' ]
22
+ end
23
+ end
24
+
25
+ describe "with doc no with value of 'A1234'" do
26
+ before :all do
27
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:doc_no => 'A1234'))
28
+ end
29
+
30
+ it_should_behave_like 'valid model'
31
+ end
32
+
33
+ describe "with doc no with value of 'B123456X12'" do
34
+ before :all do
35
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:doc_no => 'B123456X12'))
36
+ end
37
+
38
+ it_should_behave_like 'valid model'
39
+ end
40
+
41
+ describe "with missing url" do
42
+ before :all do
43
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.except(:url))
44
+ end
45
+
46
+ it_should_behave_like 'invalid model'
47
+ end
48
+
49
+ describe "with blank name" do
50
+ before :all do
51
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:username => ''))
52
+ end
53
+
54
+ it_should_behave_like 'valid model'
55
+ end
56
+
57
+ describe "with blank email" do
58
+ before :all do
59
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:email => ''))
60
+ end
61
+
62
+ it_should_behave_like 'valid model'
63
+ end
64
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'integration/format_validator/spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BillOfLading' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BillOfLading.auto_migrate!
7
+ end
8
+
9
+ def valid_attributes
10
+ { :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
11
+ end
12
+
13
+ describe "with code of 123456" do
14
+ before :all do
15
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:code => '123456'))
16
+ end
17
+
18
+ it_should_behave_like 'valid model'
19
+ end
20
+
21
+
22
+ describe "with code of 12" do
23
+ before :all do
24
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:code => '12'))
25
+ end
26
+
27
+ it_should_behave_like 'invalid model'
28
+
29
+ it "has a meaningful error message" do
30
+ @model.errors.on(:code).should == [ 'Code format is invalid' ]
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,5 @@
1
+ # make sure you check out spec/fixtures to see fixture models
2
+ # already written
3
+ #
4
+ # DataMapper developers feels strongly against foobars in the spec
5
+ # suite
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+ require 'integration/format_validator/spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BillOfLading' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BillOfLading.auto_migrate!
7
+ end
8
+
9
+ def valid_attributes
10
+ { :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
11
+ end
12
+
13
+ invalid_uris = [ 'http:// example.com', 'ftp://example.com', 'http://.com', 'http://', 'test', '...',
14
+ # these are valid URIs from RFC perspective,
15
+ # but too often not the case for web apps
16
+ #
17
+ # TODO: add another format that is strictly
18
+ # RFC compliant so it can be used, for instance,
19
+ # for internal apps that may refer to local domains
20
+ # like http://backend:8080
21
+ "http://localhost:4000", "http://localhost" ]
22
+
23
+ invalid_uris.each do |uri|
24
+ describe "with URL of #{uri}" do
25
+ before :all do
26
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:url => uri))
27
+ end
28
+
29
+ it_should_behave_like "invalid model"
30
+
31
+ it "has a meaningful error message" do
32
+ @model.errors.on(:url).should == [ 'Url has an invalid format' ]
33
+ end
34
+ end
35
+ end
36
+
37
+ # http:// throws an exception in Addressable::URI, so it wouldn't make it to the validation part anyway :)
38
+ (invalid_uris - ['http://']).each do |uri|
39
+ describe "with dm-type URI of #{uri}" do
40
+ before(:all) do
41
+ @model = DataMapper::Validations::Fixtures::SurrenderBillOfLading.new(valid_attributes.merge(:bank_url => uri))
42
+ end
43
+
44
+ it_should_behave_like "invalid model"
45
+
46
+ it "has a meaningful error message" do
47
+ @model.errors.on(:bank_url).should == [ 'Bank url has an invalid format' ]
48
+ end
49
+
50
+ end
51
+ end
52
+
53
+
54
+ [ 'http://apple.com',
55
+ 'http://www.apple.com',
56
+ "http://apple.com/",
57
+ "http://apple.com/iphone",
58
+ "http://www.google.com/search?client=safari&rls=en-us&q=LED&ie=UTF-8&oe=UTF-8",
59
+ "http://books.google.com",
60
+ "http://books.google.com/",
61
+ "http://db2.clouds.megacorp.net:8080",
62
+ "https://github.com",
63
+ "https://github.com/",
64
+ "http://www.example.com:8088/never/ending/path/segments/",
65
+ "http://db2.clouds.megacorp.net:8080/resources/10",
66
+ "http://www.example.com:8088/never/ending/path/segments",
67
+ "http://books.google.com/books?id=uSUJ3VhH4BsC&printsec=frontcover&dq=subject:%22+Linguistics+%22&as_brr=3&ei=DAHPSbGQE5rEzATk1sShAQ&rview=1",
68
+ "http://books.google.com:80/books?uid=14472359158468915761&rview=1",
69
+ "http://books.google.com/books?id=Ar3-TXCYXUkC&printsec=frontcover&rview=1",
70
+ "http://books.google.com/books/vp6ae081e454d30f89b6bca94e0f96fc14.js",
71
+ "http://www.google.com/images/cleardot.gif",
72
+ "http://books.google.com:80/books?id=Ar3-TXCYXUkC&printsec=frontcover&rview=1#PPA5,M1",
73
+ "http://www.hulu.com/watch/64923/terminator-the-sarah-connor-chronicles-to-the-lighthouse",
74
+ "http://hulu.com:80/browse/popular/tv",
75
+ "http://www.hulu.com/watch/62475/the-simpsons-gone-maggie-gone#s-p1-so-i0"
76
+ ].each do |uri|
77
+ describe "with URL of #{uri}" do
78
+ before :all do
79
+ @model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:url => uri))
80
+ end
81
+
82
+ it_should_behave_like "valid model"
83
+ end
84
+
85
+ describe "with dm-type URI of #{uri}" do
86
+ before(:all) do
87
+ @model = DataMapper::Validations::Fixtures::SurrenderBillOfLading.new(valid_attributes.merge(:bank_url => uri))
88
+ end
89
+
90
+ it_should_behave_like "valid model"
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+ require 'integration/length_validator/spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BoatDock' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BoatDock.auto_migrate!
7
+
8
+ @model = DataMapper::Validations::Fixtures::BoatDock.new
9
+ end
10
+
11
+ describe "with default values that are valid" do
12
+ it_should_behave_like "valid model"
13
+ end
14
+ end
@@ -0,0 +1,87 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'integration/length_validator/spec_helper'
5
+
6
+ describe "entity with wrong destination MAC address length", :shared => true do
7
+ it "has error message with range bounds" do
8
+ @model.errors.on(:destination_mac).should == [ 'Destination mac must be 6 characters long' ]
9
+ end
10
+ end
11
+
12
+
13
+ describe 'DataMapper::Validations::Fixtures::EthernetFrame' do
14
+ before :all do
15
+ DataMapper::Validations::Fixtures::EthernetFrame.auto_migrate!
16
+
17
+ @model = DataMapper::Validations::Fixtures::EthernetFrame.valid_instance
18
+ @model.link_support_fragmentation = false
19
+ end
20
+
21
+ it_should_behave_like "valid model"
22
+
23
+ describe "with destination MAC 3 'bits' long" do
24
+ before :all do
25
+ @model.destination_mac = "123"
26
+ @model.valid?
27
+ end
28
+
29
+ it_should_behave_like "invalid model"
30
+
31
+ it_should_behave_like "entity with wrong destination MAC address length"
32
+ end
33
+
34
+ describe "with destination MAC 8 'bits' long" do
35
+ before :all do
36
+ @model.destination_mac = "123abce8"
37
+ @model.valid?
38
+ end
39
+
40
+ it_should_behave_like "invalid model"
41
+
42
+ it_should_behave_like "entity with wrong destination MAC address length"
43
+ end
44
+
45
+ # arguable but reasonable for 80% of cases
46
+ # to treat nil as a 0 lengh value
47
+ # reported in
48
+ # http://datamapper.lighthouseapp.com/projects/20609/tickets/646
49
+ describe "that has no destination MAC address" do
50
+ before :all do
51
+ @model.destination_mac = nil
52
+ @model.valid?
53
+ end
54
+
55
+ it_should_behave_like "invalid model"
56
+
57
+ it_should_behave_like "entity with wrong destination MAC address length"
58
+ end
59
+
60
+ describe "with a 6 'bits' destination MAC address" do
61
+ before :all do
62
+ @model.destination_mac = "a1b2c3"
63
+ @model.valid?
64
+ end
65
+
66
+ it_should_behave_like "valid model"
67
+ end
68
+
69
+ describe "with multibyte characters" do
70
+ before :all do
71
+ begin
72
+ # force normal encoding in this block
73
+ original, $KCODE = $KCODE, 'N' if RUBY_VERSION <= '1.8.6'
74
+
75
+ # example from: http://intertwingly.net/stories/2004/04/14/i18n.html
76
+ @model = DataMapper::Validations::Fixtures::Multibyte.new(
77
+ :name => 'Iñtërnâtiônàlizætiøn'
78
+ )
79
+ @model.should be_valid
80
+ ensure
81
+ $KCODE = original if RUBY_VERSION <= '1.8.6'
82
+ end
83
+ end
84
+
85
+ it_should_behave_like "valid model"
86
+ end
87
+ end