webby 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +11 -0
- data/Manifest.txt +45 -2
- data/Rakefile +1 -2
- data/examples/webby/content/css/site.css +1 -1
- data/examples/webby/content/learn/index.txt +1 -1
- data/examples/webby/content/release-notes/index.txt +21 -0
- data/examples/webby/content/release-notes/rel-0-9-0/index.txt +1 -0
- data/examples/webby/content/release-notes/rel-0-9-1/index.txt +93 -0
- data/examples/webby/content/tips_and_tricks/index.txt +14 -13
- data/examples/webby/content/tutorial/index.txt +13 -9
- data/examples/webby/content/user-manual/index.txt +8 -8
- data/examples/webby/layouts/default.txt +1 -1
- data/lib/webby.rb +2 -1
- data/lib/webby/apps/main.rb +25 -13
- data/lib/webby/auto_builder.rb +2 -0
- data/lib/webby/builder.rb +2 -5
- data/lib/webby/filters.rb +5 -13
- data/lib/webby/renderer.rb +7 -5
- data/lib/webby/resources.rb +54 -14
- data/lib/webby/resources/db.rb +4 -4
- data/lib/webby/resources/layout.rb +14 -23
- data/lib/webby/resources/meta_file.rb +208 -0
- data/lib/webby/resources/page.rb +21 -58
- data/lib/webby/resources/partial.rb +10 -4
- data/lib/webby/resources/resource.rb +68 -27
- data/lib/webby/resources/static.rb +6 -22
- data/lib/webby/stelan/paginator.rb +17 -2
- data/spec/data/Sitefile +9 -0
- data/spec/data/content/_partial.txt +10 -0
- data/spec/data/content/css/coderay.css +111 -0
- data/spec/data/content/css/site.css +67 -0
- data/spec/data/content/css/tumblog.css +308 -0
- data/spec/data/content/images/tumblog/permalink.gif +0 -0
- data/spec/data/content/images/tumblog/rss.gif +0 -0
- data/spec/data/content/index.txt +19 -0
- data/spec/data/content/photos.txt +21 -0
- data/spec/data/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
- data/spec/data/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
- data/spec/data/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
- data/spec/data/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
- data/spec/data/content/tumblog/200807/up-a-tree/index.txt +13 -0
- data/spec/data/content/tumblog/index.txt +37 -0
- data/spec/data/content/tumblog/rss.txt +37 -0
- data/spec/data/hooligans/bad_meta_data_1.txt +34 -0
- data/spec/data/hooligans/bad_meta_data_2.txt +34 -0
- data/spec/data/layouts/default.txt +58 -0
- data/spec/data/layouts/tumblog/default.txt +44 -0
- data/spec/data/layouts/tumblog/post.txt +15 -0
- data/spec/data/lib/breadcrumbs.rb +28 -0
- data/spec/data/lib/tumblog_helper.rb +32 -0
- data/spec/data/tasks/tumblog.rake +30 -0
- data/spec/data/templates/_partial.erb +10 -0
- data/spec/data/templates/atom_feed.erb +40 -0
- data/spec/data/templates/page.erb +18 -0
- data/spec/data/templates/presentation.erb +40 -0
- data/spec/data/templates/tumblog/conversation.erb +12 -0
- data/spec/data/templates/tumblog/link.erb +10 -0
- data/spec/data/templates/tumblog/photo.erb +13 -0
- data/spec/data/templates/tumblog/post.erb +12 -0
- data/spec/data/templates/tumblog/quote.erb +11 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/webby/apps/generator_spec.rb +4 -0
- data/spec/webby/apps/main_spec.rb +16 -3
- data/spec/webby/filters/textile_spec.rb +20 -0
- data/spec/webby/renderer_spec.rb +139 -0
- data/spec/webby/resources/db_spec.rb +250 -0
- data/spec/webby/resources/layout_spec.rb +83 -0
- data/spec/webby/resources/meta_file_spec.rb +157 -0
- data/spec/webby/resources/page_spec.rb +111 -0
- data/spec/webby/resources/partial_spec.rb +58 -0
- data/spec/webby/resources/resource_spec.rb +214 -0
- data/spec/webby/resources/static_spec.rb +49 -0
- data/spec/webby/resources_spec.rb +55 -3
- metadata +64 -6
- data/lib/webby/resources/file.rb +0 -221
- data/spec/webby/resources/file_spec.rb +0 -104
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
require File.expand_path(
|
3
|
+
File.join(File.dirname(__FILE__), %w[.. .. spec_helper]))
|
4
|
+
|
5
|
+
# -------------------------------------------------------------------------
|
6
|
+
describe Webby::Resources::Static do
|
7
|
+
before :all do
|
8
|
+
@filename = File.join %w[content css coderay.css]
|
9
|
+
@static = Webby::Resources::Static.new(@filename)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'contains no meta-data' do
|
13
|
+
@static._meta_data.should be_empty
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'uses the path remounted to the output directory as the destination' do
|
17
|
+
@static.destination.should == 'output/css/coderay.css'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'returns destination without the output directory as the url' do
|
21
|
+
@static.url.should == '/css/coderay.css'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'reads the contents of the file' do
|
25
|
+
str = @static._read
|
26
|
+
str.split($/).first.should == '.CodeRay {'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'uses the file extension as the extension' do
|
30
|
+
@static.extension.should equal(@static.ext)
|
31
|
+
end
|
32
|
+
|
33
|
+
# -----------------------------------------------------------------------
|
34
|
+
describe '.dirty?' do
|
35
|
+
it 'returns true if the output file is missing' do
|
36
|
+
@static.dirty?.should == true
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'returns false if the output file is present' do
|
40
|
+
dest = @static.destination
|
41
|
+
FileUtils.mkdir_p File.dirname(dest)
|
42
|
+
FileUtils.touch dest
|
43
|
+
@static.dirty?.should == false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end # describe Webby::Resources::Static
|
48
|
+
|
49
|
+
# EOF
|
@@ -1,9 +1,14 @@
|
|
1
1
|
|
2
2
|
|
3
|
-
require
|
3
|
+
require File.expand_path(
|
4
|
+
File.join(File.dirname(__FILE__), %w[.. spec_helper]))
|
4
5
|
|
5
|
-
#
|
6
|
+
# --------------------------------------------------------------------------
|
6
7
|
describe Webby::Resources do
|
8
|
+
before :each do
|
9
|
+
Webby::Resources.clear
|
10
|
+
end
|
11
|
+
|
7
12
|
it "should raise a useful error if there are no layouts" do
|
8
13
|
layouts = mock("Layouts")
|
9
14
|
Webby::Resources.stub!(:layouts).and_return(layouts)
|
@@ -12,6 +17,53 @@ describe Webby::Resources do
|
|
12
17
|
lambda do
|
13
18
|
Webby::Resources.find_layout("default")
|
14
19
|
end.should raise_error(Webby::Error, 'could not find layout "default"')
|
15
|
-
|
16
20
|
end
|
21
|
+
|
22
|
+
it "should return the directory name for a file" do
|
23
|
+
Webby::Resources.dirname('content').should == './'
|
24
|
+
Webby::Resources.dirname('layouts').should == './'
|
25
|
+
|
26
|
+
Webby::Resources.dirname('content/index.txt').should == ''
|
27
|
+
Webby::Resources.dirname('layouts/default.txt').should == ''
|
28
|
+
|
29
|
+
Webby::Resources.dirname('content/tumblog/index.txt').should == 'tumblog'
|
30
|
+
Webby::Resources.dirname('layouts/tumblog/post.txt').should == 'tumblog'
|
31
|
+
|
32
|
+
Webby::Resources.dirname('output/tumblog/index.html').should == 'output/tumblog'
|
33
|
+
Webby::Resources.dirname('templates/tumblog/post.erb').should == 'templates/tumblog'
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should normalize the path for a filename" do
|
37
|
+
Webby::Resources.path('content').should == 'content'
|
38
|
+
Webby::Resources.path('/content').should == 'content'
|
39
|
+
Webby::Resources.path('./content').should == 'content'
|
40
|
+
|
41
|
+
Webby::Resources.path('./').should == ''
|
42
|
+
Webby::Resources.path('/').should == ''
|
43
|
+
Webby::Resources.path('').should == ''
|
44
|
+
end
|
45
|
+
|
46
|
+
# ------------------------------------------------------------------------
|
47
|
+
describe "#new" do
|
48
|
+
before :each do
|
49
|
+
layout = Webby::Resources::Layout.
|
50
|
+
new(Webby.datapath %w[layouts default.txt])
|
51
|
+
Webby::Resources.stub!(:find_layout).and_return(layout)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "creates multiple pages for files with multiple YAML sections" do
|
55
|
+
pages = Webby::Resources.pages
|
56
|
+
|
57
|
+
fn = File.join %w[content photos.txt]
|
58
|
+
Webby::Resources.new(fn)
|
59
|
+
|
60
|
+
ary = pages.find(:all, :in_directory => 'photos')
|
61
|
+
ary.map {|page| page.title}.should == [
|
62
|
+
'First Photo', 'Second Photo', 'Third Photo'
|
63
|
+
]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
17
67
|
end
|
68
|
+
|
69
|
+
# EOF
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Pease
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-09-10 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.9.
|
53
|
+
version: 0.9.2
|
54
54
|
version:
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 0.8.
|
63
|
+
version: 0.8.2
|
64
64
|
version:
|
65
65
|
- !ruby/object:Gem::Dependency
|
66
66
|
name: rspec
|
@@ -90,6 +90,21 @@ extra_rdoc_files:
|
|
90
90
|
- lib/webby/tasks/growl.rake
|
91
91
|
- lib/webby/tasks/heel.rake
|
92
92
|
- lib/webby/tasks/validate.rake
|
93
|
+
- spec/data/content/_partial.txt
|
94
|
+
- spec/data/content/index.txt
|
95
|
+
- spec/data/content/photos.txt
|
96
|
+
- spec/data/content/tumblog/200806/the-noble-chicken/index.txt
|
97
|
+
- spec/data/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt
|
98
|
+
- spec/data/content/tumblog/200807/mad-city-chickens/index.txt
|
99
|
+
- spec/data/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt
|
100
|
+
- spec/data/content/tumblog/200807/up-a-tree/index.txt
|
101
|
+
- spec/data/content/tumblog/index.txt
|
102
|
+
- spec/data/content/tumblog/rss.txt
|
103
|
+
- spec/data/hooligans/bad_meta_data_1.txt
|
104
|
+
- spec/data/hooligans/bad_meta_data_2.txt
|
105
|
+
- spec/data/layouts/default.txt
|
106
|
+
- spec/data/layouts/tumblog/default.txt
|
107
|
+
- spec/data/layouts/tumblog/post.txt
|
93
108
|
files:
|
94
109
|
- History.txt
|
95
110
|
- Manifest.txt
|
@@ -153,7 +168,9 @@ files:
|
|
153
168
|
- examples/webby/content/index.txt
|
154
169
|
- examples/webby/content/learn/index.txt
|
155
170
|
- examples/webby/content/reference/index.txt
|
171
|
+
- examples/webby/content/release-notes/index.txt
|
156
172
|
- examples/webby/content/release-notes/rel-0-9-0/index.txt
|
173
|
+
- examples/webby/content/release-notes/rel-0-9-1/index.txt
|
157
174
|
- examples/webby/content/robots.txt
|
158
175
|
- examples/webby/content/script/jquery.corner.js
|
159
176
|
- examples/webby/content/script/jquery.js
|
@@ -227,8 +244,8 @@ files:
|
|
227
244
|
- lib/webby/renderer.rb
|
228
245
|
- lib/webby/resources.rb
|
229
246
|
- lib/webby/resources/db.rb
|
230
|
-
- lib/webby/resources/file.rb
|
231
247
|
- lib/webby/resources/layout.rb
|
248
|
+
- lib/webby/resources/meta_file.rb
|
232
249
|
- lib/webby/resources/page.rb
|
233
250
|
- lib/webby/resources/partial.rb
|
234
251
|
- lib/webby/resources/resource.rb
|
@@ -245,12 +262,53 @@ files:
|
|
245
262
|
- spec/core_ext/hash_spec.rb
|
246
263
|
- spec/core_ext/string_spec.rb
|
247
264
|
- spec/core_ext/time_spec.rb
|
265
|
+
- spec/data/Sitefile
|
266
|
+
- spec/data/content/_partial.txt
|
267
|
+
- spec/data/content/css/coderay.css
|
268
|
+
- spec/data/content/css/site.css
|
269
|
+
- spec/data/content/css/tumblog.css
|
270
|
+
- spec/data/content/images/tumblog/permalink.gif
|
271
|
+
- spec/data/content/images/tumblog/rss.gif
|
272
|
+
- spec/data/content/index.txt
|
273
|
+
- spec/data/content/photos.txt
|
274
|
+
- spec/data/content/tumblog/200806/the-noble-chicken/index.txt
|
275
|
+
- spec/data/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt
|
276
|
+
- spec/data/content/tumblog/200807/mad-city-chickens/index.txt
|
277
|
+
- spec/data/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt
|
278
|
+
- spec/data/content/tumblog/200807/up-a-tree/index.txt
|
279
|
+
- spec/data/content/tumblog/index.txt
|
280
|
+
- spec/data/content/tumblog/rss.txt
|
281
|
+
- spec/data/hooligans/bad_meta_data_1.txt
|
282
|
+
- spec/data/hooligans/bad_meta_data_2.txt
|
283
|
+
- spec/data/layouts/default.txt
|
284
|
+
- spec/data/layouts/tumblog/default.txt
|
285
|
+
- spec/data/layouts/tumblog/post.txt
|
286
|
+
- spec/data/lib/breadcrumbs.rb
|
287
|
+
- spec/data/lib/tumblog_helper.rb
|
288
|
+
- spec/data/tasks/tumblog.rake
|
289
|
+
- spec/data/templates/_partial.erb
|
290
|
+
- spec/data/templates/atom_feed.erb
|
291
|
+
- spec/data/templates/page.erb
|
292
|
+
- spec/data/templates/presentation.erb
|
293
|
+
- spec/data/templates/tumblog/conversation.erb
|
294
|
+
- spec/data/templates/tumblog/link.erb
|
295
|
+
- spec/data/templates/tumblog/photo.erb
|
296
|
+
- spec/data/templates/tumblog/post.erb
|
297
|
+
- spec/data/templates/tumblog/quote.erb
|
248
298
|
- spec/spec.opts
|
249
299
|
- spec/spec_helper.rb
|
250
300
|
- spec/webby/apps/generator_spec.rb
|
251
301
|
- spec/webby/apps/main_spec.rb
|
302
|
+
- spec/webby/filters/textile_spec.rb
|
252
303
|
- spec/webby/helpers/capture_helper_spec.rb
|
253
|
-
- spec/webby/
|
304
|
+
- spec/webby/renderer_spec.rb
|
305
|
+
- spec/webby/resources/db_spec.rb
|
306
|
+
- spec/webby/resources/layout_spec.rb
|
307
|
+
- spec/webby/resources/meta_file_spec.rb
|
308
|
+
- spec/webby/resources/page_spec.rb
|
309
|
+
- spec/webby/resources/partial_spec.rb
|
310
|
+
- spec/webby/resources/resource_spec.rb
|
311
|
+
- spec/webby/resources/static_spec.rb
|
254
312
|
- spec/webby/resources_spec.rb
|
255
313
|
- tasks/ann.rake
|
256
314
|
- tasks/bones.rake
|
data/lib/webby/resources/file.rb
DELETED
@@ -1,221 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
module Webby::Resources
|
4
|
-
|
5
|
-
# The Webby::Resources::File class is identical to the core Ruby file class
|
6
|
-
# except for YAML meta-data stored at the top of the file. This meta-data
|
7
|
-
# is made available through the <code>meta_data</code> and
|
8
|
-
# <code>meta_data=</code> functions.
|
9
|
-
#
|
10
|
-
# The meta-data data must be found between two YAML block separators "---",
|
11
|
-
# each on their own line.
|
12
|
-
#
|
13
|
-
# Example:
|
14
|
-
#
|
15
|
-
# ---
|
16
|
-
# layout: blog
|
17
|
-
# filter: markdown
|
18
|
-
# tags:
|
19
|
-
# - ruby
|
20
|
-
# - web development
|
21
|
-
# ---
|
22
|
-
# This is a blog entry formatted using MarkDown and tagged as "ruby" and
|
23
|
-
# "web development". The layout being used is the "blog" format.
|
24
|
-
#
|
25
|
-
class File < ::File
|
26
|
-
|
27
|
-
META_SEP = %r/\A---\s*\r?\n\z/o # :nodoc:
|
28
|
-
|
29
|
-
class << self
|
30
|
-
# call-seq:
|
31
|
-
# File.read( name [, length [, offset]]) => string
|
32
|
-
#
|
33
|
-
# Opens the file, optionally seeks to the given _offset_, then returns
|
34
|
-
# _length_ bytes (defaulting to the rest of the file). +read+ ensures
|
35
|
-
# the file is closed before returning.
|
36
|
-
#
|
37
|
-
def read( name, *args )
|
38
|
-
fd = new name, 'r'
|
39
|
-
fd.read(*args)
|
40
|
-
ensure
|
41
|
-
fd.close unless fd.nil?
|
42
|
-
end
|
43
|
-
|
44
|
-
# call-seq:
|
45
|
-
# File.readlines( name, sep_string = $/ ) => array
|
46
|
-
#
|
47
|
-
# Reads the entire file specified by _name_ as individual lines, and
|
48
|
-
# returns those lines in an array. Lines are separated by _sep_string_.
|
49
|
-
# +readlines+ ensures the file is closed before returning.
|
50
|
-
#
|
51
|
-
def readlines( name, sep = $/ )
|
52
|
-
fd = new name, 'r'
|
53
|
-
fd.readlines sep
|
54
|
-
ensure
|
55
|
-
fd.close unless fd.nil?
|
56
|
-
end
|
57
|
-
|
58
|
-
# call-seq:
|
59
|
-
# File.meta_data( name ) => object or nil
|
60
|
-
#
|
61
|
-
# Reads the meta-data from the file specified by _name_. +meta_data+
|
62
|
-
# ensures the files is closed before returning.
|
63
|
-
#
|
64
|
-
def meta_data( name )
|
65
|
-
fd = new name, 'r'
|
66
|
-
fd.meta_data
|
67
|
-
ensure
|
68
|
-
fd.close unless fd.nil?
|
69
|
-
end
|
70
|
-
|
71
|
-
# call-seq:
|
72
|
-
# File.dirname( filename ) => dir_name
|
73
|
-
#
|
74
|
-
# Returns all components of the _filename_ except the last one. The
|
75
|
-
# filename must be formed using forward slashes ("/") regardless of the
|
76
|
-
# separator used on the local file system.
|
77
|
-
#
|
78
|
-
def dirname( fn )
|
79
|
-
::File.dirname(fn).sub(%r/\A[^\/]+\/?/o, '')
|
80
|
-
end
|
81
|
-
|
82
|
-
# call-seq:
|
83
|
-
# File.basename( filename ) => base_name
|
84
|
-
#
|
85
|
-
# Returns the last component of the _filename_, which must be formed
|
86
|
-
# using forward slashes ("/"regardless of the separator used on the
|
87
|
-
# local file system. The suffix is removed from the filename.
|
88
|
-
#
|
89
|
-
def basename( fn )
|
90
|
-
::File.basename(fn, '.*')
|
91
|
-
end
|
92
|
-
|
93
|
-
# call-seq:
|
94
|
-
# File.extname( filename ) => ext_name
|
95
|
-
#
|
96
|
-
# Returns the extension (the portion of file name in path after the
|
97
|
-
# period). This method excludes the period from the extension name.
|
98
|
-
#
|
99
|
-
def extname( fn )
|
100
|
-
::File.extname(fn).tr('.', '')
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
# call-seq:
|
105
|
-
# File.new( filename, mode = "r" ) => file
|
106
|
-
# File.new( filename [, mode [, perm]] ) => file
|
107
|
-
#
|
108
|
-
# Opens the file named by _filename_ according to _mode_ (default is 'r')
|
109
|
-
# and returns a new +Webby::Resources::File+ object. See the description
|
110
|
-
# of class +IO+ for a description of _mode_. The file _mode_ may
|
111
|
-
# optionally be specified as a +Fixnum+ by or-ing together the flags
|
112
|
-
# (+O_RDONLY+ etc, again described under +IO+). Optional permission bits
|
113
|
-
# may be given in _perm_. These _mode_ and permission bits are platform
|
114
|
-
# dependent; on Unix systems, see +open(2)+ for details.
|
115
|
-
#
|
116
|
-
# f = File.new("testfile", "r")
|
117
|
-
# f = File.new("newfile", "w+")
|
118
|
-
# f = File.new("newfile", File::CREAT|File::TRUNC|File::RDWR, 0644)
|
119
|
-
#
|
120
|
-
def initialize( *args )
|
121
|
-
super
|
122
|
-
@meta_end = end_of_meta_data
|
123
|
-
end
|
124
|
-
|
125
|
-
# call-seq:
|
126
|
-
# meta_data
|
127
|
-
#
|
128
|
-
# Returns the meta-data defined at the top of the file. Returns +nil+ if
|
129
|
-
# no meta-data is defined. The meta-data is returned as Ruby objects
|
130
|
-
#
|
131
|
-
# Meta-data is stored in YAML format between two YAML separators "---" on
|
132
|
-
# their own lines.
|
133
|
-
#
|
134
|
-
def meta_data
|
135
|
-
return if @meta_end.nil?
|
136
|
-
|
137
|
-
cur, meta_end, @meta_end = tell, @meta_end, nil
|
138
|
-
seek 0
|
139
|
-
return YAML.load(self)
|
140
|
-
|
141
|
-
ensure
|
142
|
-
@meta_end = meta_end if defined? meta_end and meta_end
|
143
|
-
seek cur if defined? cur and cur
|
144
|
-
end
|
145
|
-
|
146
|
-
# call-seq
|
147
|
-
# meta_data = object
|
148
|
-
#
|
149
|
-
# Stores the given _object_ as meta-data in YAML format at the top of the
|
150
|
-
# file. If the _objectc_ is +nil+, then the meta-data section will be
|
151
|
-
# removed from the file.
|
152
|
-
#
|
153
|
-
# Meta-data is stored in YAML format between two YAML separators "---" on
|
154
|
-
# their own lines.
|
155
|
-
#
|
156
|
-
def meta_data=( data )
|
157
|
-
return if data.nil? and @meta_end.nil?
|
158
|
-
|
159
|
-
seek 0
|
160
|
-
lines = readlines
|
161
|
-
|
162
|
-
truncate 0
|
163
|
-
unless data.nil?
|
164
|
-
write YAML.dump(data)
|
165
|
-
write "--- #$/"
|
166
|
-
end
|
167
|
-
lines.each {|line| write line}
|
168
|
-
ensure
|
169
|
-
@meta_end = end_of_meta_data
|
170
|
-
seek 0, IO::SEEK_END
|
171
|
-
end
|
172
|
-
|
173
|
-
alias :_gets :gets
|
174
|
-
private :_gets
|
175
|
-
|
176
|
-
%w(getc gets read read_nonblock readbytes readchar readline readlines readpartial scanf).each do |m|
|
177
|
-
self.class_eval <<-CODE
|
178
|
-
def #{m}(*a)
|
179
|
-
skip_meta_data
|
180
|
-
super
|
181
|
-
end
|
182
|
-
CODE
|
183
|
-
end
|
184
|
-
|
185
|
-
|
186
|
-
private
|
187
|
-
|
188
|
-
# Moves the file pointer to the end of the meta-data section. Does nothing
|
189
|
-
# if there is no meta-data section or if the file pointer is already past
|
190
|
-
# the meta-data section.
|
191
|
-
#
|
192
|
-
def skip_meta_data
|
193
|
-
return if @meta_end.nil?
|
194
|
-
return if tell >= @meta_end
|
195
|
-
seek @meta_end
|
196
|
-
end
|
197
|
-
|
198
|
-
# Returns the position in this file where the meta-data ends and the file
|
199
|
-
# data begins. If there is no meta-data in the file, returns +nil+.
|
200
|
-
#
|
201
|
-
def end_of_meta_data
|
202
|
-
cur = tell
|
203
|
-
|
204
|
-
seek 0
|
205
|
-
line = _gets
|
206
|
-
return unless META_SEP =~ line
|
207
|
-
|
208
|
-
while line = _gets
|
209
|
-
break if META_SEP =~ line
|
210
|
-
end
|
211
|
-
return if line.nil?
|
212
|
-
tell
|
213
|
-
|
214
|
-
ensure
|
215
|
-
seek cur
|
216
|
-
end
|
217
|
-
|
218
|
-
end # class File
|
219
|
-
end # module Webby::Resources
|
220
|
-
|
221
|
-
# EOF
|