module ActsAsContextable::Contextable
Public Class Methods
included(base)
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 3 def self.included(base) base.class_eval do has_many :context_items, :class_name => 'ActsAsContextable::ContextReference', :as => :contextable, :dependent => :destroy do def contexts includes(:context).map(&:context) end end end end
Public Instance Methods
add_to_context(context, options = {})
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 14 def add_to_context context, options = {} self.add_to_ctx :context => context #, :context_weight => options[:context_weight] end
add_to_ctx(args = {})
click to toggle source
put to context
# File lib/acts_as_contextable/contextable.rb, line 19 def add_to_ctx args = {} options = {}.merge(args) if options[:context].nil? return false end # find the context _context_refs_ = find_contexts_for({ :context_id => options[:context].id, :context_type => options[:context].class.base_class.name }) if _context_refs_.count == 0 or options[:duplicate] # this item has never been in context context_ref = ActsAsContextable::ContextReference.new( :contextable => self, :context => options[:context] ) else # this context is potentially changing his vote context_ref = _context_refs_.last end context_ref.save end
contexts()
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 6 def contexts includes(:context).map(&:context) end
contexts_of_a_type(ctxclass)
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 72 def contexts_of_a_type ctxclass find_contexts_for(:context_type => ctxclass.base_class.name).map(&:context) end
find_contexts_for(extra_conditions = {})
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 76 def find_contexts_for extra_conditions = {} context_items.where(extra_conditions) end
has_context?()
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 60 def has_context? find_contexts_for().count > 0 end
has_contexts_of_a_type?(ctxclass)
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 68 def has_contexts_of_a_type? ctxclass find_contexts_for(:context_type => ctxclass.base_class.name).count > 0 end
remove_from_context(context, options = {})
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 47 def remove_from_context context, options = {} self.remove_from_ctx :context => context end
remove_from_ctx(args = {})
click to toggle source
# File lib/acts_as_contextable/contextable.rb, line 51 def remove_from_ctx args = {} return false if args[:context].nil? _context_refs_ = find_contexts_for(:context_id => args[:context].id, :context_type => args[:context].class.base_class.name) return true if _context_refs_.size == 0 _context_refs_.each(&:destroy) return true end