module SingularResource::Resource::ClassMethods

Public Instance Methods

singular_configuration(name=:default,&block) click to toggle source
# File lib/singular_resource/resource.rb, line 16
def singular_configuration(name=:default,&block)
  self._singular_configurations = _singular_configurations.merge(name => Configuration.new(&block))
end
singular_resource(name, options={}) click to toggle source
# File lib/singular_resource/resource.rb, line 20
def singular_resource(name, options={})
  enforce_method_name_not_used!(name)

  config = options[:config] || :default
  options = _singular_configurations[config].merge(options)

  _resource_finders[name] = finder = FinderStrategizer.strategy_for(name, options)

  define_resource_method(name, finder)
end

Private Instance Methods

_resource_finders() click to toggle source
# File lib/singular_resource/resource.rb, line 33
def _resource_finders
  @_resource_finders ||= {}
end
define_resource_method(name, finder) click to toggle source
# File lib/singular_resource/resource.rb, line 37
def define_resource_method(name, finder)
  define_method(name) do
    finder.call(self)
  end
  memoize name
  hide_action name
end
enforce_method_name_not_used!(name) click to toggle source
# File lib/singular_resource/resource.rb, line 45
def enforce_method_name_not_used!(name)
  if ActionController::Base.instance_methods.include?(name.to_sym)
    Kernel.abort "[ERROR] You are adding a singular resource by the `#{name}` method, " \
      "which overrides an existing ActionController method of the same name. " \
      "Consider a different resource name\n" \
      "#{caller.first}"
  end
end