TwP-webby 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. data/History.txt +13 -0
  2. data/Manifest.txt +44 -34
  3. data/Rakefile +2 -2
  4. data/bin/webby +33 -0
  5. data/bin/webby-gen +33 -0
  6. data/examples/presentation/content/presentation/s5/bodybg.gif +0 -0
  7. data/examples/presentation/content/presentation/s5/print.css +25 -1
  8. data/examples/webby/content/release-notes/rel-0-9-3/index.txt +47 -0
  9. data/lib/webby/apps/generator.rb +41 -48
  10. data/lib/webby/apps/main.rb +22 -0
  11. data/lib/webby/auto_builder.rb +78 -6
  12. data/lib/webby/builder.rb +9 -9
  13. data/lib/webby/core_ext/kernel.rb +5 -0
  14. data/lib/webby/filters/wiki_words.rb +14 -0
  15. data/lib/webby/helpers/url_helper.rb +6 -0
  16. data/lib/webby/journal.rb +126 -0
  17. data/lib/webby/renderer.rb +11 -6
  18. data/lib/webby/resources/meta_file.rb +8 -5
  19. data/lib/webby/stelan/paginator.rb +2 -2
  20. data/lib/webby/tasks/growl.rake +4 -3
  21. data/lib/webby.rb +3 -10
  22. data/spec/data/outline/basic.out +81 -0
  23. data/spec/data/outline/basic.txt +25 -0
  24. data/spec/data/outline/no_clobber.out +86 -0
  25. data/spec/data/outline/numbering.out +81 -0
  26. data/spec/data/outline/numbering_only.out +21 -0
  27. data/spec/data/outline/toc_range_1.out +66 -0
  28. data/spec/data/outline/toc_range_2.out +55 -0
  29. data/spec/data/outline/toc_style.out +81 -0
  30. data/spec/data/{Sitefile → site/Sitefile} +0 -0
  31. data/spec/data/{content → site/content}/_partial.txt +0 -0
  32. data/spec/data/{content → site/content}/css/coderay.css +0 -0
  33. data/spec/data/{content → site/content}/css/site.css +0 -0
  34. data/spec/data/{content → site/content}/css/tumblog.css +0 -0
  35. data/spec/data/{content → site/content}/images/tumblog/permalink.gif +0 -0
  36. data/spec/data/{content → site/content}/images/tumblog/rss.gif +0 -0
  37. data/spec/data/{content → site/content}/index.txt +0 -0
  38. data/spec/data/{content → site/content}/photos.txt +0 -0
  39. data/spec/data/{content → site/content}/tumblog/200806/the-noble-chicken/index.txt +0 -0
  40. data/spec/data/{content → site/content}/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +0 -0
  41. data/spec/data/{content → site/content}/tumblog/200807/mad-city-chickens/index.txt +0 -0
  42. data/spec/data/{content → site/content}/tumblog/200807/the-wisdom-of-the-dutch/index.txt +0 -0
  43. data/spec/data/{content → site/content}/tumblog/200807/up-a-tree/index.txt +0 -0
  44. data/spec/data/{content → site/content}/tumblog/index.txt +0 -0
  45. data/spec/data/{content → site/content}/tumblog/rss.txt +0 -0
  46. data/spec/data/{layouts → site/layouts}/default.txt +0 -0
  47. data/spec/data/{layouts → site/layouts}/tumblog/default.txt +0 -0
  48. data/spec/data/{layouts → site/layouts}/tumblog/post.txt +0 -0
  49. data/spec/data/{lib → site/lib}/breadcrumbs.rb +0 -0
  50. data/spec/data/{lib → site/lib}/tumblog_helper.rb +0 -0
  51. data/spec/data/{tasks → site/tasks}/tumblog.rake +0 -0
  52. data/spec/data/{templates → site/templates}/_partial.erb +0 -0
  53. data/spec/data/{templates → site/templates}/atom_feed.erb +0 -0
  54. data/spec/data/{templates → site/templates}/page.erb +0 -0
  55. data/{examples/website → spec/data/site}/templates/presentation.erb +0 -0
  56. data/spec/data/{templates → site/templates}/tumblog/conversation.erb +0 -0
  57. data/spec/data/{templates → site/templates}/tumblog/link.erb +0 -0
  58. data/spec/data/{templates → site/templates}/tumblog/photo.erb +0 -0
  59. data/spec/data/{templates → site/templates}/tumblog/post.erb +0 -0
  60. data/spec/data/{templates → site/templates}/tumblog/quote.erb +0 -0
  61. data/spec/spec_helper.rb +4 -4
  62. data/spec/webby/apps/generator_spec.rb +3 -2
  63. data/spec/webby/filters/basepath_spec.rb +167 -0
  64. data/spec/webby/filters/outline_spec.rb +92 -0
  65. data/spec/webby/renderer_spec.rb +1 -1
  66. data/spec/webby/resources/db_spec.rb +1 -1
  67. data/spec/webby/resources/layout_spec.rb +1 -1
  68. data/spec/webby/resources/meta_file_spec.rb +27 -13
  69. data/spec/webby/resources/page_spec.rb +1 -1
  70. data/spec/webby/resources/resource_spec.rb +1 -1
  71. data/spec/webby/resources_spec.rb +1 -1
  72. data/tasks/gem.rake +93 -32
  73. data/tasks/manifest.rake +3 -4
  74. data/tasks/rubyforge.rake +2 -4
  75. metadata +67 -57
  76. data/lib/webby/stelan/spawner.rb +0 -339
  77. data/lib/webby/tasks/heel.rake +0 -28
  78. data/spec/data/templates/presentation.erb +0 -40
data/History.txt CHANGED
@@ -1,3 +1,16 @@
1
+ == 0.9.3 / 2008-10-08
2
+
3
+ * 4 minor enhancements
4
+ - Added a "wikiwords" filter to process [[text]] as links to other pages
5
+ (thanks to Paul)
6
+ - Added colorization to the output text (facets gem required)
7
+ - Replaced the Heel webserver with webrick
8
+ - Special windows version with windows line endings in generated files
9
+ * 2 bug fixes
10
+ - Fixed a bug on Windows where line endings were messing with meta-data
11
+ - The paginator was not linking correctly back to the first page from
12
+ subsequent pages in a list
13
+
1
14
  == 0.9.2 / 2008-09-11
2
15
 
3
16
  * 1 bug fix
data/Manifest.txt CHANGED
@@ -64,6 +64,7 @@ examples/webby/content/release-notes/index.txt
64
64
  examples/webby/content/release-notes/rel-0-9-0/index.txt
65
65
  examples/webby/content/release-notes/rel-0-9-1/index.txt
66
66
  examples/webby/content/release-notes/rel-0-9-2/index.txt
67
+ examples/webby/content/release-notes/rel-0-9-3/index.txt
67
68
  examples/webby/content/robots.txt
68
69
  examples/webby/content/script/jquery.corner.js
69
70
  examples/webby/content/script/jquery.js
@@ -103,7 +104,6 @@ examples/website/layouts/default.txt
103
104
  examples/website/lib/breadcrumbs.rb
104
105
  examples/website/templates/_partial.erb
105
106
  examples/website/templates/page.erb
106
- examples/website/templates/presentation.erb
107
107
  lib/webby.rb
108
108
  lib/webby/apps.rb
109
109
  lib/webby/apps/generator.rb
@@ -125,6 +125,7 @@ lib/webby/filters/sass.rb
125
125
  lib/webby/filters/slides.rb
126
126
  lib/webby/filters/textile.rb
127
127
  lib/webby/filters/tidy.rb
128
+ lib/webby/filters/wiki_words.rb
128
129
  lib/webby/helpers.rb
129
130
  lib/webby/helpers/capture_helper.rb
130
131
  lib/webby/helpers/coderay_helper.rb
@@ -133,6 +134,7 @@ lib/webby/helpers/tag_helper.rb
133
134
  lib/webby/helpers/tex_img_helper.rb
