francois-webby 0.9.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (233) hide show
  1. data/History.txt +218 -0
  2. data/README.rdoc +92 -0
  3. data/Rakefile +62 -0
  4. data/bin/webby +41 -0
  5. data/bin/webby-gen +41 -0
  6. data/examples/blog/Sitefile +7 -0
  7. data/examples/blog/tasks/blog.rake +72 -0
  8. data/examples/blog/templates/atom_feed.erb +40 -0
  9. data/examples/blog/templates/blog/month.erb +22 -0
  10. data/examples/blog/templates/blog/post.erb +16 -0
  11. data/examples/blog/templates/blog/year.erb +22 -0
  12. data/examples/presentation/Sitefile +10 -0
  13. data/examples/presentation/content/css/uv/twilight.css +137 -0
  14. data/examples/presentation/content/presentation/_sample_code.txt +10 -0
  15. data/examples/presentation/content/presentation/index.txt +63 -0
  16. data/examples/presentation/content/presentation/s5/blank.gif +0 -0
  17. data/examples/presentation/content/presentation/s5/bodybg.gif +0 -0
  18. data/examples/presentation/content/presentation/s5/framing.css +23 -0
  19. data/examples/presentation/content/presentation/s5/iepngfix.htc +42 -0
  20. data/examples/presentation/content/presentation/s5/opera.css +7 -0
  21. data/examples/presentation/content/presentation/s5/outline.css +15 -0
  22. data/examples/presentation/content/presentation/s5/pretty.css +86 -0
  23. data/examples/presentation/content/presentation/s5/print.css +25 -0
  24. data/examples/presentation/content/presentation/s5/s5-core.css +9 -0
  25. data/examples/presentation/content/presentation/s5/slides.css +3 -0
  26. data/examples/presentation/content/presentation/s5/slides.js +553 -0
  27. data/examples/presentation/layouts/presentation.txt +43 -0
  28. data/examples/presentation/templates/_code_partial.erb +13 -0
  29. data/examples/presentation/templates/presentation.erb +40 -0
  30. data/examples/tumblog/Sitefile +9 -0
  31. data/examples/tumblog/content/css/tumblog.css +308 -0
  32. data/examples/tumblog/content/images/tumblog/permalink.gif +0 -0
  33. data/examples/tumblog/content/images/tumblog/rss.gif +0 -0
  34. data/examples/tumblog/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
  35. data/examples/tumblog/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
  36. data/examples/tumblog/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
  37. data/examples/tumblog/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
  38. data/examples/tumblog/content/tumblog/200807/up-a-tree/index.txt +13 -0
  39. data/examples/tumblog/content/tumblog/index.txt +37 -0
  40. data/examples/tumblog/content/tumblog/rss.txt +37 -0
  41. data/examples/tumblog/layouts/tumblog/default.txt +44 -0
  42. data/examples/tumblog/layouts/tumblog/post.txt +15 -0
  43. data/examples/tumblog/lib/tumblog_helper.rb +32 -0
  44. data/examples/tumblog/tasks/tumblog.rake +30 -0
  45. data/examples/tumblog/templates/atom_feed.erb +40 -0
  46. data/examples/tumblog/templates/tumblog/conversation.erb +12 -0
  47. data/examples/tumblog/templates/tumblog/link.erb +10 -0
  48. data/examples/tumblog/templates/tumblog/photo.erb +13 -0
  49. data/examples/tumblog/templates/tumblog/post.erb +12 -0
  50. data/examples/tumblog/templates/tumblog/quote.erb +11 -0
  51. data/examples/webby/Sitefile +19 -0
  52. data/examples/webby/content/communicate/index.txt +28 -0
  53. data/examples/webby/content/css/background.gif +0 -0
  54. data/examples/webby/content/css/blueprint/print.css +76 -0
  55. data/examples/webby/content/css/blueprint/screen.css +696 -0
  56. data/examples/webby/content/css/coderay.css +96 -0
  57. data/examples/webby/content/css/site.css +196 -0
  58. data/examples/webby/content/css/uv/twilight.css +137 -0
  59. data/examples/webby/content/index.txt +37 -0
  60. data/examples/webby/content/learn/index.txt +28 -0
  61. data/examples/webby/content/reference/index.txt +204 -0
  62. data/examples/webby/content/release-notes/index.txt +21 -0
  63. data/examples/webby/content/release-notes/rel-0-9-0/index.txt +74 -0
  64. data/examples/webby/content/release-notes/rel-0-9-1/index.txt +93 -0
  65. data/examples/webby/content/release-notes/rel-0-9-2/index.txt +14 -0
  66. data/examples/webby/content/release-notes/rel-0-9-3/index.txt +47 -0
  67. data/examples/webby/content/robots.txt +6 -0
  68. data/examples/webby/content/script/jquery.corner.js +152 -0
  69. data/examples/webby/content/script/jquery.js +31 -0
  70. data/examples/webby/content/sitemap.txt +31 -0
  71. data/examples/webby/content/tips_and_tricks/index.txt +97 -0
  72. data/examples/webby/content/tutorial/index.txt +135 -0
  73. data/examples/webby/content/user-manual/index.txt +419 -0
  74. data/examples/webby/layouts/default.txt +49 -0
  75. data/examples/webby/templates/page.erb +10 -0
  76. data/examples/website/Sitefile +7 -0
  77. data/examples/website/content/css/blueprint/ie.css +26 -0
  78. data/examples/website/content/css/blueprint/plugins/buttons/icons/cross.png +0 -0
  79. data/examples/website/content/css/blueprint/plugins/buttons/icons/key.png +0 -0
  80. data/examples/website/content/css/blueprint/plugins/buttons/icons/tick.png +0 -0
  81. data/examples/website/content/css/blueprint/plugins/buttons/readme.txt +32 -0
  82. data/examples/website/content/css/blueprint/plugins/buttons/screen.css +97 -0
  83. data/examples/website/content/css/blueprint/plugins/fancy-type/readme.txt +14 -0
  84. data/examples/website/content/css/blueprint/plugins/fancy-type/screen.css +71 -0
  85. data/examples/website/content/css/blueprint/plugins/link-icons/icons/doc.png +0 -0
  86. data/examples/website/content/css/blueprint/plugins/link-icons/icons/email.png +0 -0
  87. data/examples/website/content/css/blueprint/plugins/link-icons/icons/external.png +0 -0
  88. data/examples/website/content/css/blueprint/plugins/link-icons/icons/feed.png +0 -0
  89. data/examples/website/content/css/blueprint/plugins/link-icons/icons/im.png +0 -0
  90. data/examples/website/content/css/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  91. data/examples/website/content/css/blueprint/plugins/link-icons/icons/visited.png +0 -0
  92. data/examples/website/content/css/blueprint/plugins/link-icons/icons/xls.png +0 -0
  93. data/examples/website/content/css/blueprint/plugins/link-icons/readme.txt +18 -0
  94. data/examples/website/content/css/blueprint/plugins/link-icons/screen.css +40 -0
  95. data/examples/website/content/css/blueprint/plugins/rtl/readme.txt +10 -0
  96. data/examples/website/content/css/blueprint/plugins/rtl/screen.css +109 -0
  97. data/examples/website/content/css/blueprint/print.css +30 -0
  98. data/examples/website/content/css/blueprint/screen.css +251 -0
  99. data/examples/website/content/css/blueprint/src/forms.css +49 -0
  100. data/examples/website/content/css/blueprint/src/grid.css +212 -0
  101. data/examples/website/content/css/blueprint/src/grid.png +0 -0
  102. data/examples/website/content/css/blueprint/src/ie.css +59 -0
  103. data/examples/website/content/css/blueprint/src/print.css +85 -0
  104. data/examples/website/content/css/blueprint/src/reset.css +38 -0
  105. data/examples/website/content/css/blueprint/src/typography.css +105 -0
  106. data/examples/website/content/css/coderay.css +111 -0
  107. data/examples/website/content/css/site.css +67 -0
  108. data/examples/website/content/index.txt +19 -0
  109. data/examples/website/layouts/default.txt +61 -0
  110. data/examples/website/lib/breadcrumbs.rb +28 -0
  111. data/examples/website/templates/_partial.erb +10 -0
  112. data/examples/website/templates/page.erb +18 -0
  113. data/lib/webby/apps/generator.rb +276 -0
  114. data/lib/webby/apps/main.rb +258 -0
  115. data/lib/webby/apps.rb +12 -0
  116. data/lib/webby/auto_builder.rb +157 -0
  117. data/lib/webby/builder.rb +172 -0
  118. data/lib/webby/core_ext/enumerable.rb +11 -0
  119. data/lib/webby/core_ext/hash.rb +28 -0
  120. data/lib/webby/core_ext/kernel.rb +26 -0
  121. data/lib/webby/core_ext/string.rb +163 -0
  122. data/lib/webby/core_ext/time.rb +9 -0
  123. data/lib/webby/filters/basepath.rb +97 -0
  124. data/lib/webby/filters/erb.rb +9 -0
  125. data/lib/webby/filters/haml.rb +18 -0
  126. data/lib/webby/filters/markdown.rb +16 -0
  127. data/lib/webby/filters/maruku.rb +16 -0
  128. data/lib/webby/filters/outline.rb +309 -0
  129. data/lib/webby/filters/sass.rb +17 -0
  130. data/lib/webby/filters/slides.rb +56 -0
  131. data/lib/webby/filters/textile.rb +16 -0
  132. data/lib/webby/filters/tidy.rb +76 -0
  133. data/lib/webby/filters/wiki_words.rb +14 -0
  134. data/lib/webby/filters.rb +85 -0
  135. data/lib/webby/helpers/capture_helper.rb +141 -0
  136. data/lib/webby/helpers/coderay_helper.rb +69 -0
  137. data/lib/webby/helpers/graphviz_helper.rb +136 -0
  138. data/lib/webby/helpers/tag_helper.rb +65 -0
  139. data/lib/webby/helpers/tex_img_helper.rb +133 -0
  140. data/lib/webby/helpers/ultraviolet_helper.rb +63 -0
  141. data/lib/webby/helpers/url_helper.rb +241 -0
  142. data/lib/webby/helpers.rb +30 -0
  143. data/lib/webby/journal.rb +126 -0
  144. data/lib/webby/link_validator.rb +160 -0
  145. data/lib/webby/renderer.rb +389 -0
  146. data/lib/webby/resources/db.rb +251 -0
  147. data/lib/webby/resources/layout.rb +54 -0
  148. data/lib/webby/resources/meta_file.rb +211 -0
  149. data/lib/webby/resources/page.rb +81 -0
  150. data/lib/webby/resources/partial.rb +85 -0
  151. data/lib/webby/resources/resource.rb +201 -0
  152. data/lib/webby/resources/static.rb +36 -0
  153. data/lib/webby/resources.rb +137 -0
  154. data/lib/webby/stelan/mktemp.rb +135 -0
  155. data/lib/webby/stelan/paginator.rb +165 -0
  156. data/lib/webby/tasks/build.rake +27 -0
  157. data/lib/webby/tasks/create.rake +25 -0
  158. data/lib/webby/tasks/deploy.rake +22 -0
  159. data/lib/webby/tasks/growl.rake +16 -0
  160. data/lib/webby/tasks/validate.rake +19 -0
  161. data/lib/webby.rb +232 -0
  162. data/spec/core_ext/hash_spec.rb +47 -0
  163. data/spec/core_ext/string_spec.rb +110 -0
  164. data/spec/core_ext/time_spec.rb +19 -0
  165. data/spec/data/hooligans/bad_meta_data_1.txt +34 -0
  166. data/spec/data/hooligans/bad_meta_data_2.txt +34 -0
  167. data/spec/data/html/anchor.html +11 -0
  168. data/spec/data/html/external.html +10 -0
  169. data/spec/data/html/invalid-relative.html +10 -0
  170. data/spec/data/html/relative-anchor.html +10 -0
  171. data/spec/data/html/relative-invalid-anchor.html +10 -0
  172. data/spec/data/html/relative.html +10 -0
  173. data/spec/data/outline/basic.out +81 -0
  174. data/spec/data/outline/basic.txt +25 -0
  175. data/spec/data/outline/no_clobber.out +86 -0
  176. data/spec/data/outline/numbering.out +81 -0
  177. data/spec/data/outline/numbering_only.out +21 -0
  178. data/spec/data/outline/toc_range_1.out +66 -0
  179. data/spec/data/outline/toc_range_2.out +55 -0
  180. data/spec/data/outline/toc_style.out +81 -0
  181. data/spec/data/site/Sitefile +9 -0
  182. data/spec/data/site/content/_partial.txt +10 -0
  183. data/spec/data/site/content/css/coderay.css +111 -0
  184. data/spec/data/site/content/css/site.css +67 -0
  185. data/spec/data/site/content/css/tumblog.css +308 -0
  186. data/spec/data/site/content/images/tumblog/permalink.gif +0 -0
  187. data/spec/data/site/content/images/tumblog/rss.gif +0 -0
  188. data/spec/data/site/content/index.txt +19 -0
  189. data/spec/data/site/content/photos.txt +21 -0
  190. data/spec/data/site/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
  191. data/spec/data/site/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
  192. data/spec/data/site/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
  193. data/spec/data/site/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
  194. data/spec/data/site/content/tumblog/200807/up-a-tree/index.txt +13 -0
  195. data/spec/data/site/content/tumblog/index.txt +37 -0
  196. data/spec/data/site/content/tumblog/rss.txt +37 -0
  197. data/spec/data/site/layouts/default.txt +58 -0
  198. data/spec/data/site/layouts/tumblog/default.txt +44 -0
  199. data/spec/data/site/layouts/tumblog/post.txt +15 -0
  200. data/spec/data/site/lib/breadcrumbs.rb +28 -0
  201. data/spec/data/site/lib/tumblog_helper.rb +32 -0
  202. data/spec/data/site/tasks/tumblog.rake +30 -0
  203. data/spec/data/site/templates/_partial.erb +10 -0
  204. data/spec/data/site/templates/atom_feed.erb +40 -0
  205. data/spec/data/site/templates/page.erb +18 -0
  206. data/spec/data/site/templates/presentation.erb +40 -0
  207. data/spec/data/site/templates/tumblog/conversation.erb +12 -0
  208. data/spec/data/site/templates/tumblog/link.erb +10 -0
  209. data/spec/data/site/templates/tumblog/photo.erb +13 -0
  210. data/spec/data/site/templates/tumblog/post.erb +12 -0
  211. data/spec/data/site/templates/tumblog/quote.erb +11 -0
  212. data/spec/spec.opts +1 -0
  213. data/spec/spec_helper.rb +58 -0
  214. data/spec/webby/apps/generator_spec.rb +117 -0
  215. data/spec/webby/apps/main_spec.rb +88 -0
  216. data/spec/webby/filters/basepath_spec.rb +167 -0
  217. data/spec/webby/filters/maruku_spec.rb +31 -0
  218. data/spec/webby/filters/outline_spec.rb +92 -0
  219. data/spec/webby/filters/textile_spec.rb +31 -0
  220. data/spec/webby/helpers/capture_helper_spec.rb +56 -0
  221. data/spec/webby/link_validator_spec.rb +154 -0
  222. data/spec/webby/renderer_spec.rb +139 -0
  223. data/spec/webby/resources/db_spec.rb +250 -0
  224. data/spec/webby/resources/layout_spec.rb +83 -0
  225. data/spec/webby/resources/meta_file_spec.rb +171 -0
  226. data/spec/webby/resources/page_spec.rb +111 -0
  227. data/spec/webby/resources/partial_spec.rb +58 -0
  228. data/spec/webby/resources/resource_spec.rb +219 -0
  229. data/spec/webby/resources/static_spec.rb +49 -0
  230. data/spec/webby/resources_spec.rb +69 -0
  231. data/tasks/mswin32.rake +38 -0
  232. data/tasks/website.rake +37 -0
  233. metadata +372 -0
