padrino-core 0.11.1 → 0.11.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -100,6 +100,20 @@ class HttpRouter
100
100
  end
101
101
  end
102
102
 
103
+ #Monkey patching the Request class. Using Rack::Utils.unescape rather than
104
+ #URI.unescape which can't handle utf-8 chars
105
+ class Request
106
+ def initialize(path, rack_request)
107
+ @rack_request = rack_request
108
+ @path = Rack::Utils.unescape(path).split(/\//)
109
+ @path.shift if @path.first == ''
110
+ @path.push('') if path[-1] == ?/
111
+ @extra_env = {}
112
+ @params = []
113
+ @acceptable_methods = Set.new
114
+ end
115
+ end
116
+
103
117
  class Node::Path
104
118
  def to_code
105
119
  path_ivar = inject_root_ivar(self)
@@ -813,7 +827,7 @@ module Padrino
813
827
  def provides(*types)
814
828
  @_use_format = true
815
829
  condition do
816
- mime_types = types.map { |t| mime_type(t) }
830
+ mime_types = types.map { |t| mime_type(t) }.compact
817
831
  url_format = params[:format].to_sym if params[:format]
818
832
  accepts = request.accept.map { |a| a.to_str }
819
833
 
@@ -821,11 +835,14 @@ module Padrino
821
835
  # Assume */* if no ACCEPT header is given.
822
836
  catch_all = (accepts.delete "*/*" || accepts.empty?)
823
837
  matching_types = accepts.empty? ? mime_types.slice(0,1) : (accepts & mime_types)
838
+ if matching_types.empty? && types.include?(:any)
839
+ matching_types = accepts
840
+ end
824
841
 
825
842
  if !url_format && matching_types.first
826
843
  type = ::Rack::Mime::MIME_TYPES.find { |k, v| v == matching_types.first }[0].sub(/\./,'').to_sym
827
844
  accept_format = CONTENT_TYPE_ALIASES[type] || type
828
- elsif catch_all
845
+ elsif catch_all && !types.include?(:any)
829
846
  type = types.first
830
847
  accept_format = CONTENT_TYPE_ALIASES[type] || type
831
848
  end
@@ -280,9 +280,11 @@ ERROR
280
280
  if allow_disabled_csrf?
281
281
  builder.use Rack::Protection::AuthenticityToken,
282
282
  :reaction => :report,
283
- :report_key => 'protection.csrf.failed'
283
+ :report_key => 'protection.csrf.failed',
284
+ :logger => logger
284
285
  else
285
- builder.use Rack::Protection::AuthenticityToken
286
+ builder.use Rack::Protection::AuthenticityToken,
287
+ :logger => logger
286
288
  end
287
289
  end
288
290
  end
@@ -27,7 +27,7 @@ module Padrino
27
27
  options[:Port] = options.delete(:port) || 3000
28
28
  options[:AccessLog] = []
29
29
  if options[:daemonize]
30
- options[:pid] = options[:pid].blank? ? File.expand_path('tmp/pids/server.pid') : opts[:pid]
30
+ options[:pid] = File.expand_path(options[:pid].blank? ? 'tmp/pids/server.pid' : opts[:pid])
31
31
  FileUtils.mkdir_p(File.dirname(options[:pid]))
32
32
  end
33
33
  options[:server] = detect_rack_handler if options[:server].blank?
@@ -6,7 +6,7 @@
6
6
  #
7
7
  module Padrino
8
8
  # The version constant for the current version of Padrino.
9
- VERSION = '0.11.1' unless defined?(Padrino::VERSION)
9
+ VERSION = '0.11.2' unless defined?(Padrino::VERSION)
10
10
 
11
11
  #
12
12
  # The current Padrino version.
data/padrino-core.gemspec CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
30
30
  # s.post_install_message << " as shown here:\e[0m https://gist.github.com/1d36a35794dbbd664ea4"
31
31
  # s.post_install_message << "\n\e[32m" + ("*" * 20) + "\n\e[0m"
32
32
 
33
- s.add_dependency("tilt", "~> 1.3.0")
33
+ s.add_dependency("tilt", "~> 1.3.7")
34
34
  if ENV["SINATRA_EDGE"]
35
35
  s.add_dependency("sinatra")
36
36
  else
data/test/mini_shoulda.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  gem 'minitest'
2
- require 'minitest/spec'
3
2
  require 'minitest/autorun'
3
+ require 'minitest/spec'
4
4
  require 'mocha/setup'
5
5
 
6
6
  begin
data/test/test_routing.rb CHANGED
@@ -1,3 +1,4 @@
1
+ #encoding: utf-8
1
2
  require File.expand_path(File.dirname(__FILE__) + '/helper')
2
3
 
3
4
  class FooError < RuntimeError; end
@@ -100,6 +101,24 @@ describe "Routing" do
100
101
  assert_equal "no access", body
101
102
  end
102
103
 
104
+ should 'parse routes that are encoded' do
105
+ mock_app do
106
+ get('/щч') { 'success!' }
107
+ end
108
+ get(URI.escape('/щч'))
109
+ assert_equal 'success!', body
110
+ end
111
+
112
+ should 'encode params using UTF-8' do
113
+ skip unless ''.respond_to?(:encoding) # for 1.8.7
114
+
115
+ mock_app do
116
+ get('/:foo') { params[:foo].encoding.name }
117
+ end
118
+ get '/bar'
119
+ assert_equal 'UTF-8', body
120
+ end
121
+
103
122
  should 'match correctly similar paths' do
104
123
  mock_app do
105
124
  get("/my/:foo_id"){ params[:foo_id] }
@@ -1122,6 +1141,24 @@ describe "Routing" do
1122
1141
  assert_equal 'js', body
1123
1142
  end
1124
1143
 
1144
+ should "set content_type to :html if Accept */* and provides of :any" do
1145
+ mock_app do
1146
+ get("/foo", :provides => :any) { content_type.to_s }
1147
+ end
1148
+
1149
+ get '/foo', {}, { 'HTTP_ACCEPT' => '*/*' }
1150
+ assert_equal 'html', body
1151
+ end
1152
+
1153
+ should "set content_type to :js if Accept includes both application/javascript, */*;q=0.5 and provides of :any" do
1154
+ mock_app do
1155
+ get("/foo", :provides => :any) { content_type.to_s }
1156
+ end
1157
+
1158
+ get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript, */*;q=0.5' }
1159
+ assert_equal 'js', body
1160
+ end
1161
+
1125
1162
  should 'allows custom route-conditions to be set via route options and halt' do
1126
1163
  protector = Module.new do
1127
1164
  def protect(*args)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: padrino-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.11.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-04-07 00:00:00.000000000 Z
15
+ date: 2013-05-21 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: tilt
@@ -21,7 +21,7 @@ dependencies:
21
21
  requirements:
22
22
  - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: 1.3.0
24
+ version: 1.3.7
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 1.3.0
32
+ version: 1.3.7
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: sinatra
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -224,7 +224,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
224
224
  version: '0'
225
225
  segments:
226
226
  - 0
227
- hash: -239546567818067895
227
+ hash: 3143622035712023707
228
228
  required_rubygems_version: !ruby/object:Gem::Requirement
229
229
  none: false
230
230
  requirements: