darkhelmet-sinatra 0.9.1.1 → 0.10.1

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 (88) hide show
  1. data/AUTHORS +2 -0
  2. data/CHANGES +180 -0
  3. data/LICENSE +1 -1
  4. data/README.jp.rdoc +552 -0
  5. data/README.rdoc +177 -38
  6. data/Rakefile +18 -25
  7. data/lib/sinatra.rb +1 -2
  8. data/lib/sinatra/base.rb +405 -305
  9. data/lib/sinatra/main.rb +5 -24
  10. data/lib/sinatra/showexceptions.rb +303 -0
  11. data/lib/sinatra/tilt.rb +509 -0
  12. data/sinatra.gemspec +21 -51
  13. data/test/base_test.rb +123 -93
  14. data/test/builder_test.rb +2 -1
  15. data/test/contest.rb +64 -0
  16. data/test/erb_test.rb +1 -1
  17. data/test/erubis_test.rb +82 -0
  18. data/test/extensions_test.rb +24 -8
  19. data/test/filter_test.rb +99 -3
  20. data/test/haml_test.rb +25 -3
  21. data/test/helper.rb +43 -48
  22. data/test/helpers_test.rb +500 -424
  23. data/test/mapped_error_test.rb +163 -137
  24. data/test/middleware_test.rb +3 -3
  25. data/test/request_test.rb +16 -1
  26. data/test/response_test.rb +2 -2
  27. data/test/result_test.rb +1 -1
  28. data/test/route_added_hook_test.rb +59 -0
  29. data/test/routing_test.rb +170 -22
  30. data/test/sass_test.rb +44 -1
  31. data/test/server_test.rb +19 -13
  32. data/test/sinatra_test.rb +1 -1
  33. data/test/static_test.rb +9 -2
  34. data/test/templates_test.rb +78 -11
  35. data/test/views/error.builder +3 -0
  36. data/test/views/error.erb +3 -0
  37. data/test/views/error.erubis +3 -0
  38. data/test/views/error.haml +3 -0
  39. data/test/views/error.sass +2 -0
  40. data/test/views/foo/hello.test +1 -0
  41. data/test/views/hello.erubis +1 -0
  42. data/test/views/layout2.erubis +2 -0
  43. metadata +37 -55
  44. data/compat/app_test.rb +0 -282
  45. data/compat/application_test.rb +0 -262
  46. data/compat/builder_test.rb +0 -101
  47. data/compat/compat_test.rb +0 -12
  48. data/compat/custom_error_test.rb +0 -62
  49. data/compat/erb_test.rb +0 -136
  50. data/compat/events_test.rb +0 -78
  51. data/compat/filter_test.rb +0 -30
  52. data/compat/haml_test.rb +0 -233
  53. data/compat/helper.rb +0 -30
  54. data/compat/mapped_error_test.rb +0 -72
  55. data/compat/pipeline_test.rb +0 -45
  56. data/compat/public/foo.xml +0 -1
  57. data/compat/sass_test.rb +0 -57
  58. data/compat/sessions_test.rb +0 -42
  59. data/compat/streaming_test.rb +0 -133
  60. data/compat/sym_params_test.rb +0 -19
  61. data/compat/template_test.rb +0 -30
  62. data/compat/use_in_file_templates_test.rb +0 -47
  63. data/compat/views/foo.builder +0 -1
  64. data/compat/views/foo.erb +0 -1
  65. data/compat/views/foo.haml +0 -1
  66. data/compat/views/foo.sass +0 -2
  67. data/compat/views/foo_layout.erb +0 -2
  68. data/compat/views/foo_layout.haml +0 -2
  69. data/compat/views/layout_test/foo.builder +0 -1
  70. data/compat/views/layout_test/foo.erb +0 -1
  71. data/compat/views/layout_test/foo.haml +0 -1
  72. data/compat/views/layout_test/foo.sass +0 -2
  73. data/compat/views/layout_test/layout.builder +0 -3
  74. data/compat/views/layout_test/layout.erb +0 -1
  75. data/compat/views/layout_test/layout.haml +0 -1
  76. data/compat/views/layout_test/layout.sass +0 -2
  77. data/compat/views/no_layout/no_layout.builder +0 -1
  78. data/compat/views/no_layout/no_layout.haml +0 -1
  79. data/lib/sinatra/compat.rb +0 -250
  80. data/lib/sinatra/test.rb +0 -126
  81. data/lib/sinatra/test/bacon.rb +0 -19
  82. data/lib/sinatra/test/rspec.rb +0 -13
  83. data/lib/sinatra/test/spec.rb +0 -11
  84. data/lib/sinatra/test/unit.rb +0 -13
  85. data/test/data/reload_app_file.rb +0 -3
  86. data/test/options_test.rb +0 -374
  87. data/test/reload_test.rb +0 -68
  88. data/test/test_test.rb +0 -144
