webby 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/History.txt +7 -0
  2. data/Manifest.txt +30 -1
  3. data/Rakefile +6 -2
  4. data/bin/webby +1 -1
  5. data/data/Rakefile +6 -2
  6. data/data/content/{index.rhtml → index.txt} +0 -0
  7. data/data/tasks/create.rake +6 -1
  8. data/data/tasks/deploy.rake +22 -0
  9. data/data/tasks/heel.rake +26 -0
  10. data/data/tasks/setup.rb +27 -0
  11. data/lib/webby.rb +20 -12
  12. data/lib/webby/builder.rb +6 -19
  13. data/lib/webby/main.rb +85 -15
  14. data/lib/webby/pages_db.rb +24 -1
  15. data/lib/webby/renderer.rb +25 -3
  16. data/lib/webby/resource.rb +89 -13
  17. data/lib/webby/webby_task.rb +19 -41
  18. data/tasks/doc.rake +2 -19
  19. data/tasks/gem.rake +14 -41
  20. data/tasks/manifest.rake +1 -1
  21. data/tasks/rubyforge.rake +57 -0
  22. data/tasks/setup.rb +6 -5
  23. data/tasks/spec.rake +3 -3
  24. data/tasks/website.rake +38 -0
  25. data/website/Rakefile +13 -0
  26. data/website/content/css/blueprint/lib/buttons.css +112 -0
  27. data/website/content/css/blueprint/lib/compressed.css +127 -0
  28. data/website/content/css/blueprint/lib/grid.css +177 -0
  29. data/website/content/css/blueprint/lib/img/baseline-black.png +0 -0
  30. data/website/content/css/blueprint/lib/img/baseline.png +0 -0
  31. data/website/content/css/blueprint/lib/img/grid.png +0 -0
  32. data/website/content/css/blueprint/lib/img/icons/cross.png +0 -0
  33. data/website/content/css/blueprint/lib/img/icons/textfield_key.png +0 -0
  34. data/website/content/css/blueprint/lib/img/icons/tick.png +0 -0
  35. data/website/content/css/blueprint/lib/reset.css +37 -0
  36. data/website/content/css/blueprint/lib/typography.css +159 -0
  37. data/website/content/css/blueprint/print.css +75 -0
  38. data/website/content/css/blueprint/screen.css +34 -0
  39. data/website/content/css/site.css +22 -0
  40. data/website/content/download.txt +8 -0
  41. data/website/content/index.txt +28 -0
  42. data/website/content/tutorial.txt +130 -0
  43. data/website/layouts/default.rhtml +49 -0
  44. data/website/tasks/create.rake +11 -0
  45. data/website/tasks/deploy.rake +22 -0
  46. data/website/tasks/heel.rake +26 -0
  47. data/website/tasks/setup.rb +27 -0
  48. data/website/templates/page.erb +8 -0
  49. metadata +33 -14
@@ -1,3 +1,10 @@
1
+ == 0.2.0 / 2007-08-28
2
+
3
+ * Updated rake tasks for website deployment
4
+ * Can use 'heel' and 'launchy' for viewing websites
5
+ * Webby executable can update rake tasks for existing websites
6
+ * Added more rdoc documentation to classes
7
+
1
8
  == 0.1.0 / 2007-08-22
2
9
 
3
10
  * Birthday!
@@ -20,9 +20,12 @@ data/content/css/blueprint/lib/typography.css
20
20
  data/content/css/blueprint/print.css
21
21
  data/content/css/blueprint/screen.css
22
22
  data/content/css/site.css
23
- data/content/index.rhtml
23
+ data/content/index.txt
24
24
  data/layouts/default.rhtml
25
25
  data/tasks/create.rake
26
+ data/tasks/deploy.rake
27
+ data/tasks/heel.rake
28
+ data/tasks/setup.rb
26
29
  data/templates/page.erb
27
30
  lib/webby.rb
28
31
  lib/webby/auto_builder.rb
@@ -40,5 +43,31 @@ spec/webby/file_spec.rb
40
43
  tasks/doc.rake
