sinatra-bundles 0.1.2 → 0.1.3

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.
Files changed (69) hide show
  1. data/Rakefile +2 -1
  2. data/VERSION +1 -1
  3. data/lib/sinatra/bundles/bundle.rb +36 -0
  4. data/lib/sinatra/bundles/helpers.rb +22 -0
  5. data/lib/sinatra/bundles/javascript_bundle.rb +37 -0
  6. data/lib/sinatra/bundles/stylesheet_bundle.rb +36 -0
  7. data/lib/sinatra/bundles.rb +4 -114
  8. data/sinatra-bundles.gemspec +11 -58
  9. data/spec/app.rb +1 -1
  10. data/spec/production_app.rb +1 -1
  11. data/spec/public/javascripts/eval.js +5 -0
  12. data/spec/sinatra-bundles_spec.rb +10 -1
  13. data/spec/spec_helper.rb +5 -6
  14. metadata +17 -57
  15. data/vendor/cache/sinatra-0.10.1.gem +0 -0
  16. data/vendor/gems/sinatra-0.10.1/AUTHORS +0 -43
  17. data/vendor/gems/sinatra-0.10.1/CHANGES +0 -467
  18. data/vendor/gems/sinatra-0.10.1/LICENSE +0 -22
  19. data/vendor/gems/sinatra-0.10.1/README.jp.rdoc +0 -552
  20. data/vendor/gems/sinatra-0.10.1/README.rdoc +0 -622
  21. data/vendor/gems/sinatra-0.10.1/Rakefile +0 -129
  22. data/vendor/gems/sinatra-0.10.1/lib/sinatra/base.rb +0 -1143
  23. data/vendor/gems/sinatra-0.10.1/lib/sinatra/images/404.png +0 -0
  24. data/vendor/gems/sinatra-0.10.1/lib/sinatra/images/500.png +0 -0
  25. data/vendor/gems/sinatra-0.10.1/lib/sinatra/main.rb +0 -28
  26. data/vendor/gems/sinatra-0.10.1/lib/sinatra/showexceptions.rb +0 -303
  27. data/vendor/gems/sinatra-0.10.1/lib/sinatra/tilt.rb +0 -509
  28. data/vendor/gems/sinatra-0.10.1/lib/sinatra.rb +0 -7
  29. data/vendor/gems/sinatra-0.10.1/sinatra.gemspec +0 -86
  30. data/vendor/gems/sinatra-0.10.1/test/base_test.rb +0 -160
  31. data/vendor/gems/sinatra-0.10.1/test/builder_test.rb +0 -65
  32. data/vendor/gems/sinatra-0.10.1/test/contest.rb +0 -64
  33. data/vendor/gems/sinatra-0.10.1/test/erb_test.rb +0 -81
  34. data/vendor/gems/sinatra-0.10.1/test/erubis_test.rb +0 -82
  35. data/vendor/gems/sinatra-0.10.1/test/extensions_test.rb +0 -100
  36. data/vendor/gems/sinatra-0.10.1/test/filter_test.rb +0 -195
  37. data/vendor/gems/sinatra-0.10.1/test/haml_test.rb +0 -90
  38. data/vendor/gems/sinatra-0.10.1/test/helper.rb +0 -76
  39. data/vendor/gems/sinatra-0.10.1/test/helpers_test.rb +0 -573
  40. data/vendor/gems/sinatra-0.10.1/test/mapped_error_test.rb +0 -186
  41. data/vendor/gems/sinatra-0.10.1/test/middleware_test.rb +0 -68
  42. data/vendor/gems/sinatra-0.10.1/test/request_test.rb +0 -33
  43. data/vendor/gems/sinatra-0.10.1/test/response_test.rb +0 -42
  44. data/vendor/gems/sinatra-0.10.1/test/result_test.rb +0 -98
  45. data/vendor/gems/sinatra-0.10.1/test/route_added_hook_test.rb +0 -59
  46. data/vendor/gems/sinatra-0.10.1/test/routing_test.rb +0 -878
  47. data/vendor/gems/sinatra-0.10.1/test/sass_test.rb +0 -79
  48. data/vendor/gems/sinatra-0.10.1/test/server_test.rb +0 -47
  49. data/vendor/gems/sinatra-0.10.1/test/sinatra_test.rb +0 -13
  50. data/vendor/gems/sinatra-0.10.1/test/static_test.rb +0 -87
  51. data/vendor/gems/sinatra-0.10.1/test/templates_test.rb +0 -155
  52. data/vendor/gems/sinatra-0.10.1/test/views/error.builder +0 -3
  53. data/vendor/gems/sinatra-0.10.1/test/views/error.erb +0 -3
  54. data/vendor/gems/sinatra-0.10.1/test/views/error.erubis +0 -3
  55. data/vendor/gems/sinatra-0.10.1/test/views/error.haml +0 -3
  56. data/vendor/gems/sinatra-0.10.1/test/views/error.sass +0 -2
  57. data/vendor/gems/sinatra-0.10.1/test/views/foo/hello.test +0 -1
  58. data/vendor/gems/sinatra-0.10.1/test/views/hello.builder +0 -1
  59. data/vendor/gems/sinatra-0.10.1/test/views/hello.erb +0 -1
  60. data/vendor/gems/sinatra-0.10.1/test/views/hello.erubis +0 -1
  61. data/vendor/gems/sinatra-0.10.1/test/views/hello.haml +0 -1
  62. data/vendor/gems/sinatra-0.10.1/test/views/hello.sass +0 -2
  63. data/vendor/gems/sinatra-0.10.1/test/views/hello.test +0 -1
  64. data/vendor/gems/sinatra-0.10.1/test/views/layout2.builder +0 -3
  65. data/vendor/gems/sinatra-0.10.1/test/views/layout2.erb +0 -2
  66. data/vendor/gems/sinatra-0.10.1/test/views/layout2.erubis +0 -2
  67. data/vendor/gems/sinatra-0.10.1/test/views/layout2.haml +0 -2
  68. data/vendor/gems/sinatra-0.10.1/test/views/layout2.test +0 -1
  69. data/vendor/specifications/sinatra-0.10.1.gemspec +0 -40
