class Itsf::Services::V2::Service::Base

Attributes

_messages[R]
instrumenter[RW]
response[R]

Public Class Methods

call(attributes = {}, *args) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 23
def self.call(attributes = {}, *args)
  new(attributes, *args).send(:do_work)
end
i18n_scope() click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 19
def self.i18n_scope
  'activerecord'
end
new(attributes = {}, *args) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 27
def initialize(attributes = {}, *args)
  options = args.extract_options!
  options.reverse_merge!(instrumenter: ActiveSupport::Notifications)

  @_messages = []
  @errors = ActiveModel::Errors.new(self)

  initialize_instrumenter(options[:instrumenter])
  instrument('initialize.base.service.v2.services.itsf') do
    initialize_attributes if respond_to?(:initialize_attributes, true)
    send_attributes(attributes)
    initialize_response
  end
end

Public Instance Methods

persisted?() click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 12
def persisted?; false end

Private Instance Methods

add_error_and_say(attribute, message, options = {}) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 98
def add_error_and_say(attribute, message, options = {})
  errors.add(attribute, message)
  say(message, options)
end
error(message, options = {}) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 92
def error(message, options = {})
  options.reverse_merge!(level: :error, attribute: :base)
  errors.add(options[:attribute], message)
  say(message, options)
end
info(message, options = {}) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 82
def info(message, options = {})
  options.reverse_merge!(level: :info)
  say(message, options)
end
initialize_instrumenter(instrumenter) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 50
def initialize_instrumenter(instrumenter)
  @instrumenter = instrumenter
end
initialize_response() click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 54
def initialize_response
  if self.class.const_defined?('Response')
    @response = "#{self.class}::Response".constantize.new
  else
    @response = Services::V2::Response::Base.new
  end
end
respond() click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 62
def respond
  response
end
say(message, options = {}) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 72
def say(message, options = {})
  options.reverse_merge!(indent: 0, level: :info)
  indent = options.delete(:indent)
  level = options.delete(:level)
  formatted_message = "[#{self.class.name}]: #{'  ' * indent}#{message}"
  puts formatted_message unless Itsf::Services.silenced_levels[Rails.env].try(:include?, level)
  @_messages << Services::V2::Message::Base.new(service_class: self.class, message: message, level: level, indent: indent)
  true
end
send_attributes(attributes) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 44
def send_attributes(attributes)
  attributes.each do |name, value|
    send("#{name}=", value)
  end
end
set_errors_on_response() click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 103
def set_errors_on_response
  @response.send(:'errors=', @errors)
end
set_messages_on_response() click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 107
def set_messages_on_response
  @response.send(:'messages=', @_messages)
end
warn(message, options = {}) click to toggle source
# File lib/itsf/services/v2/service/base.rb, line 87
def warn(message, options = {})
  options.reverse_merge!(level: :warning)
  say(message, options)
end