sinatra 2.2.4 → 3.0.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sinatra might be problematic. Click here for more details.

@@ -1,11 +1,4 @@
1
1
  # frozen_string_literal: true
2
- $stderr.puts <<EOF if !Hash.method_defined?(:slice) && !$LOAD_PATH.grep(%r{gems/activesupport}).empty? && ENV['SINATRA_ACTIVESUPPORT_WARNING'] != 'false'
3
- WARNING: If you plan to load any of ActiveSupport's core extensions to Hash, be
4
- sure to do so *before* loading Sinatra::Application or Sinatra::Base. If not,
5
- you may disregard this warning.
6
-
7
- Set SINATRA_ACTIVESUPPORT_WARNING=false in the environment to hide this warning.
8
- EOF
9
2
 
10
3
  module Sinatra
11
4
  # A poor man's ActiveSupport::HashWithIndifferentAccess, with all the Rails-y
@@ -86,7 +79,7 @@ module Sinatra
86
79
  super(convert_key(key), convert_value(value))
87
80
  end
88
81
 
89
- alias_method :store, :[]=
82
+ alias store []=
90
83
 
91
84
  def key(value)
92
85
  super(convert_value(value))
@@ -96,35 +89,36 @@ module Sinatra
96
89
  super(convert_key(key))
97
90
  end
98
91
 
99
- alias_method :has_key?, :key?
100
- alias_method :include?, :key?
101
- alias_method :member?, :key?
92
+ alias has_key? key?
93
+ alias include? key?
94
+ alias member? key?
102
95
 
103
96
  def value?(value)
104
97
  super(convert_value(value))
105
98
  end
106
99
 
107
- alias_method :has_value?, :value?
100
+ alias has_value? value?
108
101
 
109
102
  def delete(key)
110
103
  super(convert_key(key))
111
104
  end
112
105
 
106
+ # Added in Ruby 2.3
113
107
  def dig(key, *other_keys)
114
108
  super(convert_key(key), *other_keys)
115
- end if method_defined?(:dig) # Added in Ruby 2.3
109
+ end
116
110
 
117
111
  def fetch_values(*keys)
118
112
  keys.map!(&method(:convert_key))
119
113
 
120
114
  super(*keys)
121
- end if method_defined?(:fetch_values) # Added in Ruby 2.3
115
+ end
122
116
 
123
117
  def slice(*keys)
124
118
  keys.map!(&method(:convert_key))
125
119
 
126
120
  self.class[super(*keys)]
127
- end if method_defined?(:slice) # Added in Ruby 2.5
121
+ end
128
122
 
129
123
  def values_at(*keys)
130
124
  keys.map!(&method(:convert_key))
@@ -148,7 +142,7 @@ module Sinatra
148
142
  self
149
143
  end
150
144
 
151
- alias_method :update, :merge!
145
+ alias update merge!
152
146
 
153
147
  def merge(*other_hashes, &block)
154
148
  dup.merge!(*other_hashes, &block)
@@ -158,41 +152,39 @@ module Sinatra
158
152
  super(other_hash.is_a?(self.class) ? other_hash : self.class[other_hash])
159
153
  end
160
154
 
161
- if method_defined?(:transform_values!) # Added in Ruby 2.4
162
- def transform_values(&block)
163
- dup.transform_values!(&block)
164
- end
155
+ def transform_values(&block)
156
+ dup.transform_values!(&block)
157
+ end
165
158
 
166
- def transform_values!
167
- super
168
- super(&method(:convert_value))
169
- end
159
+ def transform_values!
160
+ super
161
+ super(&method(:convert_value))
170
162
  end
171
163
 
172
- if method_defined?(:transform_keys!) # Added in Ruby 2.5
173
- def transform_keys(&block)
174
- dup.transform_keys!(&block)
175
- end
164
+ def transform_keys(&block)
165
+ dup.transform_keys!(&block)
166
+ end
176
167
 
