rails plugin that adds default includes to activerecord models

# USAGE
# class Foo < ActiveRecord::Base
#   default_includes = {
#       [ :bar => :baz ],
#       :bam
#     }
#   end
# end
module DefaultIncludeHelper

  def self.included(base)
    base.extend(ClassMethods)
  end

  class InvalidEagerLoadingDefaults < Exception; end

  module ClassMethods

    attr_reader :default_includes

    def find_with_default_includes(*args)
      options = args.extract_options!
      if @default_includes && !options[:include]
        options.merge!(:include => @default_includes)
      end
      find(*(args << options))
    end

    def eager_loading_defaults(defaults)
      unless valid_default_includes?(defaults)
        msg = 'includes must be either a Hash, an Array or a Symbol'
        raise InvalidEagerLoadingDefaults, msg
      end
      @default_includes = defaults
    end

    private 

    def valid_default_includes?(o)
      o.is_a?(Symbol) || o.is_a?(Array) || o.is_a?(Hash)
    end

  end

end


Leave a Reply

Formatting: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>