diy_rails 0.1.0 → 0.1.1

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.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/lib/diy_rails/version.rb +1 -1
  3. data/lib/diy_rails.rb +7 -3
  4. metadata +12 -151
  5. data/vendor/bundle/ruby/3.0.0/bin/rackup +0 -29
  6. data/vendor/bundle/ruby/3.0.0/bin/rake +0 -29
  7. data/vendor/bundle/ruby/3.0.0/cache/rack-2.2.4.gem +0 -0
  8. data/vendor/bundle/ruby/3.0.0/cache/rake-13.0.6.gem +0 -0
  9. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/CHANGELOG.md +0 -708
  10. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/CONTRIBUTING.md +0 -136
  11. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/MIT-LICENSE +0 -20
  12. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/README.rdoc +0 -306
  13. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/Rakefile +0 -130
  14. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/SPEC.rdoc +0 -288
  15. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/bin/rackup +0 -5
  16. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/contrib/rack.png +0 -0
  17. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/contrib/rack.svg +0 -150
  18. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/contrib/rack_logo.svg +0 -164
  19. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/contrib/rdoc.css +0 -412
  20. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/example/lobster.ru +0 -6
  21. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/example/protectedlobster.rb +0 -16
  22. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/example/protectedlobster.ru +0 -10
  23. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/auth/abstract/handler.rb +0 -39
  24. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/auth/abstract/request.rb +0 -47
  25. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/auth/basic.rb +0 -61
  26. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/auth/digest/md5.rb +0 -131
  27. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/auth/digest/nonce.rb +0 -54
  28. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/auth/digest/params.rb +0 -54
  29. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/auth/digest/request.rb +0 -43
  30. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/body_proxy.rb +0 -45
  31. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/builder.rb +0 -257
  32. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/cascade.rb +0 -68
  33. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/chunked.rb +0 -117
  34. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/common_logger.rb +0 -83
  35. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/conditional_get.rb +0 -83
  36. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/config.rb +0 -22
  37. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/content_length.rb +0 -38
  38. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/content_type.rb +0 -30
  39. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/core_ext/regexp.rb +0 -14
  40. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/deflater.rb +0 -144
  41. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/directory.rb +0 -199
  42. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/etag.rb +0 -77
  43. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/events.rb +0 -153
  44. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/file.rb +0 -7
  45. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/files.rb +0 -218
  46. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/handler/cgi.rb +0 -59
  47. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/handler/fastcgi.rb +0 -100
  48. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/handler/lsws.rb +0 -61
  49. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/handler/scgi.rb +0 -71
  50. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/handler/thin.rb +0 -36
  51. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/handler/webrick.rb +0 -129
  52. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/handler.rb +0 -104
  53. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/head.rb +0 -25
  54. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/lint.rb +0 -806
  55. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/lobster.rb +0 -70
  56. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/lock.rb +0 -32
  57. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/logger.rb +0 -20
  58. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/media_type.rb +0 -43
  59. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/method_override.rb +0 -52
  60. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/mime.rb +0 -685
  61. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/mock.rb +0 -273
  62. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/multipart/generator.rb +0 -97
  63. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/multipart/parser.rb +0 -365
  64. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/multipart/uploaded_file.rb +0 -41
  65. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/multipart.rb +0 -64
  66. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/null_logger.rb +0 -39
  67. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/query_parser.rb +0 -221
  68. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/recursive.rb +0 -64
  69. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/reloader.rb +0 -114
  70. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/request.rb +0 -659
  71. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/response.rb +0 -318
  72. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/rewindable_input.rb +0 -94
  73. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/runtime.rb +0 -34
  74. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/sendfile.rb +0 -162
  75. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/server.rb +0 -466
  76. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/session/abstract/id.rb +0 -523
  77. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/session/cookie.rb +0 -203
  78. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/session/memcache.rb +0 -10
  79. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/session/pool.rb +0 -85
  80. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/show_exceptions.rb +0 -390
  81. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/show_status.rb +0 -113
  82. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/static.rb +0 -187
  83. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/tempfile_reaper.rb +0 -22
  84. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/urlmap.rb +0 -97
  85. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/utils.rb +0 -616
  86. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack/version.rb +0 -29
  87. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/lib/rack.rb +0 -141
  88. data/vendor/bundle/ruby/3.0.0/gems/rack-2.2.4/rack.gemspec +0 -46
  89. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/History.rdoc +0 -2403
  90. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/MIT-LICENSE +0 -21
  91. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/README.rdoc +0 -155
  92. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/command_line_usage.rdoc +0 -158
  93. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/example/Rakefile1 +0 -38
  94. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/example/Rakefile2 +0 -35
  95. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/example/a.c +0 -6
  96. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/example/b.c +0 -6
  97. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/example/main.c +0 -11
  98. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/glossary.rdoc +0 -42
  99. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/jamis.rb +0 -592
  100. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/proto_rake.rdoc +0 -127
  101. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/rake.1 +0 -156
  102. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/rakefile.rdoc +0 -622
  103. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/doc/rational.rdoc +0 -151
  104. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/exe/rake +0 -27
  105. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/application.rb +0 -831
  106. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/backtrace.rb +0 -24
  107. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/clean.rb +0 -78
  108. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/cloneable.rb +0 -17
  109. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/cpu_counter.rb +0 -107
  110. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/default_loader.rb +0 -15
  111. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/dsl_definition.rb +0 -195
  112. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/early_time.rb +0 -22
  113. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/ext/core.rb +0 -26
  114. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/ext/string.rb +0 -176
  115. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/file_creation_task.rb +0 -25
  116. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/file_list.rb +0 -435
  117. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/file_task.rb +0 -54
  118. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/file_utils.rb +0 -134
  119. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/file_utils_ext.rb +0 -134
  120. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/invocation_chain.rb +0 -57
  121. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/invocation_exception_mixin.rb +0 -17
  122. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/late_time.rb +0 -18
  123. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/linked_list.rb +0 -112
  124. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/loaders/makefile.rb +0 -54
  125. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/multi_task.rb +0 -14
  126. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/name_space.rb +0 -38
  127. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/packagetask.rb +0 -222
  128. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/phony.rb +0 -16
  129. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/private_reader.rb +0 -21
  130. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/promise.rb +0 -100
  131. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/pseudo_status.rb +0 -30
  132. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/rake_module.rb +0 -67
  133. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/rake_test_loader.rb +0 -27
  134. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/rule_recursion_overflow_error.rb +0 -20
  135. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/scope.rb +0 -43
  136. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/task.rb +0 -434
  137. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/task_argument_error.rb +0 -8
  138. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/task_arguments.rb +0 -109
  139. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/task_manager.rb +0 -331
  140. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/tasklib.rb +0 -12
  141. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/testtask.rb +0 -189
  142. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/thread_history_display.rb +0 -49
  143. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/thread_pool.rb +0 -163
  144. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/trace_output.rb +0 -23
  145. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/version.rb +0 -10
  146. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake/win32.rb +0 -51
  147. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/lib/rake.rb +0 -71
  148. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.6/rake.gemspec +0 -100
  149. data/vendor/bundle/ruby/3.0.0/specifications/rack-2.2.4.gemspec +0 -41
  150. data/vendor/bundle/ruby/3.0.0/specifications/rake-13.0.6.gemspec +0 -26