177
- def transform_keys!
178
- super
179
- super(&method(:convert_key))
180
- end
168
+ def transform_keys!
169
+ super
170
+ super(&method(:convert_key))
181
171
  end
182
172
 
183
173
  def select(*args, &block)
184
174
  return to_enum(:select) unless block_given?
175
+
185
176
  dup.tap { |hash| hash.select!(*args, &block) }
186
177
  end
187
178
 
188
179
  def reject(*args, &block)
189
180
  return to_enum(:reject) unless block_given?
181
+
190
182
  dup.tap { |hash| hash.reject!(*args, &block) }
191
183
  end
192
184
 
193
185
  def compact
194
186
  dup.tap(&:compact!)
195
- end if method_defined?(:compact) # Added in Ruby 2.4
187
+ end
196
188
 
197
189
  private
198
190
 
data/lib/sinatra/main.rb CHANGED
@@ -1,47 +1,49 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sinatra
2
- ParamsConfig = {}
4
+ PARAMS_CONFIG = {}
3
5
 
4
6
  if ARGV.any?
5
7
  require 'optparse'
6
- parser = OptionParser.new { |op|
7
- op.on('-p port', 'set the port (default is 4567)') { |val| ParamsConfig[:port] = Integer(val) }
8
- op.on('-s server', 'specify rack server/handler') { |val| ParamsConfig[:server] = val }
9
- op.on('-q', 'turn on quiet mode (default is off)') { ParamsConfig[:quiet] = true }
10
- op.on('-x', 'turn on the mutex lock (default is off)') { ParamsConfig[:lock] = true }
8
+ parser = OptionParser.new do |op|
9
+ op.on('-p port', 'set the port (default is 4567)') { |val| PARAMS_CONFIG[:port] = Integer(val) }
10
+ op.on('-s server', 'specify rack server/handler') { |val| PARAMS_CONFIG[:server] = val }
11
+ op.on('-q', 'turn on quiet mode (default is off)') { PARAMS_CONFIG[:quiet] = true }
12
+ op.on('-x', 'turn on the mutex lock (default is off)') { PARAMS_CONFIG[:lock] = true }
11
13
  op.on('-e env', 'set the environment (default is development)') do |val|
12
14
  ENV['RACK_ENV'] = val
13
- ParamsConfig[:environment] = val.to_sym
15
+ PARAMS_CONFIG[:environment] = val.to_sym
14
16
  end
15
17
  op.on('-o addr', "set the host (default is (env == 'development' ? 'localhost' : '0.0.0.0'))") do |val|
16
- ParamsConfig[:bind] = val
18
+ PARAMS_CONFIG[:bind] = val
17
19
  end
18
- }
20
+ end
19
21
  begin
20
22
  parser.parse!(ARGV.dup)
21
- rescue => evar
22
- ParamsConfig[:optparse_error] = evar
23
+ rescue StandardError => e
24
+ PARAMS_CONFIG[:optparse_error] = e
23
25
  end
24
26
  end
25
27
 
26
28
  require 'sinatra/base'
27
29
 
28
30
  class Application < Base
29
-
30
31
  # we assume that the first file that requires 'sinatra' is the
31
32
  # app_file. all other path related options are calculated based
32
33
  # on this path by default.
33
34
  set :app_file, caller_files.first || $0
34
35
 
35
- set :run, Proc.new { File.expand_path($0) == File.expand_path(app_file) }
36
+ set :run, proc { File.expand_path($0) == File.expand_path(app_file) }
36
37
 
37
38
  if run? && ARGV.any?
38
- error = ParamsConfig.delete(:optparse_error)
39
+ error = PARAMS_CONFIG.delete(:optparse_error)
39
40
  raise error if error
40
- ParamsConfig.each { |k, v| set k, v }
41
+
42
+ PARAMS_CONFIG.each { |k, v| set k, v }
41
43
  end
42
44
  end
43
45
 
44
- remove_const(:ParamsConfig)
46
+ remove_const(:PARAMS_CONFIG)
45
47
  at_exit { Application.run! if $!.nil? && Application.run? }
