module CanCamel::Filter

Public Class Methods

filters() click to toggle source
# File lib/can_camel/filter.rb, line 29
def filters
  @filters ||= {}
end
included(base) click to toggle source
# File lib/can_camel/filter.rb, line 3
def self.included(base)
  base.define_singleton_method(:register_filter) { |*args| CanCamel::Filter.register_filter(*args) }
end
register_filter(x, lambda = nil) click to toggle source
# File lib/can_camel/filter.rb, line 8
def register_filter(x, lambda = nil)
  case x
  when Class
    filter = x.new
  when Symbol
    begin
      filter = Filters::CustomFilter.new(x, lambda || method(x))
    rescue NameError
      raise ArgumentError, "no method #{x} defined and lambda not passed"
    end
  when Method
    filter = Filters::CustomFilter.new(x.name, x)
  else
    filter = x
  end

  raise ArgumentError, "#{x} is neither Filter nor Class nor Symbol nor Method" unless filter?(filter)
  filter.try(:validate!)
  filters[filter.name] = filter
end

Private Class Methods

filter?(x) click to toggle source
# File lib/can_camel/filter.rb, line 35
def filter?(x)
  %i(invoke! name).reduce { |a, e| a && x.respond_to?(e) }
end