@@ -1,186 +0,0 @@
1
- require File.dirname(__FILE__) + '/helper'
2
-
3
- class FooError < RuntimeError
4
- end
5
-
6
- class FooNotFound < Sinatra::NotFound
7
- end
8
-
9
- class MappedErrorTest < Test::Unit::TestCase
10
- def test_default
11
- assert true
12
- end
13
-
14
- describe 'Exception Mappings' do
15
- it 'invokes handlers registered with ::error when raised' do
16
- mock_app {
17
- set :raise_errors, false
18
- error(FooError) { 'Foo!' }
19
- get '/' do
20
- raise FooError
21
- end
22
- }
23
- get '/'
24
- assert_equal 500, status
25
- assert_equal 'Foo!', body
26
- end
27
-
28
- it 'uses the Exception handler if no matching handler found' do
29
- mock_app {
30
- set :raise_errors, false
31
- error(Exception) { 'Exception!' }
32
- get '/' do
33
- raise FooError
34
- end
35
- }
36
-
37
- get '/'
38
- assert_equal 500, status
39
- assert_equal 'Exception!', body
40
- end
41
-
42
- it "sets env['sinatra.error'] to the rescued exception" do
43
- mock_app {
44
- set :raise_errors, false
45
- error(FooError) {
46
- assert env.include?('sinatra.error')
47
- assert env['sinatra.error'].kind_of?(FooError)
48
- 'looks good'
49
- }
50
- get '/' do
51
- raise FooError
52
- end
53
- }
54
- get '/'
55
- assert_equal 'looks good', body
56
- end
57
-
58
- it "raises without calling the handler when the raise_errors options is set" do
59
- mock_app {
60
- set :raise_errors, true
61
- error(FooError) { "she's not there." }
62
- get '/' do
63
- raise FooError
64
- end
65
- }
66
- assert_raise(FooError) { get '/' }
67
- end
68
-
69
- it "never raises Sinatra::NotFound beyond the application" do
70
- mock_app {
71
- set :raise_errors, true
72
- get '/' do
73
- raise Sinatra::NotFound
74
- end
75
- }
76
- assert_nothing_raised { get '/' }
77
- assert_equal 404, status
78
- end
79
-
80
- it "cascades for subclasses of Sinatra::NotFound" do
81
- mock_app {
82
- set :raise_errors, true
83
- error(FooNotFound) { "foo! not found." }
84
- get '/' do
85
- raise FooNotFound
86
- end
87
- }
88
- assert_nothing_raised { get '/' }
89
- assert_equal 404, status
90
- assert_equal 'foo! not found.', body
91
- end
92
-
93
- it 'has a not_found method for backwards compatibility' do
94
- mock_app {
95
- not_found do
96
- "Lost, are we?"
97
- end
98
- }
99
-
100
- get '/test'
101
- assert_equal 404, status
102
- assert_equal "Lost, are we?", body
103
- end
104
-
105
- it 'inherits error mappings from base class' do
106
- base = Class.new(Sinatra::Base)
107
- base.error(FooError) { 'base class' }
108
-
109
- mock_app(base) {
110
- set :raise_errors, false
111
- get '/' do
112
- raise FooError
113
- end
114
- }
115
-
116
- get '/'
117
- assert_equal 'base class', body
118
- end
119
-
120
- it 'overrides error mappings in base class' do
121
- base = Class.new(Sinatra::Base)
122
- base.error(FooError) { 'base class' }
123
-
124
- mock_app(base) {
125
- set :raise_errors, false
126
- error(FooError) { 'subclass' }
127
- get '/' do
128
- raise FooError
129
- end
130
- }
131
-
132
- get '/'
133
- assert_equal 'subclass', body
134
- end
135
- end
136
-
137
- describe 'Custom Error Pages' do
138
- it 'allows numeric status code mappings to be registered with ::error' do
139
- mock_app {
140
- set :raise_errors, false
141
- error(500) { 'Foo!' }
142
- get '/' do
143
- [500, {}, 'Internal Foo Error']
144
- end
145
- }
146
- get '/'
147
- assert_equal 500, status
148
- assert_equal 'Foo!', body
149
- end
150
-
151
- it 'allows ranges of status code mappings to be registered with :error' do
152
- mock_app {
153
- set :raise_errors, false
154
- error(500..550) { "Error: #{response.status}" }
155
- get '/' do
156
- [507, {}, 'A very special error']
157
- end
158
- }
159
- get '/'
160
- assert_equal 507, status
161
- assert_equal 'Error: 507', body
162
- end
163
-
164
- class FooError < RuntimeError
165
- end
166
-
167
- it 'runs after exception mappings and overwrites body' do
168
- mock_app {
169
- set :raise_errors, false
170
- error FooError do
171
- response.status = 502
172
- 'from exception mapping'
173
- end
174
- error(500) { 'from 500 handler' }
175
- error(502) { 'from custom error page' }
176
-
177
- get '/' do
178
- raise FooError
179
- end
180
- }
181
- get '/'
182
- assert_equal 502, status
183
- assert_equal 'from custom error page', body
184
- end
185
- end
186
- end
@@ -1,68 +0,0 @@
1
- require File.dirname(__FILE__) + '/helper'
2
-
3
- class MiddlewareTest < Test::Unit::TestCase
4
- setup do
5
- @app = mock_app(Sinatra::Application) {
6
- get '/*' do
7
- response.headers['X-Tests'] = env['test.ran'].
8
- map { |n| n.split('::').last }.
9
- join(', ')
10
- env['PATH_INFO']
11
- end
12
- }
13
- end
14
-
15
- class MockMiddleware < Struct.new(:app)
16
- def call(env)
17
- (env['test.ran'] ||= []) << self.class.to_s
18
- app.call(env)
19
- end
20
- end
21
-
22
- class UpcaseMiddleware < MockMiddleware
23
- def call(env)
24
- env['PATH_INFO'] = env['PATH_INFO'].upcase
25
- super
26
- end
27
- end
28
-
29
- it "is added with Sinatra::Application.use" do
30
- @app.use UpcaseMiddleware
31
- get '/hello-world'
32
- assert ok?
33
- assert_equal '/HELLO-WORLD', body
34
- end
35
-
36
- class DowncaseMiddleware < MockMiddleware
37
- def call(env)
38
- env['PATH_INFO'] = env['PATH_INFO'].downcase
39
- super
40
- end
41
- end
42
-
43
- it "runs in the order defined" do
44
- @app.use UpcaseMiddleware
45
- @app.use DowncaseMiddleware
46
- get '/Foo'
47
- assert_equal "/foo", body
48
- assert_equal "UpcaseMiddleware, DowncaseMiddleware", response['X-Tests']
49
- end
50
-
51
- it "resets the prebuilt pipeline when new middleware is added" do
52
- @app.use UpcaseMiddleware
53
- get '/Foo'
54
- assert_equal "/FOO", body
55
- @app.use DowncaseMiddleware
56
- get '/Foo'
57
- assert_equal '/foo', body
58
- assert_equal "UpcaseMiddleware, DowncaseMiddleware", response['X-Tests']
59
- end
60
-
61
- it "works when app is used as middleware" do
62
- @app.use UpcaseMiddleware
63
- @app = @app.new
64
- get '/Foo'
65
- assert_equal "/FOO", body
66
- assert_equal "UpcaseMiddleware", response['X-Tests']
67
- end
68
- end
@@ -1,33 +0,0 @@
1
- require File.dirname(__FILE__) + '/helper'
2
-
3
- class RequestTest < Test::Unit::TestCase
4
- it 'responds to #user_agent' do
5
- request = Sinatra::Request.new({'HTTP_USER_AGENT' => 'Test'})
6
- assert request.respond_to?(:user_agent)
7
- assert_equal 'Test', request.user_agent
8
- end
9
-
10
- it 'parses POST params when Content-Type is form-dataish' do
11
- request = Sinatra::Request.new(
12
- 'REQUEST_METHOD' => 'PUT',
13
- 'CONTENT_TYPE' => 'application/x-www-form-urlencoded',
14
- 'rack.input' => StringIO.new('foo=bar')
15
- )
16
- assert_equal 'bar', request.params['foo']
17
- end
18
-
19
- it 'is secure when the url scheme is https' do
20
- request = Sinatra::Request.new('rack.url_scheme' => 'https')
21
- assert request.secure?
22
- end
23
-
24
- it 'is not secure when the url scheme is http' do
25
- request = Sinatra::Request.new('rack.url_scheme' => 'http')
26
- assert !request.secure?
27
- end
28
-
29
- it 'respects X-Forwarded-Proto header for proxied SSL' do
30
- request = Sinatra::Request.new('HTTP_X_FORWARDED_PROTO' => 'https')
31
- assert request.secure?
32
- end
33
- end
@@ -1,42 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require File.dirname(__FILE__) + '/helper'
4
-
5
- class ResponseTest < Test::Unit::TestCase
6
- setup do
7
- @response = Sinatra::Response.new
8
- end
9
-
10
- it "initializes with 200, text/html, and empty body" do
11
- assert_equal 200, @response.status
12
- assert_equal 'text/html', @response['Content-Type']
13
- assert_equal [], @response.body
14
- end
15
-
16
- it 'uses case insensitive headers' do
17
- @response['content-type'] = 'application/foo'
18
- assert_equal 'application/foo', @response['Content-Type']
19
- assert_equal 'application/foo', @response['CONTENT-TYPE']
20
- end
21
-
22
- it 'writes to body' do
23
- @response.body = 'Hello'
24
- @response.write ' World'
25
- assert_equal 'Hello World', @response.body
26
- end
27
-
28
- [204, 304].each do |status_code|
29
- it "removes the Content-Type header and body when response status is #{status_code}" do
30
- @response.status = status_code
31
- @response.body = ['Hello World']
32
- assert_equal [status_code, {}, []], @response.finish
33
- end
34
- end
35
-
36
- it 'Calculates the Content-Length using the bytesize of the body' do
37
- @response.body = ['Hello', 'World!', '✈']
38
- status, headers, body = @response.finish
39
- assert_equal '14', headers['Content-Length']
40
- assert_equal @response.body, body
41
- end
42
- end
@@ -1,98 +0,0 @@
1
- require File.dirname(__FILE__) + '/helper'
2
-
3
- class ResultTest < Test::Unit::TestCase
4
- it "sets response.body when result is a String" do
5
- mock_app {
6
- get '/' do
7
- 'Hello World'
8
- end
9
- }
10
-
11
- get '/'
12
- assert ok?
13
- assert_equal 'Hello World', body
14
- end
15
-
16
- it "sets response.body when result is an Array of Strings" do
17
- mock_app {
18
- get '/' do
19
- ['Hello', 'World']
20
- end
21
- }
22
-
23
- get '/'
24
- assert ok?
25
- assert_equal 'HelloWorld', body
26
- end
27
-
28
- it "sets response.body when result responds to #each" do
29
- mock_app {
30
- get '/' do
31
- res = lambda { 'Hello World' }
32
- def res.each ; yield call ; end
33
- res
34
- end
35
- }
36
-
37
- get '/'
38
- assert ok?
39
- assert_equal 'Hello World', body
40
- end
41
-
42
- it "sets response.body to [] when result is nil" do
43
- mock_app {
44
- get '/' do
45
- nil
46
- end
47
- }
48
-
49
- get '/'
50
- assert ok?
51
- assert_equal '', body
52
- end
53
-
54
- it "sets status, headers, and body when result is a Rack response tuple" do
55
- mock_app {
56
- get '/' do
57
- [205, {'Content-Type' => 'foo/bar'}, 'Hello World']
58
- end
59
- }
60
-
61
- get '/'
62
- assert_equal 205, status
63
- assert_equal 'foo/bar', response['Content-Type']
64
- assert_equal 'Hello World', body
65
- end
66
-
67
- it "sets status and body when result is a two-tuple" do
68
- mock_app {
69
- get '/' do
70
- [409, 'formula of']
71
- end
72
- }
73
-
74
- get '/'
75
- assert_equal 409, status
76
- assert_equal 'formula of', body
77
- end
78
-
79
- it "raises a TypeError when result is a non two or three tuple Array" do
80
- mock_app {
81
- get '/' do
82
- [409, 'formula of', 'something else', 'even more']
83
- end
84
- }
85
-
86
- assert_raise(TypeError) { get '/' }
87
- end
88
-
89
- it "sets status when result is a Fixnum status code" do
90
- mock_app {
91
- get('/') { 205 }
92
- }
93
-
94
- get '/'
95
- assert_equal 205, status
96
- assert_equal '', body
97
- end
98
- end
@@ -1,59 +0,0 @@
1
- require File.dirname(__FILE__) + '/helper'
2
-
3
- module RouteAddedTest
4
- @routes, @procs = [], []
5
- def self.routes ; @routes ; end
6
- def self.procs ; @procs ; end
7
- def self.route_added(verb, path, proc)
8
- @routes << [verb, path]
9
- @procs << proc
10
- end
11
- end
12
-
13
- class RouteAddedHookTest < Test::Unit::TestCase
14
- setup {
15
- RouteAddedTest.routes.clear
16
- RouteAddedTest.procs.clear
17
- }
18
-
19
- it "should be notified of an added route" do
20
- mock_app(Class.new(Sinatra::Base)) {
21
- register RouteAddedTest
22
- get('/') {}
23
- }
24
-
25
- assert_equal [["GET", "/"], ["HEAD", "/"]],
26
- RouteAddedTest.routes
27
- end
28
-
29
- it "should include hooks from superclass" do
30
- a = Class.new(Class.new(Sinatra::Base))
31
- b = Class.new(a)
32
-
33
- a.register RouteAddedTest
34
- b.class_eval { post("/sub_app_route") {} }
35
-
36
- assert_equal [["POST", "/sub_app_route"]],
37
- RouteAddedTest.routes
38
- end
39
-
40
- it "should only run once per extension" do
41
- mock_app(Class.new(Sinatra::Base)) {
42
- register RouteAddedTest
43
- register RouteAddedTest
44
- get('/') {}
45
- }
46
-
47
- assert_equal [["GET", "/"], ["HEAD", "/"]],
48
- RouteAddedTest.routes
49
- end
50
-
51
- it "should pass route blocks as an argument" do
52
- mock_app(Class.new(Sinatra::Base)) {
53
- register RouteAddedTest
54
- get('/') {}
55
- }
56
-
57
- assert_kind_of Proc, RouteAddedTest.procs.first
58
- end
59
- end