lib/bookmark_system/bookmarker.rb
###
# BookmarkSystem module
#
# This module defines common behavior in bookmark system
###
module BookmarkSystem
###
# Bookmarker module
#
# This module defines bookmarker behavior in bookmark system
###
module Bookmarker
###
# Extends ActiveSupport::Concern
###
extend ActiveSupport::Concern
###
# Included configuration
###
included do
###
# Has many bookmarkees association configuration
###
has_many :bookmarkees, class_name: "BookmarkSystem::Bookmark", as: :bookmarker, dependent: :destroy
end
###
# Specifies if self can bookmark {Bookmarkee} objects
#
# @return [Boolean]
###
def is_bookmarker?
true
end
###
# Creates a {Bookmark} relationship between self and a {Bookmarkee} object
#
# @param [Bookmarkee] bookmarkee - the bookmarkee of the {Bookmark} relationship
# @return [Boolean]
###
def bookmark(bookmarkee)
Bookmark.bookmark(self, bookmarkee)
end
###
# Destroys a {Bookmark} relationship between self and a {Bookmarkee} object
#
# @param [Bookmarkee] bookmarkee - the bookmarkee of the {Bookmark} relationship
# @return [Boolean]
###
def unbookmark(bookmarkee)
Bookmark.unbookmark(self, bookmarkee)
end
###
# Toggles a {Bookmark} relationship between self and a {Bookmarkee} object
#
# @param [Bookmarkee] bookmarkee - the bookmarkee of the {Bookmark} relationship
# @return [Boolean]
###
def toggle_bookmark(bookmarkee)
Bookmark.toggle_bookmark(self, bookmarkee)
end
###
# Specifies if self bookmarks a {Bookmarker} object
#
# @param [Bookmarkee] bookmarkee - the {Bookmarkee} object to test against
# @return [Boolean]
###
def bookmarks?(bookmarkee)
Bookmark.bookmarks?(self, bookmarkee)
end
###
# Retrieves a scope of {Bookmark} objects that are bookmarked by self
#
# @param [Class] klass - the {Class} to include
# @return [ActiveRecord::Relation]
###
def bookmarkees_by(klass)
Bookmark.scope_by_bookmarker(self).scope_by_bookmarkee_type(klass)
end
end
end