41
44
  tasks/gem.rake
42
45
  tasks/manifest.rake
46
+ tasks/rubyforge.rake
43
47
  tasks/setup.rb
44
48
  tasks/spec.rake
49
+ tasks/website.rake
50
+ website/Rakefile
51
+ website/content/css/blueprint/lib/buttons.css
52
+ website/content/css/blueprint/lib/compressed.css
53
+ website/content/css/blueprint/lib/grid.css
54
+ website/content/css/blueprint/lib/img/baseline-black.png
55
+ website/content/css/blueprint/lib/img/baseline.png
56
+ website/content/css/blueprint/lib/img/grid.png
57
+ website/content/css/blueprint/lib/img/icons/cross.png
58
+ website/content/css/blueprint/lib/img/icons/textfield_key.png
59
+ website/content/css/blueprint/lib/img/icons/tick.png
60
+ website/content/css/blueprint/lib/reset.css
61
+ website/content/css/blueprint/lib/typography.css
62
+ website/content/css/blueprint/print.css
63
+ website/content/css/blueprint/screen.css
64
+ website/content/css/site.css
65
+ website/content/download.txt
66
+ website/content/index.txt
67
+ website/content/tutorial.txt
68
+ website/layouts/default.rhtml
69
+ website/tasks/create.rake
70
+ website/tasks/deploy.rake
71
+ website/tasks/heel.rake
72
+ website/tasks/setup.rb
73
+ website/templates/page.erb
data/Rakefile CHANGED
@@ -4,6 +4,7 @@ require 'rubygems'
4
4
  require 'rake'
5
5
  require 'spec'
6
6
  require 'webby'
7
+ require 'fileutils'
7
8
  load './tasks/setup.rb'
8
9
 
9
10
  task :default => 'spec:run'
@@ -16,10 +17,13 @@ PROJ.url = 'http://webby.rubyforge.org/'
16
17
  PROJ.description = paragraphs_of('README.txt', 3).join("\n\n")
17
18
  PROJ.changes = paragraphs_of('History.txt', 0..1).join("\n\n")
18
19
  PROJ.rubyforge_name = 'webby'
19
-
20
+ PROJ.rdoc_dir = 'doc/rdoc'
21
+ PROJ.rdoc_remote_dir = 'rdoc'
20
22
  PROJ.version = Webby::VERSION
21
23
 
22
- PROJ.exclude << '^(\.\/|\/)?site'
24
+ PROJ.exclude << '^(\.\/|\/)?website/output'
25
+ PROJ.rdoc_exclude << '^(\.\/|\/)?data'
26
+ PROJ.rdoc_exclude << '^(\.\/|\/)?website'
23
27
 
24
28
  PROJ.spec_opts << '--color'
25
29
 
data/bin/webby CHANGED
@@ -9,6 +9,6 @@ rescue LoadError
9
9
  retry
10
10
  end
11
11
 
12
- ::Webby::Main.run *ARGV
12
+ ::Webby::Main.run ARGV
13
13
 
14
14
  # EOF
@@ -1,6 +1,10 @@
1
1
 
2
+ require 'webby'
3
+ load 'tasks/setup.rb'
4
+
2
5
  task :default => :build
3
6
 
4
- # import rake tasks
5
- FileList['tasks/*.rake'].each {|task| import task}
7
+ desc 'depoloy the site to the webserver'
8
+ task :deploy => [:build, 'deploy:rsync']
6
9
 
10
+ # EOF
File without changes
@@ -2,6 +2,11 @@
2
2
  require 'webby'
3
3
 
4
4
  Rake::WebbyTask.new do |webby|
5
- webby.output_dir = 'output'
5
+ webby.content_dir = SITE.content_dir
6
+ webby.output_dir = SITE.output_dir
7
+ webby.layout_dir = SITE.layout_dir
8
+ webby.template_dir = SITE.template_dir
9
+ webby.exclude = SITE.exclude
10
+ webby.page_defaults = SITE.page_defaults
6
11
  end
