class Angus::BaseResource

Attributes

operation[R]
params[R]
request[R]

Public Class Methods

_after_filers() click to toggle source
# File lib/angus/base_resource.rb, line 46
def self._after_filers
  @_after_filers ||= []
end
_before_filers() click to toggle source
# File lib/angus/base_resource.rb, line 42
def self._before_filers
  @_before_filers ||= []
end
after(method_names = [], options = {}, &block) click to toggle source
# File lib/angus/base_resource.rb, line 38
def self.after(method_names = [], options = {}, &block)
  self._after_filers.concat(validate_and_build_filters(method_names, options, block))
end
before(method_names = [], options = {}, &block) click to toggle source
# File lib/angus/base_resource.rb, line 34
def self.before(method_names = [], options = {}, &block)
  self._before_filers.concat(validate_and_build_filters(method_names, options, block))
end
inherited(subclass) click to toggle source
# File lib/angus/base_resource.rb, line 9
def self.inherited(subclass)
  self._before_filers.each { |before_filer| subclass._before_filers << before_filer }
  self._after_filers.each { |after_filer| subclass._after_filers << after_filer }
end
new(request, params, operation) click to toggle source
# File lib/angus/base_resource.rb, line 16
def initialize(request, params, operation)
  @request   = request
  @params    = params
  @operation = operation
end

Private Class Methods

validate_and_build_filters(method_names, options, block) click to toggle source
# File lib/angus/base_resource.rb, line 50
def self.validate_and_build_filters(method_names, options, block)
  if method_names.is_a?(Hash) && options.empty?
    options = method_names
    method_names = []
  else
    method_names = Array(method_names)
  end

  if (method_names.any? && block) || (method_names.empty? && !block)
    raise 'InvalidFilterDefinition'
  end

  if method_names.any?
    method_names.inject([]) do |filters, method_name|
      filters << { :filter => method_name, :options => options }
    end
  else
    [{ :filter => Proc.new { |resource| block.call(resource) }, :options => options }]
  end
end

Public Instance Methods

run_after_filters(response = nil) click to toggle source
# File lib/angus/base_resource.rb, line 30
def run_after_filters(response = nil)
  self.class._after_filers.each { |after_filer| run_filter(after_filer, response) }
end
run_before_filters() click to toggle source
# File lib/angus/base_resource.rb, line 26
def run_before_filters
  self.class._before_filers.each { |before_filer| run_filter(before_filer) }
end
run_validations!() click to toggle source
# File lib/angus/base_resource.rb, line 22
def run_validations!
  ParamsValidator.new(@operation).valid?(@params)
end

Private Instance Methods

run_filter(filer_definition, *args) click to toggle source
# File lib/angus/base_resource.rb, line 74
def run_filter(filer_definition, *args)
  return unless run_filter?(self.operation, filer_definition[:options])

  if filer_definition[:filter].is_a?(Symbol)
    send(filer_definition[:filter], *args)
  else
    if args.any?
      filer_definition[:filter].call([self, *args])
    else
      filer_definition[:filter].call(self)
    end
  end
end
run_filter?(operation, filer_options) click to toggle source
# File lib/angus/base_resource.rb, line 88
def run_filter?(operation, filer_options)
  if filer_options[:only]
    Array(filer_options[:only]).include?(operation.code_name.to_sym)
  elsif filer_options[:except]
    !Array(filer_options[:except]).include?(operation.code_name.to_sym)
  else
    true
  end
end