class SimpleAction::Service

Public Class Methods

new(params={}) click to toggle source
# File lib/simple_action/service.rb, line 38
def initialize(params={})
  @raw_params = params
  @params = self.class.params_class.new(params)
  @initial_params_valid = nil
  @result = nil
  @has_run = false
end
run(params = {}) click to toggle source
# File lib/simple_action/service.rb, line 15
def run(params = {})
  instance = self.new(params)
  instance.mark_as_ran
  result = transaction do
    if instance.valid?
      outcome = instance.execute
      instance.errors.empty? ? outcome : nil
    end
  end
  instance.set_result(result)
  instance
end
run!(params = {}) click to toggle source
# File lib/simple_action/service.rb, line 28
def run!(params = {})
  response = run(params)
  if response.valid?
    response.result
  else
    raise ExecutionError, response.errors.to_s
  end
end

Public Instance Methods

errors() click to toggle source
# File lib/simple_action/service.rb, line 54
def errors
  @params.errors
end
execute() click to toggle source
# File lib/simple_action/service.rb, line 58
def execute
  raise ImplementationError, "subclasses must implement 'execute' method."
end
mark_as_ran() click to toggle source
# File lib/simple_action/service.rb, line 79
def mark_as_ran
  @has_run = true
end
params() click to toggle source
# File lib/simple_action/service.rb, line 46
def params
  @params
end
persisted?() click to toggle source
# File lib/simple_action/service.rb, line 62
def persisted?
  false
end
result() click to toggle source
# File lib/simple_action/service.rb, line 70
def result
  @result
end
Also aliased as: value
set_result(result = nil) click to toggle source
# File lib/simple_action/service.rb, line 75
def set_result(result = nil)
  @result = result
end
success?() click to toggle source
# File lib/simple_action/service.rb, line 66
def success?
  valid? && @has_run
end
valid?() click to toggle source
# File lib/simple_action/service.rb, line 50
def valid?
  initial_params_valid? && errors.empty?
end
value()
Alias for: result

Private Instance Methods

initial_params_valid?() click to toggle source
# File lib/simple_action/service.rb, line 84
def initial_params_valid?
  if @initial_params_valid.nil?
    @initial_params_valid = @params.valid?
  else
    @initial_params_valid
  end
end