46
48
  end
47
49
 
@@ -12,6 +12,7 @@ module Sinatra
12
12
  class ShowExceptions < Rack::ShowExceptions
13
13
  @@eats_errors = Object.new
14
14
  def @@eats_errors.flush(*) end
15
+
15
16
  def @@eats_errors.puts(*) end
16
17
 
17
18
  def initialize(app)
@@ -21,23 +22,24 @@ module Sinatra
21
22
  def call(env)
22
23
  @app.call(env)
23
24
  rescue Exception => e
24
- errors, env["rack.errors"] = env["rack.errors"], @@eats_errors
25
+ errors = env['rack.errors']
26
+ env['rack.errors'] = @@eats_errors
25
27
 
26
28
  if prefers_plain_text?(env)
27
- content_type = "text/plain"
29
+ content_type = 'text/plain'
28
30
  body = dump_exception(e)
29
31
  else
30
- content_type = "text/html"
32
+ content_type = 'text/html'
31
33
  body = pretty(env, e)
32
34
  end
33
35
 
34
- env["rack.errors"] = errors
36
+ env['rack.errors'] = errors
35
37
 
36
38
  [
37
39
  500,
38
40
  {
39
- "Content-Type" => content_type,
40
- "Content-Length" => body.bytesize.to_s
41
+ 'Content-Type' => content_type,
42
+ 'Content-Length' => body.bytesize.to_s
41
43
  },
42
44
  [body]
43
45
  ]
@@ -49,27 +51,27 @@ module Sinatra
49
51
 
50
52
  private
51
53
 
52
- def bad_request?(e)
53
- Sinatra::BadRequest === e
54
+ def bad_request?(exception)
55
+ Sinatra::BadRequest === exception
54
56
  end
55
57
 
56
58
  def prefers_plain_text?(env)
57
- !(Request.new(env).preferred_type("text/plain","text/html") == "text/html") &&
58
- [/curl/].index { |item| item =~ env["HTTP_USER_AGENT"] }
59
+ Request.new(env).preferred_type('text/plain', 'text/html') != 'text/html' &&
60
+ [/curl/].index { |item| item =~ env['HTTP_USER_AGENT'] }
59
61
  end
60
62
 
61
63
  def frame_class(frame)
62
64
  if frame.filename =~ %r{lib/sinatra.*\.rb}
63
- "framework"
65
+ 'framework'
64
66
  elsif (defined?(Gem) && frame.filename.include?(Gem.dir)) ||
65
67
  frame.filename =~ %r{/bin/(\w+)\z}
66
- "system"
68
+ 'system'
67
69
  else
68
- "app"
70
+ 'app'
69
71
  end
70
72
  end
71
73
 
72
- TEMPLATE = ERB.new <<-HTML # :nodoc:
74
+ TEMPLATE = ERB.new <<-HTML # :nodoc:
73
75
  <!DOCTYPE html>
74
76
  <html>
75
77
  <head>
@@ -357,6 +359,6 @@ enabled the <code>show_exceptions</code> setting.</p>
357
359
  </div> <!-- /WRAP -->
358
360
  </body>
359
361
  </html>
360
- HTML
362
+ HTML
361
363
  end
362
364
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sinatra
2
- VERSION = '2.2.3'
4
+ VERSION = '3.0.6'
3
5
  end
data/lib/sinatra.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sinatra/main'
2
4
 
3
5
  enable :inline_templates
data/sinatra.gemspec CHANGED
@@ -1,49 +1,54 @@
1
- version = File.read(File.expand_path("../VERSION", __FILE__)).strip
1
+ # frozen_string_literal: true
2
+
3
+ version = File.read(File.expand_path('VERSION', __dir__)).strip
2
4
 
3
5
  Gem::Specification.new 'sinatra', version do |s|
