compass/doc-src/tasks/generators.thor

109 lines
4.2 KiB
Plaintext
Raw Normal View History

$: << File.join(File.dirname(__FILE__), '..', '..', 'lib')
require 'fileutils'
require 'compass'
class Generate < Thor
2010-01-30 20:39:56 +00:00
desc "example IDENTIFIER [../frameworks/fmwk/stylesheets/path/to/_module.sass]", "Generate a new example."
method_options :title => :string, :framework => :string, :stylesheet => :string, :mixin => :string
2010-01-30 20:39:56 +00:00
def example(identifier, stylesheet = nil)
identifier = identifier.dup
identifier << "/" unless identifier[identifier.length - 1] == ?/
identifier = identifier[1..-1] if identifier[0] == ?/
2010-01-30 20:39:56 +00:00
stylesheet = stylesheet && dereference(stylesheet) || {}
options = @options.merge(stylesheet)
puts "Generating /examples/#{identifier}"
puts "DIRECTORY content/examples/#{identifier}"
FileUtils.mkdir_p("content/examples/#{identifier}")
puts " CREATE content/examples/#{identifier[0..-2]}.haml"
open("content/examples/#{identifier[0..-2]}.haml", "w") do |example_file|
2010-01-30 20:39:56 +00:00
mixin = "mixin: #{options[:mixin]}\n" if options[:mixin]
example_contents = <<-EXAMPLE
| ---
2010-01-30 20:39:56 +00:00
| title: #{options[:framework].capitalize} #{options[:mixin].capitalize if options[:mixin]} Example
| description: How to do X with Y
| framework: #{options[:framework]}
| stylesheet: #{options[:stylesheet]}
| #{mixin}example: true
| ---
| = render "partials/example"
EXAMPLE
example_file.puts example_contents.gsub(/^ +\| /, '')
end
puts " CREATE content/examples/#{identifier[0..-2]}/markup.haml"
open("content/examples/#{identifier[0..-2]}/markup.haml", "w") do |example_file|
example_contents = <<-EXAMPLE
| .example
| %h1.markup In Haml
| %p This file gets included into the example.
| %p And the source is shown to the user as HTML.
EXAMPLE
example_file.puts example_contents.gsub(/^ +\| /, '')
end
puts " CREATE content/examples/#{identifier[0..-2]}/stylesheet.sass"
open("content/examples/#{identifier[0..-2]}/stylesheet.sass", "w") do |example_file|
example_contents = <<-EXAMPLE
| .example
| h1.markup
| /* This file is used to style the example markup. */
| p
| /* And the source is shown to the user as Sass and as CSS. */
EXAMPLE
example_file.puts example_contents.gsub(/^ +\| /, '')
2010-03-07 06:30:39 +00:00
puts "bundle exec nanoc3 co && open http://localhost:3000/docs/examples/#{identifier} && bundle exec nanoc3 aco"
end
end
desc "reference ../frameworks/fmwk/stylesheets/path/to/_module.sass", "Generate a reference page for the given stylesheet."
method_options :title => :string
def reference(stylesheet)
stylesheet = dereference(stylesheet)
identifier = "reference/#{stylesheet[:framework]}/#{stylesheet[:stylesheet]}"
identifier.gsub!(%r{/_},'/')
identifier.gsub!(/\.s[ac]ss/,'')
identifier.gsub!(%r{/#{stylesheet[:framework]}/#{stylesheet[:framework]}/},"/#{stylesheet[:framework]}/")
module_name = File.basename(identifier).gsub(/\.[^.]+$/,'').capitalize
framework_name = stylesheet[:framework].capitalize
title = @options[:title] || "#{framework_name} #{module_name}"
crumb = @options[:title] || module_name
file_name = "content/#{identifier}.haml"
directory = File.dirname(file_name)
puts "DIRECTORY #{directory}"
FileUtils.mkdir_p directory
puts " CREATE #{file_name}"
open(file_name, "w") do |reference_file|
contents = <<-CONTENTS
| ---
| title: #{title}
| crumb: #{crumb}
| framework: #{stylesheet[:framework]}
| stylesheet: #{stylesheet[:stylesheet]}
| classnames:
| - reference
| ---
| - render 'reference' do
| %p
| Lorem ipsum dolor sit amet.
CONTENTS
reference_file.puts contents.gsub(/^ +\| /, '')
puts " ITEM /#{identifier}/"
end
end
private
def dereference(stylesheet)
stylesheet = File.expand_path(stylesheet)
framework = Compass::Frameworks::ALL.find{|f| stylesheet.index(f.stylesheets_directory) == 0}
raise "No Framework found for #{stylesheet}" unless framework
{
:framework => framework.name,
:stylesheet => stylesheet[framework.stylesheets_directory.length+1..-1]
}
end
end