Skip to content

Instantly share code, notes, and snippets.

@denisdefreyne
Last active December 21, 2015 07:49
Show Gist options
  • Save denisdefreyne/6274277 to your computer and use it in GitHub Desktop.
Save denisdefreyne/6274277 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
### Preprocessing rules ######################################################
preprocess do
def hide_assets
items.each do |item|
if item.identifier =~ /^\/assets/
item[:is_hidden] = true
end
end
end
def generate_quick_reviews
groups = items.glob('/reviews.*')[0][:quick_reviews]
groups.each_pair do |subtype, quick_reviews|
quick_reviews.each_pair do |title, rating|
attributes = {
:title => title.to_s,
:subtype => subtype.to_s,
:rating => rating,
:quick => true,
:partial => true
}
identifier = "/reviews/#{title.to_s.downcase.gsub(/[^a-z]+/, '-')}.md"
items << Nanoc::Item.new('', attributes, identifier)
end
end
end
def delete_drafts
items.delete_if { |i| i[:is_draft] }
end
def convert_dates
items.each do |i|
if i[:published_on]
i[:published_on] = Date.parse(i[:published_on])
end
end
end
hide_assets
generate_quick_reviews
delete_drafts
convert_dates
end
### Compilation rules ########################################################
compile '/**/*', :rep => :raw do
unless item[:partial] || item.binary?
write item.identifier.with_ext('txt'), :snapshot => :last
end
end
compile '/assets/style/*.css' do
filter :sass, :syntax => :scss, :style => :compressed
#filter :relativize_paths, :type => :css
write item.identifier, :snapshot => :last
end
compile '/assets/**/*' do
version_part = item[:version] ? '-v' + item[:version].to_s : ''
write item.identifier.without_ext + version_part + '.' + item.identifier.extension, :snapshot => :last
end
compile '/sitemap_xml.*' do
filter :erb
write '/sitemap.xml', :snapshot => :last
end
compile '/404.*' do
filter :erb
write '/error/404.php', :snapshot => :last
end
compile '/**/*' do
next if item[:partial]
if item[:markdown]
filter :rdiscount
else
filter :erb
end
if item[:has_code]
filter :colorize_syntax, :default_colorizer => :pygmentsrb
end
case @item[:kind]
when 'review'
layout '/review.erb'
else
layout '/page.erb'
end
layout '/default.erb'
filter :rubypants
#filter :relativize_paths, :type => :html
if item.identifier.match?('/index.*')
write '/index.html', :snapshot => :last
else
write item.identifier.in_dir.with_ext('html'), :snapshot => :last
end
end
### Layouting rules ##########################################################
layout '/**/*', :erb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment