class ApplicationService

Public Class Methods

after(callback, *args) click to toggle source
# File lib/application_service.rb, line 22
def self.after(callback, *args)
  options = extract_callback_options(args)

  conditional = ActiveSupport::Callbacks::Conditionals::Value.new { |v|
    v != false
  }
  options[:if] = Array(options[:if]) << conditional

  args.each do |arg|
    set_callback callback, :after, arg, options
    if options.fetch(:skip_on_admin_save, false)
      skip_callback callback, :after, arg, if: -> { @on_admin_save }
    end
  end
end
before(callback, *args) click to toggle source
# File lib/application_service.rb, line 11
def self.before(callback, *args)
  options = extract_callback_options(args)

  args.each do |arg|
    set_callback callback, :before, arg, options
    if options.fetch(:skip_on_admin_save, false)
      skip_callback callback, :before, arg, if: -> { @on_admin_save }
    end
  end
end
extract_callback_options(args) click to toggle source
# File lib/application_service.rb, line 107
def self.extract_callback_options(args)
  options = args.last.is_a?(Hash) ? args.pop : {}

  options
end
new() click to toggle source
# File lib/application_service.rb, line 8
def initialize
end

Public Instance Methods

admin_save(obj) click to toggle source
# File lib/application_service.rb, line 90
def admin_save(obj)
  @obj = obj

  @on_admin_save = true
  save_method = @obj.respond_to?(:admin_save) ? :admin_save : :save
  run_callbacks :save do
    if @obj.new_record?
      result = create(save_method)
    else
      result = update(save_method)
    end
    result
  end
ensure
  @on_admin_save = false
end
current_object() click to toggle source
# File lib/application_service.rb, line 38
def current_object
  @obj
end
current_object=(obj) click to toggle source
# File lib/application_service.rb, line 42
def current_object=(obj)
  @obj = obj
end
destroy(obj) click to toggle source
# File lib/application_service.rb, line 83
def destroy(obj)
  @obj = obj
  run_callbacks :destroy do
    @obj.destroy
  end
end
save(obj) click to toggle source
# File lib/application_service.rb, line 46
def save(obj)
  @obj = obj
  run_callbacks :save do
    if @obj.new_record?
      result = create
    else
      result = update
    end
    result
  end
end
save!(obj) click to toggle source
# File lib/application_service.rb, line 58
def save!(obj)
  @obj = obj
  run_callbacks :save do
    if @obj.new_record?
      result = create!
    else
      result = update!
    end
    result
  end
end
update_attributes(obj, params, with_admin_save: false) { || ... } click to toggle source
# File lib/application_service.rb, line 70
def update_attributes(obj, params, with_admin_save: false)
  @obj = obj
  @obj.assign_attributes(params)

  yield if block_given?

  if with_admin_save
    self.admin_save(obj)
  else
    self.save(obj)
  end
end

Private Instance Methods

create(save_method=:save) click to toggle source
# File lib/application_service.rb, line 121
def create(save_method=:save)
  run_callbacks :create do
    @obj.send(save_method)
  end
end
create!(save_method=:save!) click to toggle source
# File lib/application_service.rb, line 115
def create!(save_method=:save!)
  run_callbacks :create do
    @obj.send(save_method)
  end
end
update(save_method=:save) click to toggle source
# File lib/application_service.rb, line 127
def update(save_method=:save)
  run_callbacks :update do
    @obj.send(save_method)
  end
end
update!(save_method=:save!) click to toggle source
# File lib/application_service.rb, line 133
def update!(save_method=:save!)
  run_callbacks :update do
    @obj.send(save_method)
  end
end