Class: Cms::Tag

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/cms/tag.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#sizeObject

Returns the value of attribute size.



7
8
9
# File 'app/models/cms/tag.rb', line 7

def size
  @size
end

Class Method Details

.cloud(options = {}) ⇒ Object

Returns an array of tags with a size attribute This takes the same arguments as find, plus the additional ‘:sizes` option, which contols the number of sizes the tag cloud will have. The default number of sizes is 5.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/models/cms/tag.rb', line 28

def self.cloud(options={})
  sizes = (options.delete(:sizes) || 5) - 1
  sizes = 1 if sizes < 1
  tags = counts(options)
  return [] if tags.blank?

  min = nil
  max = nil
  tags.each do |t|
    t.count = t.count.to_i
    min = t.count if (min.nil? || t.count < min)
    max = t.count if (max.nil? || t.count > min)
  end

  divisor = ((max - min) / sizes) + 1
  tags.each do |t|
    t.size = ("%1.0f" % (t.count * 1.0 / divisor)).to_i
  end

  tags
end

.columns_for_indexObject



54
55
56
57
58
# File 'app/models/cms/tag.rb', line 54

def self.columns_for_index
  [{:label => "Name", :method => :name, :order => "name"},
   {:label => "Usages", :method => :tagging_count},
   {:label => "Updated On", :method => :updated_on_string, :order => "updated_at"}]
end

.counts(options = {}) ⇒ Array

Returns an array of tags with a count attribute

Returns:

  • (Array)

    Each element of the area contains [Id (Integer), Name (String), count (Integer)] (with Sqlite3 anyway)



14
15
16
17
18
19
20
21
22
# File 'app/models/cms/tag.rb', line 14

def self.counts(options={})
  with_scope(:find => {
      :select => "#{Tag.table_name}.id, #{Tag.table_name}.name, count(*) as count",
      :joins => :taggings,
      :group => "#{Tag.table_name}.id, #{Tag.table_name}.name",
      :order => "count desc, #{Tag.table_name}.name"}) do
    all(options)
  end
end

Instance Method Details

#renderObject



60
61
62
# File 'app/models/cms/tag.rb', line 60

def render
  @taggings = @content_block.taggings.paginate(:page => params[:page])
end

#tagging_countObject



50
51
52
# File 'app/models/cms/tag.rb', line 50

def tagging_count
  taggings.count
end