class Jekyll::JekyllDatapageGenerator
Public Instance Methods
generate(site)
click to toggle source
the function =generate= loops over the =_config.yml/page_gen= specification, determining what sets of pages have to be generated, reading the data for each set and invoking the =DataPage= constructor for each record found in the data
# File lib/jekyll-datapage-generator.rb, line 132 def generate(site) # page_gen-dirs is a global option which determines whether we want to # generate index pages (name/index.html) or HTML files (name.html) for # all sets index_files = site.config['page_gen-dirs'] == true # data contains the specification of all the datasets for which we want # to generate individual pages (look at the README file for its documentation) data = site.config['page_gen'] if data data.each do |data_spec| index_files_for_this_data = data_spec['index_files'] != nil ? data_spec['index_files'] : index_files template = data_spec['template'] || data_spec['data'] name = data_spec['name'] name_expr = data_spec['name_expr'] title = data_spec['title'] title_expr = data_spec['title_expr'] dir = data_spec['dir'] || data_spec['data'] extension = data_spec['extension'] || "html" page_data_prefix = data_spec['page_data_prefix'] debug = data_spec['debug'] if not site.layouts.key? template puts "error (datapage-gen). could not find template #{template}. Skipping dataset #{name}." else # records is the list of records for which we want to generate # individual pages records = nil data_spec['data'].split('.').each do |level| if records.nil? records = site.data[level] else records = records[level] end end if (records.kind_of?(Hash)) records = records.values end # apply filtering conditions: # - filter requires the name of a boolean field # - filter_condition evals a ruby expression which can use =record= as argument records = records.select { |record| record[data_spec['filter']] } if data_spec['filter'] records = records.select { |record| eval(data_spec['filter_condition']) } if data_spec['filter_condition'] # we now have the list of all records for which we want to generate individual pages # iterate and call the constructor records.each do |record| site.pages << DataPage.new(site, site.source, index_files_for_this_data, dir, page_data_prefix, record, name, name_expr, title, title_expr, template, extension, debug) end end end end end