class Mutations::CommandReturningArray
Public Class Methods
outcome_optional(&block)
click to toggle source
# File lib/mutations/command_returning_array.rb, line 27 def outcome_optional(&block) create_outcome_attr_methods(:outcome_optional, &block) end
outcome_required(&block)
click to toggle source
%i(required optional).each do |m|
meth = :"outcome_#{m}" define_method(meth) do |&block| create_outcome_attr_methods(meth, &block) end
end
# File lib/mutations/command_returning_array.rb, line 23 def outcome_required(&block) create_outcome_attr_methods(:outcome_required, &block) end
Private Class Methods
create_outcome_attr_methods(meth, &block)
click to toggle source
# 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
Public Instance Methods
errors()
click to toggle source
# 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()
click to toggle source
# 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, ActiveRecord::Relation 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
Protected Instance Methods
filtered(result)
click to toggle source
# File lib/mutations/command_returning_array.rb, line 70 def filtered result @outputs = result.is_a?(Array) && has_outcome_errors? ? result.reject.with_index { |_, i| @outcome_errors[i] } : result end