action_logic 0.2.2 → 0.2.3
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/action_logic/action_coordinator.rb +2 -8
- data/lib/action_logic/action_includes.rb +15 -0
- data/lib/action_logic/action_task.rb +2 -8
- data/lib/action_logic/action_use_case.rb +2 -8
- data/lib/action_logic/action_validation/attribute_validation.rb +17 -0
- data/lib/action_logic/action_validation/base_validation.rb +9 -0
- data/lib/action_logic/action_validation/presence_validation.rb +32 -0
- data/lib/action_logic/action_validation/type_validation.rb +24 -0
- data/lib/action_logic/action_validation.rb +7 -53
- data/lib/action_logic/version.rb +1 -1
- data/spec/action_logic/action_configuration_spec.rb +1 -1
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 583858aebac317fb33f490775442ecad7a40577d
|
4
|
+
data.tar.gz: 839af981a8f86ad9da7de704738dddde65609007
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c039cabbcfac0378afb5d30e9fd942d9ae9fee064c30f6e691526f455f29617a8c24ea7e765deb2edfb2878a153347b0ba762836a40a6ed89a3eb5404b6fc75
|
7
|
+
data.tar.gz: a0cd7c262dc94adcd317db9d624621a3065bb0ac74c5a460a8ed331f29548f2b3aac2ad1649f1e2c6e8cbc74e67080413ae1ac244bf1c053fb99f6d4a0bd12c6
|
data/Gemfile.lock
CHANGED
@@ -1,17 +1,11 @@
|
|
1
|
-
require 'action_logic/
|
2
|
-
require 'action_logic/action_validation'
|
3
|
-
require 'action_logic/action_benchmark'
|
1
|
+
require 'action_logic/action_includes'
|
4
2
|
|
5
3
|
module ActionLogic
|
6
4
|
module ActionCoordinator
|
7
|
-
include ActionLogic::ActionValidation
|
8
|
-
include ActionLogic::ActionCore
|
9
5
|
|
10
6
|
def self.included(klass)
|
7
|
+
klass.extend ActionLogic::ActionIncludes
|
11
8
|
klass.extend ClassMethods
|
12
|
-
klass.extend ActionLogic::ActionCore::ClassMethods
|
13
|
-
klass.extend ActionLogic::ActionValidation::ClassMethods
|
14
|
-
klass.extend ActionLogic::ActionBenchmark::ClassMethods
|
15
9
|
end
|
16
10
|
|
17
11
|
module ClassMethods
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'action_logic/action_core'
|
2
|
+
require 'action_logic/action_validation'
|
3
|
+
require 'action_logic/action_benchmark'
|
4
|
+
|
5
|
+
module ActionLogic
|
6
|
+
module ActionIncludes
|
7
|
+
def self.extended(klass)
|
8
|
+
klass.include ActionLogic::ActionCore
|
9
|
+
klass.include ActionLogic::ActionValidation
|
10
|
+
klass.extend ActionLogic::ActionCore::ClassMethods
|
11
|
+
klass.extend ActionLogic::ActionValidation::ClassMethods
|
12
|
+
klass.extend ActionLogic::ActionBenchmark::ClassMethods
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,17 +1,11 @@
|
|
1
|
-
require 'action_logic/
|
2
|
-
require 'action_logic/action_validation'
|
3
|
-
require 'action_logic/action_benchmark'
|
1
|
+
require 'action_logic/action_includes'
|
4
2
|
|
5
3
|
module ActionLogic
|
6
4
|
module ActionTask
|
7
|
-
include ActionLogic::ActionValidation
|
8
|
-
include ActionLogic::ActionCore
|
9
5
|
|
10
6
|
def self.included(klass)
|
7
|
+
klass.extend ActionLogic::ActionIncludes
|
11
8
|
klass.extend ClassMethods
|
12
|
-
klass.extend ActionLogic::ActionCore::ClassMethods
|
13
|
-
klass.extend ActionLogic::ActionValidation::ClassMethods
|
14
|
-
klass.extend ActionLogic::ActionBenchmark::ClassMethods
|
15
9
|
end
|
16
10
|
|
17
11
|
module ClassMethods
|
@@ -1,17 +1,11 @@
|
|
1
|
-
require 'action_logic/
|
2
|
-
require 'action_logic/action_validation'
|
3
|
-
require 'action_logic/action_benchmark'
|
1
|
+
require 'action_logic/action_includes'
|
4
2
|
|
5
3
|
module ActionLogic
|
6
4
|
module ActionUseCase
|
7
|
-
include ActionLogic::ActionValidation
|
8
|
-
include ActionLogic::ActionCore
|
9
5
|
|
10
6
|
def self.included(klass)
|
7
|
+
klass.extend ActionLogic::ActionIncludes
|
11
8
|
klass.extend ClassMethods
|
12
|
-
klass.extend ActionLogic::ActionCore::ClassMethods
|
13
|
-
klass.extend ActionLogic::ActionValidation::ClassMethods
|
14
|
-
klass.extend ActionLogic::ActionBenchmark::ClassMethods
|
15
9
|
end
|
16
10
|
|
17
11
|
module ClassMethods
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'action_logic/errors'
|
2
|
+
require 'action_logic/action_validation/base_validation'
|
3
|
+
|
4
|
+
module ActionLogic
|
5
|
+
module ActionValidation
|
6
|
+
class AttributeValidation < BaseValidation
|
7
|
+
|
8
|
+
def self.validate!(validation_rules, context)
|
9
|
+
existing_attributes = context.to_h.keys
|
10
|
+
expected_attributes = validation_rules.keys || []
|
11
|
+
missing_attributes = expected_attributes - existing_attributes
|
12
|
+
|
13
|
+
raise ActionLogic::MissingAttributeError.new(error_message_format(missing_attributes.join(", ") + " attributes are missing")) if missing_attributes.any?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'action_logic/errors'
|
2
|
+
require 'action_logic/action_validation/base_validation'
|
3
|
+
|
4
|
+
module ActionLogic
|
5
|
+
module ActionValidation
|
6
|
+
class PresenceValidation < BaseValidation
|
7
|
+
|
8
|
+
def self.validate!(validation_rules, context)
|
9
|
+
return unless validation_rules.values.find { |expected_validation| expected_validation[:presence] }
|
10
|
+
errors = presence_errors(validation_rules, context)
|
11
|
+
raise ActionLogic::PresenceError.new(errors) if errors.any?
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.presence_errors(validation_rules, context)
|
15
|
+
validation_rules.reduce([]) do |error_collection, (expected_attribute, expected_validation)|
|
16
|
+
next unless expected_validation[:presence]
|
17
|
+
error_collection << error_message(expected_attribute, expected_validation, context)
|
18
|
+
error_collection
|
19
|
+
end || []
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.error_message(expected_attribute, expected_validation, context)
|
23
|
+
case expected_validation[:presence]
|
24
|
+
when TrueClass then "Attribute: #{expected_attribute} is missing value in context but presence validation was specified" unless context[expected_attribute]
|
25
|
+
when Proc then "Attribute: #{expected_attribute} is missing value in context but custom presence validation was specified" unless expected_validation[:presence].call(context[expected_attribute])
|
26
|
+
else
|
27
|
+
raise ActionLogic::UnrecognizablePresenceValidatorError.new(error_message_format("Presence validator: #{expected_validation[:presence]} is not a supported format"))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'action_logic/errors'
|
2
|
+
require 'action_logic/action_validation/base_validation'
|
3
|
+
|
4
|
+
module ActionLogic
|
5
|
+
module ActionValidation
|
6
|
+
class TypeValidation < BaseValidation
|
7
|
+
|
8
|
+
def self.validate!(validation_rules, context)
|
9
|
+
return unless validation_rules.values.find { |expected_validation| expected_validation[:type] }
|
10
|
+
|
11
|
+
type_errors = validation_rules.reduce([]) do |collection, (expected_attribute, expected_validation)|
|
12
|
+
next unless expected_validation[:type]
|
13
|
+
|
14
|
+
if context.to_h[expected_attribute].class != expected_validation[:type]
|
15
|
+
collection << "Attribute: #{expected_attribute} with value: #{context.to_h[expected_attribute]} was expected to be of type #{expected_validation[:type]} but is #{context.to_h[expected_attribute].class}"
|
16
|
+
end
|
17
|
+
collection
|
18
|
+
end
|
19
|
+
|
20
|
+
raise ActionLogic::AttributeTypeError.new(error_message_format(type_errors.join(", "))) if type_errors.any?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
|
-
require 'action_logic/
|
1
|
+
require 'action_logic/action_validation/attribute_validation'
|
2
|
+
require 'action_logic/action_validation/presence_validation'
|
3
|
+
require 'action_logic/action_validation/type_validation'
|
2
4
|
|
3
5
|
module ActionLogic
|
4
6
|
module ActionValidation
|
5
|
-
|
6
7
|
module ClassMethods
|
7
8
|
def validates_before(args)
|
8
9
|
@validates_before = args
|
@@ -30,14 +31,14 @@ module ActionLogic
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def validations
|
33
|
-
[
|
34
|
-
|
35
|
-
|
34
|
+
[AttributeValidation,
|
35
|
+
TypeValidation,
|
36
|
+
PresenceValidation]
|
36
37
|
end
|
37
38
|
|
38
39
|
def validate!(validation, validation_rules)
|
39
40
|
return if validation_rules.empty?
|
40
|
-
|
41
|
+
validation.validate!(validation_rules, context)
|
41
42
|
end
|
42
43
|
|
43
44
|
def validations!(validation_order)
|
@@ -53,52 +54,5 @@ module ActionLogic
|
|
53
54
|
@after_validation_rules ||= self.class.get_validates_after
|
54
55
|
@around_validation_rules ||= self.class.get_validates_around
|
55
56
|
end
|
56
|
-
|
57
|
-
def validate_attributes!(validations)
|
58
|
-
existing_attributes = context.to_h.keys
|
59
|
-
expected_attributes = validations.keys || []
|
60
|
-
missing_attributes = expected_attributes - existing_attributes
|
61
|
-
|
62
|
-
raise ActionLogic::MissingAttributeError.new(error_message_format(missing_attributes.join(", ") + " attributes are missing")) if missing_attributes.any?
|
63
|
-
end
|
64
|
-
|
65
|
-
def validate_types!(validations)
|
66
|
-
return unless validations.values.find { |expected_validation| expected_validation[:type] }
|
67
|
-
|
68
|
-
type_errors = validations.reduce([]) do |collection, (expected_attribute, expected_validation)|
|
69
|
-
next unless expected_validation[:type]
|
70
|
-
|
71
|
-
if context.to_h[expected_attribute].class != expected_validation[:type]
|
72
|
-
collection << "Attribute: #{expected_attribute} with value: #{context.to_h[expected_attribute]} was expected to be of type #{expected_validation[:type]} but is #{context.to_h[expected_attribute].class}"
|
73
|
-
end
|
74
|
-
collection
|
75
|
-
end
|
76
|
-
|
77
|
-
raise ActionLogic::AttributeTypeError.new(error_message_format(type_errors.join(", "))) if type_errors.any?
|
78
|
-
end
|
79
|
-
|
80
|
-
def validate_presence!(validations)
|
81
|
-
return unless validations.values.find { |expected_validation| expected_validation[:presence] }
|
82
|
-
|
83
|
-
presence_errors = validations.reduce([]) do |collection, (expected_attribute, expected_validation)|
|
84
|
-
next unless expected_validation[:presence]
|
85
|
-
|
86
|
-
if expected_validation[:presence] == true
|
87
|
-
collection << "Attribute: #{expected_attribute} is missing value in context but presence validation was specified" unless context[expected_attribute]
|
88
|
-
elsif expected_validation[:presence].class == Proc
|
89
|
-
collection << "Attribute: #{expected_attribute} is missing value in context but custom presence validation was specified" unless expected_validation[:presence].call(context[expected_attribute])
|
90
|
-
else
|
91
|
-
raise ActionLogic::UnrecognizablePresenceValidatorError.new(error_message_format("Presence validator: #{expected_validation[:presence]} is not a supported format"))
|
92
|
-
end
|
93
|
-
|
94
|
-
collection
|
95
|
-
end || []
|
96
|
-
|
97
|
-
raise ActionLogic::PresenceError.new(presence_errors) if presence_errors.any?
|
98
|
-
end
|
99
|
-
|
100
|
-
def error_message_format(error_string)
|
101
|
-
"context: #{self.class} message: #{error_string}"
|
102
|
-
end
|
103
57
|
end
|
104
58
|
end
|
data/lib/action_logic/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_logic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Winfrey
|
@@ -84,9 +84,14 @@ files:
|
|
84
84
|
- lib/action_logic/action_context.rb
|
85
85
|
- lib/action_logic/action_coordinator.rb
|
86
86
|
- lib/action_logic/action_core.rb
|
87
|
+
- lib/action_logic/action_includes.rb
|
87
88
|
- lib/action_logic/action_task.rb
|
88
89
|
- lib/action_logic/action_use_case.rb
|
89
90
|
- lib/action_logic/action_validation.rb
|
91
|
+
- lib/action_logic/action_validation/attribute_validation.rb
|
92
|
+
- lib/action_logic/action_validation/base_validation.rb
|
93
|
+
- lib/action_logic/action_validation/presence_validation.rb
|
94
|
+
- lib/action_logic/action_validation/type_validation.rb
|
90
95
|
- lib/action_logic/errors.rb
|
91
96
|
- lib/action_logic/version.rb
|
92
97
|
- resources/action_coordinator_diagram.png
|