giraffesoft-webby 0.9.5

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.rb +233 -0
  114. data/lib/webby/apps.rb +12 -0
  115. data/lib/webby/apps/generator.rb +276 -0
  116. data/lib/webby/apps/main.rb +258 -0
  117. data/lib/webby/auto_builder.rb +157 -0
  118. data/lib/webby/builder.rb +172 -0
  119. data/lib/webby/core_ext/enumerable.rb +11 -0
  120. data/lib/webby/core_ext/hash.rb +28 -0
  121. data/lib/webby/core_ext/kernel.rb +26 -0
  122. data/lib/webby/core_ext/string.rb +163 -0
  123. data/lib/webby/core_ext/time.rb +9 -0
  124. data/lib/webby/filters.rb +85 -0
  125. data/lib/webby/filters/basepath.rb +97 -0
  126. data/lib/webby/filters/erb.rb +9 -0
  127. data/lib/webby/filters/haml.rb +18 -0
  128. data/lib/webby/filters/markdown.rb +16 -0
  129. data/lib/webby/filters/maruku.rb +16 -0
  130. data/lib/webby/filters/outline.rb +309 -0
  131. data/lib/webby/filters/sass.rb +17 -0
  132. data/lib/webby/filters/slides.rb +56 -0
  133. data/lib/webby/filters/textile.rb +16 -0
  134. data/lib/webby/filters/tidy.rb +76 -0
  135. data/lib/webby/filters/wiki_words.rb +14 -0
  136. data/lib/webby/helpers.rb +30 -0
  137. data/lib/webby/helpers/capture_helper.rb +141 -0
  138. data/lib/webby/helpers/coderay_helper.rb +69 -0
  139. data/lib/webby/helpers/graphviz_helper.rb +136 -0
  140. data/lib/webby/helpers/tag_helper.rb +65 -0
  141. data/lib/webby/helpers/tex_img_helper.rb +133 -0
  142. data/lib/webby/helpers/ultraviolet_helper.rb +63 -0
  143. data/lib/webby/helpers/url_helper.rb +241 -0
  144. data/lib/webby/journal.rb +126 -0
  145. data/lib/webby/link_validator.rb +160 -0
  146. data/lib/webby/renderer.rb +389 -0
  147. data/lib/webby/resources.rb +137 -0
  148. data/lib/webby/resources/db.rb +251 -0
  149. data/lib/webby/resources/layout.rb +54 -0
  150. data/lib/webby/resources/meta_file.rb +211 -0
  151. data/lib/webby/resources/page.rb +81 -0
  152. data/lib/webby/resources/partial.rb +85 -0
  153. data/lib/webby/resources/resource.rb +201 -0
  154. data/lib/webby/resources/static.rb +36 -0
  155. data/lib/webby/stelan/mktemp.rb +135 -0
  156. data/lib/webby/stelan/paginator.rb +165 -0
  157. data/lib/webby/tasks/build.rake +27 -0
  158. data/lib/webby/tasks/create.rake +25 -0
  159. data/lib/webby/tasks/deploy.rake +22 -0
  160. data/lib/webby/tasks/growl.rake +16 -0
  161. data/lib/webby/tasks/validate.rake +19 -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,18 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ filter:
