Module: Spraypaint::Behaviour::Discovery::ClassMethods
- Defined in:
- lib/spraypaint/behaviour/discovery.rb
Defined Under Namespace
Classes: TagString
Instance Method Summary collapse
- #related_tags(*tags) ⇒ Object
- #spraypaint_condition_hash_for(tags) ⇒ Object
- #tags(options = {}) ⇒ Object
Instance Method Details
#related_tags(*tags) ⇒ Object
52 53 54 55 |
# File 'lib/spraypaint/behaviour/discovery.rb', line 52 def (*) = . () end |
#spraypaint_condition_hash_for(tags) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/spraypaint/behaviour/discovery.rb', line 24 def spraypaint_condition_hash_for() = self.tag_sanitizer.sanitize_array([*]) {:conditions => %{ EXISTS ( SELECT 1 FROM #{Spraypaint::Model::Tag.table_name}, #{Spraypaint::Model::Tagging.table_name} WHERE #{Spraypaint::Model::Tagging.table_name}.target_id = #{self.table_name}.id AND #{Spraypaint::Model::Tagging.table_name}.target_type = '#{self.base_class.name}' AND #{Spraypaint::Model::Tag.table_name}.id = #{Spraypaint::Model::Tagging.table_name}.tag_id AND (#{Spraypaint::Model::Tag.tag_condition()}) GROUP BY #{Spraypaint::Model::Tagging.table_name}.target_id HAVING count(distinct #{Spraypaint::Model::Tagging.table_name}.tag_id) = #{.size} ) }} end |
#tags(options = {}) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/spraypaint/behaviour/discovery.rb', line 39 def ( = {}) self.all({ :select => ['spraypaint_tags.id, spraypaint_tags.name tag_name, count(*) tag_count'], :joins => %{ INNER JOIN spraypaint_taggings ON (spraypaint_taggings.target_id = #{self.table_name}.#{self.primary_key} AND spraypaint_taggings.target_type = '#{self.base_class.name}') INNER JOIN spraypaint_tags ON (spraypaint_tags.id = spraypaint_taggings.tag_id) }, :group => 'spraypaint_tags.id', :order => 'count(*) desc, spraypaint_tags.name', }.merge(.slice(:conditions, :limit, :offset, :order))).collect {|tag| TagString.new(tag.tag_name, tag.tag_count) } end |