class Jekyll::PageGenerator
Public Instance Methods
build_progression_payload(site)
click to toggle source
# File lib/dsm-portfolio-plugin.rb, line 320 def build_progression_payload(site) categories = site.data['competencies'].group_by {|c| c['categories'][0]} num_competencies = site.data['competencies'].size a_projects = site.data['projects'] u_vignettes = site.posts.docs.select {|p| p['type'] == 'vignette'} project_rows = [] for a_project in a_projects project_row = {} # Set project meta. project_row['projectId'] = a_project['id'] project_row['projectTitle'] = a_project['title'] project_row['deadline'] = a_project['deadline'] # Find related user-submitted post. linked_vignettes = u_vignettes.select {|v| v.data['project_code'] == a_project['id']} project_row['submitted'] = linked_vignettes.size > 0 # There should only be one... vignette = linked_vignettes[0] if project_row['submitted'] # Generators run before 'render', so it is necessary to # render this document early to access meta-information # computed from tags during. Jekyll::Renderer.new(site, vignette, site.site_payload).run # It now has 'data' Hash. end # Compute values for each competency. project_row['competencies'] = [] num_targets_met = 0 # Iterate over competencies. for category in categories for competency in category[1] computed_competency = {} computed_competency['competencyId'] = competency['id'] # Find out if it was a target of the project. computed_competency['target'] = a_project['targets'].include? competency['id'] # Find out if it was included in the user's final vignette iteration. if project_row['submitted'] final_vignette = vignette.data['vignettes'].last computed_competency['included'] = final_vignette[:competencies].any? {|c| c[:id] == competency['id']} else computed_competency['included'] = false end # If it was a target that was met if computed_competency['target'] && computed_competency['included'] num_targets_met += 1 end project_row['competencies'].push(computed_competency) end end project_row['allTargetsHit'] = num_targets_met == a_project['targets'].size project_rows.push(project_row) end return { "project_rows" => project_rows, "categories" => categories, "num_competencies" => num_competencies } end
generate(site)
click to toggle source
# File lib/dsm-portfolio-plugin.rb, line 294 def generate(site) pagesToGenerate = Dir.glob(File.join(site.source, '_layouts/generate/**/*.*')) generateBasePath = File.join(site.source, '_layouts/generate') pagesToGenerate.each do |filePath| basename = File.basename(filePath) outDirectory = filePath.sub(generateBasePath, '').sub(basename, '') data = {} # If there is a specific payload that needs to be sent... if basename == "progression.json" || basename == "progression.html" data = build_progression_payload(site) end site.pages << GeneratedPage.new( site, site.source, outDirectory, basename, filePath.sub(basename, ''), data ) end end