action_logic 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb908cdf21b4822673902f5b19eed95206101d34
4
- data.tar.gz: 88acebe974c5bdfc84a0f063b3de6167aaf8d089
3
+ metadata.gz: 583858aebac317fb33f490775442ecad7a40577d
4
+ data.tar.gz: 839af981a8f86ad9da7de704738dddde65609007
5
5
  SHA512:
6
- metadata.gz: 91b207eff368d0401c5b3110bd62de42929198aae35993fd80f72746e8628e6d8dffd0283aa04bd26d103445ac0c091c843915ac83e8f3e0c2285dc1fd99c40f
7
- data.tar.gz: 061f6bc8f7ae853638320cf79d0c6a2e154d110c322482887e9e74719978d5e4dd71e1c9f8b17342a4901bbef6d055cf047cd7cb2ccacab56410128b6f7ba894
6
+ metadata.gz: 4c039cabbcfac0378afb5d30e9fd942d9ae9fee064c30f6e691526f455f29617a8c24ea7e765deb2edfb2878a153347b0ba762836a40a6ed89a3eb5404b6fc75
7
+ data.tar.gz: a0cd7c262dc94adcd317db9d624621a3065bb0ac74c5a460a8ed331f29548f2b3aac2ad1649f1e2c6e8cbc74e67080413ae1ac244bf1c053fb99f6d4a0bd12c6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- action_logic (0.2.1)
4
+ action_logic (0.2.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,17 +1,11 @@
1
- require 'action_logic/action_core'
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/action_core'
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/action_core'
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,9 @@
1
+ module ActionLogic
2
+ module ActionValidation
3
+ class BaseValidation
4
+ def self.error_message_format(error_string)
5
+ "context: #{self.class} message: #{error_string}"
6
+ end
7
+ end
8
+ end
9
+ 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/errors'
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
- [:validate_attributes!,
34
- :validate_types!,
35
- :validate_presence!]
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
- send(validation, validation_rules)
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
@@ -1,3 +1,3 @@
1
1
  module ActionLogic
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
@@ -5,7 +5,7 @@ module ActionLogic
5
5
  describe ActionConfiguration do
6
6
  subject { described_class }
7
7
 
8
- before do
8
+ after do
9
9
  described_class.reset!
10
10
  end
11
11
 
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.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