lib/markable/acts_as_markable.rb in markable-0.1.3 vs lib/markable/acts_as_markable.rb in markable-0.1.4
- old
+ new
@@ -4,81 +4,90 @@
module ClassMethods
def markable_as(*args)
options = args.extract_options!
marks = args.flatten
+ by = options[:by]
Markable.set_models
class_eval do
class << self
attr_accessor :__markable_marks
end
end
- marks = Array.wrap(marks).map!{|i| i.to_sym }
+ marks = Array.wrap(marks).map!(&:to_sym)
- markers = options[:by].present? ? Array.wrap(options[:by]) : :all
+ markers = by.present? ? Array.wrap(by) : :all
self.__markable_marks ||= {}
marks.each do |mark|
self.__markable_marks[mark] = {
:allowed_markers => markers
}
end
class_eval do
- has_many :markable_marks, :class_name => 'Markable::Mark', :as => :markable, :dependent => :delete_all
+ has_many :markable_marks,
+ :class_name => 'Markable::Mark',
+ :as => :markable,
+ :dependent => :delete_all
include Markable::ActsAsMarkable::MarkableInstanceMethods
def self.marked_as(mark, options = {})
- if options[:by].present?
- result = self.joins(:markable_marks).where( :marks => {
- :mark => mark.to_s, :marker_id => options[:by].id, :marker_type => options[:by].class.name
+ by = options[:by]
+ if by.present?
+ result = self.joins(:markable_marks).where({
+ :marks => {
+ :mark => mark.to_s,
+ :marker_id => by.id,
+ :marker_type => by.class.name
+ }
})
markable = self
result.class_eval do
define_method :<< do |object|
- options[:by].set_mark mark, object
+ by.set_mark(mark, object)
self
end
define_method :delete do |markable|
- options[:by].remove_mark mark, markable
+ by.remove_mark(mark, markable)
self
end
end
else
- result = self.joins(:markable_marks).where( :marks => { :mark => mark.to_s } ).group("#{self.table_name}.id")
+ result = self.joins(:markable_marks).where(:marks => { :mark => mark.to_s }).group("#{self.table_name}.id")
end
result
end
end
self.__markable_marks.each do |mark, o|
class_eval %(
- def self.marked_as_#{mark} options = {}
- self.marked_as :#{mark}, options
+ def self.marked_as_#{mark}(options = {})
+ self.marked_as(:#{mark}, options)
end
- def marked_as_#{mark}? options = {}
- self.marked_as? :#{mark}, options
+ def marked_as_#{mark}?(options = {})
+ self.marked_as?(:#{mark}, options)
end
)
end
- Markable.add_markable self
+ Markable.add_markable(self)
end
end
module MarkableInstanceMethods
def method_missing(method_sym, *args)
Markable.models.each do |model_name|
if method_sym.to_s =~ Regexp.new("^#{model_name.downcase.pluralize}_have_marked_as(_[\\w_]+)?$")
model_name.constantize # ping model
- if self.methods.include? method_sym # method has appear
+ if self.methods.include?(method_sym) # method has appear
return self.method(method_sym).call(*args) # call this method
end
end
end
super
@@ -86,83 +95,85 @@
super
end
def mark_as(mark, markers)
Array.wrap(markers).each do |marker|
- Markable.can_mark_or_raise? marker, self, mark
+ Markable.can_mark_or_raise?(marker, self, mark)
params = {
:markable_id => self.id,
:markable_type => self.class.name,
:marker_id => marker.id,
:marker_type => marker.class.name,
:mark => mark.to_s
}
- Markable::Mark.create(params) unless Markable::Mark.exists? params
+ Markable::Mark.create(params) unless Markable::Mark.exists?(params)
end
end
def marked_as?(mark, options = {})
- if options[:by].present?
- Markable.can_mark_or_raise? options[:by], self, mark
- end
+ by = options[:by]
params = {
:markable_id => self.id,
:markable_type => self.class.name,
:mark => mark.to_s
}
- if options[:by].present?
- params[:marker_id] = options[:by].id
- params[:marker_type] = options[:by].class.name
+ if by.present?
+ Markable.can_mark_or_raise?(by, self, mark)
+ params[:marker_id] = by.id
+ params[:marker_type] = by.class.name
end
- Markable::Mark.exists? params
+ Markable::Mark.exists?(params)
end
def unmark(mark, options = {})
- if options[:by].present?
- Markable.can_mark_or_raise? options[:by], self, mark
- Array.wrap(options[:by]).each do |marker|
- params = {
+ by = options[:by]
+ if by.present?
+ Markable.can_mark_or_raise?(by, self, mark)
+ Array.wrap(by).each do |marker|
+ Markable::Mark.delete_all({
:markable_id => self.id,
:markable_type => self.class.name,
:marker_id => marker.id,
:marker_type => marker.class.name,
:mark => mark.to_s
- }
- Markable::Mark.delete_all(params)
+ })
end
else
- params = {
+ Markable::Mark.delete_all({
:markable_id => self.id,
:markable_type => self.class.name,
:mark => mark.to_s
- }
- Markable::Mark.delete_all(params)
+ })
end
end
def have_marked_as_by(mark, target)
- result = target.joins(:marker_marks).where( :marks => {
- :mark => mark.to_s, :markable_id => self.id, :markable_type => self.class.name
+ result = target.joins(:marker_marks).where({
+ :marks => {
+ :mark => mark.to_s,
+ :markable_id => self.id,
+ :markable_type => self.class.name
+ }
})
markable = self
result.class_eval do
define_method :<< do |markers|
Array.wrap(markers).each do |marker|
- marker.set_mark mark, markable
+ marker.set_mark(mark, markable)
end
self
end
define_method :delete do |markers|
- Markable.can_mark_or_raise? markers, markable, mark
+ Markable.can_mark_or_raise?(markers, markable, mark)
Array.wrap(markers).each do |marker|
- marker.remove_mark mark, markable
+ marker.remove_mark(mark, markable)
end
self
end
end
result
end
end
end
end
-ActiveRecord::Base.send :include, Markable::ActsAsMarkable
+ActiveRecord::Base.send(:include, Markable::ActsAsMarkable)