Class: Mutations::CommandReturningArray
- Inherits:
-
CommandReturningHash
- Object
- Command
- CommandReturningHash
- Mutations::CommandReturningArray
- Defined in:
- lib/mutations/command_returning_array.rb
Class Method Summary collapse
- .create_outcome_attr_methods(meth, &block) ⇒ Object
- .outcome_optional(&block) ⇒ Object
-
.outcome_required(&block) ⇒ Object
%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
Methods inherited from CommandReturningHash
#errors?, #has_outcome_errors?, #initialize, outcome_descriptions, #outcome_filters, outcome_filters, #run!, #validation_outcome
Methods inherited from Command
Constructor Details
This class inherits a constructor from Mutations::CommandReturningHash
Class Method Details
.create_outcome_attr_methods(meth, &block) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/mutations/command_returning_array.rb', line 6 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.map { |o| o[key] } } define_method("outcome_#{key}_present?") { @outputs.map { |o| o.key?(key) } } end end |
.outcome_optional(&block) ⇒ Object
27 28 29 |
# File 'lib/mutations/command_returning_array.rb', line 27 def outcome_optional(&block) create_outcome_attr_methods(:outcome_optional, &block) end |
.outcome_required(&block) ⇒ Object
%i(required optional).each do |m|
meth = :"outcome_#{m}"
define_method(meth) do |&block|
create_outcome_attr_methods(meth, &block)
end
end
23 24 25 |
# File 'lib/mutations/command_returning_array.rb', line 23 def outcome_required(&block) create_outcome_attr_methods(:outcome_required, &block) end |
Instance Method Details
#errors ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/mutations/command_returning_array.rb', line 32 def errors return nil unless errors? ErrorHash.new.tap do |h| h.merge! @errors if has_errors? case @outcome_errors when ErrorHash then h.merge! @outcome_errors when Hash h.merge!(@outcome_errors.each_with_object({}) do |(idx, err), memo| memo.merge! err[:errors].map { |k, v| [:"#{k}_#{idx}", v] }.to_h end) end end end |
#run ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/mutations/command_returning_array.rb', line 48 def run return validation_outcome if has_errors? validation_outcome( execute.tap do |result| case result when Array result.each_with_index.with_object({}) do |(e, i), memo| _, outcome_error = self.class.outcome_filters.filter(e) outcome_error = validate_outcome(e) if outcome_error.nil? memo[i] = { outcome: e, errors: outcome_error } unless outcome_error.nil? end.tap do |errs| @outcome_errors = errs unless errs.empty? end when NilClass then nil else add_outcome_error :self, :type, "This mutation must return Array instance (was #{result.class})" end end ) end |