Module: Actionizer

Defined in:
lib/actionizer.rb,
lib/actionizer/result.rb,
lib/actionizer/failure.rb,
lib/actionizer/version.rb

Defined Under Namespace

Modules: ClassMethods Classes: Failure, Result

Constant Summary collapse

VERSION =
'0.2.0'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#outputObject (readonly)

Returns the value of attribute output.



6
7
8
# File 'lib/actionizer.rb', line 6

def output
  @output
end

Class Method Details

.included(base) ⇒ Object



8
9
10
11
12
# File 'lib/actionizer.rb', line 8

def self.included(base)
  base.class_eval do
    extend ClassMethods
  end
end

Instance Method Details

#call_and_check_failure!(action_class, params = {}) ⇒ Object



44
45
46
47
48
49
50
51
52
53
# File 'lib/actionizer.rb', line 44

def call_and_check_failure!(action_class, params = {})
  unless action_class.include? Actionizer
    raise ArgumentError, "#{action_class.name} must include Actionizer"
  end

  result = action_class.call(params)
  fail!(error: result.error) if result.failure?

  result
end

#fail!(params = {}) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/actionizer.rb', line 36

def fail!(params = {})
  params.each_pair { |key, value| output[key] = value }

  output.fail

  raise Actionizer::Failure.new('Failed!', output)
end

#initialize(inputs = {}) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/actionizer.rb', line 22

def initialize(inputs = {})
  @output = Actionizer::Result.new

  inputs.each_pair do |key, value|
    next if key.to_s == 'output'

    instance_variable_set("@#{key}".to_sym, value)

    self.class.class_eval do
      attr_reader key
    end
  end
end