class Performify::Base

Attributes

args[R]
current_user[R]
exception[R]
inputs[R]

Public Class Methods

new(current_user = nil, args = {}) click to toggle source
# File lib/performify/base.rb, line 14
def initialize(current_user = nil, args = {})
  @current_user = current_user
  @args = args

  prepare_instance

  fail!(with_callbacks: true) if errors?
end

Public Instance Methods

execute!() { || ... } click to toggle source
# File lib/performify/base.rb, line 23
def execute!
  block_result = nil

  ActiveRecord::Base.transaction do
    begin
      block_result = yield

      if @result.nil?
        if block_result
          success!(with_callbacks: false)
        else
          fail!(with_callbacks: false)
        end
      end
    rescue RuntimeError, ActiveRecord::RecordInvalid => e
      fail!(exception: e, with_callbacks: false)
    end

    raise ActiveRecord::Rollback if fail?
  end

  execute_callbacks
  block_result
end
execute_callbacks() click to toggle source
# File lib/performify/base.rb, line 48
def execute_callbacks
  if success?
    self.class.execute_callbacks(:success, self)
  elsif fail?
    self.class.execute_callbacks(:fail, self)
  end
end
fail!(with_callbacks: true, errors: nil, exception: nil) click to toggle source
# File lib/performify/base.rb, line 62
def fail!(with_callbacks: true, errors: nil, exception: nil)
  @result = false
  errors!(errors) unless errors.nil?
  execute_callbacks if with_callbacks
  @exception = exception unless exception.nil?
  @result
end
fail?() click to toggle source
# File lib/performify/base.rb, line 74
def fail?
  @result.blank?
end
success!(with_callbacks: true) click to toggle source
# File lib/performify/base.rb, line 56
def success!(with_callbacks: true)
  @result = true
  execute_callbacks if with_callbacks
  @result
end
success?() click to toggle source
# File lib/performify/base.rb, line 70
def success?
  @result.present?
end

Private Instance Methods

define_singleton_methods() click to toggle source
# File lib/performify/base.rb, line 89
        def define_singleton_methods
  param_names = schema ? schema.rules.keys : args.keys
  param_names.each do |param_name|
    define_singleton_method(param_name) do
      value = args[param_name]
      value.is_a?(Hash) ? JSON.parse(value.to_json, object_class: OpenStruct) : value
    end
  end
end
prepare_instance() click to toggle source
Calls superclass method
# File lib/performify/base.rb, line 78
        def prepare_instance
  define_singleton_method(:execute!) do |&block|
    return if defined?(@result)

    super(&block)
  end

  validate
  define_singleton_methods
end