class NiftyServices::BaseService
Constants
- CALLBACKS
Attributes
errors[R]
log[R]
logger[R]
options[R]
response_status[R]
response_status_code[R]
Public Class Methods
concern(concern_module)
click to toggle source
# File lib/nifty_services/base_service.rb, line 28 def concern(concern_module) self.include(concern_module) end
Also aliased as: include_concern
define_error_response_method(reason_string, status_code)
click to toggle source
# File lib/nifty_services/base_service.rb, line 16 def define_error_response_method(reason_string, status_code) method_name = Util.normalized_callback_name(reason_string, '_error') define_method method_name do |message_key, options = {}| error(status_code, message_key, options) end define_method "#{method_name}!" do |message_key, options = {}| error!(status_code, message_key, options) end end
new(options = {}, initial_response_status = 400)
click to toggle source
# File lib/nifty_services/base_service.rb, line 35 def initialize(options = {}, initial_response_status = 400) @options = with_default_options(options) @errors = [] @logger = @options[:logger] || default_logger @executed = false with_before_and_after_callbacks(:initialize) do set_response_status(initial_response_status) end end
register_callback(callback_name, method_name, &block)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 34 def register_callback(callback_name, method_name, &block) method_name = Util.normalized_callback_name(method_name) @@registered_callbacks[self.name.to_sym][callback_name] ||= [] @@registered_callbacks[self.name.to_sym][callback_name] << method_name register_callback_action(method_name, &block) end
register_callback_action(callback_name, &block)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 43 def register_callback_action(callback_name, &block) define_method(callback_name, &block) end
register_error_response_method(reason_string, status_code)
click to toggle source
# File lib/nifty_services/base_service.rb, line 11 def register_error_response_method(reason_string, status_code) NiftyServices::Configuration.add_response_error_method(reason_string, status_code) define_error_response_method(reason_string, status_code) end
Public Instance Methods
add_error(error)
click to toggle source
# File lib/nifty_services/base_service.rb, line 79 def add_error(error) add_method = error.is_a?(Array) ? :concat : :push @errors.send(add_method, error) end
callback_fired?(callback_name)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 59 def callback_fired?(callback_name) return ( callback_fired_in?(@fired_callbacks, callback_name) || callback_fired_in?(@custom_fired_callbacks, callback_name) || callback_fired_in?(@custom_fired_callbacks, "#{callback_name}_callback") ) end
Also aliased as: callback_called?
default_logger()
click to toggle source
# File lib/nifty_services/base_service.rb, line 84 def default_logger NiftyServices.config.logger end
execute()
click to toggle source
# File lib/nifty_services/base_service.rb, line 47 def execute not_implemented_exception(__method__) end
executed?()
click to toggle source
# File lib/nifty_services/base_service.rb, line 90 def executed? @executed == true end
Also aliased as: runned?
fail?()
click to toggle source
# File lib/nifty_services/base_service.rb, line 59 def fail? !success? end
option_disabled?(key)
click to toggle source
# File lib/nifty_services/base_service.rb, line 75 def option_disabled?(key) !option_enabled?(key) end
option_enabled?(key)
click to toggle source
# File lib/nifty_services/base_service.rb, line 71 def option_enabled?(key) option_exists?(key) && [true, 'true'].member?(@options[key.to_sym]) end
option_exists?(key)
click to toggle source
# File lib/nifty_services/base_service.rb, line 67 def option_exists?(key) @options && @options.key?(key.to_sym) end
register_callback(callback_name, method_name, &block)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 69 def register_callback(callback_name, method_name, &block) method_name = normalized_callback_name(method_name).to_sym @registered_callbacks[callback_name.to_sym] << method_name register_callback_action(callback_name, &block) end
register_callback_action(callback_name, &block)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 76 def register_callback_action(callback_name, &block) cb_name = normalized_callback_name(callback_name).to_sym @callbacks_actions[cb_name.to_sym] = block end
success?()
click to toggle source
# File lib/nifty_services/base_service.rb, line 55 def success? @success == true && valid? end
valid?()
click to toggle source
# File lib/nifty_services/base_service.rb, line 51 def valid? return @errors.empty? end
Protected Instance Methods
not_implemented_exception(method_name)
click to toggle source
# File lib/nifty_services/base_service.rb, line 239 def not_implemented_exception(method_name) message = "##{method_name} method must be implemented in #{self.class} class" raise NotImplementedError, message end
translate(key, options = {})
click to toggle source
# File lib/nifty_services/base_service.rb, line 244 def translate(key, options = {}) begin I18n.t(key, options) rescue => error "Can't fecth key #{key} - #{error.message}" end end
Private Instance Methods
call_callback(callback_name)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 92 def call_callback(callback_name) callback_name = callback_name.to_s.underscore.to_sym if has_callback?(callback_name) @fired_callbacks[callback_name.to_sym] = true invoke_callback(method(callback_name)) call_registered_callbacks_for(callback_name) end # allow chained methods self end
call_registered_callbacks_for(callback_name)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 124 def call_registered_callbacks_for(callback_name) instance_call_all_custom_registered_callbacks_for(callback_name) class_call_all_custom_registered_callbacks_for(callback_name) end
callback_fired_in?(callback_list, callback_name)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 161 def callback_fired_in?(callback_list, callback_name) return callback_list.key?(callback_name.to_sym) end
callbacks_setup()
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 82 def callbacks_setup return nil if @callbacks_setup @fired_callbacks, @custom_fired_callbacks = {}, {} @callbacks_actions = {} @registered_callbacks = Hash.new {|k,v| k[v] = [] } @callbacks_setup = true end
can_execute?()
click to toggle source
# File lib/nifty_services/base_service.rb, line 105 def can_execute? not_implemented_exception(__method__) end
changes(old, current, attributes = {})
click to toggle source
# File lib/nifty_services/base_service.rb, line 192 def changes(old, current, attributes = {}) changes = [] return changes if old.nil? || current.nil? old_attributes = old.attributes.slice(*attributes.map(&:to_s)) new_attributes = current.attributes.slice(*attributes.map(&:to_s)) new_attributes.each do |attribute, value| changes << attribute if (old_attributes[attribute] != value) end changes.map(&:to_sym) end
class_call_all_custom_registered_callbacks_for(callback_name)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 142 def class_call_all_custom_registered_callbacks_for(callback_name) classes_chain = self.class.ancestors.map(&:to_s).grep /\ANiftyServices/ klasses = @@registered_callbacks.keys.map(&:to_s) & classes_chain klasses.each do |klass| class_call_all_custom_registered_callbacks_for_class(klass, callback_name) end end
class_call_all_custom_registered_callbacks_for_class(class_name, callback_name)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 151 def class_call_all_custom_registered_callbacks_for_class(class_name, callback_name) class_callbacks = @@registered_callbacks[class_name.to_sym] callbacks = class_callbacks[callback_name.to_sym] || [] callbacks.each do |cb| @custom_fired_callbacks[cb.to_sym] = true invoke_callback(method(cb)) end end
default_options()
click to toggle source
# File lib/nifty_services/base_service.rb, line 101 def default_options {} end
error(status, message_key, options = {})
click to toggle source
# File lib/nifty_services/base_service.rb, line 162 def error(status, message_key, options = {}) @success = false with_before_and_after_callbacks(:error) do set_response_status(status) error_message = process_error_message_for_key(message_key, options) add_error(error_message) error_message end end
error!(status, message_key, options = {})
click to toggle source
# File lib/nifty_services/base_service.rb, line 175 def error!(status, message_key, options = {}) error(status, message_key, options) # TODO: # maybe throw a Exception making bang(!) semantic # raise "NiftyServices::V1::Exceptions::#{status.titleize}".constantize return false end
execute_action() { |block| ... }
click to toggle source
# File lib/nifty_services/base_service.rb, line 109 def execute_action(&block) return nil if executed? with_before_and_after_callbacks(:execute) do if can_execute? yield(block) if block_given? end end @executed = true end
filter_hash(hash = {}, whitelist_keys = [])
click to toggle source
# File lib/nifty_services/base_service.rb, line 188 def filter_hash(hash = {}, whitelist_keys = []) hash.symbolize_keys.slice(*whitelist_keys.map(&:to_sym)) end
has_callback?(callback_name)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 106 def has_callback?(callback_name) _callback_name = normalized_callback_name(callback_name).to_sym # include private methods respond_to?(callback_name, true) || respond_to?(_callback_name, true) end
i18n_errors_namespace()
click to toggle source
# File lib/nifty_services/base_service.rb, line 211 def i18n_errors_namespace "#{i18n_namespace}.errors" end
i18n_namespace()
click to toggle source
# File lib/nifty_services/base_service.rb, line 207 def i18n_namespace NiftyServices.configuration.i18n_namespace end
instance_call_all_custom_registered_callbacks_for(callback_name)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 129 def instance_call_all_custom_registered_callbacks_for(callback_name) @fired_callbacks[callback_name] = true callbacks = @registered_callbacks[callback_name.to_sym] callbacks.each do |cb| if callback = @callbacks_actions[cb.to_sym] @custom_fired_callbacks[cb.to_sym] = true invoke_callback(callback) end end end
invoke_callback(method)
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 169 def invoke_callback(method) method.call end
normalized_callback_name(callback_name, prefix = '_callback')
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 165 def normalized_callback_name(callback_name, prefix = '_callback') Util.normalized_callback_name(callback_name, prefix) end
process_error_message_for_key(message_object, options)
click to toggle source
# File lib/nifty_services/base_service.rb, line 215 def process_error_message_for_key(message_object, options) if message_object.respond_to?(:messages) message = message_object.messages elsif message_object.respond_to?(:message) message = message_object.message elsif message_object.is_a?(Array) && message_object.first.is_a?(Hash) message = message_object elsif message_object.is_a?(String) # if message_object is a string, use it as key to I18n or use pure string content message = options[:translate].nil? || options[:translate] == true ? translate("#{i18n_errors_namespace}.#{message_object}", options) : message_object else message = message_object end message end
response_status_code_for(status)
click to toggle source
# File lib/nifty_services/base_service.rb, line 154 def response_status_code_for(status) response_status_for(status).values.first end
response_status_for(status)
click to toggle source
# File lib/nifty_services/base_service.rb, line 141 def response_status_for(status) error_list = Configuration::ERROR_RESPONSE_STATUS success_list = Configuration::SUCCESS_RESPONSE_STATUS select_method = [Symbol, String].member?(status.class) ? :key : :value response_list = error_list.merge(success_list) response_list.select do |status_key, status_code| status == (select_method == :key ? status_key : status_code) end end
response_status_reason_for(status)
click to toggle source
# File lib/nifty_services/base_service.rb, line 158 def response_status_reason_for(status) response_status_for(status).keys.first end
set_response_status(status)
click to toggle source
# File lib/nifty_services/base_service.rb, line 136 def set_response_status(status) @response_status = response_status_reason_for(status) @response_status_code = response_status_code_for(status) end
success_created_response()
click to toggle source
# File lib/nifty_services/base_service.rb, line 132 def success_created_response success_response(:created) end
success_response(status = :ok)
click to toggle source
# File lib/nifty_services/base_service.rb, line 121 def success_response(status = :ok) unless Configuration::SUCCESS_RESPONSE_STATUS.key?(status.to_sym) raise "#{status} is not a valid success response status" end with_before_and_after_callbacks(:success) do @success = true set_response_status(status) end end
valid_object?(record, expected_class)
click to toggle source
# File lib/nifty_services/base_service.rb, line 184 def valid_object?(record, expected_class) record.class.to_s == expected_class.to_s end
with_before_and_after_callbacks(callback_basename) { |block| ... }
click to toggle source
# File lib/nifty_services/extensions/callbacks.rb, line 112 def with_before_and_after_callbacks(callback_basename, &block) callbacks_setup call_callback(:"before_#{callback_basename}") block_response = yield(block) if block_given? call_callback(:"after_#{callback_basename}") block_response end
with_default_options(options)
click to toggle source
# File lib/nifty_services/base_service.rb, line 97 def with_default_options(options) default_options.merge(options).symbolize_keys end