webby 0.9.3-x86-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (229) hide show
  1. data/History.txt +206 -0
  2. data/Manifest.txt +228 -0
  3. data/README.txt +92 -0
  4. data/Rakefile +49 -0
  5. data/bin/webby +41 -0
  6. data/bin/webby-gen +41 -0
  7. data/examples/blog/Sitefile +7 -0
  8. data/examples/blog/tasks/blog.rake +72 -0
  9. data/examples/blog/templates/atom_feed.erb +40 -0
  10. data/examples/blog/templates/blog/month.erb +22 -0
  11. data/examples/blog/templates/blog/post.erb +16 -0
  12. data/examples/blog/templates/blog/year.erb +22 -0
  13. data/examples/presentation/Sitefile +10 -0
  14. data/examples/presentation/content/css/uv/twilight.css +137 -0
  15. data/examples/presentation/content/presentation/_sample_code.txt +10 -0
  16. data/examples/presentation/content/presentation/index.txt +63 -0
  17. data/examples/presentation/content/presentation/s5/blank.gif +0 -0
  18. data/examples/presentation/content/presentation/s5/bodybg.gif +0 -0
  19. data/examples/presentation/content/presentation/s5/framing.css +23 -0
  20. data/examples/presentation/content/presentation/s5/iepngfix.htc +42 -0
  21. data/examples/presentation/content/presentation/s5/opera.css +7 -0
  22. data/examples/presentation/content/presentation/s5/outline.css +15 -0
  23. data/examples/presentation/content/presentation/s5/pretty.css +86 -0
  24. data/examples/presentation/content/presentation/s5/print.css +25 -0
  25. data/examples/presentation/content/presentation/s5/s5-core.css +9 -0
  26. data/examples/presentation/content/presentation/s5/slides.css +3 -0
  27. data/examples/presentation/content/presentation/s5/slides.js +553 -0
  28. data/examples/presentation/layouts/presentation.txt +43 -0
  29. data/examples/presentation/templates/_code_partial.erb +13 -0
  30. data/examples/presentation/templates/presentation.erb +40 -0
  31. data/examples/tumblog/Sitefile +9 -0
  32. data/examples/tumblog/content/css/tumblog.css +308 -0
  33. data/examples/tumblog/content/images/tumblog/permalink.gif +0 -0
  34. data/examples/tumblog/content/images/tumblog/rss.gif +0 -0
  35. data/examples/tumblog/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
  36. data/examples/tumblog/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
  37. data/examples/tumblog/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
  38. data/examples/tumblog/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
  39. data/examples/tumblog/content/tumblog/200807/up-a-tree/index.txt +13 -0
  40. data/examples/tumblog/content/tumblog/index.txt +37 -0
  41. data/examples/tumblog/content/tumblog/rss.txt +37 -0
  42. data/examples/tumblog/layouts/tumblog/default.txt +44 -0
  43. data/examples/tumblog/layouts/tumblog/post.txt +15 -0
  44. data/examples/tumblog/lib/tumblog_helper.rb +32 -0
  45. data/examples/tumblog/tasks/tumblog.rake +30 -0
  46. data/examples/tumblog/templates/atom_feed.erb +40 -0
  47. data/examples/tumblog/templates/tumblog/conversation.erb +12 -0
  48. data/examples/tumblog/templates/tumblog/link.erb +10 -0
  49. data/examples/tumblog/templates/tumblog/photo.erb +13 -0
  50. data/examples/tumblog/templates/tumblog/post.erb +12 -0
  51. data/examples/tumblog/templates/tumblog/quote.erb +11 -0
  52. data/examples/webby/Sitefile +19 -0
  53. data/examples/webby/content/communicate/index.txt +28 -0
  54. data/examples/webby/content/css/background.gif +0 -0
  55. data/examples/webby/content/css/blueprint/print.css +76 -0
  56. data/examples/webby/content/css/blueprint/screen.css +696 -0
  57. data/examples/webby/content/css/coderay.css +96 -0
  58. data/examples/webby/content/css/site.css +196 -0
  59. data/examples/webby/content/css/uv/twilight.css +137 -0
  60. data/examples/webby/content/index.txt +37 -0
  61. data/examples/webby/content/learn/index.txt +28 -0
  62. data/examples/webby/content/reference/index.txt +204 -0
  63. data/examples/webby/content/release-notes/index.txt +21 -0
  64. data/examples/webby/content/release-notes/rel-0-9-0/index.txt +74 -0
  65. data/examples/webby/content/release-notes/rel-0-9-1/index.txt +93 -0
  66. data/examples/webby/content/release-notes/rel-0-9-2/index.txt +14 -0
  67. data/examples/webby/content/release-notes/rel-0-9-3/index.txt +49 -0
  68. data/examples/webby/content/robots.txt +6 -0
  69. data/examples/webby/content/script/jquery.corner.js +152 -0
  70. data/examples/webby/content/script/jquery.js +31 -0
  71. data/examples/webby/content/sitemap.txt +31 -0
  72. data/examples/webby/content/tips_and_tricks/index.txt +97 -0
  73. data/examples/webby/content/tutorial/index.txt +135 -0
  74. data/examples/webby/content/user-manual/index.txt +419 -0
  75. data/examples/webby/layouts/default.txt +49 -0
  76. data/examples/webby/templates/page.erb +10 -0
  77. data/examples/website/Sitefile +7 -0
  78. data/examples/website/content/css/blueprint/License.txt +21 -0
  79. data/examples/website/content/css/blueprint/Readme.txt +100 -0
  80. data/examples/website/content/css/blueprint/compressed/print.css +76 -0
  81. data/examples/website/content/css/blueprint/compressed/screen.css +696 -0
  82. data/examples/website/content/css/blueprint/lib/forms.css +45 -0
  83. data/examples/website/content/css/blueprint/lib/grid.css +193 -0
  84. data/examples/website/content/css/blueprint/lib/grid.png +0 -0
  85. data/examples/website/content/css/blueprint/lib/ie.css +30 -0
  86. data/examples/website/content/css/blueprint/lib/reset.css +39 -0
  87. data/examples/website/content/css/blueprint/lib/typography.css +116 -0
  88. data/examples/website/content/css/blueprint/plugins/buttons/Readme +31 -0
  89. data/examples/website/content/css/blueprint/plugins/buttons/buttons.css +97 -0
  90. data/examples/website/content/css/blueprint/plugins/buttons/icons/cross.png +0 -0
  91. data/examples/website/content/css/blueprint/plugins/buttons/icons/key.png +0 -0
  92. data/examples/website/content/css/blueprint/plugins/buttons/icons/tick.png +0 -0
  93. data/examples/website/content/css/blueprint/plugins/css-classes/Readme +14 -0
  94. data/examples/website/content/css/blueprint/plugins/css-classes/css-classes.css +24 -0
  95. data/examples/website/content/css/blueprint/plugins/fancy-type/Readme +22 -0
  96. data/examples/website/content/css/blueprint/plugins/fancy-type/fancy-type-compressed.css +5 -0
  97. data/examples/website/content/css/blueprint/plugins/fancy-type/fancy-type.css +74 -0
  98. data/examples/website/content/css/blueprint/print.css +68 -0
  99. data/examples/website/content/css/blueprint/screen.css +22 -0
  100. data/examples/website/content/css/coderay.css +111 -0
  101. data/examples/website/content/css/site.css +67 -0
  102. data/examples/website/content/index.txt +19 -0
  103. data/examples/website/layouts/default.txt +58 -0
  104. data/examples/website/lib/breadcrumbs.rb +28 -0
  105. data/examples/website/templates/_partial.erb +10 -0
  106. data/examples/website/templates/page.erb +18 -0
  107. data/lib/webby.rb +221 -0
  108. data/lib/webby/apps.rb +12 -0
  109. data/lib/webby/apps/generator.rb +276 -0
  110. data/lib/webby/apps/main.rb +255 -0
  111. data/lib/webby/auto_builder.rb +157 -0
  112. data/lib/webby/builder.rb +180 -0
  113. data/lib/webby/core_ext/enumerable.rb +11 -0
  114. data/lib/webby/core_ext/hash.rb +28 -0
  115. data/lib/webby/core_ext/kernel.rb +26 -0
  116. data/lib/webby/core_ext/string.rb +163 -0
  117. data/lib/webby/core_ext/time.rb +9 -0
  118. data/lib/webby/filters.rb +83 -0
  119. data/lib/webby/filters/basepath.rb +97 -0
  120. data/lib/webby/filters/erb.rb +9 -0
  121. data/lib/webby/filters/haml.rb +18 -0
  122. data/lib/webby/filters/markdown.rb +16 -0
  123. data/lib/webby/filters/outline.rb +309 -0
  124. data/lib/webby/filters/sass.rb +17 -0
  125. data/lib/webby/filters/slides.rb +56 -0
  126. data/lib/webby/filters/textile.rb +16 -0
  127. data/lib/webby/filters/tidy.rb +76 -0
  128. data/lib/webby/filters/wiki_words.rb +14 -0
  129. data/lib/webby/helpers.rb +30 -0
  130. data/lib/webby/helpers/capture_helper.rb +141 -0
  131. data/lib/webby/helpers/coderay_helper.rb +69 -0
  132. data/lib/webby/helpers/graphviz_helper.rb +136 -0
  133. data/lib/webby/helpers/tag_helper.rb +65 -0
  134. data/lib/webby/helpers/tex_img_helper.rb +133 -0
  135. data/lib/webby/helpers/ultraviolet_helper.rb +63 -0
  136. data/lib/webby/helpers/url_helper.rb +241 -0
  137. data/lib/webby/journal.rb +126 -0
  138. data/lib/webby/link_validator.rb +152 -0
  139. data/lib/webby/renderer.rb +386 -0
  140. data/lib/webby/resources.rb +136 -0
  141. data/lib/webby/resources/db.rb +251 -0
  142. data/lib/webby/resources/layout.rb +54 -0
  143. data/lib/webby/resources/meta_file.rb +211 -0
  144. data/lib/webby/resources/page.rb +81 -0
  145. data/lib/webby/resources/partial.rb +85 -0
  146. data/lib/webby/resources/resource.rb +201 -0
  147. data/lib/webby/resources/static.rb +36 -0
  148. data/lib/webby/stelan/mktemp.rb +135 -0
  149. data/lib/webby/stelan/paginator.rb +165 -0
  150. data/lib/webby/stelan/spawner.rb +339 -0
  151. data/lib/webby/tasks/build.rake +27 -0
  152. data/lib/webby/tasks/create.rake +22 -0
  153. data/lib/webby/tasks/deploy.rake +22 -0
  154. data/lib/webby/tasks/growl.rake +16 -0
  155. data/lib/webby/tasks/validate.rake +19 -0
  156. data/spec/core_ext/hash_spec.rb +47 -0
  157. data/spec/core_ext/string_spec.rb +110 -0
  158. data/spec/core_ext/time_spec.rb +19 -0
  159. data/spec/data/hooligans/bad_meta_data_1.txt +34 -0
  160. data/spec/data/hooligans/bad_meta_data_2.txt +34 -0
  161. data/spec/data/outline/basic.out +81 -0
  162. data/spec/data/outline/basic.txt +25 -0
  163. data/spec/data/outline/no_clobber.out +86 -0
  164. data/spec/data/outline/numbering.out +81 -0
  165. data/spec/data/outline/numbering_only.out +21 -0
  166. data/spec/data/outline/toc_range_1.out +66 -0
  167. data/spec/data/outline/toc_range_2.out +55 -0
  168. data/spec/data/outline/toc_style.out +81 -0
  169. data/spec/data/site/Sitefile +9 -0
  170. data/spec/data/site/content/_partial.txt +10 -0
  171. data/spec/data/site/content/css/coderay.css +111 -0
  172. data/spec/data/site/content/css/site.css +67 -0
  173. data/spec/data/site/content/css/tumblog.css +308 -0
  174. data/spec/data/site/content/images/tumblog/permalink.gif +0 -0
  175. data/spec/data/site/content/images/tumblog/rss.gif +0 -0
  176. data/spec/data/site/content/index.txt +19 -0
  177. data/spec/data/site/content/photos.txt +21 -0
  178. data/spec/data/site/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
  179. data/spec/data/site/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
  180. data/spec/data/site/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
  181. data/spec/data/site/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
  182. data/spec/data/site/content/tumblog/200807/up-a-tree/index.txt +13 -0
  183. data/spec/data/site/content/tumblog/index.txt +37 -0
  184. data/spec/data/site/content/tumblog/rss.txt +37 -0
  185. data/spec/data/site/layouts/default.txt +58 -0
  186. data/spec/data/site/layouts/tumblog/default.txt +44 -0
  187. data/spec/data/site/layouts/tumblog/post.txt +15 -0
  188. data/spec/data/site/lib/breadcrumbs.rb +28 -0
  189. data/spec/data/site/lib/tumblog_helper.rb +32 -0
  190. data/spec/data/site/tasks/tumblog.rake +30 -0
  191. data/spec/data/site/templates/_partial.erb +10 -0
  192. data/spec/data/site/templates/atom_feed.erb +40 -0
  193. data/spec/data/site/templates/page.erb +18 -0
  194. data/spec/data/site/templates/presentation.erb +40 -0
  195. data/spec/data/site/templates/tumblog/conversation.erb +12 -0
  196. data/spec/data/site/templates/tumblog/link.erb +10 -0
  197. data/spec/data/site/templates/tumblog/photo.erb +13 -0
  198. data/spec/data/site/templates/tumblog/post.erb +12 -0
  199. data/spec/data/site/templates/tumblog/quote.erb +11 -0
  200. data/spec/spec.opts +1 -0
  201. data/spec/spec_helper.rb +51 -0
  202. data/spec/webby/apps/generator_spec.rb +116 -0
  203. data/spec/webby/apps/main_spec.rb +88 -0
  204. data/spec/webby/filters/basepath_spec.rb +167 -0
  205. data/spec/webby/filters/outline_spec.rb +92 -0
  206. data/spec/webby/filters/textile_spec.rb +20 -0
  207. data/spec/webby/helpers/capture_helper_spec.rb +56 -0
  208. data/spec/webby/renderer_spec.rb +139 -0
  209. data/spec/webby/resources/db_spec.rb +250 -0
  210. data/spec/webby/resources/layout_spec.rb +83 -0
  211. data/spec/webby/resources/meta_file_spec.rb +171 -0
  212. data/spec/webby/resources/page_spec.rb +111 -0
  213. data/spec/webby/resources/partial_spec.rb +58 -0
  214. data/spec/webby/resources/resource_spec.rb +219 -0
  215. data/spec/webby/resources/static_spec.rb +49 -0
  216. data/spec/webby/resources_spec.rb +69 -0
  217. data/tasks/ann.rake +81 -0
  218. data/tasks/bones.rake +21 -0
  219. data/tasks/gem.rake +187 -0
  220. data/tasks/git.rake +41 -0
  221. data/tasks/manifest.rake +48 -0
  222. data/tasks/notes.rake +28 -0
  223. data/tasks/post_load.rake +39 -0
  224. data/tasks/rdoc.rake +51 -0
  225. data/tasks/rubyforge.rake +55 -0
  226. data/tasks/setup.rb +268 -0
  227. data/tasks/spec.rake +55 -0
  228. data/tasks/website.rake +38 -0
  229. metadata +365 -0