@@ -1 +0,0 @@
1
- xml.exclaim "You rock #{@name}!"
@@ -1 +0,0 @@
1
- You rock <%= @name %>!
@@ -1 +0,0 @@
1
- == You rock #{@name}!
@@ -1,2 +0,0 @@
1
- #sass
2
- :background_color #FFF
@@ -1,2 +0,0 @@
1
- <%= @title %>
2
- Hi <%= yield %>
@@ -1,2 +0,0 @@
1
- == #{@title}
2
- == Hi #{yield}
@@ -1 +0,0 @@
1
- xml.this "is foo!"
@@ -1 +0,0 @@
1
- This is foo!
@@ -1 +0,0 @@
1
- This is foo!
@@ -1,2 +0,0 @@
1
- #sass
2
- :background_color #FFF
@@ -1,3 +0,0 @@
1
- xml.layout do
2
- xml << yield
3
- end
@@ -1 +0,0 @@
1
- x <%= yield %> x
@@ -1 +0,0 @@
1
- == x #{yield} x
@@ -1,2 +0,0 @@
1
- b0rked!
2
- = yield
@@ -1 +0,0 @@
1
- xml.foo "No Layout!"
@@ -1 +0,0 @@
1
- %h1 No Layout!
@@ -1,250 +0,0 @@
1
- # Sinatra 0.3.x compatibility module.
2
- #
3
- # The following code makes Sinatra 0.9.x compatible with Sinatra 0.3.x to
4
- # ease the transition to the final 1.0 release. Everything defined in this
5
- # file will be removed for the 1.0 release.
6
-
7
- require 'ostruct'
8
- require 'sinatra/base'
9
- require 'sinatra/main'
10
-
11
- # Like Kernel#warn but outputs the location that triggered the warning.
12
- def sinatra_warn(*message) #:nodoc:
13
- line = caller.
14
- detect { |line| line !~ /(?:lib\/sinatra\/|__DELEGATE__)/ }.
15
- sub(/:in .*/, '')
16
- warn "#{line}: warning: #{message.join(' ')}"
17
- end
18
-
19
- # Rack now supports evented and swiftiplied mongrels through separate
20
- # handler.
21
- if ENV['SWIFT']
22
- sinatra_warn 'the SWIFT environment variable is deprecated;',
23
- 'use Rack::Handler::SwiftipliedMongrel instead.'
24
- require 'swiftcore/swiftiplied_mongrel'
25
- puts "Using Swiftiplied Mongrel"
26
- elsif ENV['EVENT']
27
- sinatra_warn 'the EVENT environment variable is deprecated;',
28
- 'use Rack::Handler::EventedMongrel instead.'
29
- require 'swiftcore/evented_mongrel'
30
- puts "Using Evented Mongrel"
31
- end
32
-
33
- # Make Rack 0.9.0 backward compatibile with 0.4.0 mime types. This isn't
34
- # technically a Sinatra issue but many Sinatra apps access the old
35
- # MIME_TYPES constants due to Sinatra example code.
36
- require 'rack/file'
37
- module Rack #:nodoc:
38
- class File #:nodoc:
39
- def self.const_missing(const_name)
40
- if const_name == :MIME_TYPES
41
- hash = Hash.new { |hash,key| Rack::Mime::MIME_TYPES[".#{key}"] }
42
- const_set :MIME_TYPES, hash
43
- sinatra_warn 'Rack::File::MIME_TYPES is deprecated; use Rack::Mime instead.'
44
- hash
45
- else
46
- super
47
- end
48
- end
49
- end
50
- end
51
-
52
- module Sinatra
53
- module Compat #:nodoc:
54
- end
55
-
56
- # Make Sinatra::EventContext an alias for Sinatra::Default to unbreak plugins.
57
- def self.const_missing(const_name) #:nodoc:
58
- if const_name == :EventContext
59
- const_set :EventContext, Sinatra::Default
60
- sinatra_warn 'Sinatra::EventContext is deprecated; use Sinatra::Default instead.'
61
- Sinatra::Default
62
- else
63
- super
64
- end
65
- end
66
-
67
- # The ServerError exception is deprecated. Any exception is considered an
68
- # internal server error.
69
- class ServerError < RuntimeError
70
- def initialize(*args, &block)
71
- sinatra_warn 'Sinatra::ServerError is deprecated;',
72
- 'use another exception, error, or Kernel#fail instead.'
73
- end
74
- def code ; 500 ; end
75
- end
76
-
77
- class Default < Base
78
- def self.const_missing(const_name) #:nodoc:
79
- if const_name == :FORWARD_METHODS
80
- sinatra_warn 'Sinatra::Application::FORWARD_METHODS is deprecated;',
81
- 'use Sinatra::Delegator::METHODS instead.'
82
- const_set :FORWARD_METHODS, Sinatra::Delegator::METHODS
83
- Sinatra::Delegator::METHODS
84
- else
85
- super
86
- end
87
- end
88
-
89
- # Deprecated. Use: response['Header-Name']
90
- def header(header=nil)
91
- sinatra_warn "The 'header' method is deprecated; use 'headers' instead."
92
- headers(header)
93
- end
94
-
95
- # Deprecated. Use: halt
96
- def stop(*args, &block)
97
- sinatra_warn "The 'stop' method is deprecated; use 'halt' instead."
98
- halt(*args, &block)
99
- end
100
-
101
- # Deprecated. Use: etag
102
- def entity_tag(*args, &block)
103
- sinatra_warn "The 'entity_tag' method is deprecated; use 'etag' instead."
104
- etag(*args, &block)
105
- end
106
-
107
- # Deprecated. Use the #attachment helper and return the data as a String or
108
- # Array.
109
- def send_data(data, options={})
110
- sinatra_warn "The 'send_data' method is deprecated. use attachment, status, content_type, etc. helpers instead."
111
-
112
- status options[:status] if options[:status]
113
- attachment options[:filename] if options[:disposition] == 'attachment'
114
- content_type options[:type] if options[:type]
115
- halt data
116
- end
117
-
118
- # Throwing halt with a Symbol and the to_result convention are
119
- # deprecated. Override the invoke method to detect those types of return
120
- # values.
121
- def invoke(&block) #:nodoc:
122
- res = super
123
- case
124
- when res.kind_of?(Symbol)
125
- sinatra_warn "Invoking the :#{res} helper by returning a Symbol is deprecated;",
126
- "call the helper directly instead."
127
- @response.body = __send__(res)
128
- when res.respond_to?(:to_result)
129
- sinatra_warn "The to_result convention is deprecated."
130
- @response.body = res.to_result(self)
131
- end
132
- res
133
- end
134
-
135
- def options #:nodoc:
136
- Options.new(self.class)
137
- end
138
-
139
- class Options < Struct.new(:target) #:nodoc:
140
- def method_missing(name, *args, &block)
141
- if target.respond_to?(name)
142
- target.__send__(name, *args, &block)
143
- elsif args.empty? && name.to_s !~ /=$/
144
- sinatra_warn 'accessing undefined options will raise a NameError in Sinatra 1.0'
145
- nil
146
- else
147
- super
148
- end
149
- end
150
- end
151
-
152
- class << self
153
- # Deprecated. Options are stored directly on the class object.
154
- def options
155
- sinatra_warn "The 'options' class method is deprecated; use 'self' instead."
156
- Options.new(self)
157
- end
158
-
159
- # Deprecated. Use: configure
160
- def configures(*args, &block)
161
- sinatra_warn "The 'configures' method is deprecated; use 'configure' instead."
162
- configure(*args, &block)
163
- end
164
-
165
- # Deprecated. Use: set
166
- def default_options
167
- sinatra_warn "Sinatra::Application.default_options is deprecated; use 'set' instead."
168
- fake = lambda { |options| set(options) }
169
- def fake.merge!(options) ; call(options) ; end
170
- fake
171
- end
172
-
173
- # Deprecated. Use: set
174
- def set_option(*args, &block)
175
- sinatra_warn "The 'set_option' method is deprecated; use 'set' instead."
176
- set(*args, &block)
177
- end
178
-
179
- def set_options(*args, &block)
180
- sinatra_warn "The 'set_options' method is deprecated; use 'set' instead."
181
- set(*args, &block)
182
- end
183
-
184
- # Deprecated. Use: set :environment, ENV
185
- def env=(value)
186
- sinatra_warn "The :env option is deprecated; use :environment instead."
187
- set :environment, value
188
- end
189
-
190
- # Deprecated. Use: options.environment
191
- def env
192
- sinatra_warn "The :env option is deprecated; use :environment instead."
193
- environment
194
- end
195
- end
196
-
197
- # Deprecated. Missing messages are no longer delegated to @response.
198
- def method_missing(name, *args, &b) #:nodoc:
199
- if @response.respond_to?(name)
200
- sinatra_warn "The '#{name}' method is deprecated; use 'response.#{name}' instead."
201
- @response.send(name, *args, &b)
202
- else
203
- super
204
- end
205
- end
206
- end
207
-
208
- class << self
209
- # Deprecated. Use: Sinatra::Application
210
- def application
211
- sinatra_warn "Sinatra.application is deprecated; use Sinatra::Application instead."
212
- Sinatra::Application
213
- end
214
-
215
- # Deprecated. Use: Sinatra::Application.reset!
216
- def application=(value)
217
- raise ArgumentError unless value.nil?
218
- sinatra_warn "Setting Sinatra.application to nil is deprecated; create a new instance instead."
219
- Sinatra.class_eval do
220
- remove_const :Application
221
- const_set :Application, Class.new(Sinatra::Default)
222
- end
223
- end
224
-
225
- def build_application
226
- sinatra_warn "Sinatra.build_application is deprecated; use Sinatra::Application instead."
227
- Sinatra::Application
228
- end
229
-
230
- def options
231
- sinatra_warn "Sinatra.options is deprecated; use Sinatra::Application.option_name instead."
232
- Sinatra::Application.options
233
- end
234
-
235
- def port
236
- sinatra_warn "Sinatra.port is deprecated; use Sinatra::Application.port instead."
237
- options.port
238
- end
239
-
240
- def host
241
- sinatra_warn "Sinatra.host is deprecated; use Sinatra::Application.host instead."
242
- options.host
243
- end
244
-
245
- def env
246
- sinatra_warn "Sinatra.env is deprecated; use Sinatra::Application.environment instead."
247
- options.environment
248
- end
249
- end
250
- end
@@ -1,126 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- module Sinatra
4
- module Test
5
- include Rack::Utils
6
-
7
- def self.included(base)
8
- Sinatra::Default.set(:environment, :test)
9
- end
10
-
11
- attr_reader :app, :request, :response
12
-
13
- def self.deprecate(framework)
14
- warn <<-EOF
15
- Warning: support for the #{framework} testing framework is deprecated and
16
- will be dropped in Sinatra 1.0. See <http://sinatra.github.com/testing.html>
17
- for more information.
18
- EOF
19
- end
20
-
21
- def make_request(verb, path, body=nil, options={})
22
- @app = Sinatra::Application if @app.nil? && defined?(Sinatra::Application)
23
- fail "@app not set - cannot make request" if @app.nil?
24
-
25
- @request = Rack::MockRequest.new(@app)
26
- options = { :lint => true }.merge(options || {})
27
-
28
- case
29
- when body.respond_to?(:to_hash)
30
- options.merge! body.delete(:env) if body.key?(:env)
31
- options[:input] = param_string(body)
32
- when body.respond_to?(:to_str)
33
- options[:input] = body
34
- when body.nil?
35
- options[:input] = ''
36
- else
37
- raise ArgumentError, "body must be a Hash, String, or nil"
38
- end
39
-
40
- yield @request if block_given?
41
- @response = @request.request(verb, path, rack_options(options))
42
- end
43
-
44
- def get(path, *args, &b) ; make_request('GET', path, *args, &b) ; end
45
- def head(path, *args, &b) ; make_request('HEAD', path, *args, &b) ; end
46
- def post(path, *args, &b) ; make_request('POST', path, *args, &b) ; end
47
- def put(path, *args, &b) ; make_request('PUT', path, *args, &b) ; end
48
- def delete(path, *args, &b) ; make_request('DELETE', path, *args, &b) ; end
49
-
50
- def follow!
51
- make_request 'GET', @response.location
52
- end
53
-
54
- def body ; @response.body ; end
55
- def status ; @response.status ; end
56
-
57
- # Delegate other missing methods to @response.
58
- def method_missing(name, *args, &block)
59
- if @response && @response.respond_to?(name)
60
- @response.send(name, *args, &block)
61
- else
62
- super
63
- end
64
- end
65
-
66
- # Also check @response since we delegate there.
67
- def respond_to?(symbol, include_private=false)
68
- super || (@response && @response.respond_to?(symbol, include_private))
69
- end
70
-
71
- private
72
-
73
- RACK_OPTIONS = {
74
- :accept => 'HTTP_ACCEPT',
75
- :agent => 'HTTP_USER_AGENT',
76
- :host => 'HTTP_HOST',
77
- :session => 'rack.session',
78
- :cookies => 'HTTP_COOKIE',
79
- :content_type => 'CONTENT_TYPE'
80
- }
81
-
82
- def rack_options(opts)
83
- opts.merge(:lint => true).inject({}) do |hash,(key,val)|
84
- key = RACK_OPTIONS[key] || key
85
- hash[key] = val
86
- hash
87
- end
88
- end
89
-
90
- def param_string(value, prefix = nil)
91
- case value
92
- when Array
93
- value.map { |v|
94
- param_string(v, "#{prefix}[]")
95
- } * "&"
96
- when Hash
97
- value.map { |k, v|
98
- param_string(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
99
- } * "&"
100
- else
101
- "#{prefix}=#{escape(value)}"
102
- end
103
- end
104
-
105
- if defined? Sinatra::Compat
106
- # Deprecated. Use: "get" instead of "get_it".
107
- %w(get head post put delete).each do |verb|
108
- eval <<-RUBY, binding, __FILE__, __LINE__
109
- def #{verb}_it(*args, &block)
110
- sinatra_warn "The #{verb}_it method is deprecated; use #{verb} instead."
111
- make_request('#{verb.upcase}', *args, &block)
112
- end
113
- RUBY
114
- end
115
- end
116
- end
117
-
118
- class TestHarness
119
- include Test
120
-
121
- def initialize(app=nil)
122
- @app = app || Sinatra::Application
123
- @app.set(:environment, :test)
124
- end
125
- end
126
- end
@@ -1,19 +0,0 @@
1
- require 'bacon'
2
- require 'sinatra/test'
3
-
4
- Sinatra::Test.deprecate('Bacon')
5
-
6
- Sinatra::Default.set(
7
- :environment => :test,
8
- :run => false,
9
- :raise_errors => true,
10
- :logging => false
11
- )
12
-
13
- module Sinatra::Test
14
- def should
15
- @response.should
16
- end
17
- end
18
-
19
- Bacon::Context.send(:include, Sinatra::Test)