7
12
 
@@ -0,0 +1,22 @@
1
+
2
+ require 'rake/contrib/sshpublisher'
3
+
4
+ namespace :deploy do
5
+
6
+ desc 'deploy to the server using rsync'
7
+ task :rsync do
8
+ cmd = "rsync #{SITE.rsync_args.join(' ')} "
9
+ cmd << "#{SITE.output_dir}/ #{SITE.host}:#{SITE.remote_dir}"
10
+ sh cmd
11
+ end
12
+
13
+ desc 'deploy to the server using ssh'
14
+ task 'ssh' do
15
+ Rake::SshDirPublisher.new(
16
+ SITE.host, SITE.remote_dir, SITE.output_dir
17
+ ).upload
18
+ end
19
+
20
+ end # deploy
21
+
22
+ # EOF
@@ -0,0 +1,26 @@
1
+
2
+ if HAVE_HEEL
3
+
4
+ namespace :heel do
5
+
6
+ desc 'start the heel server to view website'
7
+ task :run do
8
+ sh "heel --root #{SITE.output_dir} --daemonize"
9
+ end
10
+
11
+ desc 'stop the heel server'
12
+ task :kill do
13
+ sh "heel --kill"
14
+ end
15
+
16
+ task :autobuild => :run do
17
+ at_exit {sh "heel --kill"}
18
+ end
19
+
20
+ end
21
+
22
+ task :autobuild => 'heel:autobuild'
23
+
24
+ end # HAVE_HEEL
25
+
26
+ # EOF
@@ -0,0 +1,27 @@
1
+
2
+ require 'ostruct'
3
+
4
+ SITE = OpenStruct.new
5
+
6
+ SITE.content_dir = 'content'
7
+ SITE.output_dir = 'output'
8
+ SITE.layout_dir = 'layouts'
9
+ SITE.template_dir = 'templates'
10
+ SITE.exclude = %w[tmp$ bak$ ~$ CVS \.svn]
11
+
12
+ SITE.page_defaults = {
13
+ 'extension' => 'html',
14
+ 'layout' => 'default'
15
+ }
16
+
17
+ SITE.host = 'user@hostname.tld'
18
+ SITE.remote_dir = '/not/a/valid/dir'
19
+ SITE.rsync_args = %w(-av --delete)
20
+
21
+ FileList['tasks/*.rake'].each {|task| import task}
22
+
23
+ %w(heel).each do |lib|
24
+ Object.instance_eval {const_set "HAVE_#{lib.upcase}", try_require(lib)}
25
+ end
26
+
27
+ # EOF
@@ -1,8 +1,8 @@
1
- # $Id: webby.rb 8 2007-08-22 22:32:09Z tim_pease $
1
+ # $Id: webby.rb 19 2007-08-28 22:48:24Z tim_pease $
2
2
 
3
3
  module Webby
4
4
 
5
- VERSION = '0.1.0' # :nodoc:
5
+ VERSION = '0.2.0' # :nodoc:
6
6
 
7
7
  # Path to the Webby package
8
8
  PATH = ::File.expand_path(::File.join(::File.dirname(__FILE__), '..'))
@@ -29,36 +29,44 @@ module Webby
29
29
  # Webby.config => hash
30
30
  #
31
31
  # Returns the configuration hash for the Webby application.
32
- #--
33
- # The defaults are defined in the lib/webby/webby_task.rb file
34
- #++
32
+ #
35
33
  def self.config
36
- @config ||= {}
34
+ @config ||= {
35
+ 'output_dir' => 'output',
36
+ 'content_dir' => 'content',
37
+ 'layout_dir' => 'layouts',
38
+ 'template_dir' => 'templates',
39
+ 'exclude' => %w(tmp$ bak$ ~$ CVS \.svn)
40
+ }
37
41
  end
38
42
 
39
43
  # call-seq:
40
44
  # Webby.page_defaults => hash
41
45
  #
42
46
  # Returns the page defaults hash used for page resource objects.
