Gumdrop.configure do|config|
# You can add whatever custom config options you'd like:
config.site= {
title: 'My Site',
tagline: 'My home on thar intarwebs!',
author: 'Me',
url: 'http://www.mysite.com'
}
# See the "Apache Stuff" generator below on how to use custom config info
config.redirects= [
{ from:"old-path.html", to:"new-path.html" }
]
# You can modify how Gumdrop runs and where it looks for things by
# modifying these configuration settings (included below are their
# default values):
# config.output_dir= "./output"
# config.source_dir= "./source"
# config.data_dir= './data'
# config.relative_paths= true
# config.relative_paths_exts= %w(.html .htm)
# config.default_layout= 'site'
# config.layout_exts= %w(.html .htm)
# config.proxy_enabled= false
# config.log= STDOUT
# config.log_level= :info
# config.server_timeout= 5
# config.server_port= 4567
# config.env= :production
# config.file_change_test= :checksum
# You can set ignore/blacklist here, but it'd be better to use the gumdrop
# methods `Gumdrop.ignore(*paths)` and `Gumdrop.blacklist(*paths)`
# config.ignore= %w(**/.DS_Store .git* .git/**/* .svn/**/* **/.sass-cache/**/* Gumdrop)
# config.blacklist= []
# Optional, if you want to use the example 'sync' command below.
config.remote= {
host: 'example-server.com',
user: 'example-username',
path: '~/example-server.com'
}
end
# Ignored files are not read from the source_dir into memory.
# Use file glob pattern:
# Gumdrop.ignore "**/ignore.me"
# Blacklisted files will not be render to output_dir (even generated pages).
# Use file glob pattern:
# Gumdrop.blacklist "**/wont.render"
# Generators are a way of dynamically creating pages.
# You can create generators like the following example or in the source tree
# by creating a file with the extension `.generator`. The only difference is
# that generators in the source_dir will assume the `base_path` of the
# `.generator` file path.
Gumdrop.generate 'Apache Specific Stuff (Example)' do
page '.htaccess.erb' do
# The return value will be used as the file content.
# Since we give the filename (above) an .erb extension,
# the rendering engine will run the following content
# through erb before being saved to disk as `.htaccess`.
<<-EOF
# For clean urls
DirectoryIndex index.html
RewriteEngine On
RewriteBase /
# Do not do anything for already existing files and folders
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]
# add .html file extension (if such file does exist)
RewriteCond %{DOCUMENT_ROOT}/$1\.html -f
RewriteRule ^(.+[^/])/?$ $1.html [L,QSA]
# BEGIN Gzip
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
# END Gzip
<%
# It's the custom config setting! We have access to all config info here:
config.redirects.each do |opts|
%>
Redirect <%= opts[:from] %> <%= opts[:to] %>
<% end %>
EOF
end
end
Gumdrop.generate 'Other Examples' do
# Renders the about_site partial to about.html.
# It passes any other params on to the partial.
# page "about.html", :render=>'about_site', :passthru=>'Available to the partial'
# If a block is passed in to `page`, the return value will be used as the file contents.
page 'robots.txt' do
"""
User-Agent: *
Disallow: /
"""
end
# Building a webapp and want to use Sprockets to assemble the JS? Gumdrop
# supplies a sprockets helper (and a stitch one, if you'd prefer).
# file 'app.js' do
# # file generators will not render with any layouts
# sprocket 'js/main.js'
# end
# You might want to keep the source .js files from being generated:
# Gumdrop.blacklist "js/**/*.js"
# You can access data from the "./data" folder (by default, it's configurable
# of course) so you can create data-driven static pages... If that makes sense.
data.news.each do |item|
page "news/#{ item._id }-#{ item.slug }.html.markdown.erb", params:item do
# The data manager adds item._id to the resultset. It is
# the file's basename minus extname.
#
# Since we added '.markdown' and '.erb' to the end of the filename,
# when this page is rendered, it'll be passed through erb first,
# then a markdown engine (which we've included in our Gemfile).
#
# Notice the params:#object option above, that will take
# whatever hash values are there and merge them into the
# the Content object's params -- so we can use access that
# data elsewhere (see source/index.html.erb).
item.content
end
end
# With all these generated pages, you might be curious what all will be
# built by Gumdrop. To see an overview run:
# $ gumdrop uris
end
# Throughout the life of Gumdrop, several events are fired. You can listen
# for them like this:
Gumdrop.on :start do |event|
puts "Gumdrop v#{Gumdrop::VERSION} building..."
# Some Gumdrop events you can listen for:
# start, scan, generate, generate_item, render, render_item, end
#
# For more, see: https://github.com/darthapo/gumdrop/wiki/Gumdrop-Events
end
# View helpers (available in the rendering context and generators):
Gumdrop.view_helpers do
# Calculate the years for a copyright
def copyright_years(start_year, divider="–")
end_year = Date.today.year
if start_year == end_year
"#{start_year}"
else
"#{start_year}#{divider}#{end_year}"
end
end
#
# Your custom helpers go here!
#
end
# Add your own commands to the gumdrop command line interface (for this site)!
# For more, see: https://github.com/wycats/thor/wiki
Gumdrop.cli do
desc 'sync', "Syncs with public server using rsync (if configured)"
method_option :build, :aliases => '-b', :desc => 'Build content before syncing'
method_option :dry_run, :aliases => '-d', :desc => 'Dry run'
def sync
config= Gumdrop.site.config
output= Gumdrop.site.output_path
remote= config.remote
dry_run= options[:dry_run] ? 'n' : ''
unless remote.nil? or remote.host.nil? or remote.host == 'example-server.com'
Gumdrop.build if options[:build]
cmd= "rsync -avz#{ dry_run } --delete #{ output } #{ remote.user }@#{ remote.host }:#{ remote.path }"
say "Running:\n#{ cmd }\n"
system(cmd)
else
say "To use this command, please configure your server info in the Gumdrop file!"
end
end
desc 'watch', "Watches the filesystem and recompiles whenever a source file changes."
method_option :quiet, default:false, aliases:'-q', type: :boolean
def watch
require 'listen'
if options[:quiet]
Gumdrop.configure {|c| c.log_level= :warn }
end
Gumdrop.run
paths= [Gumdrop.site.source_dir] #? Sitefile too?
paths << Gumdrop.site.data_dir if File.directory? Gumdrop.site.data_dir
Listen.to(*paths, :latency => 0.5) do |m, a, r|
Gumdrop.log.info "Reloading site!"
Gumdrop.rebuild
end
rescue LoadError
say "Error: Watch requires the listen gem, be sure and add it to your Gemfile!"
rescue => ex
say "Error: #{ ex }"
end
end
# Any other code you'd like to run... This is just a ruby file, after all!
require 'slim'
Slim::Engine.set_default_options pretty:true