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