drapergem/draper

View on GitHub
lib/draper/finders.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
module Draper
  # Provides automatically-decorated finder methods for your decorators. You
  # do not have to extend this module directly; it is extended by
  # {Decorator.decorates_finders}.
  module Finders
    def find(id, options = {})
      decorate(object_class.find(id), options)
    end

    def all(options = {})
      decorate_collection(object_class.all, options)
    end

    def first(options = {})
      decorate(object_class.first, options)
    end

    def last(options = {})
      decorate(object_class.last, options)
    end

    # Decorates dynamic finder methods (`find_all_by_` and friends).
    def method_missing(method, *args, &block)
      return super unless method =~ /^find_(all_|last_|or_(initialize_|create_))?by_/

      result = object_class.send(method, *args, &block)
      options = args.extract_options!

      if method =~ /^find_all/
        decorate_collection(result, options)
      else
        decorate(result, options)
      end
    end
  end
end