Class: Rop::FilteredIndexPageGenerator

Inherits:
IndexPageGenerator show all
Defined in:
lib/rop/filterable_index.rb

Instance Method Summary collapse

Methods inherited from IndexPageGenerator

#get_all_items

Instance Method Details

#generate(site) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/rop/filterable_index.rb', line 120

def generate(site)
  INDEXES.each do |index_name, params|
    collection_name = if site.config['is_hub']
                        'projects'
                      else
                        index_name
                      end

    items = get_all_items(site, collection_name, params[:item_test])

    # Creates a data structure like { tag1: [item1, item2], tag2: [item2, item3] }
    tags = {}
    items.each do |item|
      (item.data['tags'] or []).each do |tag|
        tags[tag] = [] unless tags.key? tag
        tags[tag].push(item)
      end
    end

    # Creates a filtered index page for each tag
    tags.each do |tag, tagged_items|
      site.pages << FilteredIndexPage.new(
        site,
        site.source,
        # The filtered page will be nested under /<index page>/<tag>.html
        File.join(index_name, tag),
        tag,
        tagged_items,
        index_name
      )
    end
  end
end