43
- #--
44
- # The defaults are defined in the lib/webby/webby_task.rb file
45
- #++
47
+ #
46
48
  def self.page_defaults
47
- @page_defaults ||= {}
49
+ @page_defaults ||= {
50
+ 'extension' => 'html',
51
+ 'layout' => 'default'
52
+ }
48
53
  end
49
54
 
50
55
  end # module Webby
51
56
 
52
57
 
53
58
  # call-seq:
54
- # try_require( library )
59
+ # try_require( library ) => true or false
55
60
  #
56
61
  # Try to laod the given _library_ using the built-in require, but do not
57
- # raise a LoadError if unsuccessful.
62
+ # raise a LoadError if unsuccessful. Returns +true+ if the _library_ was
63
+ # successfully loaded; returns +false+ otherwise.
58
64
  #
59
65
  def try_require( lib )
60
66
  require lib
67
+ true
61
68
  rescue LoadError
69
+ false
62
70
  end
63
71
 
64
72
 
@@ -1,4 +1,4 @@
1
- # $Id: builder.rb 5 2007-08-22 04:25:49Z tim_pease $
1
+ # $Id: builder.rb 16 2007-08-25 19:55:00Z tim_pease $
2
2
 
3
3
  require 'find'
4
4
  require 'fileutils'
@@ -77,8 +77,7 @@ class Builder
77
77
  FileUtils.mkdir output_dir
78
78
  end
79
79
 
80
- load_layouts
81
- load_content
80
+ load_files
82
81
 
83
82
  Resource.pages.each do |page|
84
83
  next unless page.dirty? or opts[:rebuild]
@@ -111,13 +110,13 @@ class Builder
111
110
 
112
111
  private
113
112
 
114
- # Scan the <code>layouts/</code> folder and create a new Resource object
115
- # for each file found there.
113
+ # Scan the <code>layouts/</code> folder and the <code>content/</code>
114
+ # folder and create a new Resource object for each file found there.
116
115
  #
117
- def load_layouts
116
+ def load_files
118
117
  excl = Regexp.new exclude.join('|')
119
118
 
120
- ::Find.find(layout_dir) do |path|
119
+ ::Find.find(layout_dir, content_dir) do |path|
121
120
  next unless test ?f, path
122
121
  next if path =~ excl
123
122
  Resource.new path
@@ -141,18 +140,6 @@ class Builder
141
140
  end # each
142
141
  end
143
142
 
144
- # Scan the <code>content/</code> folder and create a new Resource object
145
- # for each file found there.
146
- #
147
- def load_content
148
- excl = Regexp.new exclude.join('|')
149
- Find.find(content_dir) do |path|
150
- next unless test ?f, path
151
- next if path =~ excl
152
- Resource.new path, ::Webby.page_defaults
153
- end
154
- end
155
-
156
143
  %w(output_dir layout_dir content_dir exclude).each do |key|
157
144
  self.class_eval <<-CODE
158
145
  def #{key}( ) ::Webby.config['#{key}'] end
@@ -1,7 +1,8 @@
1
- # $Id: main.rb 2 2007-08-20 17:55:30Z tim_pease $
1
+ # $Id: main.rb 20 2007-08-28 23:24:14Z tim_pease $
2
2
 
3
3
  require 'fileutils'
4
4
  require 'find'
5
+ require 'optparse'
5
6
 
6
7
  module Webby
7
8
 
@@ -16,40 +17,97 @@ class Main
16
17
  # Directory where the prototype Webby website can be found
17
18
  attr_accessor :data
18
19
 
20
+ # Flag used to update an existing website
21
+ attr_accessor :update
22
+
19
23
  # call-seq:
20
- # Main.run( *args ) => nil
24
+ # Main.run( args ) => nil
21
25
  #
22
26
  # Create a new instance of Main, and run the +webby+ application given the
23
27
  # command line _args_.
24
28
  #
25
- def self.run( *args )
26
- self.new.run *args
29
+ def self.run( args )
30
+ m = self.new
31
+ m.parse args
32
+
33
+ if m.update then m.update_site
34
+ else m.create_site end
27
35
  end
