sinatra 2.2.3 → 4.0.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.
- checksums.yaml +4 -4
- data/AUTHORS.md +14 -8
- data/CHANGELOG.md +166 -17
- data/CONTRIBUTING.md +11 -11
- data/Gemfile +56 -74
- data/MAINTENANCE.md +2 -2
- data/README.md +207 -496
- data/Rakefile +82 -79
- data/SECURITY.md +1 -1
- data/VERSION +1 -1
- data/examples/chat.rb +25 -12
- data/examples/lifecycle_events.rb +20 -0
- data/examples/simple.rb +2 -0
- data/examples/stream.ru +2 -2
- data/lib/sinatra/base.rb +461 -346
- data/lib/sinatra/indifferent_hash.rb +35 -41
- data/lib/sinatra/main.rb +18 -16
- data/lib/sinatra/show_exceptions.rb +17 -15
- data/lib/sinatra/version.rb +3 -1
- data/lib/sinatra.rb +2 -0
- data/sinatra.gemspec +37 -33
- metadata +46 -33
- data/README.de.md +0 -3239
- data/README.es.md +0 -3231
- data/README.fr.md +0 -3111
- data/README.hu.md +0 -728
- data/README.ja.md +0 -2844
- data/README.ko.md +0 -2967
- data/README.malayalam.md +0 -3141
- data/README.pt-br.md +0 -3787
- data/README.pt-pt.md +0 -791
- data/README.ru.md +0 -3207
- data/README.zh.md +0 -2934
- data/examples/rainbows.conf +0 -3
- data/examples/rainbows.rb +0 -20
|
@@ -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
|
|
@@ -28,7 +21,8 @@ module Sinatra
|
|
|
28
21
|
# writing interface (calling e.g. <tt>[]=</tt>, <tt>merge</tt>). This mapping
|
|
29
22
|
# belongs to the public interface. For example, given:
|
|
30
23
|
#
|
|
31
|
-
# hash = Sinatra::IndifferentHash.new
|
|
24
|
+
# hash = Sinatra::IndifferentHash.new
|
|
25
|
+
# hash[:a] = 1
|
|
32
26
|
#
|
|
33
27
|
# You are guaranteed that the key is returned as a string:
|
|
34
28
|
#
|
|
@@ -36,7 +30,8 @@ module Sinatra
|
|
|
36
30
|
#
|
|
37
31
|
# Technically other types of keys are accepted:
|
|
38
32
|
#
|
|
39
|
-
# hash = Sinatra::IndifferentHash
|
|
33
|
+
# hash = Sinatra::IndifferentHash
|
|
34
|
+
# hash[:a] = 1
|
|
40
35
|
# hash[0] = 0
|
|
41
36
|
# hash # => { "a"=>1, 0=>0 }
|
|
42
37
|
#
|
|
@@ -48,12 +43,6 @@ module Sinatra
|
|
|
48
43
|
new.merge!(Hash[*args])
|
|
49
44
|
end
|
|
50
45
|
|
|
51
|
-
def initialize(*args)
|
|
52
|
-
args.map!(&method(:convert_value))
|
|
53
|
-
|
|
54
|
-
super(*args)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
46
|
def default(*args)
|
|
58
47
|
args.map!(&method(:convert_key))
|
|
59
48
|
|
|
@@ -86,7 +75,7 @@ module Sinatra
|
|
|
86
75
|
super(convert_key(key), convert_value(value))
|
|
87
76
|
end
|
|
88
77
|
|
|
89
|
-
|
|
78
|
+
alias store []=
|
|
90
79
|
|
|
91
80
|
def key(value)
|
|
92
81
|
super(convert_value(value))
|
|
@@ -96,35 +85,36 @@ module Sinatra
|
|
|
96
85
|
super(convert_key(key))
|
|
97
86
|
end
|
|
98
87
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
alias has_key? key?
|
|
89
|
+
alias include? key?
|
|
90
|
+
alias member? key?
|
|
102
91
|
|
|
103
92
|
def value?(value)
|
|
104
93
|
super(convert_value(value))
|
|
105
94
|
end
|
|
106
95
|
|
|
107
|
-
|
|
96
|
+
alias has_value? value?
|
|
108
97
|
|
|
109
98
|
def delete(key)
|
|
110
99
|
super(convert_key(key))
|
|
111
100
|
end
|
|
112
101
|
|
|
102
|
+
# Added in Ruby 2.3
|
|
113
103
|
def dig(key, *other_keys)
|
|
114
104
|
super(convert_key(key), *other_keys)
|
|
115
|
-
end
|
|
105
|
+
end
|
|
116
106
|
|
|
117
107
|
def fetch_values(*keys)
|
|
118
108
|
keys.map!(&method(:convert_key))
|
|
119
109
|
|
|
120
110
|
super(*keys)
|
|
121
|
-
end
|
|
111
|
+
end
|
|
122
112
|
|
|
123
113
|
def slice(*keys)
|
|
124
114
|
keys.map!(&method(:convert_key))
|
|
125
115
|
|
|
126
116
|
self.class[super(*keys)]
|
|
127
|
-
end
|
|
117
|
+
end
|
|
128
118
|
|
|
129
119
|
def values_at(*keys)
|
|
130
120
|
keys.map!(&method(:convert_key))
|
|
@@ -148,7 +138,7 @@ module Sinatra
|
|
|
148
138
|
self
|
|
149
139
|
end
|
|
150
140
|
|
|
151
|
-
|
|
141
|
+
alias update merge!
|
|
152
142
|
|
|
153
143
|
def merge(*other_hashes, &block)
|
|
154
144
|
dup.merge!(*other_hashes, &block)
|
|
@@ -158,41 +148,45 @@ module Sinatra
|
|
|
158
148
|
super(other_hash.is_a?(self.class) ? other_hash : self.class[other_hash])
|
|
159
149
|
end
|
|
160
150
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
end
|
|
151
|
+
def transform_values(&block)
|
|
152
|
+
dup.transform_values!(&block)
|
|
153
|
+
end
|
|
165
154
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
end
|
|
155
|
+
def transform_values!
|
|
156
|
+
super
|
|
157
|
+
super(&method(:convert_value))
|
|
170
158
|
end
|
|
171
159
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
end
|
|
160
|
+
def transform_keys(&block)
|
|
161
|
+
dup.transform_keys!(&block)
|
|
162
|
+
end
|
|
176
163
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
end
|
|
164
|
+
def transform_keys!
|
|
165
|
+
super
|
|
166
|
+
super(&method(:convert_key))
|
|
181
167
|
end
|
|
182
168
|
|
|
183
169
|
def select(*args, &block)
|
|
184
170
|
return to_enum(:select) unless block_given?
|
|
171
|
+
|
|
185
172
|
dup.tap { |hash| hash.select!(*args, &block) }
|
|
186
173
|
end
|
|
187
174
|
|
|
188
175
|
def reject(*args, &block)
|
|
189
176
|
return to_enum(:reject) unless block_given?
|
|
177
|
+
|
|
190
178
|
dup.tap { |hash| hash.reject!(*args, &block) }
|
|
191
179
|
end
|
|
192
180
|
|
|
193
181
|
def compact
|
|
194
182
|
dup.tap(&:compact!)
|
|
195
|
-
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def except(*keys)
|
|
186
|
+
keys.map!(&method(:convert_key))
|
|
187
|
+
|
|
188
|
+
super(*keys)
|
|
189
|
+
end if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.0")
|
|
196
190
|
|
|
197
191
|
private
|
|
198
192
|
|
data/lib/sinatra/main.rb
CHANGED
|
@@ -1,47 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Sinatra
|
|
2
|
-
|
|
4
|
+
PARAMS_CONFIG = {}
|
|
3
5
|
|
|
4
6
|
if ARGV.any?
|
|
5
7
|
require 'optparse'
|
|
6
|
-
parser = OptionParser.new
|
|
7
|
-
op.on('-p port', 'set the port (default is 4567)') { |val|
|
|
8
|
-
op.on('-s server', 'specify rack server/handler') { |val|
|
|
9
|
-
op.on('-q', 'turn on quiet mode (default is off)') {
|
|
10
|
-
op.on('-x', 'turn on the mutex lock (default is off)') {
|
|
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
|
-
|
|
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
|
-
|
|
18
|
+
PARAMS_CONFIG[:bind] = val
|
|
17
19
|
end
|
|
18
|
-
|
|
20
|
+
end
|
|
19
21
|
begin
|
|
20
22
|
parser.parse!(ARGV.dup)
|
|
21
|
-
rescue =>
|
|
22
|
-
|
|
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,
|
|
36
|
+
set :run, proc { File.expand_path($0) == File.expand_path(app_file) }
|
|
36
37
|
|
|
37
38
|
if run? && ARGV.any?
|
|
38
|
-
error =
|
|
39
|
+
error = PARAMS_CONFIG.delete(:optparse_error)
|
|
39
40
|
raise error if error
|
|
40
|
-
|
|
41
|
+
|
|
42
|
+
PARAMS_CONFIG.each { |k, v| set k, v }
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
|
|
44
|
-
remove_const(:
|
|
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
|
|
25
|
+
errors = env['rack.errors']
|
|
26
|
+
env['rack.errors'] = @@eats_errors
|
|
25
27
|
|
|
26
28
|
if prefers_plain_text?(env)
|
|
27
|
-
content_type =
|
|
29
|
+
content_type = 'text/plain'
|
|
28
30
|
body = dump_exception(e)
|
|
29
31
|
else
|
|
30
|
-
content_type =
|
|
32
|
+
content_type = 'text/html'
|
|
31
33
|
body = pretty(env, e)
|
|
32
34
|
end
|
|
33
35
|
|
|
34
|
-
env[
|
|
36
|
+
env['rack.errors'] = errors
|
|
35
37
|
|
|
36
38
|
[
|
|
37
39
|
500,
|
|
38
40
|
{
|
|
39
|
-
|
|
40
|
-
|
|
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?(
|
|
53
|
-
Sinatra::BadRequest ===
|
|
54
|
+
def bad_request?(exception)
|
|
55
|
+
Sinatra::BadRequest === exception
|
|
54
56
|
end
|
|
55
57
|
|
|
56
58
|
def prefers_plain_text?(env)
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
65
|
+
'framework'
|
|
64
66
|
elsif (defined?(Gem) && frame.filename.include?(Gem.dir)) ||
|
|
65
67
|
frame.filename =~ %r{/bin/(\w+)\z}
|
|
66
|
-
|
|
68
|
+
'system'
|
|
67
69
|
else
|
|
68
|
-
|
|
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
|
data/lib/sinatra/version.rb
CHANGED
data/lib/sinatra.rb
CHANGED
data/sinatra.gemspec
CHANGED
|
@@ -1,49 +1,53 @@
|
|
|
1
|
-
|
|
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 =
|
|
5
|
-
s.summary =
|
|
6
|
-
s.authors = [
|
|
7
|
-
s.email =
|
|
8
|
-
s.homepage =
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
26
|
-
|
|
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
|
-
|
|
34
|
+
WARN
|
|
41
35
|
end
|
|
42
36
|
|
|
43
|
-
s.
|
|
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.
|
|
46
|
-
|
|
46
|
+
s.required_ruby_version = '>= 2.7.8'
|
|
47
|
+
|
|
48
|
+
s.add_dependency 'mustermann', '~> 3.0'
|
|
49
|
+
s.add_dependency 'rack', '>= 3.0.0', '< 4'
|
|
50
|
+
s.add_dependency 'rack-session', '>= 2.0.0', '< 3'
|
|
47
51
|
s.add_dependency 'rack-protection', version
|
|
48
|
-
s.add_dependency '
|
|
52
|
+
s.add_dependency 'tilt', '~> 2.0'
|
|
49
53
|
end
|
metadata
CHANGED
|
@@ -1,62 +1,88 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sinatra
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 4.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Blake Mizerany
|
|
8
8
|
- Ryan Tomayko
|
|
9
9
|
- Simon Rozet
|
|
10
10
|
- Konstantin Haase
|
|
11
|
-
autorequire:
|
|
11
|
+
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date:
|
|
14
|
+
date: 2024-01-19 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
|
-
name:
|
|
17
|
+
name: mustermann
|
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
|
19
19
|
requirements:
|
|
20
20
|
- - "~>"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '
|
|
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: '
|
|
29
|
+
version: '3.0'
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
|
-
name:
|
|
31
|
+
name: rack
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
33
33
|
requirements:
|
|
34
|
-
- - "
|
|
34
|
+
- - ">="
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
|
-
version:
|
|
36
|
+
version: 3.0.0
|
|
37
|
+
- - "<"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '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:
|
|
46
|
+
version: 3.0.0
|
|
47
|
+
- - "<"
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: '4'
|
|
50
|
+
- !ruby/object:Gem::Dependency
|
|
51
|
+
name: rack-session
|
|
52
|
+
requirement: !ruby/object:Gem::Requirement
|
|
53
|
+
requirements:
|
|
54
|
+
- - ">="
|
|
55
|
+
- !ruby/object:Gem::Version
|
|
56
|
+
version: 2.0.0
|
|
57
|
+
- - "<"
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '3'
|
|
60
|
+
type: :runtime
|
|
61
|
+
prerelease: false
|
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - ">="
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: 2.0.0
|
|
67
|
+
- - "<"
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '3'
|
|
44
70
|
- !ruby/object:Gem::Dependency
|
|
45
71
|
name: rack-protection
|
|
46
72
|
requirement: !ruby/object:Gem::Requirement
|
|
47
73
|
requirements:
|
|
48
74
|
- - '='
|
|
49
75
|
- !ruby/object:Gem::Version
|
|
50
|
-
version:
|
|
76
|
+
version: 4.0.0
|
|
51
77
|
type: :runtime
|
|
52
78
|
prerelease: false
|
|
53
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
54
80
|
requirements:
|
|
55
81
|
- - '='
|
|
56
82
|
- !ruby/object:Gem::Version
|
|
57
|
-
version:
|
|
83
|
+
version: 4.0.0
|
|
58
84
|
- !ruby/object:Gem::Dependency
|
|
59
|
-
name:
|
|
85
|
+
name: tilt
|
|
60
86
|
requirement: !ruby/object:Gem::Requirement
|
|
61
87
|
requirements:
|
|
62
88
|
- - "~>"
|
|
@@ -85,24 +111,12 @@ files:
|
|
|
85
111
|
- Gemfile
|
|
86
112
|
- LICENSE
|
|
87
113
|
- 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
114
|
- README.md
|
|
96
|
-
- README.pt-br.md
|
|
97
|
-
- README.pt-pt.md
|
|
98
|
-
- README.ru.md
|
|
99
|
-
- README.zh.md
|
|
100
115
|
- Rakefile
|
|
101
116
|
- SECURITY.md
|
|
102
117
|
- VERSION
|
|
103
118
|
- examples/chat.rb
|
|
104
|
-
- examples/
|
|
105
|
-
- examples/rainbows.rb
|
|
119
|
+
- examples/lifecycle_events.rb
|
|
106
120
|
- examples/simple.rb
|
|
107
121
|
- examples/stream.ru
|
|
108
122
|
- lib/sinatra.rb
|
|
@@ -119,12 +133,12 @@ licenses:
|
|
|
119
133
|
- MIT
|
|
120
134
|
metadata:
|
|
121
135
|
source_code_uri: https://github.com/sinatra/sinatra
|
|
122
|
-
changelog_uri: https://github.com/sinatra/sinatra/blob/
|
|
136
|
+
changelog_uri: https://github.com/sinatra/sinatra/blob/main/CHANGELOG.md
|
|
123
137
|
homepage_uri: http://sinatrarb.com/
|
|
124
138
|
bug_tracker_uri: https://github.com/sinatra/sinatra/issues
|
|
125
139
|
mailing_list_uri: http://groups.google.com/group/sinatrarb
|
|
126
140
|
documentation_uri: https://www.rubydoc.info/gems/sinatra
|
|
127
|
-
post_install_message:
|
|
141
|
+
post_install_message:
|
|
128
142
|
rdoc_options:
|
|
129
143
|
- "--line-numbers"
|
|
130
144
|
- "--title"
|
|
@@ -138,16 +152,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
138
152
|
requirements:
|
|
139
153
|
- - ">="
|
|
140
154
|
- !ruby/object:Gem::Version
|
|
141
|
-
version: 2.
|
|
155
|
+
version: 2.7.8
|
|
142
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
157
|
requirements:
|
|
144
158
|
- - ">="
|
|
145
159
|
- !ruby/object:Gem::Version
|
|
146
160
|
version: '0'
|
|
147
161
|
requirements: []
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
signing_key:
|
|
162
|
+
rubygems_version: 3.5.3
|
|
163
|
+
signing_key:
|
|
151
164
|
specification_version: 4
|
|
152
165
|
summary: Classy web-development dressed in a DSL
|
|
153
166
|
test_files: []
|