4
- s.description = "Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort."
5
- s.summary = "Classy web-development dressed in a DSL"
6
- s.authors = ["Blake Mizerany", "Ryan Tomayko", "Simon Rozet", "Konstantin Haase"]
7
- s.email = "sinatrarb@googlegroups.com"
8
- s.homepage = "http://sinatrarb.com/"
6
+ s.description = 'Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.'
7
+ s.summary = 'Classy web-development dressed in a DSL'
8
+ s.authors = ['Blake Mizerany', 'Ryan Tomayko', 'Simon Rozet', 'Konstantin Haase']
9
+ s.email = 'sinatrarb@googlegroups.com'
10
+ s.homepage = 'http://sinatrarb.com/'
9
11
  s.license = 'MIT'
10
12
  s.files = Dir['README*.md', 'lib/**/*', 'examples/*'] + [
11
- ".yardopts",
12
- "AUTHORS.md",
13
- "CHANGELOG.md",
14
- "CONTRIBUTING.md",
15
- "Gemfile",
16
- "LICENSE",
17
- "MAINTENANCE.md",
18
- "Rakefile",
19
- "SECURITY.md",
20
- "sinatra.gemspec",
21
- "VERSION"]
13
+ '.yardopts',
14
+ 'AUTHORS.md',
15
+ 'CHANGELOG.md',
16
+ 'CONTRIBUTING.md',
17
+ 'Gemfile',
18
+ 'LICENSE',
19
+ 'MAINTENANCE.md',
20
+ 'Rakefile',
21
+ 'SECURITY.md',
22
+ 'sinatra.gemspec',
23
+ 'VERSION'
24
+ ]
22
25
  s.extra_rdoc_files = %w[README.md LICENSE]
23
26
  s.rdoc_options = %w[--line-numbers --title Sinatra --main README.rdoc --encoding=UTF-8]
24
27
 
25
- if s.respond_to?(:metadata)
26
- s.metadata = {
27
- 'source_code_uri' => 'https://github.com/sinatra/sinatra',
28
- 'changelog_uri' => 'https://github.com/sinatra/sinatra/blob/master/CHANGELOG.md',
29
- 'homepage_uri' => 'http://sinatrarb.com/',
30
- 'bug_tracker_uri' => 'https://github.com/sinatra/sinatra/issues',
31
- 'mailing_list_uri' => 'http://groups.google.com/group/sinatrarb',
32
- 'documentation_uri' => 'https://www.rubydoc.info/gems/sinatra'
33
- }
34
- else
35
- raise <<-EOF
28
+ unless s.respond_to?(:metadata)
29
+ raise <<-WARN
36
30
  RubyGems 2.0 or newer is required to protect against public gem pushes. You can update your rubygems version by running:
37
31
  gem install rubygems-update
38
32
  update_rubygems:
39
33
  gem update --system
40
- EOF
34
+ WARN
41
35
  end
42
36
 
43
- s.required_ruby_version = '>= 2.3.0'
37
+ s.metadata = {
38
+ 'source_code_uri' => 'https://github.com/sinatra/sinatra',
39
+ 'changelog_uri' => 'https://github.com/sinatra/sinatra/blob/main/CHANGELOG.md',
40
+ 'homepage_uri' => 'http://sinatrarb.com/',
41
+ 'bug_tracker_uri' => 'https://github.com/sinatra/sinatra/issues',
42
+ 'mailing_list_uri' => 'http://groups.google.com/group/sinatrarb',
43
+ 'documentation_uri' => 'https://www.rubydoc.info/gems/sinatra'
44
+ }
44
45
 
45
- s.add_dependency 'rack', '~> 2.2'
46
- s.add_dependency 'tilt', '~> 2.0'
46
+ s.required_ruby_version = '>= 2.6.0'
47
+
48
+ s.add_dependency 'mustermann', '~> 3.0'
49
+ s.add_dependency 'rack', '~> 2.2', '>= 2.2.4'
47
50
  s.add_dependency 'rack-protection', version
