mango 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +26 -0
- data/Gemfile.lock +6 -3
- data/README.md +9 -9
- data/Rakefile +0 -14
- data/lib/mango/application.rb +31 -23
- data/lib/mango/core_ext/string.rb +5 -2
- data/lib/mango/dependencies.rb +4 -69
- data/lib/mango/templates/Gemfile +1 -1
- data/lib/mango/version.rb +1 -1
- data/mango.gemspec +11 -10
- data/spec/fixture/content/articles/index.md +5 -0
- data/spec/fixture/themes/default/views/articles/page.erb +7 -0
- data/spec/lib/application/routing_content_pages_spec.rb +65 -0
- data/spec/lib/application/routing_javascript_templates_spec.rb +28 -0
- data/spec/lib/application/routing_stylesheet_templates_spec.rb +28 -0
- data/spec/lib/core_ext/string_spec.rb +25 -1
- data/spec/lib/dependencies_spec.rb +0 -83
- data/spec/lib/runner_spec.rb +1 -1
- data/spec/lib/version_spec.rb +1 -1
- metadata +60 -40
data/CHANGES.md
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
+
## v0.6.2 / 2011-06-06
|
4
|
+
|
5
|
+
[Full changes](https://github.com/ryansobol/mango/compare/v0.6.1...v0.6.2)
|
6
|
+
|
7
|
+
## Bugs
|
8
|
+
|
9
|
+
* Allow view templates nested within directories [GH#65](https://github.com/ryansobol/mango/issues/65)
|
10
|
+
* Pass to next matching route for all get route handlers [GH#64](https://github.com/ryansobol/mango/issues/64)
|
11
|
+
|
12
|
+
## Dependencies
|
13
|
+
|
14
|
+
* Update rack to ~> 1.2.3 [GH#63](https://github.com/ryansobol/mango/issues/63)
|
15
|
+
* Add therubyracer-heroku = 0.8.1.pre3 [GH#59](https://github.com/ryansobol/mango/issues/59)
|
16
|
+
|
17
|
+
## Chores
|
18
|
+
|
19
|
+
* Remove rspec task from Rakefile [GH51](https://github.com/ryansobol/mango/issues/51)
|
20
|
+
|
21
|
+
## Documentation
|
22
|
+
|
23
|
+
* Touch up the README.md [GH#62](https://github.com/ryansobol/mango/issues/62)
|
24
|
+
|
25
|
+
## Legal
|
26
|
+
|
27
|
+
* Update copyright to 2011 in README.md [GH#60](https://github.com/ryansobol/mango/issues/60)
|
28
|
+
|
3
29
|
## v0.6.1 / 2011-05-29
|
4
30
|
|
5
31
|
[Full changes](https://github.com/ryansobol/mango/compare/v0.6.0...v0.6.1)
|
data/Gemfile.lock
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mango (0.6.
|
4
|
+
mango (0.6.2)
|
5
5
|
bluecloth (~> 2.1.0)
|
6
6
|
bundler (~> 1.0.7)
|
7
7
|
coffee-script (~> 2.2.0)
|
8
8
|
haml (~> 3.1.1)
|
9
9
|
liquid (~> 2.2.2)
|
10
|
-
rack (~> 1.2.
|
10
|
+
rack (~> 1.2.3)
|
11
11
|
sass (~> 3.1.1)
|
12
12
|
sinatra (~> 1.2.6)
|
13
|
+
therubyracer-heroku (= 0.8.1.pre3)
|
13
14
|
thor (~> 0.14.6)
|
14
15
|
|
15
16
|
GEM
|
@@ -41,6 +42,7 @@ GEM
|
|
41
42
|
sinatra (1.2.6)
|
42
43
|
rack (~> 1.1)
|
43
44
|
tilt (>= 1.2.2, < 2.0)
|
45
|
+
therubyracer-heroku (0.8.1.pre3)
|
44
46
|
thor (0.14.6)
|
45
47
|
tilt (1.3.2)
|
46
48
|
yard (0.7.1)
|
@@ -55,10 +57,11 @@ DEPENDENCIES
|
|
55
57
|
haml (~> 3.1.1)
|
56
58
|
liquid (~> 2.2.2)
|
57
59
|
mango!
|
58
|
-
rack (~> 1.2.
|
60
|
+
rack (~> 1.2.3)
|
59
61
|
rack-test (~> 0.6.0)
|
60
62
|
rspec (~> 2.6.0)
|
61
63
|
sass (~> 3.1.1)
|
62
64
|
sinatra (~> 1.2.6)
|
65
|
+
therubyracer-heroku (= 0.8.1.pre3)
|
63
66
|
thor (~> 0.14.6)
|
64
67
|
yard (~> 0.7.1)
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
Mango release 0.6.
|
1
|
+
Mango release 0.6.2 (June 6, 2011)
|
2
2
|
==================================
|
3
3
|
|
4
|
-
Copyright (c)
|
4
|
+
Copyright (c) 2011 Ryan Sobol. Licensed under the MIT license. Please see the {file:LICENSE} for more information.
|
5
5
|
|
6
6
|
* **Demo Application** : [http://mango-fireworks.heroku.com/](http://mango-fireworks.heroku.com/)
|
7
7
|
* **Source Code**: [https://github.com/ryansobol/mango](https://github.com/ryansobol/mango)
|
@@ -82,22 +82,21 @@ REQUIREMENTS
|
|
82
82
|
* [Ruby](http://www.ruby-lang.org/) ~> 1.9.2 ([RVM](http://rvm.beginrescueend.com/) recommended)
|
83
83
|
* [RubyGems](https://rubygems.org/) >= 1.3.7 (bundled with Ruby)
|
84
84
|
* [Bundler](http://gembundler.com/) ~> 1.0.7
|
85
|
-
* [
|
85
|
+
* [Thor](https://github.com/wycats/thor) ~> 0.14.6
|
86
|
+
* [Rack](http://rack.rubyforge.org/) ~> 1.2.3
|
86
87
|
* [Sinatra](http://www.sinatrarb.com/) ~> 1.2.6
|
87
88
|
* [Haml](http://haml-lang.com/) ~> 3.1.1
|
88
89
|
* [Sass](http://sass-lang.com/) ~> 3.1.1
|
89
90
|
* [BlueCloth](http://deveiate.org/projects/BlueCloth) ~> 2.1.0
|
90
91
|
* [Liquid](http://www.liquidmarkup.org/) ~> 2.2.2
|
91
92
|
* [CoffeeScript](http://jashkenas.github.com/coffee-script/) ~> 2.2.0
|
92
|
-
* [
|
93
|
+
* [TheRubyRacer for Heroku](https://github.com/pwim/therubyracer-heroku) = 0.8.1.pre3
|
93
94
|
|
94
95
|
### Optional development dependencies
|
95
96
|
|
96
|
-
* [Rake](http://rake.rubyforge.org/) ~> 0.8.7 (bundled with Ruby)
|
97
97
|
* [Rack::Test](https://github.com/brynary/rack-test) ~> 0.6.0
|
98
98
|
* [RSpec](http://rspec.info/) ~> 2.6.0
|
99
99
|
* [YARD](http://yardoc.org/) ~> 0.7.1
|
100
|
-
* [YARD::Sinatra](https://github.com/rkh/yard-sinatra) ~> 0.5.1
|
101
100
|
* [BlueCloth](http://deveiate.org/projects/BlueCloth) ~> 2.1.0
|
102
101
|
|
103
102
|
INSTALLING
|
@@ -108,7 +107,7 @@ INSTALLING
|
|
108
107
|
I highly recommend [RVM](http://rvm.beginrescueend.com/) by Wayne E. Seguin. It trivializes managing multiple versions of Ruby on one machine.
|
109
108
|
|
110
109
|
$ ruby -v
|
111
|
-
ruby 1.9.
|
110
|
+
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
|
112
111
|
|
113
112
|
**TIP:** The revision and arch-type may differ on your machine.
|
114
113
|
|
@@ -128,7 +127,7 @@ Simply edit the gem version in your application's `Gemfile` and re-install with
|
|
128
127
|
$ cat Gemfile
|
129
128
|
# encoding: UTF-8
|
130
129
|
source "http://rubygems.org"
|
131
|
-
gem "mango", "~> 0.6.
|
130
|
+
gem "mango", "~> 0.6.2"
|
132
131
|
$ bundle install
|
133
132
|
|
134
133
|
**TIP:** If you're working in the insolation of an [RVM gemset](http://rvm.beginrescueend.com/gemsets/basics/), type `gem clean` to uninstall outdated gems.
|
@@ -208,7 +207,8 @@ Now that the newly generated Mango application is running, here's how the applic
|
|
208
207
|
* For routes ending in `.js`, Mango searches for a stylesheet template in `themes/javascripts/`.
|
209
208
|
* For routes ending in `.css`, Mango searches for a stylesheet template in `themes/stylesheets/`.
|
210
209
|
* For all other routes, Mango searches for a content page in `content/` and wraps it within a view template in `themes/default/views`.
|
211
|
-
* If no static or template file is found, Mango
|
210
|
+
* If no static or template file is found, Mango tries to route the request to a custom route handler if one exists.
|
211
|
+
* Finally, Mango routes unknown HTTP requests to a customizable 404 page found in either `themes/default/public` or `themes/default/views`.
|
212
212
|
|
213
213
|
WRITING
|
214
214
|
-------
|
data/Rakefile
CHANGED
@@ -1,19 +1,5 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require File.expand_path("lib/mango", File.dirname(__FILE__))
|
3
|
-
Mango::Dependencies.warn_at_exit
|
4
|
-
|
5
|
-
###################################################################################################
|
6
|
-
|
7
|
-
begin
|
8
|
-
require "rspec/core/rake_task"
|
9
|
-
require "rack/test" # for Rack support
|
10
|
-
RSpec::Core::RakeTask.new(:spec)
|
11
|
-
task :default => :spec
|
12
|
-
rescue LoadError => e
|
13
|
-
Mango::Dependencies.create_warning_for(e)
|
14
|
-
end
|
15
|
-
|
16
|
-
###################################################################################################
|
17
3
|
|
18
4
|
namespace :gem do
|
19
5
|
desc "Builds a gem from the current project's Gem::Specification"
|
data/lib/mango/application.rb
CHANGED
@@ -18,7 +18,7 @@ module Mango
|
|
18
18
|
#
|
19
19
|
# In addition to serving static assets, the application has these dynamic route handlers:
|
20
20
|
#
|
21
|
-
# * Content page templates with `GET
|
21
|
+
# * Content page templates with `GET /*`
|
22
22
|
# * JavaScript templates with `GET /javascripts/*.js`
|
23
23
|
# * Stylesheet templates with `GET /stylesheets/*.css`
|
24
24
|
#
|
@@ -50,9 +50,9 @@ module Mango
|
|
50
50
|
#
|
51
51
|
# GET /../security_hole.txt => pass to NOT_FOUND error handler
|
52
52
|
#
|
53
|
-
# # Content page templates with `GET
|
53
|
+
# # Content page templates with `GET /*`
|
54
54
|
#
|
55
|
-
# ### Example `GET
|
55
|
+
# ### Example `GET /*` requests routed to content page templates
|
56
56
|
#
|
57
57
|
# |-- content
|
58
58
|
# | |-- about
|
@@ -71,8 +71,10 @@ module Mango
|
|
71
71
|
# GET /about/us => 200 content/about/us.haml
|
72
72
|
# GET /turner%2Bhooch => 200 content/turner+hooch.haml
|
73
73
|
#
|
74
|
-
# GET /page_not_found => pass to NOT_FOUND error
|
75
|
-
#
|
74
|
+
# GET /page_not_found => pass to another matching route or to the NOT_FOUND error
|
75
|
+
# handler if none exists
|
76
|
+
# GET /../security_hole => pass to another matching route or to the NOT_FOUND error
|
77
|
+
# handler if none exists
|
76
78
|
#
|
77
79
|
# # JavaScript templates with `GET /javascripts/*.js`
|
78
80
|
#
|
@@ -102,9 +104,12 @@ module Mango
|
|
102
104
|
# GET /root.js => 200 themes/default/public/root.js
|
103
105
|
# GET /javascripts/math/opposite.js => 200 themes/default/public/javascripts/math/opposite.js
|
104
106
|
#
|
105
|
-
# GET /javascripts/not_found.js => pass to
|
106
|
-
#
|
107
|
-
# GET /
|
107
|
+
# GET /javascripts/not_found.js => pass to another matching route or to the NOT_FOUND
|
108
|
+
# error handler if none exists
|
109
|
+
# GET /siblings.js => pass to another matching route or to the NOT_FOUND
|
110
|
+
# error handler if none exists
|
111
|
+
# GET /javascripts/../security_hole.js => pass to another matching route or to the NOT_FOUND
|
112
|
+
# error handler if none exists
|
108
113
|
#
|
109
114
|
# # Stylesheet templates with `GET /stylesheets/*.css`
|
110
115
|
#
|
@@ -134,15 +139,18 @@ module Mango
|
|
134
139
|
# GET /default.css => 200 themes/default/public/default.css
|
135
140
|
# GET /stylesheets/folder/print.css => 200 themes/default/public/stylesheets/folder/print.css
|
136
141
|
#
|
137
|
-
# GET /stylesheets/not_found.css => pass to
|
138
|
-
#
|
139
|
-
# GET /
|
142
|
+
# GET /stylesheets/not_found.css => pass to another matching route or to the NOT_FOUND
|
143
|
+
# error handler if none exists
|
144
|
+
# GET /screen.css => pass to another matching route or to the NOT_FOUND
|
145
|
+
# error handler if none exists
|
146
|
+
# GET /stylesheets/../security_hole.css => pass to another matching route or to the NOT_FOUND
|
147
|
+
# error handler if none exists
|
140
148
|
#
|
141
149
|
# # 404 Page Not Found with `NOT_FOUND`
|
142
150
|
#
|
143
|
-
# When a requested URI path cannot be matched with a public file or template file,
|
144
|
-
# handler attempts to send a 404 public file or a rendered a
|
145
|
-
# response.
|
151
|
+
# When a requested URI path cannot be matched with a public file or template file, and cannot be
|
152
|
+
# matched to another route, the error handler attempts to send a 404 public file or a rendered a
|
153
|
+
# 404 template file with a 404 HTTP response.
|
146
154
|
#
|
147
155
|
# ### Example `GET /page_not_found` request routed to a 404 public file
|
148
156
|
#
|
@@ -336,8 +344,8 @@ module Mango
|
|
336
344
|
# **It's intended that requests to public JavaScript files and requests to JavaScript templates
|
337
345
|
# share the `/javascripts/` prefix.**
|
338
346
|
#
|
339
|
-
# Finally, if no matches are found,
|
340
|
-
# handler.
|
347
|
+
# Finally, if no matches are found, execution is passed to the next matching route handler if
|
348
|
+
# one exists. Otherwise, execution is passed to the `NOT_FOUND` error handler.
|
341
349
|
#
|
342
350
|
# @macro [attach] sinatra.get
|
343
351
|
# @overload get "$1"
|
@@ -346,7 +354,7 @@ module Mango
|
|
346
354
|
#
|
347
355
|
get "/javascripts/*.js" do |uri_path|
|
348
356
|
render_javascript_template! uri_path
|
349
|
-
|
357
|
+
pass
|
350
358
|
end
|
351
359
|
|
352
360
|
# Given a URI path, attempts to render a JavaScript template, if it exists, and halt
|
@@ -409,14 +417,14 @@ module Mango
|
|
409
417
|
# **It's intended that requests to public stylesheet files and requests to stylesheet templates
|
410
418
|
# share the `/stylesheets/` prefix.**
|
411
419
|
#
|
412
|
-
# Finally, if no matches are found,
|
413
|
-
# handler.
|
420
|
+
# Finally, if no matches are found, execution is passed to the next matching route handler if
|
421
|
+
# one exists. Otherwise, execution is passed to the `NOT_FOUND` error handler.
|
414
422
|
#
|
415
423
|
# @method get_css
|
416
424
|
#
|
417
425
|
get "/stylesheets/*.css" do |uri_path|
|
418
426
|
render_stylesheet_template! uri_path
|
419
|
-
|
427
|
+
pass
|
420
428
|
end
|
421
429
|
|
422
430
|
# Given a URI path, attempts to render a stylesheet template, if it exists, and halt
|
@@ -488,15 +496,15 @@ module Mango
|
|
488
496
|
# themes/default/views/page.haml +
|
489
497
|
# themes/default/views/layout.haml
|
490
498
|
#
|
491
|
-
# Finally, if no matches are found,
|
492
|
-
# handler.
|
499
|
+
# Finally, if no matches are found, execution is passed to the next matching route handler if
|
500
|
+
# one exists. Otherwise, execution is passed to the `NOT_FOUND` error handler.
|
493
501
|
#
|
494
502
|
# @method get_all
|
495
503
|
#
|
496
504
|
get "/*" do |uri_path|
|
497
505
|
render_index_file! uri_path
|
498
506
|
render_content_page! uri_path
|
499
|
-
|
507
|
+
pass
|
500
508
|
end
|
501
509
|
|
502
510
|
# Given a URI path, attempts to send an index.html file, if it exists, and halt
|
@@ -6,11 +6,14 @@ class String
|
|
6
6
|
# Convert a file name to a Sinatra-compliant template name
|
7
7
|
#
|
8
8
|
# @example
|
9
|
-
# "blog.haml".templatize
|
9
|
+
# "blog.haml".templatize #=> :blog
|
10
|
+
# "blog/home.erb".templatize #=> :"blog/home"
|
11
|
+
# "page.html.liquid".templatize #=> :"page.html"
|
12
|
+
# "article/post.html.haml".templatize #=> :"article/post.html"
|
10
13
|
#
|
11
14
|
# @return [Symbol] A Sinatra-compliant template name
|
12
15
|
#
|
13
16
|
def templatize
|
14
|
-
|
17
|
+
self.rpartition(".").shift.to_sym
|
15
18
|
end
|
16
19
|
end
|
data/lib/mango/dependencies.rb
CHANGED
@@ -1,41 +1,15 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
module Mango
|
4
|
-
# `Mango::Dependencies` is a module that
|
5
|
-
#
|
6
|
-
# * Strict parse-time version checking of Ruby
|
7
|
-
# * Lenient run-time handling of missing development RubyGems
|
8
|
-
#
|
9
|
-
# `Mango::Dependencies` automatically enforces a strict parse-time check for the
|
4
|
+
# `Mango::Dependencies` is a module that automatically enforces a strict parse-time check for the
|
10
5
|
# `SUPPORTED_RUBY_VERSIONS` on both application and development processes for the Mango
|
11
|
-
# library. (i.e. `bin/mango`, `rake`, `
|
6
|
+
# library. (i.e. `bin/mango`, `rake`, `rspec`, `rackup`, etc) Because of this,
|
12
7
|
# `Mango::Dependencies` is syntactically compatible with Ruby 1.8.7 or higher.
|
13
8
|
#
|
14
|
-
# `Mango::Dependencies` is also a lenient, run-time handler used in the `Rakefile` to build
|
15
|
-
# developer-friendly warnings from rescued `LoadError` exceptions raised by missing
|
16
|
-
# development RubyGem dependencies.
|
17
|
-
#
|
18
|
-
# @example Simple usage with the rspec-core gem
|
19
|
-
# Mango::Dependencies.warn_at_exit
|
20
|
-
# begin
|
21
|
-
# require "rspec/core/rake_task"
|
22
|
-
# RSpec::Core::RakeTask.new(:spec)
|
23
|
-
# rescue LoadError => e
|
24
|
-
# Mango::Dependencies.create_warning_for(e)
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# @see Mango::Dependencies.create_warning_for
|
28
|
-
# @see Mango::Dependencies.warn_at_exit
|
29
9
|
module Dependencies
|
30
10
|
# A short list of supported Ruby versions
|
31
11
|
SUPPORTED_RUBY_VERSIONS = ["1.9.2"]
|
32
12
|
|
33
|
-
# Maps file names to gem name
|
34
|
-
FILE_NAME_TO_GEM_NAME = {
|
35
|
-
:"rack/test" => :"rack-test",
|
36
|
-
:"rspec/core/rake_task" => :"rspec-core",
|
37
|
-
}
|
38
|
-
|
39
13
|
# Checks that the version of the current Ruby process matches the one of the
|
40
14
|
# `SUPPORTED_RUBY_VERSIONS`. This method is automatically invoked at the first time this class
|
41
15
|
# is required, ensuring the correct Ruby version at parse-time.
|
@@ -51,47 +25,8 @@ http://rvm.beginrescueend.com/
|
|
51
25
|
ERROR
|
52
26
|
end
|
53
27
|
end
|
54
|
-
check_ruby_version
|
55
|
-
|
56
|
-
# Empties the warnings cache. This method is called when the class is required.
|
57
|
-
def self.destroy_warnings
|
58
|
-
@@warnings_cache = []
|
59
|
-
end
|
60
|
-
destroy_warnings
|
61
|
-
|
62
|
-
# Creates and caches a warning from a `LoadError` exception.
|
63
|
-
#
|
64
|
-
# @param [LoadError] error A rescued exception
|
65
|
-
def self.create_warning_for(error)
|
66
|
-
pattern = %r{no such file to load -- ([\w\-\\/]*)}
|
67
|
-
error.message.match(pattern) do |match_data|
|
68
|
-
file_name = match_data[1].to_sym
|
69
|
-
gem_name = if FILE_NAME_TO_GEM_NAME.has_key?(file_name)
|
70
|
-
FILE_NAME_TO_GEM_NAME[file_name]
|
71
|
-
else
|
72
|
-
file_name
|
73
|
-
end
|
74
|
-
|
75
|
-
@@warnings_cache << gem_name
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Displays a warning message to the user on the standard output channel if there are warnings
|
80
|
-
# to render.
|
81
|
-
def self.render_warnings
|
82
|
-
unless @@warnings_cache.empty?
|
83
|
-
puts <<-EOS
|
84
|
-
|
85
|
-
Could not require the following RubyGems: #{@@warnings_cache.join(", ")}
|
86
|
-
Please run "bundle install" to access all development features.
|
87
|
-
|
88
|
-
EOS
|
89
|
-
end
|
90
|
-
end
|
91
28
|
|
92
|
-
#
|
93
|
-
|
94
|
-
at_exit { render_warnings }
|
95
|
-
end
|
29
|
+
# Automatic enforcement
|
30
|
+
check_ruby_version
|
96
31
|
end
|
97
32
|
end
|
data/lib/mango/templates/Gemfile
CHANGED
data/lib/mango/version.rb
CHANGED
data/mango.gemspec
CHANGED
@@ -15,18 +15,19 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.required_rubygems_version = ">= 1.3.7"
|
16
16
|
s.rubyforge_project = "mango"
|
17
17
|
|
18
|
-
s.add_runtime_dependency "bundler",
|
19
|
-
s.add_runtime_dependency "
|
20
|
-
s.add_runtime_dependency "
|
21
|
-
s.add_runtime_dependency "
|
22
|
-
s.add_runtime_dependency "
|
23
|
-
s.add_runtime_dependency "
|
24
|
-
s.add_runtime_dependency "
|
25
|
-
s.add_runtime_dependency "
|
26
|
-
s.add_runtime_dependency "
|
18
|
+
s.add_runtime_dependency "bundler", "~> 1.0.7"
|
19
|
+
s.add_runtime_dependency "thor", "~> 0.14.6"
|
20
|
+
s.add_runtime_dependency "rack", "~> 1.2.3"
|
21
|
+
s.add_runtime_dependency "sinatra", "~> 1.2.6"
|
22
|
+
s.add_runtime_dependency "haml", "~> 3.1.1"
|
23
|
+
s.add_runtime_dependency "sass", "~> 3.1.1"
|
24
|
+
s.add_runtime_dependency "liquid", "~> 2.2.2"
|
25
|
+
s.add_runtime_dependency "bluecloth", "~> 2.1.0"
|
26
|
+
s.add_runtime_dependency "coffee-script", "~> 2.2.0"
|
27
|
+
s.add_runtime_dependency "therubyracer-heroku", "= 0.8.1.pre3"
|
27
28
|
|
28
|
-
s.add_development_dependency "rspec", "~> 2.6.0"
|
29
29
|
s.add_development_dependency "rack-test", "~> 0.6.0"
|
30
|
+
s.add_development_dependency "rspec", "~> 2.6.0"
|
30
31
|
s.add_development_dependency "yard", "~> 0.7.1"
|
31
32
|
s.add_development_dependency "bluecloth", "~> 2.1.0"
|
32
33
|
|
@@ -256,6 +256,43 @@ describe Mango::Application do
|
|
256
256
|
|
257
257
|
#################################################################################################
|
258
258
|
|
259
|
+
describe "GET /articles/index" do
|
260
|
+
before(:all) do
|
261
|
+
get "/articles/index"
|
262
|
+
end
|
263
|
+
|
264
|
+
it "returns 200 status code" do
|
265
|
+
last_response.should be_ok
|
266
|
+
end
|
267
|
+
|
268
|
+
it "sends the correct Content-Type header" do
|
269
|
+
last_response["Content-Type"].should == "text/html;charset=utf-8"
|
270
|
+
end
|
271
|
+
|
272
|
+
it "sends the correct body content" do
|
273
|
+
last_response.body.should == <<-EXPECTED
|
274
|
+
<!DOCTYPE html>
|
275
|
+
<html>
|
276
|
+
<head>
|
277
|
+
<meta charset='utf-8' />
|
278
|
+
<title>layout.erb</title>
|
279
|
+
</head>
|
280
|
+
<body>
|
281
|
+
<h1>Welcome to Mango!</h1>
|
282
|
+
|
283
|
+
<p id="template">articles/page.erb</p>
|
284
|
+
|
285
|
+
<div id="content">
|
286
|
+
<h3>/articles/index.md</h3>
|
287
|
+
</div>
|
288
|
+
</body>
|
289
|
+
</html>
|
290
|
+
EXPECTED
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
#################################################################################################
|
295
|
+
|
259
296
|
describe "GET /turner%2Bhooch" do
|
260
297
|
before(:all) do
|
261
298
|
get "/turner%2Bhooch"
|
@@ -631,4 +668,32 @@ describe Mango::Application do
|
|
631
668
|
EXPECTED
|
632
669
|
end
|
633
670
|
end
|
671
|
+
|
672
|
+
#################################################################################################
|
673
|
+
|
674
|
+
context "given an additional GET route handler to Mango::Application" do
|
675
|
+
class Mango::Application
|
676
|
+
get "/route/addition" do
|
677
|
+
"/route/addition isolated and handled"
|
678
|
+
end
|
679
|
+
end
|
680
|
+
|
681
|
+
describe "GET /route/addition" do
|
682
|
+
before(:all) do
|
683
|
+
get "/route/addition"
|
684
|
+
end
|
685
|
+
|
686
|
+
it "returns 200 status code" do
|
687
|
+
last_response.should be_ok
|
688
|
+
end
|
689
|
+
|
690
|
+
it "sends the correct Content-Type header" do
|
691
|
+
last_response["Content-Type"].should == "text/html;charset=utf-8"
|
692
|
+
end
|
693
|
+
|
694
|
+
it "sends the correct body content" do
|
695
|
+
last_response.body.should == "/route/addition isolated and handled"
|
696
|
+
end
|
697
|
+
end
|
698
|
+
end
|
634
699
|
end
|
@@ -275,4 +275,32 @@ if (opposite) {
|
|
275
275
|
EXPECTED
|
276
276
|
end
|
277
277
|
end
|
278
|
+
|
279
|
+
#################################################################################################
|
280
|
+
|
281
|
+
context "given an additional GET route handler to Mango::Application" do
|
282
|
+
class Mango::Application
|
283
|
+
get "/javascripts/addition.js" do
|
284
|
+
"/javascripts/addition.js isolated and handled"
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
describe "GET /javascripts/addition.js" do
|
289
|
+
before(:all) do
|
290
|
+
get "/javascripts/addition.js"
|
291
|
+
end
|
292
|
+
|
293
|
+
it "returns 200 status code" do
|
294
|
+
last_response.should be_ok
|
295
|
+
end
|
296
|
+
|
297
|
+
it "sends the correct Content-Type header" do
|
298
|
+
last_response["Content-Type"].should == "text/html;charset=utf-8"
|
299
|
+
end
|
300
|
+
|
301
|
+
it "sends the correct body content" do
|
302
|
+
last_response.body.should == "/javascripts/addition.js isolated and handled"
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
278
306
|
end
|
@@ -318,4 +318,32 @@ time, mark, audio, video {
|
|
318
318
|
EXPECTED
|
319
319
|
end
|
320
320
|
end
|
321
|
+
|
322
|
+
#################################################################################################
|
323
|
+
|
324
|
+
context "given an additional GET route handler to Mango::Application" do
|
325
|
+
class Mango::Application
|
326
|
+
get "/stylesheets/addition.css" do
|
327
|
+
"/stylesheets/addition.css isolated and handled"
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
describe "GET /stylesheets/addition.css" do
|
332
|
+
before(:all) do
|
333
|
+
get "/stylesheets/addition.css"
|
334
|
+
end
|
335
|
+
|
336
|
+
it "returns 200 status code" do
|
337
|
+
last_response.should be_ok
|
338
|
+
end
|
339
|
+
|
340
|
+
it "sends the correct Content-Type header" do
|
341
|
+
last_response["Content-Type"].should == "text/html;charset=utf-8"
|
342
|
+
end
|
343
|
+
|
344
|
+
it "sends the correct body content" do
|
345
|
+
last_response.body.should == "/stylesheets/addition.css isolated and handled"
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
321
349
|
end
|
@@ -2,11 +2,35 @@
|
|
2
2
|
require "spec_helper"
|
3
3
|
|
4
4
|
describe String, "#templatize" do
|
5
|
-
context "given a file name" do
|
5
|
+
context "given a file name with 1 extension" do
|
6
6
|
let(:file_name) { "blog.haml" }
|
7
7
|
|
8
8
|
it "converts it to a Sinatra-compliant template name" do
|
9
9
|
file_name.templatize.should eq(:blog)
|
10
10
|
end
|
11
11
|
end
|
12
|
+
|
13
|
+
context "given a nested file name with 1 extension" do
|
14
|
+
let(:file_name) { "blog/home.erb" }
|
15
|
+
|
16
|
+
it "converts it to a Sinatra-compliant template name" do
|
17
|
+
file_name.templatize.should eq(:"blog/home")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "given a file name with 2 extensions" do
|
22
|
+
let(:file_name) { "page.html.liquid" }
|
23
|
+
|
24
|
+
it "converts it to a Sinatra-compliant template name" do
|
25
|
+
file_name.templatize.should eq(:"page.html")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "given a nested file name with 2 extensions" do
|
30
|
+
let(:file_name) { "article/post.html.haml" }
|
31
|
+
|
32
|
+
it "converts it to a Sinatra-compliant template name" do
|
33
|
+
file_name.templatize.should eq(:"article/post.html")
|
34
|
+
end
|
35
|
+
end
|
12
36
|
end
|
@@ -9,18 +9,6 @@ describe Mango::Dependencies do
|
|
9
9
|
it "supports ruby 1.9.2" do
|
10
10
|
Mango::Dependencies::SUPPORTED_RUBY_VERSIONS.should == ["1.9.2"]
|
11
11
|
end
|
12
|
-
|
13
|
-
it "file name to gem name look-up table should be correct" do
|
14
|
-
expected = {
|
15
|
-
:"rack/test" => :"rack-test",
|
16
|
-
:"rspec/core/rake_task" => :"rspec-core",
|
17
|
-
}
|
18
|
-
Mango::Dependencies::FILE_NAME_TO_GEM_NAME.should == expected
|
19
|
-
end
|
20
|
-
|
21
|
-
it "warnings cache should be empty" do
|
22
|
-
Mango::Dependencies.class_variable_get(:@@warnings_cache).should be_empty
|
23
|
-
end
|
24
12
|
end
|
25
13
|
|
26
14
|
#################################################################################################
|
@@ -77,75 +65,4 @@ http://rvm.beginrescueend.com/
|
|
77
65
|
}.should_not raise_exception(SystemExit, expected_message(version))
|
78
66
|
end
|
79
67
|
end
|
80
|
-
|
81
|
-
#################################################################################################
|
82
|
-
|
83
|
-
context "given three load errors" do
|
84
|
-
before(:each) do
|
85
|
-
["rspec/core/rake_task", "yard", "bluecloth"].each do |file|
|
86
|
-
load_error = LoadError.new("no such file to load -- #{file}")
|
87
|
-
Mango::Dependencies.create_warning_for(load_error)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
after(:each) do
|
92
|
-
Mango::Dependencies.destroy_warnings
|
93
|
-
end
|
94
|
-
|
95
|
-
describe ".destroy_warnings" do
|
96
|
-
it "empties the warnings cache" do
|
97
|
-
Mango::Dependencies.class_variable_get(:@@warnings_cache).should_not be_empty
|
98
|
-
Mango::Dependencies.destroy_warnings
|
99
|
-
Mango::Dependencies.class_variable_get(:@@warnings_cache).should be_empty
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
###############################################################################################
|
104
|
-
|
105
|
-
describe ".create_warning_for" do
|
106
|
-
it "creates and caches three warnings" do
|
107
|
-
expected = [:"rspec-core", :yard, :bluecloth]
|
108
|
-
Mango::Dependencies.class_variable_get(:@@warnings_cache).should == expected
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
###############################################################################################
|
113
|
-
|
114
|
-
describe ".render_warnings" do
|
115
|
-
before(:each) do
|
116
|
-
$stdout = StringIO.new
|
117
|
-
end
|
118
|
-
|
119
|
-
after(:each) do
|
120
|
-
$stdout = STDOUT
|
121
|
-
end
|
122
|
-
|
123
|
-
it "displays a warning message to the user on the standard output channel" do
|
124
|
-
Mango::Dependencies.render_warnings
|
125
|
-
$stdout.string.should == <<-MESSAGE
|
126
|
-
|
127
|
-
Could not require the following RubyGems: rspec-core, yard, bluecloth
|
128
|
-
Please run "bundle install" to access all development features.
|
129
|
-
|
130
|
-
MESSAGE
|
131
|
-
end
|
132
|
-
|
133
|
-
it "doesn't display a warning message to the user if there are no warnings in the cache" do
|
134
|
-
Mango::Dependencies.destroy_warnings
|
135
|
-
Mango::Dependencies.render_warnings
|
136
|
-
$stdout.string.should be_empty
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
#################################################################################################
|
142
|
-
|
143
|
-
describe ".warn_at_exit" do
|
144
|
-
it "ensures Kernel#at_exit is invoked with a block" do
|
145
|
-
Mango::Dependencies.should_receive(:at_exit)
|
146
|
-
# TODO how to specify that #at_exit receives a block?
|
147
|
-
# maybe i can intercept the block, execute it and test the output?
|
148
|
-
Mango::Dependencies.warn_at_exit
|
149
|
-
end
|
150
|
-
end
|
151
68
|
end
|
data/spec/lib/runner_spec.rb
CHANGED
data/spec/lib/version_spec.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 2
|
9
|
+
version: 0.6.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ryan Sobol
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-06-06 00:00:00 -04:00
|
18
18
|
default_executable: mango
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -33,9 +33,24 @@ dependencies:
|
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: thor
|
37
37
|
prerelease: false
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
- 14
|
46
|
+
- 6
|
47
|
+
version: 0.14.6
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: rack
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
54
|
none: false
|
40
55
|
requirements:
|
41
56
|
- - ~>
|
@@ -43,14 +58,14 @@ dependencies:
|
|
43
58
|
segments:
|
44
59
|
- 1
|
45
60
|
- 2
|
46
|
-
-
|
47
|
-
version: 1.2.
|
61
|
+
- 3
|
62
|
+
version: 1.2.3
|
48
63
|
type: :runtime
|
49
|
-
version_requirements: *
|
64
|
+
version_requirements: *id003
|
50
65
|
- !ruby/object:Gem::Dependency
|
51
66
|
name: sinatra
|
52
67
|
prerelease: false
|
53
|
-
requirement: &
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
54
69
|
none: false
|
55
70
|
requirements:
|
56
71
|
- - ~>
|
@@ -61,11 +76,11 @@ dependencies:
|
|
61
76
|
- 6
|
62
77
|
version: 1.2.6
|
63
78
|
type: :runtime
|
64
|
-
version_requirements: *
|
79
|
+
version_requirements: *id004
|
65
80
|
- !ruby/object:Gem::Dependency
|
66
81
|
name: haml
|
67
82
|
prerelease: false
|
68
|
-
requirement: &
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
69
84
|
none: false
|
70
85
|
requirements:
|
71
86
|
- - ~>
|
@@ -76,11 +91,11 @@ dependencies:
|
|
76
91
|
- 1
|
77
92
|
version: 3.1.1
|
78
93
|
type: :runtime
|
79
|
-
version_requirements: *
|
94
|
+
version_requirements: *id005
|
80
95
|
- !ruby/object:Gem::Dependency
|
81
96
|
name: sass
|
82
97
|
prerelease: false
|
83
|
-
requirement: &
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
84
99
|
none: false
|
85
100
|
requirements:
|
86
101
|
- - ~>
|
@@ -91,11 +106,11 @@ dependencies:
|
|
91
106
|
- 1
|
92
107
|
version: 3.1.1
|
93
108
|
type: :runtime
|
94
|
-
version_requirements: *
|
109
|
+
version_requirements: *id006
|
95
110
|
- !ruby/object:Gem::Dependency
|
96
111
|
name: liquid
|
97
112
|
prerelease: false
|
98
|
-
requirement: &
|
113
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
99
114
|
none: false
|
100
115
|
requirements:
|
101
116
|
- - ~>
|
@@ -106,11 +121,11 @@ dependencies:
|
|
106
121
|
- 2
|
107
122
|
version: 2.2.2
|
108
123
|
type: :runtime
|
109
|
-
version_requirements: *
|
124
|
+
version_requirements: *id007
|
110
125
|
- !ruby/object:Gem::Dependency
|
111
126
|
name: bluecloth
|
112
127
|
prerelease: false
|
113
|
-
requirement: &
|
128
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
114
129
|
none: false
|
115
130
|
requirements:
|
116
131
|
- - ~>
|
@@ -121,11 +136,11 @@ dependencies:
|
|
121
136
|
- 0
|
122
137
|
version: 2.1.0
|
123
138
|
type: :runtime
|
124
|
-
version_requirements: *
|
139
|
+
version_requirements: *id008
|
125
140
|
- !ruby/object:Gem::Dependency
|
126
141
|
name: coffee-script
|
127
142
|
prerelease: false
|
128
|
-
requirement: &
|
143
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
129
144
|
none: false
|
130
145
|
requirements:
|
131
146
|
- - ~>
|
@@ -136,56 +151,57 @@ dependencies:
|
|
136
151
|
- 0
|
137
152
|
version: 2.2.0
|
138
153
|
type: :runtime
|
139
|
-
version_requirements: *
|
154
|
+
version_requirements: *id009
|
140
155
|
- !ruby/object:Gem::Dependency
|
141
|
-
name:
|
156
|
+
name: therubyracer-heroku
|
142
157
|
prerelease: false
|
143
|
-
requirement: &
|
158
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
144
159
|
none: false
|
145
160
|
requirements:
|
146
|
-
- -
|
161
|
+
- - "="
|
147
162
|
- !ruby/object:Gem::Version
|
148
163
|
segments:
|
149
164
|
- 0
|
150
|
-
-
|
151
|
-
-
|
152
|
-
|
165
|
+
- 8
|
166
|
+
- 1
|
167
|
+
- pre3
|
168
|
+
version: 0.8.1.pre3
|
153
169
|
type: :runtime
|
154
|
-
version_requirements: *
|
170
|
+
version_requirements: *id010
|
155
171
|
- !ruby/object:Gem::Dependency
|
156
|
-
name:
|
172
|
+
name: rack-test
|
157
173
|
prerelease: false
|
158
|
-
requirement: &
|
174
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
159
175
|
none: false
|
160
176
|
requirements:
|
161
177
|
- - ~>
|
162
178
|
- !ruby/object:Gem::Version
|
163
179
|
segments:
|
164
|
-
-
|
180
|
+
- 0
|
165
181
|
- 6
|
166
182
|
- 0
|
167
|
-
version:
|
183
|
+
version: 0.6.0
|
168
184
|
type: :development
|
169
|
-
version_requirements: *
|
185
|
+
version_requirements: *id011
|
170
186
|
- !ruby/object:Gem::Dependency
|
171
|
-
name:
|
187
|
+
name: rspec
|
172
188
|
prerelease: false
|
173
|
-
requirement: &
|
189
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
174
190
|
none: false
|
175
191
|
requirements:
|
176
192
|
- - ~>
|
177
193
|
- !ruby/object:Gem::Version
|
178
194
|
segments:
|
179
|
-
-
|
195
|
+
- 2
|
180
196
|
- 6
|
181
197
|
- 0
|
182
|
-
version:
|
198
|
+
version: 2.6.0
|
183
199
|
type: :development
|
184
|
-
version_requirements: *
|
200
|
+
version_requirements: *id012
|
185
201
|
- !ruby/object:Gem::Dependency
|
186
202
|
name: yard
|
187
203
|
prerelease: false
|
188
|
-
requirement: &
|
204
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
189
205
|
none: false
|
190
206
|
requirements:
|
191
207
|
- - ~>
|
@@ -196,11 +212,11 @@ dependencies:
|
|
196
212
|
- 1
|
197
213
|
version: 0.7.1
|
198
214
|
type: :development
|
199
|
-
version_requirements: *
|
215
|
+
version_requirements: *id013
|
200
216
|
- !ruby/object:Gem::Dependency
|
201
217
|
name: bluecloth
|
202
218
|
prerelease: false
|
203
|
-
requirement: &
|
219
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
204
220
|
none: false
|
205
221
|
requirements:
|
206
222
|
- - ~>
|
@@ -211,7 +227,7 @@ dependencies:
|
|
211
227
|
- 0
|
212
228
|
version: 2.1.0
|
213
229
|
type: :development
|
214
|
-
version_requirements: *
|
230
|
+
version_requirements: *id014
|
215
231
|
description: Mango is a dynamic, database-free, and open source website framework that is designed to make life easier for small teams of designers, developers, and content writers.
|
216
232
|
email: contact@ryansobol.com
|
217
233
|
executables:
|
@@ -261,6 +277,7 @@ files:
|
|
261
277
|
- spec/bin/mango_spec.rb
|
262
278
|
- spec/fixture/content/about/index.haml
|
263
279
|
- spec/fixture/content/about/us.haml
|
280
|
+
- spec/fixture/content/articles/index.md
|
264
281
|
- spec/fixture/content/engines/erb.erb
|
265
282
|
- spec/fixture/content/engines/haml.haml
|
266
283
|
- spec/fixture/content/engines/liquid.liquid
|
@@ -301,6 +318,7 @@ files:
|
|
301
318
|
- spec/fixture/themes/default/views/404.erb
|
302
319
|
- spec/fixture/themes/default/views/404.haml
|
303
320
|
- spec/fixture/themes/default/views/404.liquid
|
321
|
+
- spec/fixture/themes/default/views/articles/page.erb
|
304
322
|
- spec/fixture/themes/default/views/layout.erb
|
305
323
|
- spec/fixture/themes/default/views/layout.haml
|
306
324
|
- spec/fixture/themes/default/views/layout.liquid
|
@@ -365,6 +383,7 @@ test_files:
|
|
365
383
|
- spec/bin/mango_spec.rb
|
366
384
|
- spec/fixture/content/about/index.haml
|
367
385
|
- spec/fixture/content/about/us.haml
|
386
|
+
- spec/fixture/content/articles/index.md
|
368
387
|
- spec/fixture/content/engines/erb.erb
|
369
388
|
- spec/fixture/content/engines/haml.haml
|
370
389
|
- spec/fixture/content/engines/liquid.liquid
|
@@ -405,6 +424,7 @@ test_files:
|
|
405
424
|
- spec/fixture/themes/default/views/404.erb
|
406
425
|
- spec/fixture/themes/default/views/404.haml
|
407
426
|
- spec/fixture/themes/default/views/404.liquid
|
427
|
+
- spec/fixture/themes/default/views/articles/page.erb
|
408
428
|
- spec/fixture/themes/default/views/layout.erb
|
409
429
|
- spec/fixture/themes/default/views/layout.haml
|
410
430
|
- spec/fixture/themes/default/views/layout.liquid
|