class Flake

Public Class Methods

execute(args = {}) click to toggle source
# File lib/flakes.rb, line 13
def self.execute(args = {})
  new(args).execute
end
execute_later(args = {}) click to toggle source
# File lib/flakes.rb, line 17
def self.execute_later(args = {})
  options = {}
  options[:wait] = args.delete(:wait) if args.key?(:wait)

  # initialize ActiveJob::Core only when Flake is enqueued to prevent conflics with ActiveModel::Model
  flake = new
  flake.send(:active_job_initialize, args)

  if queue_adapter.class.name.demodulize == "InlineAdapter"
    flake.enqueue
  else
    flake.enqueue(options)
  end
end

Public Instance Methods

execute(*) click to toggle source
# File lib/flakes.rb, line 39
def execute(*)
  raise NotImplementedError, "no `execute` method defined for #{self.class}"
end
on_failure(&callback) click to toggle source
# File lib/flakes.rb, line 48
def on_failure(&callback)
  @failure = callback
  self
end
on_success(&callback) click to toggle source
# File lib/flakes.rb, line 43
def on_success(&callback)
  @success = callback
  self
end
perform(args = {}) click to toggle source
# File lib/flakes.rb, line 34
def perform(args = {})
  args.each { |key, value| instance_variable_set(:"@#{key}", value) }
  execute
end

Private Instance Methods

default_failure() click to toggle source
# File lib/flakes.rb, line 85
def default_failure
  proc do |args|
    obj = args || self

    raise(Error, obj.errors.full_messages) if obj.respond_to?(:errors)
    raise(Error, obj.full_messages) if obj.is_a?(ActiveModel::Errors)
    raise(Error, obj.inspect)
  end
end
default_success() click to toggle source
# File lib/flakes.rb, line 81
def default_success
  proc { true }
end
failure(*args) click to toggle source
# File lib/flakes.rb, line 75
def failure(*args)
  @failure ||= default_failure
  @failure.call(*args)
  false
end
success(*args) click to toggle source
# File lib/flakes.rb, line 65
def success(*args)
  if args.size == 1 && args.first.respond_to?(:errors) && args.first.errors.present?
    failure(args.first.errors)
  else
    @success ||= default_success
    @success.call(*args)
    return args.first
  end
end
with_valid_params() { || ... } click to toggle source
# File lib/flakes.rb, line 55
def with_valid_params
  if block_given? && valid?
    ApplicationRecord.transaction do
      yield
    end
  else
    failure(errors)
  end
end