bonsai 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES ADDED
@@ -0,0 +1,12 @@
1
+ = 1.1.2 (19/01/2010)
2
+
3
+ * Added Sass support
4
+ - You can use LessCSS or Sass
5
+ - Sass needs to be installed to work
6
+ - Thanks to Ryan Tomayko for writing Tilt and accepting my LessCSS addition
7
+
8
+ * Removed RDiscount in favour of Maruku.
9
+ - Still uses RDiscount if you have it
10
+ - Maruku is pure Ruby, no native extensions required
11
+
12
+ * Added support for JRuby and Macruby
data/README.md CHANGED
@@ -30,6 +30,15 @@ The generator will provide you with a .htaccess file that will turn on gzip/defl
30
30
  * Run `bonsai --repot`
31
31
  * Upload the contents of `site-root/output` to your producton server
32
32
  * For example: `rsync -ave ssh ./output/ tinytree.info:/var/www/tinytree.info`
33
+
34
+ ## Ruby implementations
35
+
36
+ Bonsai runs under a number of Ruby implementations:
37
+
38
+ * 1.8.7 (MRI)
39
+ * 1.9.1 (MRI)
40
+ * JRuby
41
+ * MacRuby
33
42
 
34
43
  ## Technology used to make your site better
35
44
 
@@ -48,6 +57,9 @@ When I found something that didn't quite work, was too slow or perhaps not even
48
57
 
