jadof 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/jadof/page.rb +22 -5
- data/lib/jadof/spec/examples_for_page.rb +54 -0
- metadata +20 -9
data/lib/jadof/page.rb
CHANGED
@@ -113,18 +113,28 @@ module JADOF #:nodoc:
|
|
113
113
|
|
114
114
|
# @return [String] Using the #filename of the page given and available
|
115
115
|
# Page.formatters, we render and return the page #body.
|
116
|
-
def
|
116
|
+
def render page
|
117
117
|
html = page.body
|
118
118
|
|
119
|
-
page.
|
119
|
+
page.extensions.reverse.each do |match| # [ ["markdown"], ["erb"] ]
|
120
120
|
if formatter = formatters[ match.first ]
|
121
|
-
|
121
|
+
begin
|
122
|
+
html = formatter.call(html)
|
123
|
+
rescue ArgumentError => ex
|
124
|
+
if ex.message == 'wrong number of arguments (1 for 2)'
|
125
|
+
html = formatter.call(html, page)
|
126
|
+
else
|
127
|
+
raise
|
128
|
+
end
|
129
|
+
end
|
122
130
|
end
|
123
131
|
end
|
124
132
|
|
125
133
|
html
|
126
134
|
end
|
127
135
|
|
136
|
+
alias to_html render
|
137
|
+
|
128
138
|
# @private
|
129
139
|
# Helper for caching. Will check to see if the {Page.cache}
|
130
140
|
# contains the given key and, if not, it will set the cache by calling
|
@@ -204,6 +214,11 @@ module JADOF #:nodoc:
|
|
204
214
|
# it is in subdirectories.
|
205
215
|
attr_accessor :parent
|
206
216
|
|
217
|
+
# @return [Array(String)] This file's extension(s).
|
218
|
+
def extensions
|
219
|
+
filename.scan(/\.([^\.]+)/).flatten
|
220
|
+
end
|
221
|
+
|
207
222
|
# A page is a dumb object and doesn't know how to load itself from
|
208
223
|
# a file on the filesystem. See `Page.from_path` to load a {Page}
|
209
224
|
# from a file.
|
@@ -226,10 +241,12 @@ module JADOF #:nodoc:
|
|
226
241
|
# For `foo.markdown.erb`, `Page.formatters['erb']` and `Page.formatters['markdown']` will be used.
|
227
242
|
#
|
228
243
|
# With multiple extensions, the *last* extension is used first, and then the second-to-last, etc.
|
229
|
-
def
|
230
|
-
self.class.
|
244
|
+
def render
|
245
|
+
self.class.render self
|
231
246
|
end
|
232
247
|
|
248
|
+
alias to_html render
|
249
|
+
|
233
250
|
# @return [true, false] If 2 pages have the same system path, they're the same.
|
234
251
|
def == other_page
|
235
252
|
return false unless other_page.is_a? Page
|
@@ -54,6 +54,18 @@ shared_examples_for "JADOF Page" do
|
|
54
54
|
@jadof_page_class[:foo].filename.should == 'foo.markdown'
|
55
55
|
end
|
56
56
|
|
57
|
+
it 'can easily get file extensions' do
|
58
|
+
create_page '123'
|
59
|
+
create_page 'foo.markdown'
|
60
|
+
create_page 'bar.markdown.haml'
|
61
|
+
create_page 'abc.markdown.haml.something'
|
62
|
+
|
63
|
+
@jadof_page_class['123'].extensions.should == %w( )
|
64
|
+
@jadof_page_class[:foo ].extensions.should == %w( markdown )
|
65
|
+
@jadof_page_class[:bar ].extensions.should == %w( markdown haml )
|
66
|
+
@jadof_page_class[:abc ].extensions.should == %w( markdown haml something )
|
67
|
+
end
|
68
|
+
|
57
69
|
it 'has a path (the full system path to the file)' do
|
58
70
|
create_page 'foo.markdown'
|
59
71
|
|
@@ -217,6 +229,7 @@ shared_examples_for "JADOF Page" do
|
|
217
229
|
**Hello World!**
|
218
230
|
}
|
219
231
|
|
232
|
+
@jadof_page_class[:foo].render.should == '**Hello World!**'
|
220
233
|
@jadof_page_class[:foo].to_html.should == '**Hello World!**'
|
221
234
|
end
|
222
235
|
|
@@ -227,9 +240,50 @@ shared_examples_for "JADOF Page" do
|
|
227
240
|
**Hello World!**
|
228
241
|
}
|
229
242
|
|
243
|
+
@jadof_page_class[:foo].render.should == '<p><strong>Hello World!</strong></p>'
|
230
244
|
@jadof_page_class[:foo].to_html.should == '<p><strong>Hello World!</strong></p>'
|
231
245
|
end
|
232
246
|
|
247
|
+
it 'formatters have access to the page' do
|
248
|
+
@jadof_page_class.formatters['something'] = lambda do |text, page|
|
249
|
+
text.gsub('FILENAME', page.filename)
|
250
|
+
end
|
251
|
+
|
252
|
+
create_page 'foo.something', %{
|
253
|
+
Hello from FILENAME
|
254
|
+
}
|
255
|
+
|
256
|
+
@jadof_page_class[:foo].body.should == 'Hello from FILENAME'
|
257
|
+
@jadof_page_class[:foo].render.should == 'Hello from foo.something'
|
258
|
+
end
|
259
|
+
|
260
|
+
it 'formatters can be a class' do
|
261
|
+
class UpcaseFormatter
|
262
|
+
def self.call text
|
263
|
+
text.upcase
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
class FilenameFormatter
|
268
|
+
def self.call text, page
|
269
|
+
text.sub "FILENAME", page.filename
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
@jadof_page_class.formatters['upcase'] = UpcaseFormatter
|
274
|
+
@jadof_page_class.formatters['filename'] = FilenameFormatter
|
275
|
+
|
276
|
+
create_page 'foo.upcase', %{
|
277
|
+
Hello from FILENAME
|
278
|
+
}
|
279
|
+
create_page 'bar.filename', %{
|
280
|
+
Hello from FILENAME
|
281
|
+
}
|
282
|
+
|
283
|
+
@jadof_page_class[:foo].render.should == 'HELLO FROM FILENAME'
|
284
|
+
@jadof_page_class[:bar].render.should == 'Hello from bar.filename'
|
285
|
+
end
|
286
|
+
|
233
287
|
it 'should support multiple file extensions, eg. foo.markdown.erb (erb renders first, then markdown)' do
|
234
288
|
@jadof_page_class.formatters['markdown'] = lambda {|text| Maruku.new(text).to_html }
|
235
289
|
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jadof
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- remi
|
@@ -9,19 +14,23 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-02-
|
17
|
+
date: 2010-02-28 00:00:00 -07:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: indifferent-variable-hash
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 1
|
30
|
+
- 0
|
23
31
|
version: 0.1.0
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
description:
|
26
35
|
email: remi@remitaylor.com
|
27
36
|
executables: []
|
@@ -51,18 +60,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
51
60
|
requirements:
|
52
61
|
- - ">="
|
53
62
|
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
54
65
|
version: "0"
|
55
|
-
version:
|
56
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
67
|
requirements:
|
58
68
|
- - ">="
|
59
69
|
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
60
72
|
version: "0"
|
61
|
-
version:
|
62
73
|
requirements: []
|
63
74
|
|
64
75
|
rubyforge_project:
|
65
|
-
rubygems_version: 1.3.
|
76
|
+
rubygems_version: 1.3.6
|
66
77
|
signing_key:
|
67
78
|
specification_version: 3
|
68
79
|
summary: Just A Directory Of Files (JADOF)
|