@@ -0,0 +1,117 @@
1
+
2
+ require ::File.expand_path(
3
+ ::File.join(::File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+ require 'stringio'
5
+
6
+ describe Webby::Apps::Generator do
7
+
8
+ before :each do
9
+ @generator = Webby::Apps::Generator.new
10
+ end
11
+
12
+ it "should return a list of available templates" do
13
+ ary = %w[blog presentation tumblog webby website].map {|t| Webby.path('examples', t)}
14
+ @generator.templates.should == ary
15
+ end
16
+
17
+ it "should pretend to create a site" do
18
+ @generator.parse %w[-p website foo]
19
+ @generator.pretend?.should == true
20
+
21
+ @generator = Webby::Apps::Generator.new
22
+ @generator.parse %w[website foo]
23
+ @generator.pretend?.should == false
24
+
25
+ @generator = Webby::Apps::Generator.new
26
+ @generator.parse %w[--pretend website foo]
27
+ @generator.pretend?.should == true
28
+ end
29
+
30
+ it "should return a list of all the site files from the template" do
31
+ @generator.parse %w[website foo]
32
+
33
+ h = @generator.site_files
34
+ h.keys.sort.should == [
35
+ "",
36
+ "content",
37
+ "content/css",
38
+ "content/css/blueprint",
39
+ "content/css/blueprint/plugins",
40
+ "content/css/blueprint/plugins/buttons",
41
+ "content/css/blueprint/plugins/buttons/icons",
42
+ "content/css/blueprint/plugins/fancy-type",
43
+ "content/css/blueprint/plugins/link-icons",
44
+ "content/css/blueprint/plugins/link-icons/icons",
45
+ "content/css/blueprint/plugins/rtl",
46
+ "content/css/blueprint/src",
47
+ "layouts",
48
+ "lib",
49
+ "templates"
50
+ ]
51
+ h["content"].should == %w[content/index.txt]
52
+ h["layouts"].should == %w[layouts/default.txt]
53
+ end
54
+
55
+ describe "when parsing command line arguments" do
56
+
57
+ before :each do
58
+ @strio = StringIO.new
59
+ ::Logging::Logger['Webby::Journal'].appenders =
60
+ ::Logging::Appenders::IO.new('test', @strio)
61
+ @generator = Webby::Apps::Generator.new(@strio)
62
+
63
+ class << @strio
64
+ def to_s
65
+ seek 0
66
+ str = read
67
+ truncate 0
68
+ return str
69
+ end
70
+ end
71
+ end
72
+
73
+ it "should force the overwriting of files on collision" do
74
+ @generator.options[:collision].should be_nil
75
+ @generator.parse %w[-f website foo]
76
+ @generator.options[:collision].should == :force
77
+ end
78
+
79
+ it "should skip files on collision" do
80
+ @generator.options[:collision].should be_nil
81
+ @generator.parse %w[-s website foo]
82
+ @generator.options[:collision].should == :skip
83
+ end
84
+
85
+ it "should update only the rake files in the tasks folder" do
86
+ @generator.options[:update].should be_nil
87
+ @generator.parse %w[-u website foo]
88
+ @generator.options[:update].should == true
89
+ end
90
+
91
+ it "should pretend to generate / alter files" do
92
+ @generator.options[:pretend].should be_nil
93
+ @generator.parse %w[-p website foo]
94
+ @generator.options[:pretend].should == true
95
+ end
96
+
97
+ it "should exit if a site is not specified" do
98
+ # we need to force an error by changing directories back to the top
99
+ # level so we no longer have a Sitefile in the current directory
100
+ Dir.chdir @pwd
101
+
102
+ lambda{@generator.parse %w[website]}.
103
+ should raise_error(SystemExit, 'exit')
104
+ @strio.to_s.split("\n").first.
105
+ should == 'Usage: webby-gen [options] template site'
106
+ end
107
+
108
+ it "should exit if an unknown template is given" do
109
+ lambda{@generator.parse %w[foo bar]}.
110
+ should raise_error(SystemExit, 'exit')
111
+ @strio.to_s.split("\n").last.
112
+ should == " Could not find template 'foo'"
113
+ end
114
+ end
115
+ end
116
+
117
+ # EOF
@@ -0,0 +1,88 @@
1
+
2
+ require ::File.expand_path(
3
+ ::File.join(::File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+
5
+ # ---------------------------------------------------------------------------
6
+ describe Webby::Apps::Main do
7
+ before do
8
+ @main = Webby::Apps::Main.new
9
+ end
10
+
11
+ describe ".capture_command_line_args" do
12
+ it "should set the raw arguments" do
13
+ raw = ["The Raw Arguments"]
14
+ args = @main.capture_command_line_args(raw)
15
+ args.raw.should == raw
16
+ end
17
+
18
+ it "should set the page with one argument by downcasing" do
19
+ page = "This-is-a-page"
20
+ args = @main.capture_command_line_args([page])
21
+ args.page.should == page.downcase
22
+ end
23
+
24
+ it "should set the page with two or more arguments by joining" do
25
+ page = %w(this is a page)
26
+ args = @main.capture_command_line_args(page)
27
+ args.page.should == page.join('-')
28
+ end
29
+
30
+ it "should set the dir from the page's dirname" do
31
+ page = "foo/bar/this-is-a-page.txt"
32
+ args = @main.capture_command_line_args([page])
33
+ args.dir.should == "foo/bar"
34
+ end
35
+
36
+ it "should set the slug from the page's basename" do
37
+ page = "foo/bar/this-is-a-page.txt"
38
+ args = @main.capture_command_line_args([page])
39
+ args.slug.should == "this-is-a-page"
40
+ end
41
+
42
+ it "should turn the slug into a url" do
43
+ page = "10% Inspiration & 90% Perspiration"
44
+ args = @main.capture_command_line_args([page])
45
+ args.slug.should == "10-percent-inspiration-and-90-percent-perspiration"
46
+ end
47
+
48
+ it "should set the page by combining the dir and slug" do
49
+ page = "10% Inspiration & 90% Perspiration"
50
+ args = @main.capture_command_line_args([page])
51
+ args.page.should == "10-percent-inspiration-and-90-percent-perspiration"
52
+
53
+ page = "foo/bar/10% Inspiration & 90% Perspiration"
54
+ args = @main.capture_command_line_args([page])
55
+ args.page.should == "foo/bar/10-percent-inspiration-and-90-percent-perspiration"
56
+ end
57
+
58
+ it "should set the title by joining the raw args, getting the basename, and titlecasing" do
59
+ page = "foo/bar/this is a page.txt"
60
+ args = @main.capture_command_line_args([page])
61
+ args.title.should == "This Is a Page"
62
+ end
63
+
64
+ it "should preserve any page extensions" do
65
+ page = "foo/bar/this is a page.txt"
66
+ args = @main.capture_command_line_args([page])
67
+ args.page.should == "foo/bar/this-is-a-page.txt"
68
+
69
+ page = "This is another page.haml"
70
+ args = @main.capture_command_line_args([page])
71
+ args.page.should == "this-is-another-page.haml"
72
+
73
+ page = "one/more/for the road"
74
+ args = @main.capture_command_line_args([page])
75
+ args.page.should == "one/more/for-the-road"
76
+ end
77
+ end
78
+
79
+ describe ".parse" do
80
+ it "should pass environment variables to the rake application" do
81
+ ARGV = ary = []
82
+ args = %w[rebuild foo BASE=http://www.example.com bar]
83
+ @main.parse args
84
+ ary.should == %w[rebuild BASE=http://www.example.com]
85
+ args.should == %w[foo bar]
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,167 @@
1
+
2
+ require ::File.expand_path(
3
+ ::File.join(::File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+
5
+ # ---------------------------------------------------------------------------
6
+ describe Webby::Filters::BasePath do
7
+
8
+ before :all do
9
+ @input = <<-HTML
10
+ <html>
11
+ <head>
12
+ %s
13
+ </head>
14
+ <body>
15
+ %s
16
+ </body>
17
+ </html>
18
+ HTML
19
+ end
20
+
21
+ before :each do
22
+ Webby.site.base = nil
23
+ @xpaths = Webby.site.xpaths.dup
24
+ end
25
+
26
+ after :each do
27
+ Webby.site.xpaths = @xpaths
28
+ end
29
+
30
+ it 'raises an exception if a new base has not been specified' do
31
+ input = @input % ['', '<img src="/foo/picture.jpg" />']
32
+ bp = Webby::Filters::BasePath.new(input, 'html')
33
+
34
+ lambda {bp.filter}.
35
+ should raise_error(TypeError, "can't convert nil into String")
36
+ end
37
+
38
+ it 'changes nothing with an empty base path' do
39
+ Webby.site.base = ''
40
+ input = @input % ['', '<img src="/foo/picture.jpg" />']
41
+
42
+ bp = Webby::Filters::BasePath.new(input, 'html')
43
+ bp.filter.should == <<-HTML
44
+ <html>
45
+ <head>
46
+
47
+ </head>
48
+ <body>
49
+ <img src="/foo/picture.jpg" />
50
+ </body>
51
+ </html>
52
+ HTML
53
+ end
54
+
55
+ it 'substitutes the base path for xpath values that have a leading slash' do
56
+ Webby.site.base = 'http://example.com'
57
+ input = @input % ['', '<img src="/foo/picture.jpg" />']
58
+
59
+ bp = Webby::Filters::BasePath.new(input, 'html')
60
+ bp.filter.should == <<-HTML
61
+ <html>
62
+ <head>
63
+
64
+ </head>
65
+ <body>
66
+ <img src="http://example.com/foo/picture.jpg" />
67
+ </body>
68
+ </html>
69
+ HTML
70
+ end
71
+
72
+ it 'operates on all entities in the input string' do
73
+ Webby.site.base = 'http://webby.rubyforge.org'
74
+ input = @input % ['', %Q(<img src="/foo/picture.jpg" />\n<a href="/page.html">Page Title</a>)]
75
+
76
+ bp = Webby::Filters::BasePath.new(input, 'html')
77
+ bp.filter.should == <<-HTML
78
+ <html>
79
+ <head>
80
+
81
+ </head>
82
+ <body>
83
+ <img src="http://webby.rubyforge.org/foo/picture.jpg" />
84
+ <a href="http://webby.rubyforge.org/page.html">Page Title</a>
85
+ </body>
86
+ </html>
87
+ HTML
88
+ end
89
+
90
+ it 'only operates on entities defined in the xpaths configuration' do
91
+ Webby.site.xpaths.delete '/html/body//a[@href]'
92
+ Webby.site.base = 'http://webby.rubyforge.org'
93
+ input = @input % ['', %Q(<img src="/foo/picture.jpg" />\n<a href="/page.html">Page Title</a>)]
94
+
95
+ bp = Webby::Filters::BasePath.new(input, 'html')
96
+ bp.filter.should == <<-HTML
97
+ <html>
98
+ <head>
99
+
100
+ </head>
101
+ <body>
102
+ <img src="http://webby.rubyforge.org/foo/picture.jpg" />
103
+ <a href="/page.html">Page Title</a>
104
+ </body>
105
+ </html>
106
+ HTML
107
+ end
108
+
109
+ it 'is restrictive to the configured xpaths' do
110
+ Webby.site.base = 'not a real site'
111
+ input = @input % ['<img src="/foo/picture.jpg" />', '<a href="/page.html">Page Title</a>']
112
+
113
+ bp = Webby::Filters::BasePath.new(input, 'html')
114
+ bp.filter.should == <<-HTML
115
+ <html>
116
+ <head>
117
+ <img src="/foo/picture.jpg" />
118
+ </head>
119
+ <body>
120
+ <a href="not a real site/page.html">Page Title</a>
121
+ </body>
122
+ </html>
123
+ HTML
124
+ end
125
+
126
+ it 'registers a "basepath" filter in the filters module' do
127
+ handler = Webby::Filters._handlers['basepath']
128
+ handler.should_not be_nil
129
+ handler.arity.should == 2
130
+ end
131
+
132
+ it 'leaves the input text unchanged if a base path is not configured' do
133
+ cursor = mock("Cursor")
134
+ page = mock("Page")
135
+ cursor.stub!(:page).and_return(page)
136
+ page.stub!(:extension).and_return('html')
137
+ input = @input % ['', '<img src="/foo/picture.jpg" />']
138
+
139
+ handler = Webby::Filters._handlers['basepath']
140
+ output = handler.call(input, cursor)
141
+
142
+ output.should equal(input)
143
+ end
144
+
145
+ it 'modifies text when a base path is configured' do
146
+ cursor = mock("Cursor")
147
+ page = mock("Page")
148
+ cursor.stub!(:page).and_return(page)
149
+ page.stub!(:extension).and_return('html')
150
+ Webby.site.base = 'http://example.com'
151
+ input = @input % ['', '<img src="/foo/picture.jpg" />']
152
+
153
+ handler = Webby::Filters._handlers['basepath']
154
+ handler.call(input, cursor).should == <<-HTML
155
+ <html>
156
+ <head>
157
+
158
+ </head>
159
+ <body>
160
+ <img src="http://example.com/foo/picture.jpg" />
161
+ </body>
162
+ </html>
163
+ HTML
164
+ end
165
+ end
166
+
167
+ # EOF
@@ -0,0 +1,31 @@
1
+
2
+ require ::File.expand_path(
3
+ ::File.join(::File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+
5
+ # ---------------------------------------------------------------------------
6
+ describe 'Webby::Filters::Maruku' do
7
+
8
+ it 'should regsiter the maruku filter handler' do
9
+ Webby::Filters._handlers['maruku'].should_not be_nil
10
+ end
11
+
12
+ if try_require('maruku')
13
+
14
+ it 'processes maruku markup into HTML' do
15
+ input = "## Heading Two\n\nAnd some text about this heading."
16
+ output = Webby::Filters._handlers['maruku'].call(input)
17
+
18
+ output.should == %Q{<h2 id='heading_two'>Heading Two</h2>\n\n<p>And some text about this heading.</p>}
19
+ end
20
+
21
+ else
22
+
23
+ it 'raises an error when maruku is used but not installed' do
24
+ input = "## Heading Two\n\nAnd some text about this heading."
25
+ lambda {Webby::Filters._handlers['maruku'].call(input)}.should raise_error(Webby::Error, "'maruku' must be installed to use the maruku filter")
26
+ end
27
+
28
+ end
29
+ end
30
+
31
+ # EOF
@@ -0,0 +1,92 @@
1
+
2
+ require ::File.expand_path(
3
+ ::File.join(::File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+
5
+ # ---------------------------------------------------------------------------
6
+ describe Webby::Filters::Outline do
7
+
8
+ before :all do
9
+ @input = Webby::Resources::MetaFile.read(
10
+ Webby.datapath(%w[outline basic.txt]))
11
+ end
12
+
13
+ it 'should regsiter the outline filter handler' do
14
+ Webby::Filters._handlers['outline'].should_not be_nil
15
+ end
16
+
17
+ it 'generates outline formatting for HTML heading tags' do
18
+ output = File.read(Webby.datapath(%w[outline basic.out]))
19
+
20
+ outline = Webby::Filters::Outline.new(@input)
21
+ outline.filter.should == output
22
+ end
23
+
24
+ it 'starts numbering at an arbitrary value' do
25
+ input = @input.sub(%r/<toc \/>/, '<toc numbering_start="3" />')
26
+ output = File.read(Webby.datapath(%w[outline numbering.out]))
27
+
28
+ outline = Webby::Filters::Outline.new(input)
29
+ outline.filter.should == output
30
+ end
31
+
32
+ it 'limits the range of headers the table of contents covers' do
33
+ input = @input.sub(%r/<toc \/>/, '<toc toc_range="h1-h3" />')
34
+ output = File.read(Webby.datapath(%w[outline toc_range_1.out]))
35
+
36
+ outline = Webby::Filters::Outline.new(input)
37
+ outline.filter.should == output
38
+
39
+ input = @input.sub(%r/<toc \/>/, '<toc toc_range="h2-h4" />')
40
+ output = File.read(Webby.datapath(%w[outline toc_range_2.out]))
41
+
42
+ outline = Webby::Filters::Outline.new(input)
43
+ outline.filter.should == output
44
+ end
45
+
46
+ it 'uses different list styling for the table of contents' do
47
+ input = @input.sub(%r/<toc \/>/, '<toc toc_style="ul" />')
48
+ output = File.read(Webby.datapath(%w[outline toc_style.out]))
49
+
50
+ outline = Webby::Filters::Outline.new(input)
51
+ outline.filter.should == output
52
+ end
53
+
54
+ it 'performs outline numbering without creatng a table of contents' do
55
+ input = @input.sub(%r/<toc \/>/, '')
56
+ output = File.read(Webby.datapath(%w[outline numbering_only.out]))
57
+
58
+ outline = Webby::Filters::Outline.new(input)
59
+ outline.filter.should == output
60
+ end
61
+
62
+ it 'detects mis-ordered heading tags' do
63
+ input = <<-HTML
64
+ <h2>Heading Three</h2>
65
+ <h3>Heading Two</h3>
66
+ <h1>Heading One</h1>
67
+ HTML
68
+ outline = Webby::Filters::Outline.new(input)
69
+
70
+ lambda {outline.filter}.should raise_error(
71
+ Webby::Error, "heading tags are not in order, cannot outline"
72
+ )
73
+ end
74
+
75
+ it 'does not clobber other HTML tags' do
76
+ html = <<-HTML
77
+ <div>
78
+ <p>This is the title</p>
79
+ <toc />
80
+ <p>And some sampler text</p>
81
+ </div>
82
+ HTML
83
+ input = @input.sub(%r/<toc \/>/, html)
84
+ output = File.read(Webby.datapath(%w[outline no_clobber.out]))
85
+
86
+ outline = Webby::Filters::Outline.new(input)
87
+ outline.filter.should == output
88
+ end
89
+
90
+ end
91
+
92
+ # EOF