Sha256: 91c4e2755a4c7462173bbdb48fb7a204684c4ec593f975cc0c95355579a83d18

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

module Socialization
  module Liker
    def self.included(base)
      base.class_eval do
        # A like is the Like record of self liking a likeable record.
        has_many :likes, :as => :liker, :dependent => :destroy, :class_name => 'Like'

        def is_liker?
          true
        end

        def like!(likeable)
          raise ArgumentError, "#{likeable} is not likeable!" unless likeable.respond_to?(:is_likeable?)
          raise ArgumentError, "#{self} cannot like itself!" unless self != likeable
          Like.create! :liker => self, :likeable => likeable
        end

        def unlike!(likeable)
          likeable.likings.where(:liker_type => self.class.to_s, :liker_id => self.id).each do |l|
            l.destroy
          end
        end

        def likes?(likeable)
          raise ArgumentError, "#{likeable} is not likeable!" unless likeable.respond_to?(:is_likeable?) && likeable.is_likeable?
          !self.likes.where(:likeable_type => likeable.class.to_s, :likeable_id => likeable.id).empty?
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
socialization-0.2.2 lib/socialization/liker.rb