mango 0.6.1 → 0.6.2
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.
- 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
|