rote 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README +293 -0
- data/Rakefile +369 -0
- data/TODO +12 -0
- data/bin/rote +14 -0
- data/doc/jamis.rb +591 -0
- data/doc/layouts/page.html +44 -0
- data/doc/pages/COMMON.rb +18 -0
- data/doc/pages/index.html +66 -0
- data/doc/pages/index.rb +4 -0
- data/doc/res/images/computer-med.png +0 -0
- data/doc/res/images/dialog-information-med.png +0 -0
- data/doc/res/images/document-new-med.png +0 -0
- data/doc/res/images/go-home-med.png +0 -0
- data/doc/res/images/rote-big.png +0 -0
- data/doc/res/images/rote-logo.xcf +0 -0
- data/doc/res/images/rote-med.png +0 -0
- data/doc/res/images/rote-small.png +0 -0
- data/doc/res/images/rpot-big.png +0 -0
- data/doc/res/images/rpot-large-x.xcf +0 -0
- data/doc/res/images/rpot-large.xcf +0 -0
- data/doc/res/images/rpot-sml.png +0 -0
- data/doc/res/images/rpot-tiny.png +0 -0
- data/doc/res/images/user-id-med.png +0 -0
- data/doc/res/stylesheets/normal.css +141 -0
- data/install.rb +96 -0
- data/lib/rote/app.rb +112 -0
- data/lib/rote/dirfilelist.rb +42 -0
- data/lib/rote/page.rb +184 -0
- data/lib/rote/rotetasks.rb +122 -0
- data/lib/rote.rb +86 -0
- data/test/pages/COMMON.rb +1 -0
- data/test/pages/badlayout.rb +1 -0
- data/test/pages/samedir.rb +1 -0
- data/test/pages/textile.rb +1 -0
- data/test/pages/withcode.rb +5 -0
- data/test/test_page.rb +137 -0
- metadata +94 -0
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
|
4
|
+
require 'rote/page'
|
5
|
+
require 'rote/dirfilelist'
|
6
|
+
|
7
|
+
module Rote
|
8
|
+
|
9
|
+
#####
|
10
|
+
## Rake task library that provides a set of tasks to transform documentation
|
11
|
+
## using Rote. To use, create a new instance of this class in your Rakefile,
|
12
|
+
## performing appropriate configuration in a block supplied to +new+.
|
13
|
+
## This will automatically register a set of tasks with names based on the
|
14
|
+
## name you supply. The tasks defined are:
|
15
|
+
##
|
16
|
+
## #{name} - Transform all documentation, copy resources.
|
17
|
+
## #{name}-pages - Transform all pages
|
18
|
+
## #{name}-res - Copy resources
|
19
|
+
##
|
20
|
+
class DocTask < Rake::TaskLib
|
21
|
+
# Default exclusion patterns for the page sources. These are
|
22
|
+
# applied along with the defaults from +FileList+.
|
23
|
+
DEFAULT_SRC_EXCLUDES = [ /\.rb$/ ]
|
24
|
+
|
25
|
+
# The base-name for tasks created by this instance, supplied at
|
26
|
+
# instantiation.
|
27
|
+
attr_reader :name
|
28
|
+
|
29
|
+
# The directory in which output will be placed.
|
30
|
+
attr_accessor :output_dir
|
31
|
+
|
32
|
+
# The base directory within which layouts requested by pages will be
|
33
|
+
# resolved.
|
34
|
+
attr_accessor :layout_dir
|
35
|
+
|
36
|
+
# A DirectoryFileList that supplies the pages to transform. You should
|
37
|
+
# configure the +dir+ and at least one +include+ entry in the
|
38
|
+
# configuration block.
|
39
|
+
attr_reader :pages
|
40
|
+
|
41
|
+
# A DirectoryFileList that supplies the resources to copy to the
|
42
|
+
# output directory.
|
43
|
+
attr_reader :res
|
44
|
+
|
45
|
+
# If +show_page_tasks+ is +true+, then the file tasks created for each
|
46
|
+
# source page will be shown in the Rake task listing from the command line.
|
47
|
+
attr_accessor :show_page_tasks
|
48
|
+
alias :show_page_tasks? :show_page_tasks
|
49
|
+
|
50
|
+
# Create a new DocTask, using the supplied block for configuration,
|
51
|
+
# and define tasks with the specified base-name within Rake.
|
52
|
+
def initialize(name = :site) # :yield: self if block_given?
|
53
|
+
@name = name
|
54
|
+
@output_dir = '.'
|
55
|
+
@layout_dir = '.' # layouts are looked up as needed
|
56
|
+
|
57
|
+
@pages = DirectoryFileList.new
|
58
|
+
@res = DirectoryFileList.new
|
59
|
+
DEFAULT_SRC_EXCLUDES.each { |excl| @pages.exclude(excl) }
|
60
|
+
|
61
|
+
@show_page_tasks = false
|
62
|
+
|
63
|
+
yield self if block_given?
|
64
|
+
|
65
|
+
define
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def define
|
71
|
+
define_res_tasks
|
72
|
+
define_page_tasks
|
73
|
+
define_main_tasks
|
74
|
+
nil
|
75
|
+
end
|
76
|
+
|
77
|
+
def define_res_tasks
|
78
|
+
desc "Copy documentation resources"
|
79
|
+
task "#{name}-res" do
|
80
|
+
res.each { |fn|
|
81
|
+
unless File.directory?(fn) # make dirs only as needed
|
82
|
+
tfn = fn.sub(/#{res.dir}/, output_dir)
|
83
|
+
dn = File.dirname(tfn)
|
84
|
+
mkdir_p dn unless File.exists?(dn)
|
85
|
+
cp fn, tfn
|
86
|
+
end
|
87
|
+
}
|
88
|
+
end #task
|
89
|
+
end
|
90
|
+
|
91
|
+
def define_page_tasks
|
92
|
+
|
93
|
+
# define a task for each page
|
94
|
+
pages.each { |fn|
|
95
|
+
unless File.directory?(fn) # make dirs only as needed
|
96
|
+
tfn = fn.sub(/#{pages.dir}/, output_dir)
|
97
|
+
|
98
|
+
desc "#{fn} => #{tfn}" if show_page_tasks?
|
99
|
+
file tfn => [fn] do
|
100
|
+
dn = File.dirname(tfn)
|
101
|
+
mkdir_p dn unless File.exists?(dn)
|
102
|
+
File.open(tfn, 'w+') { |f|
|
103
|
+
puts "tr #{fn} => #{tfn}"
|
104
|
+
f << Page.new(fn,layout_dir).render
|
105
|
+
}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
}
|
109
|
+
|
110
|
+
# this is pretty convenient ;]
|
111
|
+
desc "Render all documentation pages"
|
112
|
+
task "#{name}-pages" => pages.sub(/#{pages.dir}/, output_dir)
|
113
|
+
end
|
114
|
+
|
115
|
+
def define_main_tasks
|
116
|
+
desc "Build the documentation"
|
117
|
+
task name => ["#{name}-pages", "#{name}-res"]
|
118
|
+
end
|
119
|
+
|
120
|
+
end #class
|
121
|
+
|
122
|
+
end #module
|
data/lib/rote.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# rote.rb - main Rote module
|
2
|
+
# Copyright (c) 2005 Ross Bamford (and contributors)
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
5
|
+
# this software and associated documentation files (the "Software"), to deal in
|
6
|
+
# the Software without restriction, including without limitation the rights to
|
7
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
8
|
+
# of the Software, and to permit persons to whom the Software is furnished to do
|
9
|
+
# so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
12
|
+
# copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
20
|
+
# SOFTWARE.
|
21
|
+
#
|
22
|
+
# See Rote for full documentation
|
23
|
+
|
24
|
+
require 'net/ftp'
|
25
|
+
require 'rubygems'
|
26
|
+
require_gem 'rake'
|
27
|
+
|
28
|
+
require 'rote/rotetasks'
|
29
|
+
|
30
|
+
# Master Rote version. Manage this from the Rake release support.
|
31
|
+
ROTEVERSION = '0.1.0'
|
32
|
+
|
33
|
+
#####
|
34
|
+
## *Rote* is a Rake (http://rake.rubyforge.org) based build tool for page-based
|
35
|
+
## static websites that enables layout, textile formatting, and ERB to be used
|
36
|
+
## to automatically generate your site, and can handle uploading the site
|
37
|
+
## to your (host's) server.
|
38
|
+
##
|
39
|
+
## Rote was created for my personal site, but is general enough to be applied
|
40
|
+
## to many different types of website, including basic blog-plus sites,
|
41
|
+
## slower-moving news and information sites, and software documentation.
|
42
|
+
##
|
43
|
+
## See +README+ for general usage information. +Rote::DocTask+ documents the
|
44
|
+
## Rake task integration, while +Rote::Page+ has information useful to template
|
45
|
+
## writers.
|
46
|
+
##
|
47
|
+
## Rote is (c)2005 Ross Bamford, and is licensed under an MIT license.
|
48
|
+
## See +LICENSE+ for details.
|
49
|
+
module Rote
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
####################################################
|
54
|
+
## WILL BE REMOVED... ##
|
55
|
+
## ...I SAID, "WILL BE REMOVED" ##
|
56
|
+
####################################################
|
57
|
+
|
58
|
+
def ftp_putdir(dir, ftp_host, ftp_user, ftp_pass = nil, ftp_root = '/')
|
59
|
+
f = Net::FTP.new(ftp_host, ftp_user, ftp_pass)
|
60
|
+
f.passive = true
|
61
|
+
|
62
|
+
Dir[dir + '/**/*'].sort.each { |fn|
|
63
|
+
# pretty f*cking trick - it's replacing the local 'target' or whatever prefix
|
64
|
+
# with remote root ;)
|
65
|
+
rfn = fn.dup
|
66
|
+
rfn[dir] = ftp_root
|
67
|
+
|
68
|
+
if File.directory?(fn)
|
69
|
+
puts "Creating remote directory #{rfn}"
|
70
|
+
begin
|
71
|
+
f.mkdir(rfn)
|
72
|
+
rescue
|
73
|
+
# forget it then, already exists prob'ly
|
74
|
+
# TODO maybe should raise if $! != FTP 550?
|
75
|
+
end
|
76
|
+
else
|
77
|
+
|
78
|
+
# TODO continue on error perhaps
|
79
|
+
puts "Uploading #{fn} => #{rfn}"
|
80
|
+
f.put(fn,rfn)
|
81
|
+
end
|
82
|
+
}
|
83
|
+
|
84
|
+
f.close
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
@global = 'some other text'
|
@@ -0,0 +1 @@
|
|
1
|
+
layout 'nonexistent'
|
@@ -0,0 +1 @@
|
|
1
|
+
layout 'baselayout'
|
@@ -0,0 +1 @@
|
|
1
|
+
format_opts << :textile
|
data/test/test_page.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rote/page'
|
3
|
+
|
4
|
+
module Rote
|
5
|
+
class TestPage < Test::Unit::TestCase
|
6
|
+
############## helpers #################
|
7
|
+
def new_test_page(basename)
|
8
|
+
Page.new('test/pages/' + basename + '.txt', 'test/layouts')
|
9
|
+
end
|
10
|
+
|
11
|
+
############## initialize #################
|
12
|
+
def test_initialize_with_bad_file
|
13
|
+
begin
|
14
|
+
new_test_page('NONEXISTENT')
|
15
|
+
rescue
|
16
|
+
assert true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_initialize_with_bad_layout
|
21
|
+
begin
|
22
|
+
p = new_test_page('badlayout')
|
23
|
+
rescue
|
24
|
+
assert true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_initialize_ok
|
29
|
+
new_test_page('justtext')
|
30
|
+
end
|
31
|
+
|
32
|
+
############## accessors #################
|
33
|
+
def test_template_accessors
|
34
|
+
p = new_test_page('justtext')
|
35
|
+
assert_equal 'Just some text', p.template_text.chomp
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_layout_accessors
|
39
|
+
p = new_test_page('justtext')
|
40
|
+
assert_nil p.layout_text
|
41
|
+
|
42
|
+
p = new_test_page('withcode')
|
43
|
+
assert_equal 'layout <%= @content_for_layout %> for a change.', p.layout_text.chomp
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_default_layout_params
|
47
|
+
p = Page.new('test/pages/samedir.txt')
|
48
|
+
assert_equal '<%= @global %>', p.template_text.chomp
|
49
|
+
assert_equal 'Lay <%= @content_for_layout %> out.', p.layout_text.chomp
|
50
|
+
end
|
51
|
+
|
52
|
+
# this is testing also that layouts can be specified in the template itself
|
53
|
+
def test_custom_layout_ext
|
54
|
+
p = new_test_page('custext')
|
55
|
+
|
56
|
+
# Should have no layout yet (until render)
|
57
|
+
assert_nil p.layout_text
|
58
|
+
|
59
|
+
# Render will load layout, it'll be available after
|
60
|
+
assert_equal "layout \nsome other text for a change.", p.render.chomp
|
61
|
+
|
62
|
+
assert_equal 'layout <%= @content_for_layout %> for a change.', p.layout_text.chomp
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_format_opts
|
66
|
+
p = new_test_page('justtext')
|
67
|
+
assert p.format_opts.empty?
|
68
|
+
|
69
|
+
# alter array
|
70
|
+
p = new_test_page('textile')
|
71
|
+
assert_equal [:textile], p.format_opts
|
72
|
+
p.format_opts -= [:textile]
|
73
|
+
assert p.format_opts.empty?
|
74
|
+
|
75
|
+
# replace array with single sym
|
76
|
+
p = new_test_page('textile')
|
77
|
+
assert_equal [:textile], p.format_opts
|
78
|
+
p.format_opts = [:markdown]
|
79
|
+
assert_equal [:markdown], p.format_opts
|
80
|
+
p.format_opts = :textile
|
81
|
+
# should create array for one sim
|
82
|
+
assert_equal [:textile], p.format_opts
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
############## render #################
|
87
|
+
def test_render_text
|
88
|
+
t = new_test_page('justtext').render.chomp
|
89
|
+
assert_equal 'Just some text', t
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_render_textile
|
93
|
+
t = new_test_page('textile').render.chomp
|
94
|
+
assert_equal '<p><strong>This</strong> is a <em>simple</em> test of <a href="http://www.textism.org/tools/textile">Textile</a> formatting.</p>', t
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_render_markdown
|
98
|
+
t = new_test_page('markdown').render.chomp
|
99
|
+
assert_equal '<h1>*this* is a _test_</h1>', t
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_render_layout_code
|
103
|
+
t = new_test_page('withcode').render.chomp
|
104
|
+
assert_equal 'layout some text and some other text for a change.', t
|
105
|
+
end
|
106
|
+
|
107
|
+
############## broken render #################
|
108
|
+
def test_render_switch_layout_freeze
|
109
|
+
p = new_test_page('withcode')
|
110
|
+
assert_equal 'layout <%= @content_for_layout %> for a change.', p.layout_text.chomp
|
111
|
+
|
112
|
+
p.layout(nil)
|
113
|
+
assert_nil p.layout_text
|
114
|
+
|
115
|
+
assert_equal 'some text and some other text', p.render.chomp
|
116
|
+
|
117
|
+
begin
|
118
|
+
p.layout('simple')
|
119
|
+
rescue TypeError # frozen
|
120
|
+
assert true
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_render_switch_to_bad_layout
|
125
|
+
p = new_test_page('withcode')
|
126
|
+
assert_equal 'layout <%= @content_for_layout %> for a change.', p.layout_text.chomp
|
127
|
+
|
128
|
+
begin
|
129
|
+
p.layout('nonexistent')
|
130
|
+
rescue
|
131
|
+
assert true
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
!ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: rote
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2005-11-25 00:00:00 +00:00
|
8
|
+
summary: Adds template-based doc support to Rake.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: ross@roscopeco.co.uk
|
12
|
+
homepage: http://rote.rubyforge.org
|
13
|
+
rubyforge_project: rote
|
14
|
+
description: Rote is a set of Rake task libraries and utilities that enable easy rendering of textual documentation formats (like HTML) for websites and offline documentation.
|
15
|
+
autorequire:
|
16
|
+
default_executable: rote
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Ross Bamford
|
30
|
+
files:
|
31
|
+
- install.rb
|
32
|
+
- Rakefile
|
33
|
+
- README
|
34
|
+
- TODO
|
35
|
+
- LICENSE
|
36
|
+
- bin/rote
|
37
|
+
- lib/rote.rb
|
38
|
+
- lib/rote/rotetasks.rb
|
39
|
+
- lib/rote/page.rb
|
40
|
+
- lib/rote/app.rb
|
41
|
+
- lib/rote/dirfilelist.rb
|
42
|
+
- test/test_page.rb
|
43
|
+
- test/pages/badlayout.rb
|
44
|
+
- test/pages/samedir.rb
|
45
|
+
- test/pages/COMMON.rb
|
46
|
+
- test/pages/textile.rb
|
47
|
+
- test/pages/withcode.rb
|
48
|
+
- doc/res
|
49
|
+
- doc/jamis.rb
|
50
|
+
- doc/pages
|
51
|
+
- doc/layouts
|
52
|
+
- doc/res/images
|
53
|
+
- doc/res/stylesheets
|
54
|
+
- doc/res/images/rote-big.png
|
55
|
+
- doc/res/images/rote-small.png
|
56
|
+
- doc/res/images/rpot-tiny.png
|
57
|
+
- doc/res/images/user-id-med.png
|
58
|
+
- doc/res/images/document-new-med.png
|
59
|
+
- doc/res/images/computer-med.png
|
60
|
+
- doc/res/images/go-home-med.png
|
61
|
+
- doc/res/images/rpot-sml.png
|
62
|
+
- doc/res/images/rote-med.png
|
63
|
+
- doc/res/images/rpot-large-x.xcf
|
64
|
+
- doc/res/images/rote-logo.xcf
|
65
|
+
- doc/res/images/dialog-information-med.png
|
66
|
+
- doc/res/images/rpot-large.xcf
|
67
|
+
- doc/res/images/rpot-big.png
|
68
|
+
- doc/res/stylesheets/normal.css
|
69
|
+
- doc/pages/COMMON.rb
|
70
|
+
- doc/pages/index.html
|
71
|
+
- doc/pages/index.rb
|
72
|
+
- doc/layouts/page.html
|
73
|
+
test_files: []
|
74
|
+
|
75
|
+
rdoc_options:
|
76
|
+
- --title
|
77
|
+
- Rote -- Template-based doc support for Rake
|
78
|
+
- --main
|
79
|
+
- README
|
80
|
+
- --line-numbers
|
81
|
+
- -o
|
82
|
+
- html/rdoc
|
83
|
+
extra_rdoc_files:
|
84
|
+
- README
|
85
|
+
- LICENSE
|
86
|
+
- TODO
|
87
|
+
executables:
|
88
|
+
- rote
|
89
|
+
extensions: []
|
90
|
+
|
91
|
+
requirements: []
|
92
|
+
|
93
|
+
dependencies: []
|
94
|
+
|