webby 0.7.4 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +19 -0
- data/Manifest.txt +19 -6
- data/README.txt +21 -5
- data/Rakefile +2 -3
- data/data/Rakefile +1 -1
- data/data/lib/breadcrumbs.rb +28 -0
- data/data/tasks/create.rake +0 -1
- data/data/tasks/deploy.rake +0 -1
- data/data/tasks/growl.rake +0 -1
- data/data/tasks/heel.rake +2 -3
- data/data/tasks/setup.rb +0 -1
- data/data/templates/_partial.erb +10 -0
- data/data/templates/atom_feed.erb +34 -0
- data/examples/webby/content/manual/index.txt +11 -13
- data/examples/webby/content/tutorial/index.txt +1 -1
- data/examples/webby/tasks/heel.rake +2 -2
- data/examples/webby/tasks/setup.rb +6 -1
- data/lib/webby.rb +50 -23
- data/lib/webby/auto_builder.rb +4 -2
- data/lib/webby/builder.rb +6 -5
- data/lib/webby/filters.rb +6 -7
- data/lib/webby/filters/outline.rb +4 -2
- data/lib/webby/filters/tidy.rb +4 -2
- data/lib/webby/helpers.rb +32 -0
- data/lib/webby/helpers/coderay_helper.rb +78 -0
- data/lib/webby/helpers/graphviz_helper.rb +158 -0
- data/lib/webby/helpers/tag_helper.rb +9 -4
- data/lib/webby/helpers/tex_img_helper.rb +181 -0
- data/lib/webby/helpers/url_helper.rb +12 -11
- data/lib/webby/renderer.rb +97 -18
- data/lib/webby/resources.rb +82 -0
- data/lib/webby/{pages_db.rb → resources/db.rb} +63 -33
- data/lib/webby/{file.rb → resources/file.rb} +27 -24
- data/lib/webby/resources/layout.rb +65 -0
- data/lib/webby/resources/page.rb +109 -0
- data/lib/webby/resources/partial.rb +81 -0
- data/lib/webby/resources/resource.rb +145 -0
- data/lib/webby/resources/static.rb +54 -0
- data/lib/webby/stelan/mktemp.rb +137 -0
- data/lib/webby/stelan/spawner.rb +5 -1
- data/lib/webby/utils.rb +3 -1
- data/lib/webby/webby_task.rb +43 -24
- data/spec/spec_helper.rb +12 -1
- data/spec/webby/{file_spec.rb → resources/file_spec.rb} +21 -22
- data/tasks/ann.rake +76 -0
- data/tasks/annotations.rake +6 -14
- data/tasks/bones.rake +40 -0
- data/tasks/doc.rake +1 -2
- data/tasks/gem.rake +29 -2
- data/tasks/manifest.rake +15 -21
- data/tasks/post_load.rake +22 -8
- data/tasks/setup.rb +53 -15
- data/tasks/spec.rake +13 -0
- metadata +22 -9
- data/lib/webby/filters/coderay.rb +0 -98
- data/lib/webby/filters/graphviz.rb +0 -189
- data/lib/webby/resource.rb +0 -293
data/lib/webby/resource.rb
DELETED
@@ -1,293 +0,0 @@
|
|
1
|
-
# $Id: resource.rb 102 2008-01-19 23:13:55Z tim_pease $
|
2
|
-
|
3
|
-
module Webby
|
4
|
-
|
5
|
-
# A Webby::Resource is any file that can be found in the content directory
|
6
|
-
# or in the layout directory. This class contains information about the
|
7
|
-
# resources available to Webby. This information includes the resource
|
8
|
-
# type (static, page, layout), if the resource is dirty (it needs to be
|
9
|
-
# rendered), the output location of the rendered resource, etc.
|
10
|
-
#
|
11
|
-
# A resource is a "layout" if the resource is found in the layout
|
12
|
-
# directory. Static and page resources are found in the content directory.
|
13
|
-
#
|
14
|
-
# A resource is considered static only if it *does not* contain a YAML
|
15
|
-
# meta-data header at the top of the file. These resources will be copied
|
16
|
-
# as-is from the content directory to the output directory.
|
17
|
-
#
|
18
|
-
# If a resouce does have meta-data, then it will be processed (i.e.
|
19
|
-
# rendered/filtered) by Webby, and the rendered results will be written to
|
20
|
-
# the output directory.
|
21
|
-
#
|
22
|
-
class Resource
|
23
|
-
|
24
|
-
instance_methods.each do |m|
|
25
|
-
undef_method(m) unless m =~ %r/\A__/ ||
|
26
|
-
m == 'class'
|
27
|
-
end
|
28
|
-
|
29
|
-
class << self
|
30
|
-
# Returns the pages hash object.
|
31
|
-
def pages
|
32
|
-
@pages ||= PagesDB.new
|
33
|
-
end
|
34
|
-
|
35
|
-
# Returns the layouts hash object.
|
36
|
-
def layouts
|
37
|
-
@layouts ||= PagesDB.new
|
38
|
-
end
|
39
|
-
|
40
|
-
# Clear the contents of the +layouts+ and the +pages+ hash objects.
|
41
|
-
def clear
|
42
|
-
self.pages.clear
|
43
|
-
self.layouts.clear
|
44
|
-
end
|
45
|
-
end # class << self
|
46
|
-
|
47
|
-
# The full path to the resource file
|
48
|
-
attr_reader :path
|
49
|
-
|
50
|
-
# The directory of the resource excluding the content directory
|
51
|
-
attr_reader :dir
|
52
|
-
|
53
|
-
# The resource filename excluding path and extension
|
54
|
-
attr_reader :filename
|
55
|
-
|
56
|
-
# Extesion of the resource file
|
57
|
-
attr_reader :ext
|
58
|
-
|
59
|
-
# Resource file modification time
|
60
|
-
attr_reader :mtime
|
61
|
-
|
62
|
-
# Resource page number (if needed)
|
63
|
-
attr_reader :number
|
64
|
-
|
65
|
-
# call-seq:
|
66
|
-
# Resource.new( filename ) => resource
|
67
|
-
#
|
68
|
-
# Creates a new resource object given the _filename_.
|
69
|
-
#
|
70
|
-
def initialize( fn )
|
71
|
-
@path = fn.sub(%r/\A(?:\.\/|\/)/o, '').freeze
|
72
|
-
@dir = Webby::File.dirname(@path)
|
73
|
-
@filename = Webby::File.basename(@path)
|
74
|
-
@ext = Webby::File.extname(@path)
|
75
|
-
@mtime = ::File.mtime @path
|
76
|
-
|
77
|
-
@number = nil
|
78
|
-
@rendering = false
|
79
|
-
|
80
|
-
# deal with the meta-data
|
81
|
-
@mdata = ::Webby::File.meta_data(@path)
|
82
|
-
@have_mdata = !@mdata.nil?
|
83
|
-
|
84
|
-
@mdata ||= {}
|
85
|
-
@mdata = ::Webby.site.page_defaults.merge(@mdata) if is_page?
|
86
|
-
@mdata.sanitize!
|
87
|
-
|
88
|
-
self.class.pages << self if is_page? or is_static?
|
89
|
-
self.class.layouts << self if is_layout?
|
90
|
-
end
|
91
|
-
|
92
|
-
# call-seq:
|
93
|
-
# equal?( other ) => true or false
|
94
|
-
#
|
95
|
-
# Returns +true+ if the path of this resource is equivalent to the path of
|
96
|
-
# the _other_ resource. Returns +false+ if this is not the case.
|
97
|
-
#
|
98
|
-
def equal?( other )
|
99
|
-
return false unless self.class == other.class
|
100
|
-
@path == other.path
|
101
|
-
end
|
102
|
-
alias :== :equal?
|
103
|
-
alias :eql? :equal?
|
104
|
-
|
105
|
-
# call-seq:
|
106
|
-
# resource <=> other => -1, 0, +1, or nil
|
107
|
-
#
|
108
|
-
# Resource comparison operates on the full path of the resource objects
|
109
|
-
# and uses the standard String comparison operator. Returns +nil+ if
|
110
|
-
# _other_ is not a Resource instance.
|
111
|
-
#
|
112
|
-
def <=>( other )
|
113
|
-
return unless self.class == other.class
|
114
|
-
@path <=> other.path
|
115
|
-
end
|
116
|
-
|
117
|
-
# call-seq:
|
118
|
-
# extension => string
|
119
|
-
#
|
120
|
-
# Returns the extension that will be appended to the output destination
|
121
|
-
# filename. The extension is determined by looking at the following:
|
122
|
-
#
|
123
|
-
# * this resource's meta-data for an 'extension' property
|
124
|
-
# * the meta-data of this resource's layout for an 'extension' property
|
125
|
-
# * the extension of this resource file
|
126
|
-
#
|
127
|
-
def extension
|
128
|
-
return @mdata['extension'] if @mdata.has_key? 'extension'
|
129
|
-
|
130
|
-
if @mdata.has_key? 'layout'
|
131
|
-
lyt = self.class.layouts.find :filename => @mdata['layout']
|
132
|
-
ext = lyt ? lyt.extension : nil
|
133
|
-
return ext if ext
|
134
|
-
end
|
135
|
-
|
136
|
-
return (is_layout? ? nil : @ext)
|
137
|
-
end
|
138
|
-
|
139
|
-
# call-seq:
|
140
|
-
# destination => string
|
141
|
-
#
|
142
|
-
# Returns the path in the output directory where the results of rendering
|
143
|
-
# this resource should be stored. This path is used to determine if the
|
144
|
-
# resource is dirty and in need of rendering.
|
145
|
-
#
|
146
|
-
# The destination for any resource can be overridden by explicitly setting
|
147
|
-
# the 'destination' property in the resource's meta-data.
|
148
|
-
#
|
149
|
-
def destination
|
150
|
-
return @dest if defined? @dest and @dest
|
151
|
-
return @dest = ::Webby.cairn if is_layout?
|
152
|
-
|
153
|
-
@dest = if @mdata.has_key? 'destination' then @mdata['destination']
|
154
|
-
else ::File.join(dir, filename) end
|
155
|
-
|
156
|
-
@dest = ::File.join(::Webby.site.output_dir, @dest)
|
157
|
-
@dest << @number.to_s if @number
|
158
|
-
|
159
|
-
ext = extension
|
160
|
-
unless ext.nil? or ext.empty?
|
161
|
-
@dest << '.'
|
162
|
-
@dest << ext
|
163
|
-
end
|
164
|
-
@dest
|
165
|
-
end
|
166
|
-
|
167
|
-
# call-seq
|
168
|
-
# url => string or nil
|
169
|
-
#
|
170
|
-
# Returns a string suitable for use as a URL linking to this page. Nil
|
171
|
-
# is returned for layouts.
|
172
|
-
#
|
173
|
-
def url
|
174
|
-
return nil if is_layout?
|
175
|
-
return @url if defined? @url and @url
|
176
|
-
|
177
|
-
@url = destination.sub(::Webby.site.output_dir, '')
|
178
|
-
@url = File.dirname(@url) if filename == 'index'
|
179
|
-
@url
|
180
|
-
end
|
181
|
-
|
182
|
-
# call-seq:
|
183
|
-
# resource.number = Integer
|
184
|
-
#
|
185
|
-
# Sets the page number for the current resource to the given integer. This
|
186
|
-
# number is used to modify the output destination for resources that
|
187
|
-
# require pagination.
|
188
|
-
#
|
189
|
-
def number=( num )
|
190
|
-
@number = num
|
191
|
-
@dest = nil
|
192
|
-
end
|
193
|
-
|
194
|
-
# call-seq:
|
195
|
-
# render => string
|
196
|
-
#
|
197
|
-
# Creates a new Webby::Renderer instance and uses that instance to render
|
198
|
-
# the resource contents using the configured filter(s). The filter(s) to
|
199
|
-
# use is defined in the resource's meta-data as the 'filter' key.
|
200
|
-
#
|
201
|
-
# Note, this only renders this resource. The returned string does not
|
202
|
-
# include any layout rendering.
|
203
|
-
#
|
204
|
-
def render( renderer = nil )
|
205
|
-
raise Error, "page '#@path' is in a rendering loop" if @rendering
|
206
|
-
|
207
|
-
@rendering = true
|
208
|
-
renderer ||= Renderer.new(self)
|
209
|
-
content = renderer.render_page
|
210
|
-
@rendering = false
|
211
|
-
|
212
|
-
return content
|
213
|
-
|
214
|
-
rescue
|
215
|
-
@rendering = false
|
216
|
-
raise
|
217
|
-
end
|
218
|
-
|
219
|
-
# call-seq:
|
220
|
-
# is_layout? => true or false
|
221
|
-
#
|
222
|
-
# Returns +true+ if this resource is a layout.
|
223
|
-
#
|
224
|
-
def is_layout?
|
225
|
-
@is_layout ||=
|
226
|
-
!(%r/\A(?:\.\/|\/)?#{::Webby.site.layout_dir}\//o =~ @path).nil?
|
227
|
-
end
|
228
|
-
|
229
|
-
# call-seq:
|
230
|
-
# is_static? => true or false
|
231
|
-
#
|
232
|
-
# Returns +true+ if this resource is a static file.
|
233
|
-
#
|
234
|
-
def is_static?
|
235
|
-
!@have_mdata
|
236
|
-
end
|
237
|
-
|
238
|
-
# call-seq:
|
239
|
-
# is_page? => true or false
|
240
|
-
#
|
241
|
-
# Returns +true+ if this resource is a page suitable for rendering.
|
242
|
-
#
|
243
|
-
def is_page?
|
244
|
-
@have_mdata and !is_layout?
|
245
|
-
end
|
246
|
-
|
247
|
-
# call-seq:
|
248
|
-
# dirty? => true or false
|
249
|
-
#
|
250
|
-
# Returns +true+ if this resource is newer than its corresponding output
|
251
|
-
# product. The resource needs to be rendered (if a page or layout) or
|
252
|
-
# copied (if a static file) to the output directory.
|
253
|
-
#
|
254
|
-
def dirty?
|
255
|
-
return @mdata['dirty'] if @mdata.has_key? 'dirty'
|
256
|
-
|
257
|
-
# if the destination file does not exist, then we are dirty
|
258
|
-
return true unless test ?e, destination
|
259
|
-
|
260
|
-
# if this file's mtime is larger than the destination file's
|
261
|
-
# mtime, then we are dirty
|
262
|
-
dirty = @mtime > ::File.mtime(destination)
|
263
|
-
return dirty if is_static? or dirty
|
264
|
-
|
265
|
-
# check to see if the layout is dirty, and it it is then we
|
266
|
-
# are dirty, too
|
267
|
-
if @mdata.has_key? 'layout'
|
268
|
-
lyt = self.class.layouts.find :filename => @mdata['layout']
|
269
|
-
unless lyt.nil?
|
270
|
-
return true if lyt.dirty?
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
# if we got here, then we are not dirty
|
275
|
-
false
|
276
|
-
end
|
277
|
-
|
278
|
-
# call-seq:
|
279
|
-
# method_missing( symbol [, *args, &block] ) => result
|
280
|
-
#
|
281
|
-
# Invoked by Ruby when a message is sent to the resource that it cannot
|
282
|
-
# handle. The default behavior is to convert _symbol_ to a string and
|
283
|
-
# search for that string in the resource's meta-data. If found, the
|
284
|
-
# meta-data item is returned; otherwise, +nil+ is returned.
|
285
|
-
#
|
286
|
-
def method_missing( name, *a, &b )
|
287
|
-
@mdata[name.to_s]
|
288
|
-
end
|
289
|
-
|
290
|
-
end # class Resource
|
291
|
-
end # module Webby
|
292
|
-
|
293
|
-
# EOF
|