Class: Mutations::CommandReturningHash

Inherits:
Command
  • Object
show all
Defined in:
lib/mutations/command_returning_hash.rb

Direct Known Subclasses

CommandReturningArray

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Command

input_descriptions, yo!

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_descriptionsObject 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_filtersObject



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

#errorsObject



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

Returns:

  • (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

Returns:

  • (Boolean)


50
51
52
# File 'lib/mutations/command_returning_hash.rb', line 50

def has_outcome_errors?
  !@outcome_errors.nil?
end

#outcome_filtersObject



46
47
48
# File 'lib/mutations/command_returning_hash.rb', line 46

def outcome_filters
  self.class.outcome_filters
end

#runObject



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