require 'redis' module Likeable mattr_accessor :facepile_default_limit self.facepile_default_limit = 9 ### Module Methods ### # ------------------ # class << self def classes (@classes||[]).flatten end def classes=(*args) @classes = args end # Likeable.model("Highlight") # ------------------------- # # turns a string into a model # "Highlight".constantize # => Highlight; "Hi1i6ht".constantize = #=> false def model(target_model) target_model.camelcase.constantize rescue NameError => ex return false end # Likeable.find_by_resource_id("highlight", 22) # ---------------------------------------- # # # ids)} @find_many.call(klass, ids) end def find_one(klass, id) @find_one ||= lambda {|klass, ids| klass.where(:id => id).first} @find_one.call(klass, id) end def find_one=(find_one) @find_one = find_one end def user_class @user_class ||= ::User end def user_class=(user) raise "User must be a class #{user.inspect}" unless user.class == Class @user_class = user end # Likeable.setup do |like| # like.redis = Redis.new(#...) # like.find_one = lambda {|klass, id | klass.where(:id => id)} # like.find_many = lambda {|klass, ids| klass.where(:id => ids)} # like.classes = Spot, Comment # end def include_in_class(klass, include_item) case when defined?(Rails::Application) Rails::Application.class_eval do config.to_prepare do klass.send :include, include_item end end else klass.send :include, include_item end end def make_classes_likeable classes.each do |klass| include_in_class(klass, Likeable) end end def give_users_like_ability include_in_class user_class, ::Likeable::UserMethods end def setup(&block) yield self unless block.blank? make_classes_likeable give_users_like_ability true end end end