49
58
  * [Anthony Kolber](http://github.com/kolber) for writing, then rewriting [Stacey](http://github.com/kolber/stacey) from scratch. We spent many hours talking about best practice and software UX.
50
59
  * [Lincoln Stoll](http://github.com/lstoll) for reminding me to use the tools that I know best
60
+
61
+ ## Credits
62
+ * [Rohit Arondekar][http://github.com/rohit] for figuring out an annoying Ubuntu filesystem issue
51
63
 
52
64
 
53
65
  ## Note on Patches/Pull Requests
data/Rakefile CHANGED
@@ -15,12 +15,12 @@ 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_dependency "tilt", ">= 0.4"
18
+ gem.add_dependency "tilt", ">= 0.5"
19
19
  gem.add_dependency "mustache", ">= 0.5.0"
20
20
  gem.add_dependency "builder", ">= 2.1.2"
21
21
  gem.add_dependency "watch", ">= 0.1.0"
22
22
  gem.add_dependency "sinatra", ">= 0.9.4"
23
- gem.add_dependency "rdiscount", ">= 1.5.5"
23
+ gem.add_dependency "maruku", ">= 0.6.0"
24
24
  gem.add_dependency "less", ">= 1.2.17"
25
25
  gem.add_dependency "rack", ">= 1.1.0"
26
26
  gem.add_dependency "launchy", ">= 0.3.3"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.1.2
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.1"
8
+ s.version = "1.1.2"
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-10}
12
+ s.date = %q{2010-01-16}
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}
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  ".document",
23
23
  ".gitignore",
24
24
  ".kick",
25
+ "CHANGES",
25
26
  "LICENSE",
26
27
  "README.md",
27
28
  "Rakefile",
@@ -100,8 +101,12 @@ Gem::Specification.new do |s|
100
101
  "spec/support/content/legals/terms-and-conditions/demo-template.yml",
101
102
  "spec/support/public/.htaccess",
102
103
  "spec/support/public/js/script.js",
103
- "spec/support/public/stylesheets/base.less",
104
- "spec/support/public/stylesheets/broken.less",
104
+ "spec/support/public/stylesheets/brokenless.less",
105
+ "spec/support/public/stylesheets/brokensass.sass",
106
+ "spec/support/public/stylesheets/lesscss.css",
107
+ "spec/support/public/stylesheets/lesscss.less",
108
+ "spec/support/public/stylesheets/sassy.css",
109
+ "spec/support/public/stylesheets/sassy.sass",
105
110
  "spec/support/site.yml",
106
111
  "spec/support/templates/demo-template.mustache",
107
112
  "spec/support/templates/partials/inserted.mustache",
@@ -140,24 +145,24 @@ Gem::Specification.new do |s|
140
145
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
141
146
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
142
147
  s.add_development_dependency(%q<yard>, [">= 0"])
143
- s.add_runtime_dependency(%q<tilt>, [">= 0.4"])
148
+ s.add_runtime_dependency(%q<tilt>, [">= 0.5"])
144
149
  s.add_runtime_dependency(%q<mustache>, [">= 0.5.0"])
145
150
  s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
146
151
  s.add_runtime_dependency(%q<watch>, [">= 0.1.0"])
147
152
  s.add_runtime_dependency(%q<sinatra>, [">= 0.9.4"])
148
- s.add_runtime_dependency(%q<rdiscount>, [">= 1.5.5"])
153
+ s.add_runtime_dependency(%q<maruku>, [">= 0.6.0"])
149
154
  s.add_runtime_dependency(%q<less>, [">= 1.2.17"])
150
155
  s.add_runtime_dependency(%q<rack>, [">= 1.1.0"])
151
156
  s.add_runtime_dependency(%q<launchy>, [">= 0.3.3"])
152
157
  else
153
158
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
154
159
  s.add_dependency(%q<yard>, [">= 0"])
155
- s.add_dependency(%q<tilt>, [">= 0.4"])
160
+ s.add_dependency(%q<tilt>, [">= 0.5"])
156
161
  s.add_dependency(%q<mustache>, [">= 0.5.0"])
157
162
  s.add_dependency(%q<builder>, [">= 2.1.2"])
158
163
  s.add_dependency(%q<watch>, [">= 0.1.0"])
159
164
  s.add_dependency(%q<sinatra>, [">= 0.9.4"])
160
- s.add_dependency(%q<rdiscount>, [">= 1.5.5"])
165
+ s.add_dependency(%q<maruku>, [">= 0.6.0"])
161
166
  s.add_dependency(%q<less>, [">= 1.2.17"])
162
167
  s.add_dependency(%q<rack>, [">= 1.1.0"])
163
168
  s.add_dependency(%q<launchy>, [">= 0.3.3"])
@@ -165,12 +170,12 @@ Gem::Specification.new do |s|
165
170
  else
166
171
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
167
172
  s.add_dependency(%q<yard>, [">= 0"])
168
- s.add_dependency(%q<tilt>, [">= 0.4"])
173
+ s.add_dependency(%q<tilt>, [">= 0.5"])
169
174
  s.add_dependency(%q<mustache>, [">= 0.5.0"])
170
175
  s.add_dependency(%q<builder>, [">= 2.1.2"])
171
176
  s.add_dependency(%q<watch>, [">= 0.1.0"])
172
177
  s.add_dependency(%q<sinatra>, [">= 0.9.4"])
173
- s.add_dependency(%q<rdiscount>, [">= 1.5.5"])
178
+ s.add_dependency(%q<maruku>, [">= 0.6.0"])
174
179
  s.add_dependency(%q<less>, [">= 1.2.17"])
175
180
  s.add_dependency(%q<rack>, [">= 1.1.0"])
176
181
  s.add_dependency(%q<launchy>, [">= 0.3.3"])
@@ -39,7 +39,7 @@ module Bonsai
39
39
  end
40
40
 
41
41
  def cleanup
42
- remove_less_from_public
42
+ remove_less_sass
43
43
  end
44
44
 
45
45
  def write_index
@@ -88,11 +88,11 @@ module Bonsai
88
88
  end
89
89
 
90
90
  def copy_public
91
- generate_css_from_less
91
+ generate_css
92
92
 
93
93
  Bonsai.log "Copying public files"
94
94
  # Using system call because fileutils is inadequate
95
- system("cp -fR '#{Bonsai.root_dir}/public/' '#{path}'")
95
+ system("cp -fR '#{Bonsai.root_dir}/public/.' '#{path}/.'")
96
96
  end
97
97
 
98
98
  def compress_assets
@@ -104,19 +104,19 @@ module Bonsai
104
104
  end
105
105
  end
106
106
 
107
- def generate_css_from_less
108
- Dir["#{Bonsai.root_dir}/public/**/*.less"].each do |lessfile|
109
- css = File.open(lessfile) {|f| Less::Engine.new(f) }.to_css
110
- path = "#{File.dirname(lessfile)}/#{File.basename(lessfile, ".less")}.css"
107
+ def generate_css
108
+ Dir["#{Bonsai.root_dir}/public/**/*.{less,sass}"].each do |cssfile|
109
+ css = Tilt.new(cssfile).render
110
+ path = "#{File.dirname(cssfile)}/#{File.basename(cssfile, ".*")}.css"
111
111
 
112
112
  File.open(path, "w") {|file| file.write(css) }
113
113
  end
114
114
  rescue Less::SyntaxError => exception
115
- Bonsai.log "LessCSS Syntax error\n\n#{exception.message}"
115
+ Bonsai.log "CSS Syntax error\n\n#{exception.message}"
116
116
  end
117
117
 
118
- def remove_less_from_public
119
- Dir["#{path}/**/*.less"].each{|f| FileUtils.rm(f) }
118
+ def remove_less_sass
119
+ Dir["#{path}/**/*.{less,sass}"].each{|f| FileUtils.rm(f) }
120
120
  end
121
121
  end
122
122
  end
data/lib/bonsai/page.rb CHANGED
@@ -1,7 +1,14 @@
1
1
  require 'yaml'
2
- require 'rdiscount'
3
2
  require 'tilt'
4
3
 
4
+ # Use RDiscount for those who care
5
+ begin
6
+ require 'rdiscount'
7
+ BlueCloth = RDiscount
8
+ rescue LoadError
9
+ require 'maruku'
10
+ end
11
+
5
12
  module Bonsai
6
13
  class Page
7
14
  class NotFound < StandardError; end;
@@ -143,17 +150,24 @@ module Bonsai
143
150
 
144
151
  private
145
152
  def formatted_content
146
- formatted_content = content
147
-
153
+ formatted_content = content
148
154
  formatted_content.each do |k,v|
149
155
  if v.is_a?(String) and v =~ /\n/
150
- formatted_content[k] = RDiscount.new(v, :smart).to_html
156
+ formatted_content[k] = to_markdown(v)
151
157
  end
152
158
  end
153
159
 
154
160
  formatted_content
155
161
  end
156
162
 
163
+ def to_markdown(content)
164
+ if defined? RDiscount
165
+ RDiscount.new(content, :smart).to_html
166
+ else
167
+ Maruku.new(content).to_html
168
+ end
169
+ end
170
+
157
171
  # Creates methods for each sub-folder within the page's folder
158
172
  # that isn't a sub-page (a page object)
159
173
  def disk_assets
@@ -11,13 +11,18 @@ module Bonsai
11
11
  set :views, "#{File.dirname(__FILE__)}/webserver"
12
12
 
13
13
  get '/' do
14
- Page.find("index").render
14
+ begin
15
+ Page.find("index").render
16
+ rescue
17
+ @error = e.message
18
+ erb :error
19
+ end
15
20
  end
16
21
 
17
22
  get '/*' do
18
23
  begin
19
24
  Page.find(params[:splat].to_s).render
20
- rescue Bonsai::Page::NotFound => e
25
+ rescue
21
26
  @error = e.message
22
27
  erb :error
23
28
  end
@@ -15,14 +15,18 @@ describe Bonsai::Exporter do
15
15
  Bonsai::Exporter.path = BONSAI_PATH + "/output"
16
16
  end
17
17
 
18
- shared_examples_for "lesscss" do
18
+ shared_examples_for "css generators" do
19
19
  it "should process .less files to .css" do
20
- File.exists?("#{Bonsai::Exporter.path}/stylesheets/base.css").should be_true
20
+ File.exists?("#{Bonsai::Exporter.path}/stylesheets/lesscss.css").should be_true
21
+ end
22
+
23
+ it "should process .sass files to .css" do
24
+ File.exists?("#{Bonsai::Exporter.path}/stylesheets/sassy.css").should be_true
21
25
  end
22
26
 
23
27
  it "should log an error when badly formatted less is supplied (and not raise an exception)" do
24
28
  Bonsai.should_receive(:log)
25
- lambda { Bonsai::Exporter.send(:generate_css_from_less) }.should_not raise_error(Less::SyntaxError)
29
+ lambda { Bonsai::Exporter.send(:generate_css) }.should_not raise_error(Less::SyntaxError)
26
30
  end
27
31
  end
28
32
 
@@ -33,17 +37,16 @@ describe Bonsai::Exporter do
33
37
  Bonsai::Exporter.process!
34
38
  end
35
39
 
36
- it_should_behave_like "lesscss"
40
+ it_should_behave_like "css generators"
37
41
 
38
42
  # Uncompressed CSS
39
43
  it "should be processed with less" do
40
- File.read("#{Bonsai::Exporter.path}/stylesheets/base.css").should == ".mymixin, #content { display: block; }\n"
44
+ File.read("#{Bonsai::Exporter.path}/stylesheets/lesscss.css").should == ".mymixin, #content { display: block; }\n"
41
45
  end
42
46
 
43
- it "should not write the base.css file to the public directory" do
44
- File.exists?("#{Bonsai.root_dir}/public/base.css").should_not be_true
47
+ it "should be processed with sass" do
48
+ File.read("#{Bonsai::Exporter.path}/stylesheets/sassy.css").should == "#content {\n display: block; }\n"
45
49
  end
46
-
47
50
  end
48
51
 
49
52
  describe "expectations" do
@@ -60,7 +63,7 @@ describe Bonsai::Exporter do
60
63
  end
61
64
 
62
65
  it "should generate css via lesscss" do
63
- Bonsai::Exporter.should_receive(:generate_css_from_less)
66
+ Bonsai::Exporter.should_receive(:generate_css)
64
67
  end
65
68
  end
66
69
  end
@@ -72,11 +75,15 @@ describe Bonsai::Exporter do
72
75
  Bonsai::Exporter.publish!
73
76
  end
74
77
 
75
- it_should_behave_like "lesscss"
78
+ it_should_behave_like "css generators"
76
79
 
77
80
  # Compressed CSS
78
81
  it "should be processed with less" do
79
- File.read("#{Bonsai::Exporter.path}/stylesheets/base.css").should == ".mymixin,#content{display:block;}"
82
+ File.read("#{Bonsai::Exporter.path}/stylesheets/lesscss.css").should == ".mymixin,#content{display:block;}"
83
+ end
84
+
85
+ it "should be processed with sass" do
86
+ File.read("#{Bonsai::Exporter.path}/stylesheets/sassy.css").should == "#content{display:block;}"
80
87
  end
81
88
 
82
89
  it "should not export the base.less file" do
@@ -118,7 +125,11 @@ describe Bonsai::Exporter do
118
125
 
119
126
  describe "asset compression" do
120
127
  it "should compress the css file" do
121
- File.read("#{Bonsai::Exporter.path}/stylesheets/base.css").should == ".mymixin,#content{display:block;}"
128
+ File.read("#{Bonsai::Exporter.path}/stylesheets/lesscss.css").should == ".mymixin,#content{display:block;}"
129
+ end
130
+
131
+ it "should compress the css file" do
132
+ File.read("#{Bonsai::Exporter.path}/stylesheets/sassy.css").should == "#content{display:block;}"
122
133
  end
123
134
 
124
135
  it "should compress the js file" do
@@ -136,8 +147,8 @@ describe Bonsai::Exporter do
136
147
  FileUtils.should_receive(:rm_rf).with(Bonsai::Exporter.path)
137
148
  end
138
149
 
139
- it "should generate css via lesscss" do
140
- Bonsai::Exporter.should_receive(:generate_css_from_less)
150
+ it "should process css with less or sass" do
151
+ Bonsai::Exporter.should_receive(:generate_css)
141
152
  end
142
153
 
143
154
  it "should compress assets" do
@@ -0,0 +1,3 @@
1
+ /* missing mixin */
2
+ #identifier
3
+ + mixin
@@ -0,0 +1 @@
1
+ .mymixin, #content { display: block; }
@@ -0,0 +1,2 @@
1
+ #content {
2
+ display: block; }
@@ -0,0 +1,5 @@
1
+ =mymixin
2
+ display: block
3
+
4
+ #content
5
+ +mymixin
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.1
4
+ version: 1.1.2
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-10 00:00:00 +11:00
12
+ date: 2010-01-16 00:00:00 +11:00
13
13
  default_executable: bonsai
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: "0.4"
43
+ version: "0.5"
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: mustache
@@ -83,14 +83,14 @@ dependencies:
83
83
  version: 0.9.4