5
+ - erb
6
+ - textile
7
+ ---
8
+ p(title). <%%= h(@page.title) %>
9
+
10
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc congue ipsum vestibulum libero. Aenean vitae justo. Nam eget tellus. Etiam convallis, est eu lobortis mattis, lectus tellus tempus felis, a ultricies erat ipsum at metus.
11
+
12
+ h2. Litora Sociis
13
+
14
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi et risus. Aliquam nisl. Nulla facilisi. Cras accumsan vestibulum ante. Vestibulum sed tortor. Praesent tempus fringilla elit. Ut elit diam, sagittis in, nonummy in, gravida non, nunc. Ut orci. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nam egestas, orci eu imperdiet malesuada, nisl purus fringilla odio, quis commodo est orci vitae justo. Aliquam placerat odio tincidunt nulla. Cras in libero. Aenean rutrum, magna non tristique posuere, erat odio eleifend nisl, non convallis est tortor blandit ligula. Nulla id augue.
15
+
16
+ bq. Nullam mattis, odio ut tempus facilisis, metus nisl facilisis metus, auctor consectetuer felis ligula nec mauris. Vestibulum odio erat, fermentum at, commodo vitae, ultrices et, urna. Mauris vulputate, mi pulvinar sagittis condimentum, sem nulla aliquam velit, sed imperdiet mi purus eu magna. Nulla varius metus ut eros. Aenean aliquet magna eget orci. Class aptent taciti sociosqu ad litora.
17
+
18
+ Vivamus euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse vel nibh ut turpis dictum sagittis. Aliquam vel velit a elit auctor sollicitudin. Nam vel dui vel neque lacinia pretium. Quisque nunc erat, venenatis id, volutpat ut, scelerisque sed, diam. Mauris ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec mattis. Morbi dignissim sollicitudin libero. Nulla lorem.
@@ -0,0 +1,40 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: You
5
+ company: Company
6
+ copyright: Creative Commons
7
+ filter:
8
+ - erb
9
+ - textile
10
+ - slides
11
+ layout: presentation
12
+ ---
13
+ h1. Presentation Title
14
+
15
+ Clever introductory text that will grab the audience's attention.
16
+
17
+
18
+ h1. Title of the First Slide
19
+
20
+ A little more build up before really getting into the meat of it.
21
+
22
+
23
+ h1. Title of the Second Slide
24
+
25
+ Finally, some code!
26
+
27
+ <%% uv :lang => 'ruby', :line_numbers => false do -%>
28
+ class EnglishMajor
29
+ def supercilious
30
+ 'behaving or looking as though one thinks one is superior to others'
31
+ end
32
+ end
33
+ <%% end -%>
34
+
35
+
36
+ h1. The Final Slide
37
+
38
+ And that about sums it up!
39
+
40
+ Thanks for visiting
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - textile
7
+ layout: tumblog/post
8
+ tumblog_type: conversation
9
+ ---
10
+ * %(label)me :% Why did the chicken cross the road?
11
+ * %(label)Buddha :% If you ask this question, you deny your own chicken nature.
12
+ * %(label)Darwin :% Chickens, over great periods of time, have been naturally selected in such a way that they are now genetically predisposed to cross roads.
@@ -0,0 +1,10 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - textile
7
+ layout: tumblog/post
8
+ tumblog_type: link
9
+ ---
10
+ "(link)Raising chickens in Madison, WI":http://www.madcitychickens.com/
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - erb
7
+ - textile
8
+ layout: tumblog/post
9
+ tumblog_type: photo
10
+ ---
11
+ !http://www.madcitychickens.com/images/bttrcups_tree.jpg(<%%= h(@page.title) %>)!
12
+
13
+ p(caption). via "Mad City Chickens":http://www.madcitychickens.com/
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - textile
7
+ layout: tumblog/post
8
+ tumblog_type: regular
9
+ ---
10
+ The *chicken* (_Gallus gallus_, sometimes _G. gallus domesticus_) is a domesticated fowl likely descended from the wild Indian and southeast Asian Red Junglefowl (_Gallus gallus_) and the related Grey Junglefowl (_G. sonneratii_). Traditionally it has been widely accepted that the chicken was descended solely from the former, as hybrids of both wild types tended toward sterility; but recent genetic work has revealed that the genotype for yellow skin present in the domestic fowl is not present in what is otherwise its closest kin, the Red Junglefowl. It is deemed most likely, then, that the yellow skin trait in domestic birds originated in the Grey Junglefowl.
11
+
12
+ The chicken is one of the most common and widespread domestic animals. With a population of more than 24 billion in 2003, there are more chickens in the world than any other bird. Humans keep chickens primarily as a source of food, with both their meat and their eggs consumed.
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - textile
7
+ layout: tumblog/post
8
+ tumblog_type: quote
9
+ ---
10
+ <big>&#147;</big> You can't hatch chickens from fried eggs.
11
+ %(source)Dutch Proverb%
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,58 @@
1
+ # Equivalent to a header guard in C/C++
2
+ # Used to prevent the spec helper from being loaded more than once
3
+ unless defined? WEBBY_SPEC_HELPER
4
+ WEBBY_SPEC_HELPER = true
5
+
6
+ require 'rubygems'
7
+ require 'fileutils'
8
+ require 'stringio'
9
+
10
+ begin
11
+ require 'fake_web'
12
+ $test_externals = true
13
+ rescue LoadError
14
+ $test_externals = false
15
+ end
16
+
17
+ require File.expand_path(
18
+ File.join(File.dirname(__FILE__), %w[.. lib webby]))
19
+
20
+ Spec::Runner.configure do |config|
21
+ config.before :all do
22
+ @pwd = Dir.pwd
23
+ Dir.chdir Webby.datapath('site')
24
+ FileUtils.mkdir_p Webby.datapath('site', ::Webby.site.output_dir)
25
+ end
26
+
27
+ config.after :all do
28
+ FileUtils.rm_rf(Webby.datapath('site', ::Webby.cairn))
29
+ FileUtils.rm_rf(Dir.glob(Webby.datapath(%w[site output *])))
30
+ Dir.chdir @pwd
31
+ end
32
+
33
+ # == Mock Framework
34
+ #
35
+ # RSpec uses it's own mocking framework by default. If you prefer to
36
+ # use mocha, flexmock or RR, uncomment the appropriate line:
37
+ #
38
+ # config.mock_with :mocha
39
+ # config.mock_with :flexmock
40
+ # config.mock_with :rr
41
+ end
42
+
43
+ module Webby
44
+ DATAPATH = ::Webby.path(%w[spec data])
45
+ def self.datapath( *args )
46
+ args.empty? ? DATAPATH : ::File.join(DATAPATH, args.flatten)
47
+ end
48
+ end
49
+
50
+ $webby_log_output = StringIO.new
51
+
52
+ logger = Logging::Logger['Webby']
53
+ logger.clear_appenders
54
+ logger.add_appenders(Logging::Appenders::IO.new('stringio', $webby_log_output))
55
+
56
+ end # unless defined?
57
+
58
+ # EOF
@@ -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