bonsai 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,20 @@
1
+ = 1.1.3 (23/01/2010)
2
+
3
+ * Fixes for UTF-8 url strings under Ruby 1.9
4
+ - Thanks Ralph (Added to Credits in README.md)
5
+
6
+ * Added shortcuts to --plant, --cultivate and --repot
7
+ - -p for --plant
8
+ - -c for --cultivate
9
+ - -r for --repot
10
+ - Thanks somedumbme91 (Added to Credits in README.md)
11
+
12
+ * Permalinks now have a trailing slash to reduce server redirects
13
+ - Thanks dgoodlad (Added to Credits in README.md)
14
+
15
+ * Added an error page for badly formatted YML files or other issues
16
+ - Rendered during --cultivate sessions for debugging
17
+
1
18
  = 1.1.2 (19/01/2010)
2
19
 
3
20
  * Added Sass support
data/README.md CHANGED
@@ -59,8 +59,10 @@ When I found something that didn't quite work, was too slow or perhaps not even
59
59
  * [Lincoln Stoll](http://github.com/lstoll) for reminding me to use the tools that I know best
60
60
 
61
61
  ## Credits
62
- * [Rohit Arondekar][http://github.com/rohit] for figuring out an annoying Ubuntu filesystem issue
63
-
62
+ * [Rohit Arondekar](http://github.com/rohit)
63
+ * [Justin Ridgewell](git://github.com/somedumbme91)
64
+ * [Ralph von der Heyden](http://github.com/ralph)
65
+ * [David Goodlad](http://github.com/dgoodlad)
64
66
 
65
67
  ## Note on Patches/Pull Requests
66
68
 
data/Rakefile CHANGED
@@ -15,6 +15,7 @@ begin
15
15
  gem.executables = ['bonsai']
16
16
  gem.add_development_dependency "rspec", ">= 1.2.9"
17
17
  gem.add_development_dependency "yard", ">= 0"
18
+ gem.add_development_dependency "rdiscount"
18
19
  gem.add_dependency "tilt", ">= 0.5"
19
20
  gem.add_dependency "mustache", ">= 0.5.0"
20
21
  gem.add_dependency "builder", ">= 2.1.2"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.2
1
+ 1.1.3
data/bin/bonsai CHANGED
@@ -14,7 +14,7 @@ banner = %q{
14
14
  opts = OptionParser.new do |opts|
15
15
  opts.banner = banner
16
16
 
17
- opts.on("--plant [NAME]", "creates the directory structure for your site") do |name|
17
+ opts.on("-p", "--plant [NAME]", "creates the directory structure for your site") do |name|
18
18
  if name.nil?
19
19
  Bonsai.log "no site name given check `bonsai --help` for details"
20
20
  exit 0
@@ -22,7 +22,7 @@ opts = OptionParser.new do |opts|
22
22
  Bonsai::Generate.new("#{Dir.pwd}/#{name}")
23
23
  end
24
24
 
25
- opts.on("--cultivate", "run a local web server and process your files on save") do
25
+ opts.on("-c", "--cultivate", "run a local web server and process your files on save") do
26
26
  begin
27
27
  Bonsai.log banner
28
28
  Bonsai.log "Press Control+C to quit"
@@ -51,7 +51,7 @@ opts = OptionParser.new do |opts|
51
51
  end
52
52
  end
53
53
 
54
- opts.on("--repot", "export your site to #{Dir.pwd}/output") do
54
+ opts.on("-r", "--repot", "export your site to #{Dir.pwd}/output") do
55
55
  Bonsai.root_dir = Dir.pwd
56
56
  Bonsai::Exporter.publish!
57
57
  end
data/bonsai.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bonsai}
8
- s.version = "1.1.2"
8
+ s.version = "1.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben Schwarz"]
12
- s.date = %q{2010-01-16}
12
+ s.date = %q{2010-01-23}
13
13
  s.default_executable = %q{bonsai}
14
14
  s.description = %q{A static site generator that uses the best toolset available}
15
15
  s.email = %q{ben.schwarz@gmail.com}
@@ -72,6 +72,7 @@ Gem::Specification.new do |s|
72
72
  "spec/spec.opts",
73
73
  "spec/spec_helper.rb",
74
74
  "spec/support/broken/content/broken_page/demo-template.yml",
75
+ "spec/support/broken/public/empty.txt",
75
76
  "spec/support/broken/site.yml",
76
77
  "spec/support/broken/templates/content/index/default.yml",
77
78
  "spec/support/broken/templates/public/.htaccess",
@@ -145,6 +146,7 @@ Gem::Specification.new do |s|
145
146
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
146
147
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
147
148
  s.add_development_dependency(%q<yard>, [">= 0"])
149
+ s.add_development_dependency(%q<rdiscount>, [">= 0"])
148
150
  s.add_runtime_dependency(%q<tilt>, [">= 0.5"])
149
151
  s.add_runtime_dependency(%q<mustache>, [">= 0.5.0"])
150
152
  s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
@@ -157,6 +159,7 @@ Gem::Specification.new do |s|
157
159
  else
158
160
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
159
161
  s.add_dependency(%q<yard>, [">= 0"])
162
+ s.add_dependency(%q<rdiscount>, [">= 0"])
160
163
  s.add_dependency(%q<tilt>, [">= 0.5"])
161
164
  s.add_dependency(%q<mustache>, [">= 0.5.0"])
162
165
  s.add_dependency(%q<builder>, [">= 2.1.2"])
@@ -170,6 +173,7 @@ Gem::Specification.new do |s|
170
173
  else
171
174
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
172
175
  s.add_dependency(%q<yard>, [">= 0"])
176
+ s.add_dependency(%q<rdiscount>, [">= 0"])
173
177
  s.add_dependency(%q<tilt>, [">= 0.5"])
174
178
  s.add_dependency(%q<mustache>, [">= 0.5.0"])
175
179
  s.add_dependency(%q<builder>, [">= 2.1.2"])
@@ -1,7 +1,7 @@
1
1
  module Bonsai
2
2
  class Navigation
3
3
  def self.tree
4
- Page.all(Page.path, "*").select{|p| !p.floating? }
4
+ Page.all(Page.path, "*").select{|p| !p.floating? }.sort_by{|p| p.disk_path }
5
5
  end
6
6
  end
7
7
  end
data/lib/bonsai/page.rb CHANGED
@@ -22,13 +22,13 @@ module Bonsai
22
22
  Dir["#{dir_path}/#{pattern}/*.yml"].map {|p| Page.new p }
23
23
  end
24
24
 
25
- def find(permalink)
25
+ def find(permalink)
26
26
  @@pages[permalink] ||= find!(permalink)
27
27
  end
28
28
 
29
29
  private
30
30
  def find!(permalink)
31
- search_path = permalink.gsub(/\//, "/*")
31
+ search_path = permalink.gsub(/\/$/, '').gsub(/\//, "/*")
32
32
  disk_path = Dir["#{path}/*#{search_path}/*.yml"]
33
33
  if disk_path.any?
34
34
  return new disk_path.first
@@ -45,7 +45,7 @@ module Bonsai
45
45
  end
46
46
 
47
47
  def slug
48
- permalink.split('/').pop
48
+ permalink.gsub(/\/$/, '').split('/').pop
49
49
  end
50
50
 
51
51
  def name
@@ -53,14 +53,14 @@ module Bonsai
53
53
  end
54
54
 
55
55
  def permalink
56
- web_path(directory)
56
+ web_path(directory) + '/'
57
57
  end
58
58
 
59
59
  def ctime; File.ctime(disk_path); end
60
60
  def mtime; File.mtime(disk_path); end
61
61
 
62
62
  def write_path
63
- "#{permalink}/index.html"
63
+ "#{permalink}index.html"
64
64
  end
65
65
 
66
66
  def template
@@ -81,9 +81,9 @@ module Bonsai
81
81
  def floating?
82
82
  !!(File.dirname(disk_path) =~ /\/[a-zA-z][\w-]+$/)
83
83
  end
84
-
84
+
85
85
  def parent
86
- id = permalink[/^\/(.+)\/[^\/]*$/, 1]
86
+ id = permalink[/\/(.+\/)[^\/]*\/$/, 1]
87
87
  return nil if id.nil?
88
88
 
89
89
  parent = Page.find(id)
@@ -109,7 +109,7 @@ module Bonsai
109
109
 
110
110
  # Find pages up the permalink tree if possible
111
111
  while(page_ref) do
112
- page_ref = page_ref[/(.+)\/[^\/]*$/, 1]
112
+ page_ref = page_ref[/(.+\/)[^\/]*\/$/, 1]
113
113
  ancestors << self.class.find(page_ref) rescue NotFound
114
114
  end
115
115
 
@@ -122,14 +122,12 @@ module Bonsai
122
122
 
123
123
  def render
124
124
  Tilt.new(template.path, :path => template.class.path).render(self, to_hash)
125
- rescue => stack
126
- raise "Issue rendering #{permalink}\n\n#{stack}"
127
125
  end
128
126
 
129
127
  def content
130
128
  YAML::load(File.read(disk_path)) || {}
131
129
  rescue ArgumentError
132
- Bonsai.log "Page '#{permalink}' has badly formatted content"
130
+ raise "Page '#{permalink}' has badly formatted content"
133
131
  end
134
132
 
135
133
  # This hash is available to all templates, it will map common properties,
@@ -205,4 +203,4 @@ module Bonsai
205
203
  path.gsub(@@path, '').gsub(/\/\d+\./, '/')
206
204
  end
207
205
  end
208
- end
206
+ end
@@ -3,8 +3,17 @@
3
3
  <head>
4
4
  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
5
5
  <title>Bonsai, an error occurred</title>
6
+ <style type="text/css" media="screen">
7
+ body { font-style: Times, "Times New Roman", serif; font-style: italic; text-shadow: white 1px 1px 1px; }
8
+ h1 { font-size: 1em; text-align: center; font-weight: normal; }
9
+ #main { width: 580px; margin: 0 auto; display: block; }
10
+ #circle { width: 145px; height: 145px; -moz-border-radius: 72px; -webkit-border-radius: 72px; border-radius: 72px; background-color: black; margin: 3em auto; }
11
+ </style>
6
12
  </head>
7
13
  <body id="error">
8
- <h1><%= @error %></h1>
14
+ <section id="main">
15
+ <div id="circle"></div>
16
+ <h1><%= @error.to_s %></h1>
17
+ </section>
9
18
  </body>
10
19
  </html>
@@ -6,24 +6,24 @@ module Bonsai
6
6
  @app.call(env)
7
7
  end
8
8
  end
9
-
9
+
10
10
  class DevelopmentServer < Sinatra::Base
11
11
  set :views, "#{File.dirname(__FILE__)}/webserver"
12
-
12
+
13
13
  get '/' do
14
14
  begin
15
15
  Page.find("index").render
16
- rescue
17
- @error = e.message
16
+ rescue Exception => e
17
+ @error = e
18
18
  erb :error
19
19
  end
20
20
  end
21
-
21
+
22
22
  get '/*' do
23
23
  begin
24
- Page.find(params[:splat].to_s).render
25
- rescue
26
- @error = e.message
24
+ Page.find(params[:splat].join).render
25
+ rescue Exception => e
26
+ @error = e
27
27
  erb :error
28
28
  end
29
29
  end
@@ -13,7 +13,7 @@ describe Bonsai::Page do
13
13
 
14
14
  describe "instance" do
15
15
  before :all do
16
- @page = Bonsai::Page.find("about-us/history")
16
+ @page = Bonsai::Page.find("about-us/history/")
17
17
  end
18
18
 
19
19
  it "should have a slug" do
@@ -135,8 +135,8 @@ describe Bonsai::Page do
135
135
  @output.should_not be_nil
136
136
  end
137
137
 
138
- it "should replace moustache variables with properties from the content file" do
139
- @output.should == "Hello from our template, named Contact\n\nGet in touch\n\n/about-us/contact/images/image001.jpg\n/about-us/contact/child\n/about-us/contact/magic/image001.jpg\n/about-us/contact/magic/image002.jpg\nThis content should be inserted!\n\n<p>&ldquo;A designer knows he has achieved perfection\nnot when there is nothing left to add,\nbut when there is nothing left to take away.&rdquo;</p>\n\n<p>– Antoine de Saint-Exupery</p>\n"
138
+ it "should replace mustache variables with properties from the content file" do
139
+ @output.should == "Hello from our template, named Contact\n\nGet in touch\n\n/about-us/contact/images/image001.jpg\n/about-us/contact/child/\n/about-us/contact/magic/image001.jpg\n/about-us/contact/magic/image002.jpg\nThis content should be inserted!\n\n<p>&ldquo;A designer knows he has achieved perfection\nnot when there is nothing left to add,\nbut when there is nothing left to take away.&rdquo;</p>\n\n<p>– Antoine de Saint-Exupery</p>\n"
140
140
  end
141
141
 
142
142
  it "should write in images" do
@@ -233,4 +233,4 @@ describe Bonsai::Page do
233
233
  end
234
234
  end
235
235
  end
236
- end
236
+ end
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bonsai
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Schwarz
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-16 00:00:00 +11:00
12
+ date: 2010-01-23 00:00:00 +11:00
13
13
  default_executable: bonsai
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,6 +32,16 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: "0"
34
34
  version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rdiscount
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
35
45
  - !ruby/object:Gem::Dependency
36
46
  name: tilt
37
47
  type: :runtime
@@ -185,6 +195,7 @@ files:
185
195
  - spec/spec.opts
186
196
  - spec/spec_helper.rb
187
197
  - spec/support/broken/content/broken_page/demo-template.yml
198
+ - spec/support/broken/public/empty.txt
188
199
  - spec/support/broken/site.yml
189
200
  - spec/support/broken/templates/content/index/default.yml
190
201
  - spec/support/broken/templates/public/.htaccess