134
135
  lib/webby/helpers/ultraviolet_helper.rb
135
136
  lib/webby/helpers/url_helper.rb
137
+ lib/webby/journal.rb
136
138
  lib/webby/link_validator.rb
137
139
  lib/webby/renderer.rb
138
140
  lib/webby/resources.rb
@@ -145,53 +147,61 @@ lib/webby/resources/resource.rb
145
147
  lib/webby/resources/static.rb
146
148
  lib/webby/stelan/mktemp.rb
147
149
  lib/webby/stelan/paginator.rb
148
- lib/webby/stelan/spawner.rb
149
150
  lib/webby/tasks/build.rake
150
151
  lib/webby/tasks/create.rake
151
152
  lib/webby/tasks/deploy.rake
152
153
  lib/webby/tasks/growl.rake
153
- lib/webby/tasks/heel.rake
154
154
  lib/webby/tasks/validate.rake
155
155
  spec/core_ext/hash_spec.rb
156
156
  spec/core_ext/string_spec.rb
157
157
  spec/core_ext/time_spec.rb
158
- spec/data/Sitefile
159
- spec/data/content/_partial.txt
160
- spec/data/content/css/coderay.css
161
- spec/data/content/css/site.css
162
- spec/data/content/css/tumblog.css
163
- spec/data/content/images/tumblog/permalink.gif
164
- spec/data/content/images/tumblog/rss.gif
165
- spec/data/content/index.txt
166
- spec/data/content/photos.txt
167
- spec/data/content/tumblog/200806/the-noble-chicken/index.txt
168
- spec/data/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt
169
- spec/data/content/tumblog/200807/mad-city-chickens/index.txt
170
- spec/data/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt
171
- spec/data/content/tumblog/200807/up-a-tree/index.txt
172
- spec/data/content/tumblog/index.txt
173
- spec/data/content/tumblog/rss.txt
174
158
  spec/data/hooligans/bad_meta_data_1.txt
175
159
  spec/data/hooligans/bad_meta_data_2.txt
176
- spec/data/layouts/default.txt
177
- spec/data/layouts/tumblog/default.txt
178
- spec/data/layouts/tumblog/post.txt
179
- spec/data/lib/breadcrumbs.rb
180
- spec/data/lib/tumblog_helper.rb
181
- spec/data/tasks/tumblog.rake
182
- spec/data/templates/_partial.erb
183
- spec/data/templates/atom_feed.erb
184
- spec/data/templates/page.erb
185
- spec/data/templates/presentation.erb
186
- spec/data/templates/tumblog/conversation.erb
187
- spec/data/templates/tumblog/link.erb
188
- spec/data/templates/tumblog/photo.erb
189
- spec/data/templates/tumblog/post.erb
190
- spec/data/templates/tumblog/quote.erb
160
+ spec/data/outline/basic.out
161
+ spec/data/outline/basic.txt
162
+ spec/data/outline/no_clobber.out
163
+ spec/data/outline/numbering.out
164
+ spec/data/outline/numbering_only.out
165
+ spec/data/outline/toc_range_1.out
166
+ spec/data/outline/toc_range_2.out
167
+ spec/data/outline/toc_style.out
168
+ spec/data/site/Sitefile
169
+ spec/data/site/content/_partial.txt
170
+ spec/data/site/content/css/coderay.css
171
+ spec/data/site/content/css/site.css
172
+ spec/data/site/content/css/tumblog.css
173
+ spec/data/site/content/images/tumblog/permalink.gif
174
+ spec/data/site/content/images/tumblog/rss.gif
175
+ spec/data/site/content/index.txt
176
+ spec/data/site/content/photos.txt
177
+ spec/data/site/content/tumblog/200806/the-noble-chicken/index.txt
178
+ spec/data/site/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt
179
+ spec/data/site/content/tumblog/200807/mad-city-chickens/index.txt
180
+ spec/data/site/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt
181
+ spec/data/site/content/tumblog/200807/up-a-tree/index.txt
182
+ spec/data/site/content/tumblog/index.txt
183
+ spec/data/site/content/tumblog/rss.txt
184
+ spec/data/site/layouts/default.txt
185
+ spec/data/site/layouts/tumblog/default.txt
186
+ spec/data/site/layouts/tumblog/post.txt
187
+ spec/data/site/lib/breadcrumbs.rb
188
+ spec/data/site/lib/tumblog_helper.rb
189
+ spec/data/site/tasks/tumblog.rake
190
+ spec/data/site/templates/_partial.erb
191
+ spec/data/site/templates/atom_feed.erb
192
+ spec/data/site/templates/page.erb
193
+ spec/data/site/templates/presentation.erb
194
+ spec/data/site/templates/tumblog/conversation.erb
195
+ spec/data/site/templates/tumblog/link.erb
196
+ spec/data/site/templates/tumblog/photo.erb
197
+ spec/data/site/templates/tumblog/post.erb
198
+ spec/data/site/templates/tumblog/quote.erb
191
199
  spec/spec.opts