@@ -1,187 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rack
4
-
5
- # The Rack::Static middleware intercepts requests for static files
6
- # (javascript files, images, stylesheets, etc) based on the url prefixes or
7
- # route mappings passed in the options, and serves them using a Rack::Files
8
- # object. This allows a Rack stack to serve both static and dynamic content.
9
- #
10
- # Examples:
11
- #
12
- # Serve all requests beginning with /media from the "media" folder located
13
- # in the current directory (ie media/*):
14
- #
15
- # use Rack::Static, :urls => ["/media"]
16
- #
17
- # Same as previous, but instead of returning 404 for missing files under
18
- # /media, call the next middleware:
19
- #
20
- # use Rack::Static, :urls => ["/media"], :cascade => true
21
- #
22
- # Serve all requests beginning with /css or /images from the folder "public"
23
- # in the current directory (ie public/css/* and public/images/*):
24
- #
25
- # use Rack::Static, :urls => ["/css", "/images"], :root => "public"
26
- #
27
- # Serve all requests to / with "index.html" from the folder "public" in the
28
- # current directory (ie public/index.html):
29
- #
30
- # use Rack::Static, :urls => {"/" => 'index.html'}, :root => 'public'
31
- #
32
- # Serve all requests normally from the folder "public" in the current
33
- # directory but uses index.html as default route for "/"
34
- #
35
- # use Rack::Static, :urls => [""], :root => 'public', :index =>
36
- # 'index.html'
37
- #
38
- # Set custom HTTP Headers for based on rules:
39
- #
40
- # use Rack::Static, :root => 'public',
41
- # :header_rules => [
42
- # [rule, {header_field => content, header_field => content}],
43
- # [rule, {header_field => content}]
44
- # ]
45
- #
46
- # Rules for selecting files:
47
- #
48
- # 1) All files
49
- # Provide the :all symbol
50
- # :all => Matches every file
51
- #
52
- # 2) Folders
53
- # Provide the folder path as a string
54
- # '/folder' or '/folder/subfolder' => Matches files in a certain folder
55
- #
56
- # 3) File Extensions
57
- # Provide the file extensions as an array
58
- # ['css', 'js'] or %w(css js) => Matches files ending in .css or .js
59
- #
60
- # 4) Regular Expressions / Regexp
61
- # Provide a regular expression
62
- # %r{\.(?:css|js)\z} => Matches files ending in .css or .js
63
- # /\.(?:eot|ttf|otf|woff2|woff|svg)\z/ => Matches files ending in
64
- # the most common web font formats (.eot, .ttf, .otf, .woff2, .woff, .svg)
65
- # Note: This Regexp is available as a shortcut, using the :fonts rule
66
- #
67
- # 5) Font Shortcut
68
- # Provide the :fonts symbol
69
- # :fonts => Uses the Regexp rule stated right above to match all common web font endings
70
- #
71
- # Rule Ordering:
72
- # Rules are applied in the order that they are provided.
73
- # List rather general rules above special ones.
74
- #
75
- # Complete example use case including HTTP header rules:
76
- #
77
- # use Rack::Static, :root => 'public',
78
- # :header_rules => [
79
- # # Cache all static files in public caches (e.g. Rack::Cache)
80
- # # as well as in the browser
81
- # [:all, {'Cache-Control' => 'public, max-age=31536000'}],
82
- #
83
- # # Provide web fonts with cross-origin access-control-headers
84
- # # Firefox requires this when serving assets using a Content Delivery Network
85
- # [:fonts, {'Access-Control-Allow-Origin' => '*'}]
86
- # ]
87
- #
88
- class Static
89
- (require_relative 'core_ext/regexp'; using ::Rack::RegexpExtensions) if RUBY_VERSION < '2.4'
90
-
91
- def initialize(app, options = {})
92
- @app = app
93
- @urls = options[:urls] || ["/favicon.ico"]
94
- @index = options[:index]
95
- @gzip = options[:gzip]
96
- @cascade = options[:cascade]
97
- root = options[:root] || Dir.pwd
98
-
99
- # HTTP Headers
100
- @header_rules = options[:header_rules] || []
101
- # Allow for legacy :cache_control option while prioritizing global header_rules setting
102
- @header_rules.unshift([:all, { CACHE_CONTROL => options[:cache_control] }]) if options[:cache_control]
103
-
104
- @file_server = Rack::Files.new(root)
105
- end
106
-
107
- def add_index_root?(path)
108
- @index && route_file(path) && path.end_with?('/')
109
- end
110
-
111
- def overwrite_file_path(path)
112
- @urls.kind_of?(Hash) && @urls.key?(path) || add_index_root?(path)
113
- end
114
-
115
- def route_file(path)
116
- @urls.kind_of?(Array) && @urls.any? { |url| path.index(url) == 0 }
117
- end
118
-
119
- def can_serve(path)
120
- route_file(path) || overwrite_file_path(path)
121
- end
122
-
123
- def call(env)
124
- path = env[PATH_INFO]
125
-
126
- if can_serve(path)
127
- if overwrite_file_path(path)
128
- env[PATH_INFO] = (add_index_root?(path) ? path + @index : @urls[path])
129
- elsif @gzip && env['HTTP_ACCEPT_ENCODING'] && /\bgzip\b/.match?(env['HTTP_ACCEPT_ENCODING'])
130
- path = env[PATH_INFO]
131
- env[PATH_INFO] += '.gz'
132
- response = @file_server.call(env)
133
- env[PATH_INFO] = path
134
-
135
- if response[0] == 404
136
- response = nil
137
- elsif response[0] == 304
138
- # Do nothing, leave headers as is
139
- else
140
- if mime_type = Mime.mime_type(::File.extname(path), 'text/plain')
141
- response[1][CONTENT_TYPE] = mime_type
142
- end
143
- response[1]['Content-Encoding'] = 'gzip'
144
- end
145
- end
146
-
147
- path = env[PATH_INFO]
148
- response ||= @file_server.call(env)
149
-
150
- if @cascade && response[0] == 404
151
- return @app.call(env)
152
- end
153
-
154
- headers = response[1]
155
- applicable_rules(path).each do |rule, new_headers|
156
- new_headers.each { |field, content| headers[field] = content }
157
- end
158
-
159
- response
160
- else
161
- @app.call(env)
162
- end
163
- end
164
-
165
- # Convert HTTP header rules to HTTP headers
166
- def applicable_rules(path)
167
- @header_rules.find_all do |rule, new_headers|
168
- case rule
169
- when :all
170
- true
171
- when :fonts
172
- /\.(?:ttf|otf|eot|woff2|woff|svg)\z/.match?(path)
173
- when String
174
- path = ::Rack::Utils.unescape(path)
175
- path.start_with?(rule) || path.start_with?('/' + rule)
176
- when Array
177
- /\.(#{rule.join('|')})\z/.match?(path)
178
- when Regexp
179
- rule.match?(path)
180
- else
181
- false
182
- end
183
- end
184
- end
185
-
186
- end
187
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rack
4
-
5
- # Middleware tracks and cleans Tempfiles created throughout a request (i.e. Rack::Multipart)
6
- # Ideas/strategy based on posts by Eric Wong and Charles Oliver Nutter
7
- # https://groups.google.com/forum/#!searchin/rack-devel/temp/rack-devel/brK8eh-MByw/sw61oJJCGRMJ
8
- class TempfileReaper
9
- def initialize(app)
10
- @app = app
11
- end
12
-
13
- def call(env)
14
- env[RACK_TEMPFILES] ||= []
15
- status, headers, body = @app.call(env)
16
- body_proxy = BodyProxy.new(body) do
17
- env[RACK_TEMPFILES].each(&:close!) unless env[RACK_TEMPFILES].nil?
18
- end
19
- [status, headers, body_proxy]
20
- end
21
- end
22
- end
@@ -1,97 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'set'
4
-
5
- module Rack
6
- # Rack::URLMap takes a hash mapping urls or paths to apps, and
7
- # dispatches accordingly. Support for HTTP/1.1 host names exists if
8
- # the URLs start with <tt>http://</tt> or <tt>https://</tt>.
9
- #
10
- # URLMap modifies the SCRIPT_NAME and PATH_INFO such that the part
11
- # relevant for dispatch is in the SCRIPT_NAME, and the rest in the
12
- # PATH_INFO. This should be taken care of when you need to
13
- # reconstruct the URL in order to create links.
14
- #
15
- # URLMap dispatches in such a way that the longest paths are tried
16
- # first, since they are most specific.
17
-
18
- class URLMap
19
- def initialize(map = {})
20
- remap(map)
21
- end
22
-
23
- def remap(map)
24
- @known_hosts = Set[]
25
- @mapping = map.map { |location, app|
26
- if location =~ %r{\Ahttps?://(.*?)(/.*)}
27
- host, location = $1, $2
28
- @known_hosts << host
29
- else
30
- host = nil
31
- end
32
-
33
- unless location[0] == ?/
34
- raise ArgumentError, "paths need to start with /"
35
- end
36
-
37
- location = location.chomp('/')
38
- match = Regexp.new("^#{Regexp.quote(location).gsub('/', '/+')}(.*)", nil, 'n')
39
-
40
- [host, location, match, app]
41
- }.sort_by do |(host, location, _, _)|
42
- [host ? -host.size : Float::INFINITY, -location.size]
43
- end
44
- end
45
-
46
- def call(env)
47
- path = env[PATH_INFO]
48
- script_name = env[SCRIPT_NAME]
49
- http_host = env[HTTP_HOST]
50
- server_name = env[SERVER_NAME]
51
- server_port = env[SERVER_PORT]
52
-
53
- is_same_server = casecmp?(http_host, server_name) ||
54
- casecmp?(http_host, "#{server_name}:#{server_port}")
55
-
56
- is_host_known = @known_hosts.include? http_host
57
-
58
- @mapping.each do |host, location, match, app|
59
- unless casecmp?(http_host, host) \
60
- || casecmp?(server_name, host) \
61
- || (!host && is_same_server) \
62
- || (!host && !is_host_known) # If we don't have a matching host, default to the first without a specified host
63
- next
64
- end
65
-
66
- next unless m = match.match(path.to_s)
67
-
68
- rest = m[1]
69
- next unless !rest || rest.empty? || rest[0] == ?/
70
-
71
- env[SCRIPT_NAME] = (script_name + location)
72
- env[PATH_INFO] = rest
73
-
74
- return app.call(env)
75
- end
76
-
77
- [404, { CONTENT_TYPE => "text/plain", "X-Cascade" => "pass" }, ["Not Found: #{path}"]]
78
-
79
- ensure
80
- env[PATH_INFO] = path
81
- env[SCRIPT_NAME] = script_name
82
- end
83
-
84
- private
85
- def casecmp?(v1, v2)
86
- # if both nil, or they're the same string
87
- return true if v1 == v2
88
-
89
- # if either are nil... (but they're not the same)
90
- return false if v1.nil?
91
- return false if v2.nil?
92
-
93
- # otherwise check they're not case-insensitive the same
94
- v1.casecmp(v2).zero?
95
- end
96
- end
97
- end