sinatra-contrib 2.0.0.rc1 → 2.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +2 -1
- data/lib/sinatra/decompile.rb +5 -0
- data/lib/sinatra/runner.rb +155 -0
- data/lib/sinatra/webdav.rb +93 -0
- data/sinatra-contrib.gemspec +5 -199
- metadata +13 -175
- data/spec/capture_spec.rb +0 -100
- data/spec/config_file/key_value.yml +0 -7
- data/spec/config_file/key_value.yml.erb +0 -6
- data/spec/config_file/key_value_override.yml +0 -2
- data/spec/config_file/missing_env.yml +0 -4
- data/spec/config_file/with_envs.yml +0 -7
- data/spec/config_file/with_nested_envs.yml +0 -11
- data/spec/config_file_spec.rb +0 -76
- data/spec/content_for/different_key.erb +0 -1
- data/spec/content_for/different_key.erubis +0 -1
- data/spec/content_for/different_key.haml +0 -2
- data/spec/content_for/different_key.slim +0 -2
- data/spec/content_for/footer.erb +0 -3
- data/spec/content_for/footer.erubis +0 -3
- data/spec/content_for/footer.haml +0 -2
- data/spec/content_for/footer.slim +0 -2
- data/spec/content_for/layout.erb +0 -1
- data/spec/content_for/layout.erubis +0 -1
- data/spec/content_for/layout.haml +0 -1
- data/spec/content_for/layout.slim +0 -1
- data/spec/content_for/multiple_blocks.erb +0 -4
- data/spec/content_for/multiple_blocks.erubis +0 -4
- data/spec/content_for/multiple_blocks.haml +0 -8
- data/spec/content_for/multiple_blocks.slim +0 -8
- data/spec/content_for/multiple_yields.erb +0 -3
- data/spec/content_for/multiple_yields.erubis +0 -3
- data/spec/content_for/multiple_yields.haml +0 -3
- data/spec/content_for/multiple_yields.slim +0 -3
- data/spec/content_for/passes_values.erb +0 -1
- data/spec/content_for/passes_values.erubis +0 -1
- data/spec/content_for/passes_values.haml +0 -1
- data/spec/content_for/passes_values.slim +0 -1
- data/spec/content_for/same_key.erb +0 -1
- data/spec/content_for/same_key.erubis +0 -1
- data/spec/content_for/same_key.haml +0 -2
- data/spec/content_for/same_key.slim +0 -2
- data/spec/content_for/takes_values.erb +0 -1
- data/spec/content_for/takes_values.erubis +0 -1
- data/spec/content_for/takes_values.haml +0 -3
- data/spec/content_for/takes_values.slim +0 -3
- data/spec/content_for_spec.rb +0 -241
- data/spec/cookies_spec.rb +0 -826
- data/spec/custom_logger_spec.rb +0 -43
- data/spec/extension_spec.rb +0 -32
- data/spec/json_spec.rb +0 -115
- data/spec/link_header_spec.rb +0 -99
- data/spec/multi_route_spec.rb +0 -59
- data/spec/namespace/foo.erb +0 -1
- data/spec/namespace/nested/foo.erb +0 -1
- data/spec/namespace_spec.rb +0 -791
- data/spec/okjson.rb +0 -581
- data/spec/reloader/app.rb.erb +0 -40
- data/spec/reloader_spec.rb +0 -465
- data/spec/required_params_spec.rb +0 -68
- data/spec/respond_with/bar.erb +0 -1
- data/spec/respond_with/bar.json.erb +0 -1
- data/spec/respond_with/baz.yajl +0 -1
- data/spec/respond_with/foo.html.erb +0 -1
- data/spec/respond_with/not_html.sass +0 -2
- data/spec/respond_with_spec.rb +0 -317
- data/spec/spec_helper.rb +0 -7
- data/spec/streaming_spec.rb +0 -415
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a3837b4e5796761383a09064e40f682862a48a9
|
4
|
+
data.tar.gz: c0e347a6f786ca317d0c42d62d20e72dfffe46b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0eed9a63680ab183eb8b2ed3161eed6b38280c668196a9052225e86ebea07b2af4aaa3c9c6a5cb87ada74146b30f4efee7eca66815cd2f5f1c8ee63e611ec192
|
7
|
+
data.tar.gz: e5a2555a09268cb5c1c96dd023ad764c1758da22e01751cdc40adc1c14ee42df05306375bec6606131d512ab795d1fc656d6e6e3c2b591b5999ae14397c5c3fb
|
data/LICENSE
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2008-
|
3
|
+
Copyright (c) 2008-2017 Nicolas Sanguinetti, entp.com, Konstantin Haase
|
4
|
+
Copyright (c) 2015-2017 Zachary Scott
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining
|
6
7
|
a copy of this software and associated documentation files (the
|
@@ -0,0 +1,155 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'net/http'
|
3
|
+
require 'timeout'
|
4
|
+
|
5
|
+
# NOTE: This feature is experimental, and missing tests!
|
6
|
+
#
|
7
|
+
# Helps you spinning up and shutting down your own sinatra app. This is especially helpful for running
|
8
|
+
# real network tests against a sinatra backend.
|
9
|
+
#
|
10
|
+
# The backend server could look like the following (in test/server.rb).
|
11
|
+
#
|
12
|
+
# require "sinatra"
|
13
|
+
#
|
14
|
+
# get "/" do
|
15
|
+
# "Cheers from test server"
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# get "/ping" do
|
19
|
+
# "1"
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# Note that you need to implement a ping action for internal use.
|
23
|
+
#
|
24
|
+
# Next, you need to write your runner.
|
25
|
+
#
|
26
|
+
# require 'sinatra/runner'
|
27
|
+
#
|
28
|
+
# class Runner < Sinatra::Runner
|
29
|
+
# def app_file
|
30
|
+
# File.expand_path("../server.rb", __FILE__)
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# Override Runner#app_file, #command, #port, #protocol and #ping_path for customization.
|
35
|
+
#
|
36
|
+
# **Don't forget to override #app_file specific to your application!**
|
37
|
+
#
|
38
|
+
# Whereever you need this test backend, here's how you manage it. The following example assumes you
|
39
|
+
# have a test in your app that needs to be run against your test backend.
|
40
|
+
#
|
41
|
+
# runner = ServerRunner.new
|
42
|
+
# runner.run
|
43
|
+
#
|
44
|
+
# # ..tests against localhost:4567 here..
|
45
|
+
#
|
46
|
+
# runner.kill
|
47
|
+
#
|
48
|
+
# For an example, check https://github.com/apotonick/roar/blob/master/test/integration/runner.rb
|
49
|
+
module Sinatra
|
50
|
+
class Runner
|
51
|
+
def app_file
|
52
|
+
File.expand_path("../server.rb", __FILE__)
|
53
|
+
end
|
54
|
+
|
55
|
+
def run
|
56
|
+
@pipe = start
|
57
|
+
@started = Time.now
|
58
|
+
warn "#{server} up and running on port #{port}" if ping
|
59
|
+
end
|
60
|
+
|
61
|
+
def kill
|
62
|
+
return unless pipe
|
63
|
+
Process.kill("KILL", pipe.pid)
|
64
|
+
rescue NotImplementedError
|
65
|
+
system "kill -9 #{pipe.pid}"
|
66
|
+
rescue Errno::ESRCH
|
67
|
+
end
|
68
|
+
|
69
|
+
def get(url)
|
70
|
+
Timeout.timeout(1) { get_url("#{protocol}://127.0.0.1:#{port}#{url}") }
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_stream(url = "/stream", &block)
|
74
|
+
Net::HTTP.start '127.0.0.1', port do |http|
|
75
|
+
request = Net::HTTP::Get.new url
|
76
|
+
http.request request do |response|
|
77
|
+
response.read_body(&block)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def get_response(url)
|
83
|
+
Net::HTTP.start '127.0.0.1', port do |http|
|
84
|
+
request = Net::HTTP::Get.new url
|
85
|
+
http.request request do |response|
|
86
|
+
response
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def log
|
92
|
+
@log ||= ""
|
93
|
+
loop { @log << pipe.read_nonblock(1) }
|
94
|
+
rescue Exception
|
95
|
+
@log
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
attr_accessor :pipe
|
100
|
+
|
101
|
+
def start
|
102
|
+
IO.popen(command)
|
103
|
+
end
|
104
|
+
|
105
|
+
def command # to be overwritten
|
106
|
+
"bundle exec ruby #{app_file} -p #{port} -e production"
|
107
|
+
end
|
108
|
+
|
109
|
+
def ping(timeout=30)
|
110
|
+
loop do
|
111
|
+
return if alive?
|
112
|
+
if Time.now - @started > timeout
|
113
|
+
$stderr.puts command, log
|
114
|
+
fail "timeout"
|
115
|
+
else
|
116
|
+
sleep 0.1
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def alive?
|
122
|
+
3.times { get(ping_path) }
|
123
|
+
true
|
124
|
+
rescue Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, SystemCallError, OpenURI::HTTPError, Timeout::Error
|
125
|
+
false
|
126
|
+
end
|
127
|
+
|
128
|
+
def ping_path # to be overwritten
|
129
|
+
'/ping'
|
130
|
+
end
|
131
|
+
|
132
|
+
def port # to be overwritten
|
133
|
+
4567
|
134
|
+
end
|
135
|
+
|
136
|
+
def protocol
|
137
|
+
"http"
|
138
|
+
end
|
139
|
+
|
140
|
+
def get_url(url)
|
141
|
+
uri = URI.parse(url)
|
142
|
+
|
143
|
+
return uri.read unless protocol == "https"
|
144
|
+
get_https_url(uri)
|
145
|
+
end
|
146
|
+
|
147
|
+
def get_https_url(uri)
|
148
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
149
|
+
http.use_ssl = true
|
150
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
151
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
152
|
+
http.request(request).body
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
module Sinatra
|
4
|
+
|
5
|
+
# = Sinatra::WebDAV
|
6
|
+
#
|
7
|
+
# This extensions provides WebDAV verbs, as defined by RFC 4918
|
8
|
+
# (https://tools.ietf.org/html/rfc4918). To use this in your app,
|
9
|
+
# just +register+ it:
|
10
|
+
#
|
11
|
+
# require 'sinatra/base'
|
12
|
+
# require 'sinatra/webdav'
|
13
|
+
#
|
14
|
+
# class Application < Sinatra::Base
|
15
|
+
# register Sinatra::WebDAV
|
16
|
+
#
|
17
|
+
# # Now you can use any WebDAV verb:
|
18
|
+
# propfind '/2014/january/21' do
|
19
|
+
# 'I have a lunch at 9 PM'
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# You can use it in classic application just by requring the extension:
|
24
|
+
#
|
25
|
+
# require 'sinatra'
|
26
|
+
# require 'sinatra/webdav'
|
27
|
+
#
|
28
|
+
# mkcol '/2015' do
|
29
|
+
# 'You started 2015!'
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
module WebDAV
|
33
|
+
def self.registered(_)
|
34
|
+
Sinatra::Request.include WebDAV::Request
|
35
|
+
end
|
36
|
+
|
37
|
+
module Request
|
38
|
+
def self.included(base)
|
39
|
+
base.class_eval do
|
40
|
+
alias _safe? safe?
|
41
|
+
alias _idempotent? idempotent?
|
42
|
+
|
43
|
+
def safe?
|
44
|
+
_safe? or propfind?
|
45
|
+
end
|
46
|
+
|
47
|
+
def idempotent?
|
48
|
+
_idempotent? or propfind? or move? or unlock? # or lock?
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def propfind?
|
54
|
+
request_method == 'PROPFIND'
|
55
|
+
end
|
56
|
+
|
57
|
+
def proppatch?
|
58
|
+
request_method == 'PROPPATCH'
|
59
|
+
end
|
60
|
+
|
61
|
+
def mkcol?
|
62
|
+
request_method == 'MKCOL'
|
63
|
+
end
|
64
|
+
|
65
|
+
def copy?
|
66
|
+
request_method == 'COPY'
|
67
|
+
end
|
68
|
+
|
69
|
+
def move?
|
70
|
+
request_method == 'MOVE'
|
71
|
+
end
|
72
|
+
|
73
|
+
#def lock?
|
74
|
+
# request_method == 'LOCK'
|
75
|
+
#end
|
76
|
+
|
77
|
+
def unlock?
|
78
|
+
request_method == 'UNLOCK'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def propfind(path, opts = {}, &bk) route 'PROPFIND', path, opts, &bk end
|
83
|
+
def proppatch(path, opts = {}, &bk) route 'PROPPATCH', path, opts, &bk end
|
84
|
+
def mkcol(path, opts = {}, &bk) route 'MKCOL', path, opts, &bk end
|
85
|
+
def copy(path, opts = {}, &bk) route 'COPY', path, opts, &bk end
|
86
|
+
def move(path, opts = {}, &bk) route 'MOVE', path, opts, &bk end
|
87
|
+
#def lock(path, opts = {}, &bk) route 'LOCK', path, opts, &bk end
|
88
|
+
def unlock(path, opts = {}, &bk) route 'UNLOCK', path, opts, &bk end
|
89
|
+
end
|
90
|
+
|
91
|
+
register WebDAV
|
92
|
+
Delegator.delegate :propfind, :proppatch, :mkcol, :copy, :move, :unlock # :lock
|
93
|
+
end
|
data/sinatra-contrib.gemspec
CHANGED
@@ -7,211 +7,17 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.name = "sinatra-contrib"
|
8
8
|
s.version = Sinatra::VERSION
|
9
9
|
s.description = "Collection of useful Sinatra extensions"
|
10
|
-
s.homepage = "http://github.com/sinatra/sinatra-contrib"
|
10
|
+
s.homepage = "http://github.com/sinatra/sinatra/tree/master/sinatra-contrib"
|
11
11
|
s.license = "MIT"
|
12
12
|
s.summary = s.description
|
13
|
-
|
14
|
-
|
15
|
-
s.
|
16
|
-
"Konstantin Haase",
|
17
|
-
"Zachary Scott",
|
18
|
-
"Gabriel Andretta",
|
19
|
-
"Trevor Bramble",
|
20
|
-
"Katrina Owen",
|
21
|
-
"Ashley Williams",
|
22
|
-
"Nicolas Sanguinetti",
|
23
|
-
"Hrvoje Šimić",
|
24
|
-
"Masahiro Fujiwara",
|
25
|
-
"Rafael Magana",
|
26
|
-
"Vipul A M",
|
27
|
-
"ashley williams",
|
28
|
-
"Jack Chu",
|
29
|
-
"Sumeet Singh",
|
30
|
-
"Ilya Shindyapin",
|
31
|
-
"lest",
|
32
|
-
"Jake Worth",
|
33
|
-
"Kashyap",
|
34
|
-
"Matt Lyon",
|
35
|
-
"Matthew Conway",
|
36
|
-
"Meck",
|
37
|
-
"Michi Huber",
|
38
|
-
"Nic Benders",
|
39
|
-
"Patricio Mac Adden",
|
40
|
-
"Reed Lipman",
|
41
|
-
"Samy Dindane",
|
42
|
-
"Sergey Nartimov",
|
43
|
-
"Thibaut Sacreste",
|
44
|
-
"Uchio KONDO",
|
45
|
-
"Will Bailey",
|
46
|
-
"mono",
|
47
|
-
"Adrian Pacała",
|
48
|
-
"undr",
|
49
|
-
"Aish",
|
50
|
-
"Alexey Chernenkov",
|
51
|
-
"Andrew Crump",
|
52
|
-
"Anton Davydov",
|
53
|
-
"Bo Jeanes",
|
54
|
-
"David Asabina",
|
55
|
-
"Eliot Shepard",
|
56
|
-
"Eric Marden",
|
57
|
-
"Gray Manley",
|
58
|
-
"Guillaume Bouteille",
|
59
|
-
"Jamie Hodge",
|
60
|
-
"Julie Ng",
|
61
|
-
"Koichi Sasada",
|
62
|
-
"Kyle Lacy",
|
63
|
-
"Lars Vonk",
|
64
|
-
"Martin Frost",
|
65
|
-
"Mathieu Allaire"
|
66
|
-
]
|
67
|
-
|
68
|
-
# generated from git shortlog -sne
|
69
|
-
s.email = [
|
70
|
-
"konstantin.mailinglists@googlemail.com",
|
71
|
-
"ohhgabriel@gmail.com",
|
72
|
-
"inbox@trevorbramble.com",
|
73
|
-
"e@zzak.io",
|
74
|
-
"zachary@zacharyscott.net",
|
75
|
-
"katrina.owen@gmail.com",
|
76
|
-
"ashley@bocoup.com",
|
77
|
-
"contacto@nicolassanguinetti.info",
|
78
|
-
"shime.ferovac@gmail.com",
|
79
|
-
"raf.magana@gmail.com",
|
80
|
-
"m-fujiwara@axsh.net",
|
81
|
-
"vipulnsward@gmail.com",
|
82
|
-
"konstantin.haase@gmail.com",
|
83
|
-
"jack@jackchu.com",
|
84
|
-
"ashley666ashley@gmail.com",
|
85
|
-
"ilya@shindyapin.com",
|
86
|
-
"just.lest@gmail.com",
|
87
|
-
"kashyap.kmbc@gmail.com",
|
88
|
-
"ortuna@gmail.com",
|
89
|
-
"tbramble@chef.io",
|
90
|
-
"jworth@prevailhs.com",
|
91
|
-
"mail@zzak.io",
|
92
|
-
"nic@newrelic.com",
|
93
|
-
"patriciomacadden@gmail.com",
|
94
|
-
"rmlipman@gmail.com",
|
95
|
-
"samy@dindane.com",
|
96
|
-
"just.lest@gmail.com",
|
97
|
-
"thibaut.sacreste@gmail.com",
|
98
|
-
"udzura@udzura.jp",
|
99
|
-
"will.bailey@gmail.com",
|
100
|
-
"mono@mono0x.net",
|
101
|
-
"altpacala@gmail.com",
|
102
|
-
"undr@yandex.ru",
|
103
|
-
"aisha.fenton@visfleet.com",
|
104
|
-
"laise@pisem.net",
|
105
|
-
"andrew.crump@ieee.org",
|
106
|
-
"antondavydov.o@gmail.com",
|
107
|
-
"me@bjeanes.com",
|
108
|
-
"david@supr.nu",
|
109
|
-
"eshepard@slower.net",
|
110
|
-
"eric.marden@gmail.com",
|
111
|
-
"g.manley@tukaiz.com",
|
112
|
-
"duffman@via.ecp.fr",
|
113
|
-
"jamiehodge@me.com",
|
114
|
-
"uxjulie@gmail.com",
|
115
|
-
"ko1@atdot.net",
|
116
|
-
"kylewlacy@me.com",
|
117
|
-
"lars.vonk@gmail.com",
|
118
|
-
"blame@kth.se",
|
119
|
-
"mathieuallaire@gmail.com",
|
120
|
-
"matt@flowerpowered.com",
|
121
|
-
"himself@mattonrails.com",
|
122
|
-
"yesmeck@gmail.com",
|
123
|
-
"michi.huber@gmail.com"
|
124
|
-
]
|
125
|
-
|
126
|
-
# generated from git ls-files
|
127
|
-
s.files = [
|
13
|
+
s.authors = ["https://github.com/sinatra/sinatra/graphs/contributors"]
|
14
|
+
s.email = "sinatrarb@googlegroups.com"
|
15
|
+
s.files = Dir["lib/**/*.rb"] + [
|
128
16
|
"LICENSE",
|
129
17
|
"README.md",
|
130
18
|
"Rakefile",
|
131
19
|
"ideas.md",
|
132
|
-
"
|
133
|
-
"lib/sinatra/config_file.rb",
|
134
|
-
"lib/sinatra/content_for.rb",
|
135
|
-
"lib/sinatra/contrib.rb",
|
136
|
-
"lib/sinatra/contrib/all.rb",
|
137
|
-
"lib/sinatra/contrib/setup.rb",
|
138
|
-
"lib/sinatra/contrib/version.rb",
|
139
|
-
"lib/sinatra/cookies.rb",
|
140
|
-
"lib/sinatra/custom_logger.rb",
|
141
|
-
"lib/sinatra/engine_tracking.rb",
|
142
|
-
"lib/sinatra/extension.rb",
|
143
|
-
"lib/sinatra/json.rb",
|
144
|
-
"lib/sinatra/link_header.rb",
|
145
|
-
"lib/sinatra/multi_route.rb",
|
146
|
-
"lib/sinatra/namespace.rb",
|
147
|
-
"lib/sinatra/reloader.rb",
|
148
|
-
"lib/sinatra/respond_with.rb",
|
149
|
-
"lib/sinatra/streaming.rb",
|
150
|
-
"lib/sinatra/required_params.rb",
|
151
|
-
"lib/sinatra/test_helpers.rb",
|
152
|
-
"sinatra-contrib.gemspec",
|
153
|
-
"spec/capture_spec.rb",
|
154
|
-
"spec/config_file/key_value.yml",
|
155
|
-
"spec/config_file/key_value.yml.erb",
|
156
|
-
"spec/config_file/key_value_override.yml",
|
157
|
-
"spec/config_file/missing_env.yml",
|
158
|
-
"spec/config_file/with_envs.yml",
|
159
|
-
"spec/config_file/with_nested_envs.yml",
|
160
|
-
"spec/config_file_spec.rb",
|
161
|
-
"spec/content_for/different_key.erb",
|
162
|
-
"spec/content_for/different_key.erubis",
|
163
|
-
"spec/content_for/different_key.haml",
|
164
|
-
"spec/content_for/different_key.slim",
|
165
|
-
"spec/content_for/footer.erb",
|
166
|
-
"spec/content_for/footer.erubis",
|
167
|
-
"spec/content_for/footer.haml",
|
168
|
-
"spec/content_for/footer.slim",
|
169
|
-
"spec/content_for/layout.erb",
|
170
|
-
"spec/content_for/layout.erubis",
|
171
|
-
"spec/content_for/layout.haml",
|
172
|
-
"spec/content_for/layout.slim",
|
173
|
-
"spec/content_for/multiple_blocks.erb",
|
174
|
-
"spec/content_for/multiple_blocks.erubis",
|
175
|
-
"spec/content_for/multiple_blocks.haml",
|
176
|
-
"spec/content_for/multiple_blocks.slim",
|
177
|
-
"spec/content_for/multiple_yields.erb",
|
178
|
-
"spec/content_for/multiple_yields.erubis",
|
179
|
-
"spec/content_for/multiple_yields.haml",
|
180
|
-
"spec/content_for/multiple_yields.slim",
|
181
|
-
"spec/content_for/passes_values.erb",
|
182
|
-
"spec/content_for/passes_values.erubis",
|
183
|
-
"spec/content_for/passes_values.haml",
|
184
|
-
"spec/content_for/passes_values.slim",
|
185
|
-
"spec/content_for/same_key.erb",
|
186
|
-
"spec/content_for/same_key.erubis",
|
187
|
-
"spec/content_for/same_key.haml",
|
188
|
-
"spec/content_for/same_key.slim",
|
189
|
-
"spec/content_for/takes_values.erb",
|
190
|
-
"spec/content_for/takes_values.erubis",
|
191
|
-
"spec/content_for/takes_values.haml",
|
192
|
-
"spec/content_for/takes_values.slim",
|
193
|
-
"spec/content_for_spec.rb",
|
194
|
-
"spec/cookies_spec.rb",
|
195
|
-
"spec/custom_logger_spec.rb",
|
196
|
-
"spec/extension_spec.rb",
|
197
|
-
"spec/json_spec.rb",
|
198
|
-
"spec/link_header_spec.rb",
|
199
|
-
"spec/multi_route_spec.rb",
|
200
|
-
"spec/namespace/foo.erb",
|
201
|
-
"spec/namespace/nested/foo.erb",
|
202
|
-
"spec/namespace_spec.rb",
|
203
|
-
"spec/okjson.rb",
|
204
|
-
"spec/reloader/app.rb.erb",
|
205
|
-
"spec/reloader_spec.rb",
|
206
|
-
"spec/respond_with/bar.erb",
|
207
|
-
"spec/respond_with/bar.json.erb",
|
208
|
-
"spec/respond_with/baz.yajl",
|
209
|
-
"spec/respond_with/foo.html.erb",
|
210
|
-
"spec/respond_with/not_html.sass",
|
211
|
-
"spec/respond_with_spec.rb",
|
212
|
-
"spec/spec_helper.rb",
|
213
|
-
"spec/streaming_spec.rb",
|
214
|
-
"spec/required_params_spec.rb",
|
20
|
+
"sinatra-contrib.gemspec"
|
215
21
|
]
|
216
22
|
|
217
23
|
s.required_ruby_version = '>= 2.2.0'
|