192
200
  spec/spec_helper.rb
193
201
  spec/webby/apps/generator_spec.rb
194
202
  spec/webby/apps/main_spec.rb
203
+ spec/webby/filters/basepath_spec.rb
204
+ spec/webby/filters/outline_spec.rb
195
205
  spec/webby/filters/textile_spec.rb
196
206
  spec/webby/helpers/capture_helper_spec.rb
197
207
  spec/webby/renderer_spec.rb
data/Rakefile CHANGED
@@ -14,7 +14,7 @@ PROJ.url = 'http://webby.rubyforge.org/'
14
14
  PROJ.description = paragraphs_of('README.txt', 3).join("\n\n")
15
15
  PROJ.rubyforge.name = 'webby'
16
16
  PROJ.version = Webby::VERSION
17
- PROJ.release_name = 'Gallus Gallus Toothicus ++'
17
+ PROJ.release_name = 'Bill Gates Alien Love Child'
18
18
 
19
19
  PROJ.ruby_opts = %w[-W0]
20
20
  PROJ.exclude << %w(^examples/[^/]+/output ^tasks/archive ^tags$ ^webby.gemspec$)
@@ -40,8 +40,8 @@ TwP
40
40
  ANN
41
41
 
42
42
  depend_on 'directory_watcher'
43
- depend_on 'heel'
44
43
  depend_on 'hpricot', '= 0.6.0'
44
+ depend_on 'launchy'
45
45
  depend_on 'logging'
46
46
  depend_on 'rake'
47
47
  depend_on 'rspec'
data/bin/webby CHANGED
@@ -1,5 +1,38 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'rubygems'
4
+ require 'logging'
5
+
6
+ ::Logging.configure {
7
+ logger('Webby') {
8
+ level :info
9
+ appenders 'stdout'
10
+ }
11
+
12
+ logger('Webby::Journal') {
13
+ level :info
14
+ additive false
15
+ appenders 'journal'
16
+ }
17
+
18
+ appender('stdout') {
19
+ type 'Stdout'
20
+ layout {
21
+ type 'Pattern'
22
+ pattern "[%d] %5l: %m\n"
23
+ date_pattern "%H:%M:%S"
24
+ }
25
+ }
26
+
27
+ appender('journal') {
28
+ type 'Stdout'
29
+ layout {
30
+ type 'Pattern'
31
+ pattern "%m\n"
32
+ }
33
+ }
34
+ }
35
+
3
36
  require File.expand_path(
4
37
  File.join(File.dirname(__FILE__), %w[.. lib webby]))
5
38
 
