Module: Validate
- Extended by:
- Validate
- Included in:
- Validate
- Defined in:
- lib/validate/validate.rb,
lib/validate/controls/no_validator.rb,
lib/validate/controls/validator/state.rb,
lib/validate/controls/validator/default.rb,
lib/validate/controls/validator/scenario.rb,
lib/validate/controls/validator/scenarios.rb,
lib/validate/controls/no_scenario_accessor.rb,
lib/validate/controls/validator/not_boolean_result.rb
Defined Under Namespace
Modules: Controls
Classes: Error
Instance Method Summary
collapse
-
#assure_scenario(validator, scenario) ⇒ Object
-
#assure_validator(subject_const) ⇒ Object
-
#call(subject, state = nil, scenario: nil, scenarios: nil) ⇒ Object
-
#get_scenario(validator, scenario) ⇒ Object
-
#get_validator(subject_const) ⇒ Object
-
#scenario(validator, scenario) ⇒ Object
-
#scenario_method?(validator, scenario) ⇒ Boolean
-
#subject_const(subject) ⇒ Object
-
#validate(validator, subject, state) ⇒ Object
-
#validate_scenarios(validator, subject, state, scenarios) ⇒ Object
-
#validator(subject) ⇒ Object
-
#validator_const?(subject_const) ⇒ Boolean
Instance Method Details
#assure_scenario(validator, scenario) ⇒ Object
83
84
85
86
87
|
# File 'lib/validate/validate.rb', line 83
def assure_scenario(validator, scenario)
unless scenario_method?(validator, scenario)
raise Error, "#{validator.name} doesn't have a `#{scenario}' scenario method"
end
end
|
#assure_validator(subject_const) ⇒ Object
64
65
66
67
68
|
# File 'lib/validate/validate.rb', line 64
def assure_validator(subject_const)
unless validator_const?(subject_const)
raise Error, "#{subject_const.name} doesn't have a `Validator' namespace"
end
end
|
#call(subject, state = nil, scenario: nil, scenarios: nil) ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# File 'lib/validate/validate.rb', line 6
def call(subject, state=nil, scenario: nil, scenarios: nil)
validator = validator(subject)
if scenarios.nil?
scenarios = scenario
end
scenarios = Array(scenarios)
if scenarios.empty?
validate(validator, subject, state)
else
validate_scenarios(validator, subject, state, scenarios)
end
end
|
#get_scenario(validator, scenario) ⇒ Object
93
94
95
|
# File 'lib/validate/validate.rb', line 93
def get_scenario(validator, scenario)
validator.public_send(scenario)
end
|
#get_validator(subject_const) ⇒ Object
74
75
76
|
# File 'lib/validate/validate.rb', line 74
def get_validator(subject_const)
subject_const.const_get(:Validator)
end
|
#scenario(validator, scenario) ⇒ Object
78
79
80
81
|
# File 'lib/validate/validate.rb', line 78
def scenario(validator, scenario)
assure_scenario(validator, scenario)
get_scenario(validator, scenario)
end
|
#scenario_method?(validator, scenario) ⇒ Boolean
89
90
91
|
# File 'lib/validate/validate.rb', line 89
def scenario_method?(validator, scenario)
validator.respond_to?(scenario)
end
|
#subject_const(subject) ⇒ Object
60
61
62
|
# File 'lib/validate/validate.rb', line 60
def subject_const(subject)
[Module, Class].include?(subject.class) ? subject : subject.class
end
|
#validate(validator, subject, state) ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/validate/validate.rb', line 31
def validate(validator, subject, state)
method = validator.method(:call)
result = nil
case method.parameters.length
when 1
if !state.nil?
raise Error, "State argument was supplied but the validator does not provide a state parameter (Validator: #{validator})"
end
result = validator.public_send :call, subject
when 2
result = validator.public_send :call, subject, state
end
unless result.is_a?(TrueClass) || result.is_a?(FalseClass)
raise Error, "Result must be boolean. The result is a #{result.class}. (Validator: #{validator})"
end
result
end
|
#validate_scenarios(validator, subject, state, scenarios) ⇒ Object
21
22
23
24
25
26
27
28
29
|
# File 'lib/validate/validate.rb', line 21
def validate_scenarios(validator, subject, state, scenarios)
result = true
scenarios.each do |scenario|
scenario_validator = scenario(validator, scenario)
result = result & validate(scenario_validator, subject, state)
end
result
end
|
#validator(subject) ⇒ Object
53
54
55
56
57
58
|
# File 'lib/validate/validate.rb', line 53
def validator(subject)
subject_const = subject_const(subject)
assure_validator(subject_const)
get_validator(subject_const)
end
|
#validator_const?(subject_const) ⇒ Boolean
70
71
72
|
# File 'lib/validate/validate.rb', line 70
def validator_const?(subject_const)
subject_const.const_defined?(:Validator)
end
|