dm-validations 0.9.11 → 0.10.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/{History.txt → History.rdoc} +10 -3
- data/LICENSE +1 -0
- data/Manifest.txt +103 -33
- data/README.rdoc +172 -0
- data/Rakefile +4 -5
- data/lib/dm-validations.rb +73 -75
- data/lib/dm-validations/auto_validate.rb +98 -56
- data/lib/dm-validations/contextual_validators.rb +37 -14
- data/lib/dm-validations/exceptions.rb +3 -0
- data/lib/dm-validations/formats/url.rb +3 -1
- data/lib/dm-validations/support/context.rb +54 -0
- data/lib/dm-validations/validation_errors.rb +51 -27
- data/lib/dm-validations/{absent_field_validator.rb → validators/absent_field_validator.rb} +2 -8
- data/lib/dm-validations/{acceptance_validator.rb → validators/acceptance_validator.rb} +7 -7
- data/lib/dm-validations/{block_validator.rb → validators/block_validator.rb} +0 -0
- data/lib/dm-validations/{confirmation_validator.rb → validators/confirmation_validator.rb} +7 -7
- data/lib/dm-validations/{format_validator.rb → validators/format_validator.rb} +10 -16
- data/lib/dm-validations/{generic_validator.rb → validators/generic_validator.rb} +28 -6
- data/lib/dm-validations/validators/length_validator.rb +214 -0
- data/lib/dm-validations/validators/method_validator.rb +68 -0
- data/lib/dm-validations/validators/numeric_validator.rb +171 -0
- data/lib/dm-validations/{primitive_validator.rb → validators/primitive_validator.rb} +2 -7
- data/lib/dm-validations/{required_field_validator.rb → validators/required_field_validator.rb} +0 -6
- data/lib/dm-validations/{uniqueness_validator.rb → validators/uniqueness_validator.rb} +9 -20
- data/lib/dm-validations/{within_validator.rb → validators/within_validator.rb} +4 -4
- data/lib/dm-validations/version.rb +1 -1
- data/spec/fixtures/barcode.rb +32 -0
- data/spec/fixtures/basketball_court.rb +58 -0
- data/spec/fixtures/basketball_player.rb +37 -0
- data/spec/fixtures/beta_tester_account.rb +33 -0
- data/spec/fixtures/bill_of_landing.rb +42 -0
- data/spec/fixtures/boat_dock.rb +26 -0
- data/spec/fixtures/city.rb +25 -0
- data/spec/fixtures/company.rb +95 -0
- data/spec/fixtures/corporate_world.rb +47 -0
- data/spec/fixtures/country.rb +25 -0
- data/spec/fixtures/currency.rb +42 -0
- data/spec/fixtures/ethernet_frame.rb +56 -0
- data/spec/fixtures/event.rb +44 -0
- data/spec/fixtures/g3_concert.rb +57 -0
- data/spec/fixtures/jabberwock.rb +27 -0
- data/spec/fixtures/kayak.rb +28 -0
- data/spec/fixtures/lernean_hydra.rb +39 -0
- data/spec/fixtures/mathematical_function.rb +34 -0
- data/spec/fixtures/memory_object.rb +30 -0
- data/spec/fixtures/mittelschnauzer.rb +35 -0
- data/spec/fixtures/motor_launch.rb +21 -0
- data/spec/fixtures/page.rb +32 -0
- data/spec/fixtures/phone_number.rb +28 -0
- data/spec/fixtures/pirogue.rb +28 -0
- data/spec/fixtures/programming_language.rb +83 -0
- data/spec/fixtures/reservation.rb +38 -0
- data/spec/fixtures/scm_operation.rb +67 -0
- data/spec/fixtures/sms_message.rb +22 -0
- data/spec/fixtures/udp_packet.rb +49 -0
- data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +86 -0
- data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
- data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
- data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
- data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +47 -0
- data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +41 -0
- data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +104 -0
- data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +35 -0
- data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +33 -0
- data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +73 -0
- data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +121 -0
- data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +41 -0
- data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +20 -0
- data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +33 -0
- data/spec/integration/automatic_validation/spec_helper.rb +74 -0
- data/spec/integration/block_validator/block_validator_spec.rb +32 -0
- data/spec/integration/block_validator/spec_helper.rb +5 -0
- data/spec/integration/conditional_validation/if_condition_spec.rb +61 -0
- data/spec/integration/conditional_validation/spec_helper.rb +5 -0
- data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +74 -0
- data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
- data/spec/integration/datamapper_models/association_validation_spec.rb +23 -0
- data/spec/integration/datamapper_models/inheritance_spec.rb +78 -0
- data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +22 -0
- data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
- data/spec/integration/format_validator/email_format_validator_spec.rb +113 -0
- data/spec/integration/format_validator/format_validator_spec.rb +60 -0
- data/spec/integration/format_validator/regexp_validator_spec.rb +29 -0
- data/spec/integration/format_validator/spec_helper.rb +5 -0
- data/spec/integration/format_validator/url_format_validator_spec.rb +63 -0
- data/spec/integration/length_validator/default_value_spec.rb +12 -0
- data/spec/integration/length_validator/equality_spec.rb +79 -0
- data/spec/integration/length_validator/error_message_spec.rb +15 -18
- data/spec/integration/length_validator/maximum_spec.rb +40 -24
- data/spec/integration/length_validator/minimum_spec.rb +32 -21
- data/spec/integration/length_validator/range_spec.rb +50 -60
- data/spec/integration/length_validator/spec_helper.rb +7 -12
- data/spec/integration/method_validator/method_validator_spec.rb +239 -0
- data/spec/integration/method_validator/spec_helper.rb +5 -0
- data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +61 -0
- data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/float_type_spec.rb +42 -56
- data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +35 -0
- data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +35 -0
- data/spec/integration/numeric_validator/integer_only_true_spec.rb +3 -6
- data/spec/integration/numeric_validator/integer_type_spec.rb +8 -24
- data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +35 -0
- data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +35 -0
- data/spec/integration/numeric_validator/spec_helper.rb +5 -77
- data/spec/integration/primitive_validator/primitive_validator_spec.rb +90 -0
- data/spec/integration/primitive_validator/spec_helper.rb +5 -0
- data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
- data/spec/integration/required_field_validator/association_spec.rb +5 -8
- data/spec/integration/required_field_validator/boolean_type_value_spec.rb +4 -7
- data/spec/integration/required_field_validator/date_type_value_spec.rb +3 -6
- data/spec/integration/required_field_validator/datetime_type_value_spec.rb +3 -6
- data/spec/integration/required_field_validator/float_type_value_spec.rb +3 -6
- data/spec/integration/required_field_validator/integer_type_value_spec.rb +2 -5
- data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +5 -8
- data/spec/integration/required_field_validator/shared_examples.rb +1 -1
- data/spec/integration/required_field_validator/spec_helper.rb +6 -67
- data/spec/integration/required_field_validator/string_type_value_spec.rb +2 -5
- data/spec/integration/required_field_validator/text_type_value_spec.rb +2 -5
- data/spec/integration/shared/default_validation_context.rb +13 -0
- data/spec/integration/shared/valid_and_invalid_model.rb +27 -0
- data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
- data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +114 -0
- data/spec/integration/within_validator/spec_helper.rb +5 -0
- data/spec/integration/within_validator/within_validator_spec.rb +164 -0
- data/spec/public/resource_spec.rb +68 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +12 -4
- data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
- data/spec/unit/contextual_validators/execution_spec.rb +55 -0
- data/spec/unit/contextual_validators/spec_helper.rb +37 -0
- data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
- data/spec/unit/validation_errors/adding_spec.rb +54 -0
- data/spec/unit/validation_errors/emptiness_spec.rb +38 -0
- data/spec/unit/validation_errors/enumerable_spec.rb +32 -0
- data/tasks/install.rb +1 -1
- data/tasks/spec.rb +4 -4
- metadata +118 -55
- data/README.txt +0 -72
- data/lib/dm-validations/custom_validator.rb +0 -72
- data/lib/dm-validations/length_validator.rb +0 -113
- data/lib/dm-validations/method_validator.rb +0 -68
- data/lib/dm-validations/numeric_validator.rb +0 -83
- data/spec/integration/absent_field_validator_spec.rb +0 -36
- data/spec/integration/acceptance_validator_spec.rb +0 -87
- data/spec/integration/auto_validate_spec.rb +0 -342
- data/spec/integration/block_validator_spec.rb +0 -30
- data/spec/integration/confirmation_validator_spec.rb +0 -105
- data/spec/integration/contextual_validators_spec.rb +0 -27
- data/spec/integration/custom_validator_spec.rb +0 -9
- data/spec/integration/format_validator_spec.rb +0 -193
- data/spec/integration/generic_validator_spec.rb +0 -17
- data/spec/integration/length_validator/valid_objects_spec.rb +0 -13
- data/spec/integration/method_validator_spec.rb +0 -58
- data/spec/integration/numeric_validator_spec.rb +0 -253
- data/spec/integration/primitive_validator_spec.rb +0 -30
- data/spec/integration/uniqueness_validator_spec.rb +0 -97
- data/spec/integration/validation_errors_spec.rb +0 -18
- data/spec/integration/validation_spec.rb +0 -404
- data/spec/integration/within_validator_spec.rb +0 -79
@@ -0,0 +1,27 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module Validate
|
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 :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 Validate
|
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_absent :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 Validate
|
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_is_number :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 # Validate
|
39
|
+
end # DataMapper
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
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 # Validate
|
34
|
+
end # DataMapper
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
5
|
+
module Fixtures
|
6
|
+
class MemoryObject
|
7
|
+
#
|
8
|
+
# Behaviors
|
9
|
+
#
|
10
|
+
|
11
|
+
include ::DataMapper::Resource
|
12
|
+
|
13
|
+
#
|
14
|
+
# Properties
|
15
|
+
#
|
16
|
+
|
17
|
+
property :id, Serial
|
18
|
+
property :marked, Boolean, :auto_validation => false
|
19
|
+
property :color, String, :auto_validation => false
|
20
|
+
|
21
|
+
#
|
22
|
+
# Validations
|
23
|
+
#
|
24
|
+
|
25
|
+
validates_is_primitive :marked
|
26
|
+
validates_is_primitive :color
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module Validate
|
3
|
+
module Fixtures
|
4
|
+
class Mittelschnauzer
|
5
|
+
|
6
|
+
#
|
7
|
+
# Behaviors
|
8
|
+
#
|
9
|
+
|
10
|
+
include DataMapper::Resource
|
11
|
+
|
12
|
+
#
|
13
|
+
# Properties
|
14
|
+
#
|
15
|
+
|
16
|
+
without_auto_validations do
|
17
|
+
property :name, String, :key => true
|
18
|
+
property :height, Float
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# Validations
|
23
|
+
#
|
24
|
+
|
25
|
+
validates_length :name, :min => 2, :allow_nil => false
|
26
|
+
|
27
|
+
validates_is_number :height, :lt => 55.2
|
28
|
+
|
29
|
+
def self.valid_instance
|
30
|
+
new(:name => "Roudolf Wilde", :height => 50.4)
|
31
|
+
end
|
32
|
+
end # Mittelschnauzer
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module Validate
|
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,32 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
5
|
+
module Fixtures
|
6
|
+
|
7
|
+
# see http://datamapper.lighthouseapp.com/projects/20609/tickets/671
|
8
|
+
class Page
|
9
|
+
#
|
10
|
+
# Behaviors
|
11
|
+
#
|
12
|
+
|
13
|
+
include DataMapper::Resource
|
14
|
+
|
15
|
+
#
|
16
|
+
# Properties
|
17
|
+
#
|
18
|
+
|
19
|
+
property :id, Serial, :key => true
|
20
|
+
property :body, Text, :nullable => false
|
21
|
+
|
22
|
+
#
|
23
|
+
# Validations
|
24
|
+
#
|
25
|
+
|
26
|
+
# duplicates inferred validation for body (caused by
|
27
|
+
# :nullable => false)
|
28
|
+
validates_present :body
|
29
|
+
end
|
30
|
+
end # Fixtures
|
31
|
+
end # Validate
|
32
|
+
end # DataMapper
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
5
|
+
module Fixtures
|
6
|
+
class PhoneNumber
|
7
|
+
#
|
8
|
+
# Behaviors
|
9
|
+
#
|
10
|
+
|
11
|
+
include ::DataMapper::Resource
|
12
|
+
|
13
|
+
#
|
14
|
+
# Properties
|
15
|
+
#
|
16
|
+
|
17
|
+
property :id, Serial
|
18
|
+
property :type_of_number, String, :auto_validation => false
|
19
|
+
|
20
|
+
#
|
21
|
+
# Validations
|
22
|
+
#
|
23
|
+
|
24
|
+
validates_within :type_of_number, :set => %w(home work cell), :message => "Should be one of: home, cell or work"
|
25
|
+
end # PhoneNumber
|
26
|
+
end # Fixtures
|
27
|
+
end # Validate
|
28
|
+
end # DataMapper
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
5
|
+
module Fixtures
|
6
|
+
class Pirogue
|
7
|
+
#
|
8
|
+
# Behaviors
|
9
|
+
#
|
10
|
+
|
11
|
+
include DataMapper::Resource
|
12
|
+
|
13
|
+
#
|
14
|
+
# Properties
|
15
|
+
#
|
16
|
+
|
17
|
+
property :id, Serial
|
18
|
+
property :salesman, String, :default => 'Layfayette'
|
19
|
+
|
20
|
+
#
|
21
|
+
# Validations
|
22
|
+
#
|
23
|
+
|
24
|
+
validates_absent :salesman, :on => :sale
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
5
|
+
module Fixtures
|
6
|
+
# If you think that this particular fixture class
|
7
|
+
# and assumptions made below are full of bullshit
|
8
|
+
# and author is a moron, you are 100% right. I am,
|
9
|
+
# but it's me who rewrites poor dm-validations
|
10
|
+
# spec suite this time, so unless someone smart
|
11
|
+
# steps up to do it, we have to roll on with
|
12
|
+
# this crappy example of method validation. — MK
|
13
|
+
class ProgrammingLanguage
|
14
|
+
#
|
15
|
+
# Behaviors
|
16
|
+
#
|
17
|
+
|
18
|
+
include ::DataMapper::Validate
|
19
|
+
|
20
|
+
#
|
21
|
+
# Attributes
|
22
|
+
#
|
23
|
+
|
24
|
+
attr_accessor :name, :allows_system_calls, :allows_manual_memory_management, :allows_optional_parentheses,
|
25
|
+
:allows_operator_overload, :approved_by_linus, :compiler_excels_at_utilizing_cpu_cache,
|
26
|
+
:is_very_high_level, :does_not_require_explicit_return_keyword, :standard_library_support_parallel_programming_out_of_the_box
|
27
|
+
|
28
|
+
#
|
29
|
+
# Validations
|
30
|
+
#
|
31
|
+
|
32
|
+
validates_with_method :ensure_appropriate_for_system_programming, :when => [:doing_system_programming, :hacking_on_the_kernel, :implementing_a_game_engine]
|
33
|
+
validates_with_method :ensure_appropriate_for_dsls, :when => [:implementing_a_dsl]
|
34
|
+
validates_with_method :ensure_appropriate_for_cpu_intensive_tasks, :when => [:implementing_a_game_engine_core]
|
35
|
+
validates_with_method :ensure_approved_by_linus_himself, :when => [:hacking_on_the_kernel]
|
36
|
+
|
37
|
+
#
|
38
|
+
# API
|
39
|
+
#
|
40
|
+
|
41
|
+
def initialize(args = {})
|
42
|
+
args.each do |key, value|
|
43
|
+
self.send("#{key}=", value)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def ensure_appropriate_for_system_programming
|
48
|
+
if allows_manual_memory_management && allows_system_calls
|
49
|
+
true
|
50
|
+
else
|
51
|
+
[false, "try something that is closer to the metal"]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def ensure_appropriate_for_dsls
|
56
|
+
if allows_optional_parentheses && allows_operator_overload && is_very_high_level && does_not_require_explicit_return_keyword
|
57
|
+
true
|
58
|
+
else
|
59
|
+
[false, "may not be so good for domain specific languages"]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def ensure_appropriate_for_cpu_intensive_tasks
|
64
|
+
if compiler_excels_at_utilizing_cpu_cache && allows_manual_memory_management
|
65
|
+
true
|
66
|
+
else
|
67
|
+
[false, "may not be so good for CPU intensive tasks"]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def ensure_approved_by_linus_himself
|
72
|
+
if name.downcase == "c++"
|
73
|
+
[false, "Quite frankly, even if the choice of C were to do *nothing*
|
74
|
+
but keep the C++ programmers out, that in itself would be
|
75
|
+
a huge reason to use C."]
|
76
|
+
else
|
77
|
+
true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end # ProgrammingLanguage
|
81
|
+
end # Fixtures
|
82
|
+
end # Validate
|
83
|
+
end # DataMapper
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
5
|
+
module Fixtures
|
6
|
+
class Reservation
|
7
|
+
#
|
8
|
+
# Behaviors
|
9
|
+
#
|
10
|
+
|
11
|
+
include ::DataMapper::Resource
|
12
|
+
|
13
|
+
#
|
14
|
+
# Attributes
|
15
|
+
#
|
16
|
+
|
17
|
+
attr_accessor :person_name_confirmation, :seats_confirmation
|
18
|
+
|
19
|
+
#
|
20
|
+
# Properties
|
21
|
+
#
|
22
|
+
|
23
|
+
property :id, Serial
|
24
|
+
property :person_name, String, :auto_validation => false
|
25
|
+
property :number_of_seats, Integer, :auto_validation => false
|
26
|
+
|
27
|
+
#
|
28
|
+
# Validations
|
29
|
+
#
|
30
|
+
|
31
|
+
validates_is_confirmed :person_name, :allow_nil => false
|
32
|
+
validates_is_confirmed :number_of_seats, :confirm => :seats_confirmation, :message => Proc.new { |resource, property|
|
33
|
+
'%s requires confirmation for %s' % [Extlib::Inflection.demodulize(resource.model.name), property.name]
|
34
|
+
}
|
35
|
+
end # Reservation
|
36
|
+
end # Fixtures
|
37
|
+
end # Validate
|
38
|
+
end # DataMapper
|
@@ -0,0 +1,67 @@
|
|
1
|
+
if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
|
2
|
+
|
3
|
+
#
|
4
|
+
# SCMs
|
5
|
+
#
|
6
|
+
# This example may look stupid (I am sure it is),
|
7
|
+
# but it is way better than foobars and easier to read/add cases
|
8
|
+
# compared to gardening examples because every software engineer has idea
|
9
|
+
# about SCMs and not every software engineer does gardening often.
|
10
|
+
#
|
11
|
+
|
12
|
+
class ScmOperation
|
13
|
+
include DataMapper::Resource
|
14
|
+
|
15
|
+
#
|
16
|
+
# Property
|
17
|
+
#
|
18
|
+
|
19
|
+
property :id, Serial
|
20
|
+
|
21
|
+
# operation name
|
22
|
+
property :name, String, :auto_validation => false
|
23
|
+
|
24
|
+
property :committer_name, String, :auto_validation => false, :default => "Just another Ruby hacker"
|
25
|
+
property :author_name, String, :auto_validation => false, :default => "Just another Ruby hacker"
|
26
|
+
property :network_connection, Boolean, :auto_validation => false
|
27
|
+
property :message, Text, :auto_validation => false
|
28
|
+
property :clean_working_copy, Boolean, :auto_validation => false
|
29
|
+
|
30
|
+
#
|
31
|
+
# Validations
|
32
|
+
#
|
33
|
+
|
34
|
+
validates_present :name
|
35
|
+
end
|
36
|
+
ScmOperation.auto_migrate!
|
37
|
+
|
38
|
+
|
39
|
+
class SubversionOperation < ScmOperation
|
40
|
+
#
|
41
|
+
# Validations
|
42
|
+
#
|
43
|
+
|
44
|
+
validates_present :network_connection, :when => [:committing, :log_viewing]
|
45
|
+
end
|
46
|
+
|
47
|
+
SubversionOperation.auto_migrate!
|
48
|
+
|
49
|
+
|
50
|
+
class GitOperation < ScmOperation
|
51
|
+
#
|
52
|
+
# Validations
|
53
|
+
#
|
54
|
+
|
55
|
+
validates_present :author_name, :committer_name, :when => :committing
|
56
|
+
|
57
|
+
validates_present :message, :when => :committing
|
58
|
+
validates_present :network_connection, :when => [:pushing, :pulling], :message => {
|
59
|
+
:pushing => "though git is advanced, it cannot push without network connectivity",
|
60
|
+
:pulling => "you must have network connectivity to pull from others"
|
61
|
+
}
|
62
|
+
validates_present :clean_working_copy, :when => :pulling
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
GitOperation.auto_migrate!
|
67
|
+
end
|