28
36
 
29
37
  # call-seq:
30
- # run( *args ) => nil
38
+ # parse( args ) => nil
31
39
  #
32
- # Run the +webby+ application given the command line _args_.
40
+ # Parse the command line arguments and store the values for later use by
41
+ # the create_site and update_site methods.
33
42
  #
34
- def run( *args )
35
- abort "Usage: #{$0} /path/to/your/site" unless args.length == 1
36
-
37
- self.site = args.at 0
43
+ def parse( args )
38
44
  self.data = File.join(::Webby::PATH, 'data')
45
+ self.update = false
46
+
47
+ opts = OptionParser.new
48
+ opts.banner << ' site'
49
+
50
+ opts.separator ''
51
+ opts.on('-u', '--update',
52
+ 'update the rake tasks for the site') {self.update = true}
53
+
54
+ opts.separator ''
55
+ opts.separator 'common options:'
56
+
57
+ opts.on_tail( '-h', '--help', 'show this message' ) {puts opts; exit}
58
+ opts.on_tail( '--version', 'show version' ) do
59
+ puts "Webby #{::Webby::VERSION}"
60
+ exit
61
+ end
62
+
63
+ # parse the command line arguments
64
+ opts.parse! args
65
+ self.site = args.shift
39
66
 
67
+ if site.nil?
68
+ puts opts
69
+ ::Kernel.abort
70
+ end
71
+ nil
72
+ end
73
+
74
+ # call-seq:
75
+ # create_site => nil
76
+ #
77
+ # Create a new website.
78
+ #
79
+ def create_site
40
80
  # see if the site already exists
41
- abort "#{site} already exists" if test ?e, site
81
+ abort "'#{site}' already exists" if test ?e, site
42
82
 
43
83
  # copy over files from the data directory
44
84
  files = site_files
45
85
 
46
86
  files.keys.sort.each do |dir|
47
87
  mkdir dir
48
- files[dir].each {|file| cp file}
88
+ files[dir].sort.each {|file| cp file}
49
89
  end
50
90
  nil
51
91
  end
52
92
 
93
+ # call-seq:
94
+ # update_site => nil
95
+ #
96
+ # Update the rake tasks for an existing website.
97
+ #
98
+ def update_site
99
+ # ensure the site already exists
100
+ abort "'#{site}' does not exist" unless test ?d, site
101
+
102
+ # copy over files from the data/tasks directory
103
+ files = site_files
104
+
105
+ mkdir 'tasks'
106
+ files['tasks'].sort.each {|file| cp file}
107
+
108
+ nil
109
+ end
110
+
53
111
  # call-seq:
54
112
  # mkdir( dir ) => nil
55
113
  #
@@ -58,8 +116,10 @@ class Main
58
116
  #
59
117
  def mkdir( dir )
60
118
  dir = dir.empty? ? site : ::File.join(site, dir)
61
- creating dir
62
- FileUtils.mkdir_p dir
119
+ unless test ?d, dir
120
+ creating dir
121
+ FileUtils.mkdir_p dir
122
+ end
63
123
  end
64
124
 
65
125
  # call-seq:
@@ -72,7 +132,7 @@ class Main
72
132
  def cp( file )
73
133
  src = ::File.join(data, file)
74
134
  dst = ::File.join(site, file)
75
- creating dst
135
+ test(?e, dst) ? updating(dst) : creating(dst)
76
136
  FileUtils.cp src, dst
77
137
  end
78
138
 
@@ -86,6 +146,16 @@ class Main
86
146
  puts msg
87
147
  end
88
148
 
149
+ # call-seq:
150
+ # updating( msg ) => nil
151
+ #
152
+ # Prints a "updating _msg_" to the screen.
153
+ #
154
+ def updating( msg )
155
+ print "updating "
156
+ puts msg
157
+ end
158
+
89
159
  # call-seq:
90
160
  # abort( msg ) => nil
91
161
  #