48
- s.add_dependency 'mustermann', '~> 2.0'
51
+ s.add_dependency 'tilt', '~> 2.0'
52
+
53
+ s.add_development_dependency 'rack-test', '~> 2'
49
54
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.4
4
+ version: 3.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Mizerany
@@ -11,52 +11,58 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-12-16 00:00:00.000000000 Z
14
+ date: 2023-04-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: rack
17
+ name: mustermann
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '2.2'
22
+ version: '3.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '2.2'
29
+ version: '3.0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: tilt
31
+ name: rack
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: '2.0'
36
+ version: '2.2'
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 2.2.4
37
40
  type: :runtime
38
41
  prerelease: false
39
42
  version_requirements: !ruby/object:Gem::Requirement
40
43
  requirements:
41
44
  - - "~>"
42
45
  - !ruby/object:Gem::Version
43
- version: '2.0'
46
+ version: '2.2'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 2.2.4
44
50
  - !ruby/object:Gem::Dependency
45
51
  name: rack-protection
46
52
  requirement: !ruby/object:Gem::Requirement
47
53
  requirements:
48
54
  - - '='
49
55
  - !ruby/object:Gem::Version
50
- version: 2.2.4
56
+ version: 3.0.6
51
57
  type: :runtime
52
58
  prerelease: false
53
59
  version_requirements: !ruby/object:Gem::Requirement
54
60
  requirements:
55
61
  - - '='
56
62
  - !ruby/object:Gem::Version
57
- version: 2.2.4
63
+ version: 3.0.6
58
64
  - !ruby/object:Gem::Dependency
59
- name: mustermann
65
+ name: tilt
60
66
  requirement: !ruby/object:Gem::Requirement
61
67
  requirements:
62
68
  - - "~>"
@@ -69,6 +75,20 @@ dependencies:
69
75
  - - "~>"
70
76
  - !ruby/object:Gem::Version
71
77
  version: '2.0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rack-test
80
+ requirement: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '2'
85
+ type: :development
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '2'
72
92
  description: Sinatra is a DSL for quickly creating web applications in Ruby with minimal
73
93
  effort.
74
94
  email: sinatrarb@googlegroups.com
@@ -85,18 +105,7 @@ files:
85
105
  - Gemfile
86
106
  - LICENSE
87
107
  - MAINTENANCE.md
88
- - README.de.md
89
- - README.es.md
90
- - README.fr.md
91
- - README.hu.md
92
- - README.ja.md
93
- - README.ko.md
94
- - README.malayalam.md
95
108
  - README.md
96
- - README.pt-br.md
97
- - README.pt-pt.md
98
- - README.ru.md
99
- - README.zh.md
100
109
  - Rakefile
101
110
  - SECURITY.md
102
111
  - VERSION
@@ -119,7 +128,7 @@ licenses:
119
128
  - MIT
120
129
  metadata:
121
130
  source_code_uri: https://github.com/sinatra/sinatra
122
- changelog_uri: https://github.com/sinatra/sinatra/blob/master/CHANGELOG.md
131
+ changelog_uri: https://github.com/sinatra/sinatra/blob/main/CHANGELOG.md
123
132
  homepage_uri: http://sinatrarb.com/
124
133
  bug_tracker_uri: https://github.com/sinatra/sinatra/issues
125
134
  mailing_list_uri: http://groups.google.com/group/sinatrarb
@@ -138,15 +147,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
147
  requirements:
139
148
  - - ">="
140
149
  - !ruby/object:Gem::Version
141
- version: 2.3.0
150
+ version: 2.6.0
142
151
  required_rubygems_version: !ruby/object:Gem::Requirement
143
152
  requirements:
144
153
  - - ">="
145
154
  - !ruby/object:Gem::Version
146
155
  version: '0'
147
156
  requirements: []
148
- rubyforge_project:
149
- rubygems_version: 2.7.6.3
157
+ rubygems_version: 3.4.10
150
158
  signing_key:
151
159
  specification_version: 4
152
160
  summary: Classy web-development dressed in a DSL