sinatra-respond_to 0.3.8 → 0.4.0
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/Changelog.rdoc +14 -0
- data/README.rdoc +3 -10
- data/Rakefile +1 -2
- data/lib/sinatra/respond_to.rb +43 -22
- data/lib/sinatra/respond_to/version.rb +1 -1
- data/spec/app/test_app.rb +1 -0
- data/spec/extension_spec.rb +19 -11
- metadata +1 -11
data/Changelog.rdoc
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
=== 0.4.0 / 2010-01-30
|
2
|
+
|
3
|
+
* Specify that when running into unknown template languages the error message defaults to a generic template example
|
4
|
+
* Update code example
|
5
|
+
* Update supported sinatra versions in README
|
6
|
+
* Remove issues section because I believe it has been corrected
|
7
|
+
* Update development error message for new builder syntax
|
8
|
+
* Remove redundant hoe dependency and update rcov opts
|
9
|
+
* Fix the media_type -> mime_type conversion on Sinatra 0.9
|
10
|
+
* Fix rendering with extensions, e.g. resource.html.haml
|
11
|
+
* Add spec and passing code for content_type usage
|
12
|
+
* Changed how development error images are shown
|
13
|
+
* Update media_type to mime_type for Sinatra 1.0 while maintaining backward compat
|
14
|
+
|
1
15
|
=== 0.3.8 / 2010-01-30
|
2
16
|
|
3
17
|
* Need to bump because of wrong gem name
|
data/README.rdoc
CHANGED
@@ -16,6 +16,8 @@ A respond_to style Rails block for baked-in web service support in Sinatra
|
|
16
16
|
|
17
17
|
require 'sinatra'
|
18
18
|
require 'sinatra/respond_to'
|
19
|
+
|
20
|
+
register Sinatra::RespondTo
|
19
21
|
|
20
22
|
get '/posts' do
|
21
23
|
@posts = Post.recent
|
@@ -80,7 +82,7 @@ There a few options available for configuring the default behavior of respond_to
|
|
80
82
|
|
81
83
|
== REQUIREMENTS:
|
82
84
|
|
83
|
-
* sinatra 0.9.4 - 0
|
85
|
+
* sinatra 0.9.4 - 1.0
|
84
86
|
|
85
87
|
== INSTALL:
|
86
88
|
|
@@ -116,15 +118,6 @@ After checking out the source, run:
|
|
116
118
|
This task will install any missing dependencies, run the tests/specs,
|
117
119
|
and generate the RDoc.
|
118
120
|
|
119
|
-
== ISSUES
|
120
|
-
|
121
|
-
Sinatra has a bug that affects Classic style applications and extensions see 215[https://sinatra.lighthouseapp.com/projects/9779/tickets/215-extensions-cannot-define-before-filters-for-classic-apps] and 180[https://sinatra.lighthouseapp.com/projects/9779/tickets/180-better-route-inheritence].
|
122
|
-
I have worked around this by explicitly registering RespondTo with the top level Sinatra::Application when
|
123
|
-
requiring sinatra/respond\_to.
|
124
|
-
|
125
|
-
* {Extensions cannot define before filters for classic apps}[https://sinatra.lighthouseapp.com/projects/9779/tickets/215-extensions-cannot-define-before-filters-for-classic-apps]
|
126
|
-
* {Better route inheritence}[https://sinatra.lighthouseapp.com/projects/9779/tickets/180-better-route-inheritence]
|
127
|
-
|
128
121
|
== LICENSE:
|
129
122
|
|
130
123
|
(The MIT License)
|
data/Rakefile
CHANGED
@@ -11,7 +11,6 @@ Hoe.plugin :git
|
|
11
11
|
Hoe.spec 'sinatra-respond_to' do
|
12
12
|
developer('Chris Hoffman', 'cehoffman@gmail.com')
|
13
13
|
extra_deps << ['sinatra', '>= 0.9.4']
|
14
|
-
extra_dev_deps << ['hoe', '>= 2.5.0']
|
15
14
|
extra_dev_deps << ['rspec', '>= 1.3.0']
|
16
15
|
extra_dev_deps << ['rcov', '>= 0.9.7.1']
|
17
16
|
extra_dev_deps << ['rack-test', '>= 0.5.3']
|
@@ -33,7 +32,7 @@ begin
|
|
33
32
|
t.rcov = true
|
34
33
|
t.rcov_opts << '--text-summary'
|
35
34
|
t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
|
36
|
-
t.rcov_opts << '--exclude' << 'pkg,
|
35
|
+
t.rcov_opts << '--comments' << '--exclude' << 'pkg,gems'
|
37
36
|
end
|
38
37
|
rescue LoadError
|
39
38
|
puts "RSpec not available. Install it with sudo gem install rspec."
|
data/lib/sinatra/respond_to.rb
CHANGED
@@ -40,6 +40,9 @@ module Sinatra
|
|
40
40
|
#
|
41
41
|
# and the format will automatically be available in <tt>format</tt>
|
42
42
|
app.before do
|
43
|
+
# Let through sinatra image urls in development
|
44
|
+
next if self.class.development? && request.path_info =~ %r{/__sinatra__/.*?.png}
|
45
|
+
|
43
46
|
unless options.static? && options.public? && (request.get? || request.head?) && static_file?(request.path_info)
|
44
47
|
request.path_info.sub! %r{\.([^\./]+)$}, ''
|
45
48
|
|
@@ -50,12 +53,6 @@ module Sinatra
|
|
50
53
|
end
|
51
54
|
|
52
55
|
app.configure :development do |dev|
|
53
|
-
# Very, very, very hackish but only for development at least
|
54
|
-
# Modifies the regex matching /__sinatra__/:image.png to not have the extension
|
55
|
-
["GET", "HEAD"].each do |verb|
|
56
|
-
dev.routes[verb][1][0] = Regexp.new(dev.routes[verb][1][0].source.gsub(/\\\.[^\.\/]+\$$/, '$'))
|
57
|
-
end
|
58
|
-
|
59
56
|
dev.error UnhandledFormat do
|
60
57
|
content_type :html, :charset => 'utf-8'
|
61
58
|
|
@@ -96,7 +93,7 @@ module Sinatra
|
|
96
93
|
layout = case engine
|
97
94
|
when 'haml' then "!!!\n%html\n %body= yield"
|
98
95
|
when 'erb' then "<html>\n <body>\n <%= yield %>\n </body>\n</html>"
|
99
|
-
when 'builder' then "builder do |xml|\n xml << yield\nend"
|
96
|
+
when 'builder' then ::Sinatra::VERSION =~ /^1.0/ ? "xml << yield" : "builder do |xml|\n xml << yield\nend"
|
100
97
|
end
|
101
98
|
|
102
99
|
layout = "<small>app.#{format}.#{engine}</small>\n<pre>#{escape_html(layout)}</pre>"
|
@@ -133,28 +130,56 @@ module Sinatra
|
|
133
130
|
|
134
131
|
app.class_eval do
|
135
132
|
private
|
136
|
-
|
133
|
+
# Changes in 1.0 Sinatra reuse render for layout so we store
|
134
|
+
# the original value to tell us if this is an automatic attempt
|
135
|
+
# to do a layout call. If it is, it might fail with Errno::ENOENT
|
136
|
+
# and we want to pass that back to sinatra since it isn't a MissingTemplate
|
137
|
+
# error
|
138
|
+
def render_with_format(*args, &block)
|
139
|
+
assumed_layout = args[1] == :layout
|
137
140
|
args[1] = "#{args[1]}.#{format}".to_sym if args[1].is_a?(::Symbol)
|
138
|
-
render_without_format *args
|
139
|
-
rescue Errno::ENOENT
|
140
|
-
raise MissingTemplate, "#{args[1]}.#{args[0]}"
|
141
|
+
render_without_format *args, &block
|
142
|
+
rescue Errno::ENOENT => e
|
143
|
+
raise MissingTemplate, "#{args[1]}.#{args[0]}" unless assumed_layout
|
144
|
+
raise e
|
141
145
|
end
|
142
146
|
alias_method :render_without_format, :render
|
143
147
|
alias_method :render, :render_with_format
|
144
148
|
|
145
|
-
|
146
|
-
|
147
|
-
|
149
|
+
if ::Sinatra::VERSION =~ /^0\.9/
|
150
|
+
def lookup_layout_with_format(*args)
|
151
|
+
args[1] = "#{args[1]}.#{format}".to_sym if args[1].is_a?(::Symbol)
|
152
|
+
lookup_layout_without_format *args
|
153
|
+
end
|
154
|
+
alias_method :lookup_layout_without_format, :lookup_layout
|
155
|
+
alias_method :lookup_layout, :lookup_layout_with_format
|
148
156
|
end
|
149
|
-
alias_method :lookup_layout_without_format, :lookup_layout
|
150
|
-
alias_method :lookup_layout, :lookup_layout_with_format
|
151
157
|
end
|
152
158
|
end
|
153
159
|
|
154
160
|
module Helpers
|
161
|
+
# Patch the content_type function to remember the set type
|
162
|
+
# This helps cut down on time in the format helper so it
|
163
|
+
# doesn't have to do a reverse lookup on the header
|
164
|
+
def self.included(klass)
|
165
|
+
klass.class_eval do
|
166
|
+
def content_type_with_save(*args)
|
167
|
+
content_type_without_save *args
|
168
|
+
@format = args.first.to_sym
|
169
|
+
response['Content-Type']
|
170
|
+
end
|
171
|
+
alias_method :content_type_without_save, :content_type
|
172
|
+
alias_method :content_type, :content_type_with_save
|
173
|
+
end if ::Sinatra::VERSION =~ /^1.0/
|
174
|
+
end
|
175
|
+
|
176
|
+
def self.mime_type(sym)
|
177
|
+
::Sinatra::Base.respond_to?(:media_type) && ::Sinatra::Base.media_type(sym) || ::Sinatra::Base.mime_type(sym)
|
178
|
+
end
|
179
|
+
|
155
180
|
def format(val=nil)
|
156
181
|
unless val.nil?
|
157
|
-
mime_type =
|
182
|
+
mime_type = ::Sinatra::RespondTo::Helpers.mime_type(val)
|
158
183
|
fail "Unknown media type #{val}\nTry registering the extension with a mime type" if mime_type.nil?
|
159
184
|
|
160
185
|
@format = val.to_sym
|
@@ -188,7 +213,7 @@ module Sinatra
|
|
188
213
|
def respond_to(&block)
|
189
214
|
wants = {}
|
190
215
|
def wants.method_missing(type, *args, &handler)
|
191
|
-
Sinatra::Base.send(:fail, "Unknown media type for respond_to: #{type}\nTry registering the extension with a mime type") if Sinatra::
|
216
|
+
::Sinatra::Base.send(:fail, "Unknown media type for respond_to: #{type}\nTry registering the extension with a mime type") if ::Sinatra::RespondTo::Helpers.mime_type(type).nil?
|
192
217
|
self[type] = handler
|
193
218
|
end
|
194
219
|
|
@@ -199,8 +224,4 @@ module Sinatra
|
|
199
224
|
end
|
200
225
|
end
|
201
226
|
end
|
202
|
-
|
203
|
-
# Get around before filter problem for classic applications by registering
|
204
|
-
# with the context they are run in explicitly instead of Sinatra::Default
|
205
|
-
Sinatra::Application.register RespondTo
|
206
227
|
end
|
data/spec/app/test_app.rb
CHANGED
data/spec/extension_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
2
|
|
3
3
|
describe Sinatra::RespondTo do
|
4
|
-
def
|
5
|
-
Sinatra::Base.media_type(sym)
|
4
|
+
def mime_type(sym)
|
5
|
+
::Sinatra::Base.respond_to?(:media_type) && ::Sinatra::Base.media_type(sym) || ::Sinatra::Base.mime_type(sym)
|
6
6
|
end
|
7
7
|
|
8
8
|
describe "options" do
|
@@ -25,7 +25,7 @@ describe Sinatra::RespondTo do
|
|
25
25
|
|
26
26
|
get '/resource'
|
27
27
|
|
28
|
-
last_response['Content-Type'].should =~ %r{#{
|
28
|
+
last_response['Content-Type'].should =~ %r{#{mime_type(:js)}}
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should not set the content type to application/javascript for an XMLHttpRequest when assume_xhr_is_js is false" do
|
@@ -33,7 +33,7 @@ describe Sinatra::RespondTo do
|
|
33
33
|
header 'X_REQUESTED_WITH', 'XMLHttpRequest'
|
34
34
|
get '/resource'
|
35
35
|
|
36
|
-
last_response['Content-Type'].should_not =~ %r{#{
|
36
|
+
last_response['Content-Type'].should_not =~ %r{#{mime_type(:js)}}
|
37
37
|
|
38
38
|
# Put back the option, no side effects here
|
39
39
|
TestApp.enable :assume_xhr_is_js
|
@@ -76,7 +76,7 @@ describe Sinatra::RespondTo do
|
|
76
76
|
it "should set the appropriate content-type for route with an extension" do
|
77
77
|
get "/resource.xml"
|
78
78
|
|
79
|
-
last_response['Content-Type'].should =~ %r{#{
|
79
|
+
last_response['Content-Type'].should =~ %r{#{mime_type(:xml)}}
|
80
80
|
end
|
81
81
|
|
82
82
|
it "should set the character set to the default character set" do
|
@@ -141,7 +141,7 @@ describe Sinatra::RespondTo do
|
|
141
141
|
it "should set the default content type when no extension" do
|
142
142
|
get "/normal-no-respond_to"
|
143
143
|
|
144
|
-
last_response['Content-Type'].should =~ %r{#{
|
144
|
+
last_response['Content-Type'].should =~ %r{#{mime_type(TestApp.default_content)}}
|
145
145
|
end
|
146
146
|
|
147
147
|
it "should set the default character when no extension" do
|
@@ -153,7 +153,7 @@ describe Sinatra::RespondTo do
|
|
153
153
|
it "should set the appropriate content type when given an extension" do
|
154
154
|
get "/normal-no-respond_to.css"
|
155
155
|
|
156
|
-
last_response['Content-Type'].should =~ %r{#{
|
156
|
+
last_response['Content-Type'].should =~ %r{#{mime_type(:css)}}
|
157
157
|
end
|
158
158
|
|
159
159
|
it "should set the default charset when given an extension" do
|
@@ -202,10 +202,11 @@ describe Sinatra::RespondTo do
|
|
202
202
|
last_response.status.should == 500
|
203
203
|
end
|
204
204
|
|
205
|
-
it "should provide a helpful error message for a missing template when in development" do
|
206
|
-
get '/missing-template'
|
205
|
+
it "should provide a helpful generic error message for a missing template when in development" do
|
206
|
+
get '/missing-template.css'
|
207
207
|
|
208
|
-
last_response.body.should =~ /missing\.html\.haml/
|
208
|
+
last_response.body.should =~ /missing-template\.html\.haml/
|
209
|
+
last_response.body.should =~ %r{get '/missing-template' do respond_to do |wants| wants.html \{ haml :missing-template, layout => :app \} end end}
|
209
210
|
end
|
210
211
|
|
211
212
|
it "should show the /__sinatra__/500.png" do
|
@@ -260,6 +261,7 @@ describe Sinatra::RespondTo do
|
|
260
261
|
end
|
261
262
|
|
262
263
|
describe "helpers:" do
|
264
|
+
include Sinatra::Helpers
|
263
265
|
include Sinatra::RespondTo::Helpers
|
264
266
|
|
265
267
|
before(:each) do
|
@@ -311,7 +313,7 @@ describe Sinatra::RespondTo do
|
|
311
313
|
it "should set the correct mime type when given an extension" do
|
312
314
|
format :xml
|
313
315
|
|
314
|
-
response['Content-Type'].split(';').should include(
|
316
|
+
response['Content-Type'].split(';').should include(mime_type(:xml))
|
315
317
|
end
|
316
318
|
|
317
319
|
it "should fail when set to an unknown extension type" do
|
@@ -331,6 +333,12 @@ describe Sinatra::RespondTo do
|
|
331
333
|
|
332
334
|
response['Content-Type'].should == "application/xml;charset=utf-8"
|
333
335
|
end
|
336
|
+
|
337
|
+
it "should not return nil when only content_type sets headers" do
|
338
|
+
content_type :xhtml
|
339
|
+
|
340
|
+
format.should == :xhtml
|
341
|
+
end if Sinatra::VERSION =~ /^1.0/
|
334
342
|
end
|
335
343
|
|
336
344
|
describe "static_file?" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-respond_to
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Hoffman
|
@@ -42,16 +42,6 @@ dependencies:
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 0.3.0
|
44
44
|
version:
|
45
|
-
- !ruby/object:Gem::Dependency
|
46
|
-
name: hoe
|
47
|
-
type: :development
|
48
|
-
version_requirement:
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 2.5.0
|
54
|
-
version:
|
55
45
|
- !ruby/object:Gem::Dependency
|
56
46
|
name: rspec
|
57
47
|
type: :development
|