84
84
  version:
85
85
  - !ruby/object:Gem::Dependency
86
- name: rdiscount
86
+ name: maruku
87
87
  type: :runtime
88
88
  version_requirement:
89
89
  version_requirements: !ruby/object:Gem::Requirement
90
90
  requirements:
91
91
  - - ">="
92
92
  - !ruby/object:Gem::Version
93
- version: 1.5.5
93
+ version: 0.6.0
94
94
  version:
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: less
@@ -135,6 +135,7 @@ files:
135
135
  - .document
136
136
  - .gitignore
137
137
  - .kick
138
+ - CHANGES
138
139
  - LICENSE
139
140
  - README.md
140
141
  - Rakefile
@@ -213,8 +214,12 @@ files:
213
214
  - spec/support/content/legals/terms-and-conditions/demo-template.yml
214
215
  - spec/support/public/.htaccess
215
216
  - spec/support/public/js/script.js
216
- - spec/support/public/stylesheets/base.less
217
- - spec/support/public/stylesheets/broken.less
217
+ - spec/support/public/stylesheets/brokenless.less
218
+ - spec/support/public/stylesheets/brokensass.sass
219
+ - spec/support/public/stylesheets/lesscss.css
220
+ - spec/support/public/stylesheets/lesscss.less
221
+ - spec/support/public/stylesheets/sassy.css
222
+ - spec/support/public/stylesheets/sassy.sass
218
223
  - spec/support/site.yml
219
224
  - spec/support/templates/demo-template.mustache
220
225
  - spec/support/templates/partials/inserted.mustache