Sha256: 768bce3d76d3e5f8bc47ff6022a4e3b715e4241e39f783365f7891b18734f738
Contents?: true
Size: 1.64 KB
Versions: 4
Compression:
Stored size: 1.64 KB
Contents
module Markable module ActsAsMarker extend ActiveSupport::Concern module ClassMethods def acts_as_marker(options = {}) Markable.set_models class_eval do class << self attr_accessor :marker_name end end self.marker_name = self.name.downcase.to_sym class_eval do has_many :marker_marks, :class_name => 'Markable::Mark', :as => :marker, :dependent => :delete_all include Markable::ActsAsMarker::MarkerInstanceMethods end Markable.add_marker self end end module MarkerInstanceMethods def method_missing(method_sym, *args) Markable.models.each do |model_name| if method_sym.to_s =~ Regexp.new("^[\\w_]+_#{model_name.downcase.pluralize}$") || method_sym.to_s =~ Regexp.new("^#{model_name.downcase.pluralize}_marked_as(_[\\w_]+)?$") model_name.constantize # ping model if self.methods.include? method_sym # method has appear return self.method(method_sym).call(*args) # call this method end end end super rescue super end def set_mark(mark, markables) Array.wrap(markables).each do |markable| Markable.can_mark_or_raise? self, markable, mark markable.mark_as mark, self end end def remove_mark(mark, markables) Markable.can_mark_or_raise? self, markables, mark Array.wrap(markables).each do |markable| markable.unmark mark, :by => self end end end end end ActiveRecord::Base.send :include, Markable::ActsAsMarker
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
markable-0.1.4 | lib/markable/acts_as_marker.rb |
markable-0.1.3 | lib/markable/acts_as_marker.rb |
markable-0.1.2 | lib/markable/acts_as_marker.rb |
markable-0.1.1 | lib/markable/acts_as_marker.rb |