data/bin/webby-gen CHANGED
@@ -1,5 +1,38 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'rubygems'
4
+ require 'logging'
5
+
6
+ ::Logging.configure {
7
+ logger('Webby') {
8
+ level :info
9
+ appenders 'stdout'
10
+ }
11
+
12
+ logger('Webby::Journal') {
13
+ level :info
14
+ additive false
15
+ appenders 'journal'
16
+ }
17
+
18
+ appender('stdout') {
19
+ type 'Stdout'
20
+ layout {
21
+ type 'Pattern'
22
+ pattern "[%d] %5l: %m\n"
23
+ date_pattern "%H:%M:%S"
24
+ }
25
+ }
26
+
27
+ appender('journal') {
28
+ type 'Stdout'
29
+ layout {
30
+ type 'Pattern'
31
+ pattern "%m\n"
32
+ }
33
+ }
34
+ }
35
+
3
36
  require File.expand_path(
4
37
  File.join(File.dirname(__FILE__), %w[.. lib webby]))
5
38
 
@@ -1 +1,25 @@
1
- /* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */
1
+ /* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */
2
+ .slide, ul {page-break-inside: avoid; visibility: visible !important;}
3
+ h1 {page-break-after: avoid;}
4
+
5
+ body {font-size: 12pt; background: white;}
6
+ * {color: black;}
7
+
8
+ #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;}
9
+ #slide0 h3 {margin: 0; padding: 0;}
10
+ #slide0 h4 {margin: 0 0 0.5em; padding: 0;}
11
+ #slide0 {margin-bottom: 3em;}
12
+
13
+ h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;}
14
+ .extra {background: transparent !important;}
15
+ div.extra, pre.extra, .example {font-size: 10pt; color: #333;}
16
+ ul.extra a {font-weight: bold;}
17
+ p.example {display: none;}
18
+
19
+ #header {display: none;}
20
+ #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;}
21
+ #footer h2, #controls {display: none;}
22
+
23
+ /* The following rule keeps the layout stuff out of print. Remove at your own risk! */
24
+ .layout, .layout * {display: none !important;}
25
+
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: Release 0.9.3
3
+ created_at: 2008-10-08 21:22:41.217238 -06:00
4
+ filter:
5
+ - erb
6
+ - textile
7
+ release_name: Bill Gates Alien Love Child
8
+ ---
9
+ h2. <%= h(@page.title) %>
10
+
11
+ Release 0.9.3 adds several new features and fixes a few bugs. The two most significant features are a "wikiwords" filter and a special webby gem for the windows platform. See below for more information.
12
+
13
+ * 4 minor enhancements
14
+ ** Added a "wikiwords" filter to process [[text]] as links to other pages (thanks to Paul)
15
+ ** Added colorization to the output text (facets gem required)
16
+ ** Replaced the Heel webserver with webrick
17
+ ** Special windows version with windows line endings in generated files
18
+ * 2 bug fixes
19
+ ** Fixed a bug on Windows where line endings were messing with meta-data
20
+ ** The paginator was not linking correctly back to the first page from subsequent pages in a list
21
+
22
+ h3. Wiki Words
23
+
24
+ Wiki Words provide a convenient way to link to other pages in a site based on the page titles. Page titles surrounded by double brackets will be converted into a link to that particular page.
25
+
26
+ <pre>
27
+ <%= Webby::YAML_SEP %>
28
+ title: Special Report
29
+ created_at: 2008-10-08 21:22:41.217238 -06:00
30
+ filter:
31
+ - wikiwords
32
+ - textile
33
+ <%= Webby::YAML_SEP %>
34
+ h1. Special Report
35
+
36
+ This page is a special report that links to some [[Other Page]] in the site and
37
+ offers a little more information. You can find out more in the [[Reference]]
38
+ page, too.
39
+ </pre>
40
+
41
+ So, in the example above two links will be generated. One will link to the "Other Page" and the second will link to the "Reference" page.
42
+
43
+ h3. Windows Support
44
+
45
+ This release also fixes a few issues with webby on the windows platform. Both issues concern windows line endings versus UNIX line endings in files. The code that parses meta-data has been updated to be line ending agnostic -- so no need to use UNIX line endings in the windows world.
46
+
47
+ The second issue is a windows specific version of the webby gem. This gem has the template site files converted to the windows line ending style. So when a site is created using the webby-gen command, the resulting files should be in the native windows format.
@@ -1,5 +1,6 @@
1
1
  require 'fileutils'
2
2
  require 'optparse'
3
+ require 'forwardable'
3
4
 
4
5
  module Webby::Apps
5
6
 
@@ -9,6 +10,7 @@ module Webby::Apps
9
10
  #
10
11
 
11
12
  class Generator
13
+ extend Forwardable
12
14
 
13
15
  # Create a new Generator instance and run the +webby+ application given the
14
16
  # command line _args_.
@@ -22,10 +24,34 @@ class Generator
22
24
 
23
25
  # Initialize a new generator object.
24
26
  #
25
- def initialize
27
+ def initialize( output = $stdout, input = $stdin )
26
28
  @options = {}
27
29
  @site = @template = nil
28
- @stdout, @stdin = $stdout, $stdin
30
+ @output, @input = output, input
31
+ @journal = journal
32
+ end
33
+
34
+ def_delegators :@journal,
35
+ :exists, :create, :force, :skip, :identical
36
+
37
+ # Writes the given objects to the output destination. Each object is
38
+ # followed by a newline unless the object is a string with a newline
39
+ # already at the end.
40
+ #
41
+ def puts( *args )
42
+ @output.puts(*args)
43
+ end
44
+
45
+ # Writes the given objects to the output destination.
46
+ #
47
+ def print( *args )
48
+ @output.print(*args)
49
+ end
50
+
51
+ # Reads a line text frim the input source.
52
+ #
53
+ def gets
54
+ @input.gets
29
55
  end
30
56
 
31
57
  # Run the generator executing the commands specified by the user on the
@@ -60,18 +86,18 @@ class Generator
60
86
  opts.on('-t', '--templates', 'list available templates') {
61
87
  ary = templates.map {|t| ::File.basename(t)}
62
88
  ary.delete 'webby'
63
- @stdout.puts "\nAvailable Templates"
64
- @stdout.puts " #{ary.join(', ')}"
65
- @stdout.puts
89
+ puts "\nAvailable Templates"
90
+ puts " #{ary.join(', ')}"
91
+ puts
66
92
  exit
67
93
  }
68
94
 
69
95
  opts.separator ''
70
96
  opts.separator 'common options:'
71
97
 
72
- opts.on( '-h', '--help', 'show this message' ) {@stdout.puts opts; exit}
98
+ opts.on( '-h', '--help', 'show this message' ) {puts opts; exit}
73
99
  opts.on( '--version', 'show version' ) do
74
- @stdout.puts "Webby #{::Webby::VERSION}"
100
+ puts "Webby #{::Webby::VERSION}"
75
101
  exit
76
102
  end
77
103
 
@@ -87,13 +113,13 @@ class Generator
87
113
 
88
114
  # exit if comand line args are missing
89
115
  if site.nil? or tmpl.nil?
90
- @stdout.puts opts
116
+ puts opts
91
117
  exit 1
92
118
  end
93
119
 
94
120
  templates.each {|t| self.template = t if t =~ %r/\/#{tmpl}$/}
95
121
  if template.nil?
96
- @stdout.puts opts
122
+ puts opts
97
123
  abort "Could not find template '#{tmpl}'"
98
124
  end
99
125
 
@@ -184,46 +210,16 @@ class Generator
184
210
  end
185
211
  return if pretend?
186
212
 
187
- if WINDOWS then win_line_endings(src, dst)
188
- else FileUtils.cp(src, dst) end
189
- end
190
-
191
- # Copy the file from the _src_ location to the _dst_ location and
192
- # transform the line endings to the windows "\r\n" format.
193
- #
194
- def win_line_endings( src, dst )
195
- case ::File.extname(src)
196
- when *%w[.png .gif .jpg .jpeg]
197
- FileUtils.cp src, dst
198
- else
199
- ::File.open(dst,'w') do |fd|
200
- ::File.foreach(src, "\n") do |line|
201
- line.tr!("\r\n",'')
202
- fd.puts line
203
- end
204
- end
205
- end
206
- end
207
-
208
- %w[exists create force skip identical].each do |m|
209
- class_eval "def #{m}( msg ) message('#{m}', msg); end"
210
- end
211
-
212
- # Print the given message and message type to stdout.
213
- #
214
- def message( type, msg )
215
- msg = msg.sub(%r/#{site}\/?/, '')
216
- return if msg.empty?
217
- @stdout.puts "%13s %s" % [type, msg]
213
+ FileUtils.cp(src, dst)
218
214
  end
219
215
 
220
216
  # Prints an abort message to the screen and then exits the Ruby
221
217
  # interpreter. A non-zero return code is used to indicate an error.
222
218
  #
223
219
  def abort( msg )
224
- @stdout.puts "\nAborting!"
225
- @stdout.puts " #{msg}"
226
- @stdout.puts
220
+ puts "\nAborting!"
221
+ puts " #{msg}"
222
+ puts
227
223
  exit 1
228
224
  end
229
225
 
@@ -254,8 +250,6 @@ class Generator
254
250
  # Returns +false+ if this is not the case.
255
251
  #
256
252
  def identical?( src, dst )
257
- # FIXME: this most likely won't work on windows machines
258
- # because the line endings are modified when the site is gnerated
259
253
  source = IO.read(src)
260
254
  destination = IO.read(dst)
261
255
  source == destination
@@ -265,9 +259,8 @@ class Generator
265
259
  #
266
260
  def force_file_collision?( dst )
267
261
  dst = dst.sub(%r/#{site}\/?/, '')
268
- @stdout.print "overwrite #{dst}? [(Y)es (n)o (q)uit] "
269
- @stdout.flush
270
- case @stdin.gets
262
+ print "overwrite #{dst}? [(Y)es (n)o (q)uit] "
263
+ case gets
271
264
  when %r/q/i then abort 'user asked to quit'
272
265
  when %r/n/i then :skip
273
266
  when %r/y/i then :force
@@ -12,10 +12,13 @@ class Main
12
12
  self.new.run args
13
13
  end
14
14
 
15
+ attr_reader :cmd_line_options
16
+
15
17
  # Create a new Main webby object for building websites.
16
18
  #
17
19
  def initialize
18
20
  @stdout = $stdout
21
+ @cmd_line_options = {}
19
22
  end
20
23
 
21
24
  # Runs the main webby application. The command line arguments are passed
@@ -44,6 +47,16 @@ class Main
44
47
  opts.on(*options)
45
48
  end
46
49
 
50
+ opts.separator ''
51
+ opts.separator 'autobuild options:'
52
+
53
+ opts.on('--web-server', 'Start a local web server') {
54
+ cmd_line_options[:use_web_server] = true
55
+ }
56
+ opts.on('--no-web-server', 'Do not start a local web server') {
57
+ cmd_line_options[:use_web_server] = false
58
+ }
59
+
47
60
  opts.separator ''
48
61
  opts.separator 'common options:'
49
62
 
@@ -98,6 +111,7 @@ class Main
98
111
  def rake
99
112
  app.init 'webby'
100
113
  app.load_rakefile
114
+ load_command_line_options
101
115
  app.top_level
102
116
  end
103
117
 
@@ -167,6 +181,14 @@ class Main
167
181
  args
168
182
  end
169
183
 
184
+ # Load options from the command line into the ::Webby.site struct
185
+ #
186
+ def load_command_line_options
187
+ cmd_line_options.each do |key, value|
188
+ ::Webby.site.__send__("#{key}=", value)
189
+ end
190
+ end
191
+
170
192
  end # class Main
171
193
  end # module Webby::Apps
172
194
 
@@ -1,4 +1,6 @@
1
1
  require 'directory_watcher'
2
+ require 'launchy'
3
+ require 'webrick'
2
4
 
3
5
  module Webby
4
6
 
@@ -21,13 +23,15 @@ class AutoBuilder
21
23
  self.new.run
22
24
  end
23
25
 
26
+ attr_reader :logger
27
+
24
28
  # call-seq:
25
29
  # AutoBuilder.new
26
30
  #
27
31
  # Create a new AutoBuilder class.
28
32
  #
29
33
  def initialize
30
- @log = Logging::Logger[self]
34
+ @logger = Logging::Logger[self]
31
35
 
32
36
  @builder = Builder.new
33
37
  @builder.load_files
@@ -39,6 +43,8 @@ class AutoBuilder
39
43
  glob << File.join(::Webby.site.layout_dir, '**', '*')
40
44
  glob << File.join(::Webby.site.content_dir, '**', '*')
41
45
  @watcher.glob = glob
46
+
47
+ @web_server = ::Webby.site.use_web_server ? WebServer.new : nil
42
48
  end
43
49
 
44
50
  # call-seq:
@@ -53,15 +59,16 @@ class AutoBuilder
53
59
  return if ary.empty?
54
60
 
55
61
  ary.each do |evt|
56
- @log.debug "changed #{evt.path}"
62
+ logger.debug "changed #{evt.path}"
57
63
  next unless test ?f, evt.path
58
64
  next if evt.path =~ ::Webby.exclude
59
65
  Resources.new evt.path
60
66
  end
61
67
 
62
- @builder.run :load_files => false
68
+ logger.info 'running the build'
69
+ @builder.run :load_files => false, :verbose => false
63
70
  rescue => err
64
- @log.error err
71
+ logger.error err
65
72
  end
66
73
 
67
74
  # call-seq:
@@ -71,14 +78,79 @@ class AutoBuilder
71
78
  # Ctrl-C to stop the watcher thread.
72
79
  #
73
80
  def run
74
- @log.info 'starting autobuild (Ctrl-C to stop)'
81
+ logger.info 'starting autobuild (Ctrl-C to stop)'
75
82
 
76
- Signal.trap('INT') {@watcher.stop}
83
+ Signal.trap('INT') {
84
+ @watcher.stop
85
+ @web_server.stop if @web_server
86
+ }
77
87
 
78
88
  @watcher.start
89
+ if @web_server
90
+ @web_server.start
91
+ sleep 0.25
92
+ Launchy.open("http://localhost:#{::Webby.site.heel_port}")
93
+ end
94
+
79
95
  @watcher.join
96
+ @web_server.join if @web_server
80
97
  end
81
98
 
99
+ # Wrapper class around the webrick web server.
100
+ #
101
+ class WebServer
102
+
103
+ # Create a new webrick server configured to serve pages from the output
104
+ # directory. Output will be directed to /dev/null.
105
+ #
106
+ def initialize
107
+ logger = WEBrick::Log.new(Kernel::DEV_NULL, WEBrick::Log::DEBUG)
108
+ access_log = [[ logger, WEBrick::AccessLog::COMBINED_LOG_FORMAT ]]
109
+
110
+ @thread = nil
111
+ @running = false
112
+ @server = WEBrick::HTTPServer.new(
113
+ :BindAddress => 'localhost',
114
+ :Port => ::Webby.site.heel_port,
115
+ :DocumentRoot => ::Webby.site.output_dir,
116
+ :FancyIndexing => true,
117
+ :Logger => logger,
118
+ :AccessLog => access_log
119
+ )
120
+ end
121
+
122
+ # Returns +true+ if the server is running.
123
+ #
124
+ def running?
125
+ @running
126
+ end
127
+
128
+ # Start the webrick server running in a separate thread (so we don't
129
+ # block forever).
130
+ #
131
+ def start
132
+ return if running?
133
+ @running = true
134
+ @thread = Thread.new {@server.start}
135
+ end
136
+
137
+ # Stop the webrick server.
138
+ #
139
+ def stop
140
+ return if not running?
141
+ @running = false
142
+ @server.shutdown
143
+ end
144
+
145
+ # Join on the webserver thread.
146
+ #
147
+ def join
148
+ return if not running?
149
+ @thread.join
150
+ end
151
+
152
+ end # class WebServer
153
+
82
154
  end # class AutoBuilder
83
155
  end # module Webby
84
156