@@ -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,51 @@
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
+ require File.expand_path(
11
+ File.join(File.dirname(__FILE__), %w[.. lib webby]))
12
+
13
+ Spec::Runner.configure do |config|
14
+ config.before :all do
15
+ @pwd = Dir.pwd
16
+ Dir.chdir Webby.datapath('site')
17
+ FileUtils.mkdir_p Webby.datapath('site', ::Webby.site.output_dir)
18
+ end
19
+
20
+ config.after :all do
21
+ FileUtils.rm_rf(Webby.datapath('site', ::Webby.cairn))
22
+ FileUtils.rm_rf(Dir.glob(Webby.datapath(%w[site output *])))
23
+ Dir.chdir @pwd
24
+ end
25
+
26
+ # == Mock Framework
27
+ #
28
+ # RSpec uses it's own mocking framework by default. If you prefer to
29
+ # use mocha, flexmock or RR, uncomment the appropriate line:
30
+ #
31
+ # config.mock_with :mocha
32
+ # config.mock_with :flexmock
33
+ # config.mock_with :rr
34
+ end
35
+
36
+ module Webby
37
+ DATAPATH = ::Webby.path(%w[spec data])
38
+ def self.datapath( *args )
39
+ args.empty? ? DATAPATH : ::File.join(DATAPATH, args.flatten)
40
+ end
41
+ end
42
+
43
+ $webby_log_output = StringIO.new
44
+
45
+ logger = Logging::Logger['Webby']
46
+ logger.clear_appenders
47
+ logger.add_appenders(Logging::Appenders::IO.new('stringio', $webby_log_output))
48
+
49
+ end # unless defined?
50
+
51
+ # EOF
@@ -0,0 +1,116 @@
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/compressed",
40
+ "content/css/blueprint/lib",
41
+ "content/css/blueprint/plugins",
42
+ "content/css/blueprint/plugins/buttons",
43
+ "content/css/blueprint/plugins/buttons/icons",
44
+ "content/css/blueprint/plugins/css-classes",
45
+ "content/css/blueprint/plugins/fancy-type",
46
+ "layouts",
47
+ "lib",
48
+ "templates"
49
+ ]
50
+ h["content"].should == %w[content/index.txt]
51
+ h["layouts"].should == %w[layouts/default.txt]
52
+ end
53
+
54
+ describe "when parsing command line arguments" do
55
+
56
+ before :each do
57
+ @strio = StringIO.new
58
+ ::Logging::Logger['Webby::Journal'].appenders =
59
+ ::Logging::Appenders::IO.new('test', @strio)
60
+ @generator = Webby::Apps::Generator.new(@strio)
61
+
62
+ class << @strio
63
+ def to_s
64
+ seek 0
65
+ str = read
66
+ truncate 0
67
+ return str
68
+ end
69
+ end
70
+ end
71
+
72
+ it "should force the overwriting of files on collision" do
73
+ @generator.options[:collision].should be_nil
74
+ @generator.parse %w[-f website foo]
75
+ @generator.options[:collision].should == :force
76
+ end
77
+
78
+ it "should skip files on collision" do
79
+ @generator.options[:collision].should be_nil
80
+ @generator.parse %w[-s website foo]
81
+ @generator.options[:collision].should == :skip
82
+ end
83
+
84
+ it "should update only the rake files in the tasks folder" do
85
+ @generator.options[:update].should be_nil
86
+ @generator.parse %w[-u website foo]
87
+ @generator.options[:update].should == true
88
+ end
89
+
90
+ it "should pretend to generate / alter files" do
91
+ @generator.options[:pretend].should be_nil
92
+ @generator.parse %w[-p website foo]
93
+ @generator.options[:pretend].should == true
94
+ end
95
+
96
+ it "should exit if a site is not specified" do
97
+ # we need to force an error by changing directories back to the top
98
+ # level so we no longer have a Sitefile in the current directory
99
+ Dir.chdir @pwd
100
+
101
+ lambda{@generator.parse %w[website]}.
102
+ should raise_error(SystemExit, 'exit')
103
+ @strio.to_s.split("\n").first.
104
+ should == 'Usage: webby-gen [options] template site'
105
+ end
106
+
107
+ it "should exit if an unknown template is given" do
108
+ lambda{@generator.parse %w[foo bar]}.
109
+ should raise_error(SystemExit, 'exit')
110
+ @strio.to_s.split("\n").last.
111
+ should == " Could not find template 'foo'"
112
+ end
113
+ end
114
+ end
115
+
116
+ # 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