Class: Mutations::CommandReturningHash
- Defined in:
- lib/mutations/command_returning_hash.rb
Direct Known Subclasses
Class Method Summary collapse
- .create_outcome_attr_methods(meth, &block) ⇒ Object
- .outcome_descriptions ⇒ Object (also: output_descriptions)
- .outcome_filters ⇒ Object
- .outcome_optional(&block) ⇒ Object (also: optional_output)
-
.outcome_required(&block) ⇒ Object
(also: required_output)
%i(required optional).each do |m| meth = :“outcome_#m” define_method(meth) do |&block| create_outcome_attr_methods(meth, &block) end end.
Instance Method Summary collapse
- #errors ⇒ Object
- #errors? ⇒ Boolean
- #has_outcome_errors? ⇒ Boolean
-
#initialize(*args) ⇒ CommandReturningHash
constructor
A new instance of CommandReturningHash.
- #outcome_filters ⇒ Object
- #run ⇒ Object
- #run! ⇒ Object
- #validation_outcome(result = nil) ⇒ Object
Methods inherited from Command
Constructor Details
#initialize(*args) ⇒ CommandReturningHash
Returns a new instance of CommandReturningHash.
41 42 43 44 |
# File 'lib/mutations/command_returning_hash.rb', line 41 def initialize(*args) super(*args) @outputs = {} end |
Class Method Details
.create_outcome_attr_methods(meth, &block) ⇒ Object
4 5 6 7 8 9 10 11 |
# File 'lib/mutations/command_returning_hash.rb', line 4 def create_outcome_attr_methods(meth, &block) outcome_filters.send(meth, &block) keys = outcome_filters.send("#{meth}_keys") keys.each do |key| define_method("outcome_#{key}") { @outputs[key] } define_method("outcome_#{key}_present?") { @outputs.key?(key) } end end |
.outcome_descriptions ⇒ Object Also known as: output_descriptions
35 36 37 |
# File 'lib/mutations/command_returning_hash.rb', line 35 def outcome_descriptions outcome_filters.outcome_descriptions if outcome_filters.respond_to?(:outcome_descriptions) end |
.outcome_filters ⇒ Object
31 32 33 |
# File 'lib/mutations/command_returning_hash.rb', line 31 def outcome_filters @outcome_filters ||= (CommandReturningHash == superclass) ? OutcomeHashFilter.new : superclass.outcome_filters.dup end |
.outcome_optional(&block) ⇒ Object Also known as: optional_output
26 27 28 |
# File 'lib/mutations/command_returning_hash.rb', line 26 def outcome_optional(&block) create_outcome_attr_methods(:outcome_optional, &block) end |
.outcome_required(&block) ⇒ Object Also known as: required_output
%i(required optional).each do |m|
meth = :"outcome_#{m}"
define_method(meth) do |&block|
create_outcome_attr_methods(meth, &block)
end
end
21 22 23 |
# File 'lib/mutations/command_returning_hash.rb', line 21 def outcome_required(&block) create_outcome_attr_methods(:outcome_required, &block) end |
Instance Method Details
#errors ⇒ Object
58 59 60 61 62 63 64 65 |
# File 'lib/mutations/command_returning_hash.rb', line 58 def errors return nil unless errors? ErrorHash.new.tap do |h| h.merge! @errors if has_errors? h.merge! @outcome_errors if has_outcome_errors? end end |
#errors? ⇒ Boolean
54 55 56 |
# File 'lib/mutations/command_returning_hash.rb', line 54 def errors? has_errors? || has_outcome_errors? end |
#has_outcome_errors? ⇒ Boolean
50 51 52 |
# File 'lib/mutations/command_returning_hash.rb', line 50 def has_outcome_errors? !@outcome_errors.nil? end |
#outcome_filters ⇒ Object
46 47 48 |
# File 'lib/mutations/command_returning_hash.rb', line 46 def outcome_filters self.class.outcome_filters end |
#run ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/mutations/command_returning_hash.rb', line 67 def run return validation_outcome if has_errors? validation_outcome( execute.tap do |result| case result when Hash _, @outcome_errors = self.class.outcome_filters.filter(result) validate_outcome(result) unless has_outcome_errors? when NilClass then nil else add_outcome_error :self, :type, "This mutation must return Hash instance (was #{result.class})" end end ) end |
#run! ⇒ Object
82 83 84 |
# File 'lib/mutations/command_returning_hash.rb', line 82 def run! (outcome = run).success? ? outcome.result : (raise ValidationException.new(outcome.errors)) end |
#validation_outcome(result = nil) ⇒ Object
86 87 88 |
# File 'lib/mutations/command_returning_hash.rb', line 86 def validation_outcome(result = nil) Outcome.new(!errors?, filtered(result), errors, @inputs) end |