roda 2.29.0 → 3.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.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +52 -0
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +51 -109
  5. data/Rakefile +7 -14
  6. data/doc/conventions.rdoc +4 -4
  7. data/doc/release_notes/1.2.0.txt +1 -1
  8. data/doc/release_notes/3.0.0.txt +84 -0
  9. data/lib/roda.rb +25 -79
  10. data/lib/roda/plugins/assets.rb +25 -58
  11. data/lib/roda/plugins/assets_preloading.rb +0 -5
  12. data/lib/roda/plugins/backtracking_array.rb +0 -5
  13. data/lib/roda/plugins/branch_locals.rb +3 -3
  14. data/lib/roda/plugins/caching.rb +5 -38
  15. data/lib/roda/plugins/chunked.rb +7 -25
  16. data/lib/roda/plugins/class_level_routing.rb +2 -2
  17. data/lib/roda/plugins/content_for.rb +7 -10
  18. data/lib/roda/plugins/cookies.rb +3 -3
  19. data/lib/roda/plugins/csrf.rb +2 -2
  20. data/lib/roda/plugins/delegate.rb +3 -3
  21. data/lib/roda/plugins/drop_body.rb +0 -7
  22. data/lib/roda/plugins/empty_root.rb +0 -3
  23. data/lib/roda/plugins/error_email.rb +4 -6
  24. data/lib/roda/plugins/error_handler.rb +1 -2
  25. data/lib/roda/plugins/error_mail.rb +3 -6
  26. data/lib/roda/plugins/flash.rb +0 -4
  27. data/lib/roda/plugins/h.rb +5 -0
  28. data/lib/roda/plugins/hash_matcher.rb +4 -2
  29. data/lib/roda/plugins/head.rb +5 -7
  30. data/lib/roda/plugins/header_matchers.rb +12 -33
  31. data/lib/roda/plugins/heartbeat.rb +2 -7
  32. data/lib/roda/plugins/indifferent_params.rb +2 -2
  33. data/lib/roda/plugins/json.rb +6 -14
  34. data/lib/roda/plugins/json_parser.rb +2 -13
  35. data/lib/roda/plugins/mailer.rb +29 -39
  36. data/lib/roda/plugins/match_affix.rb +0 -5
  37. data/lib/roda/plugins/middleware.rb +10 -15
  38. data/lib/roda/plugins/multi_route.rb +8 -5
  39. data/lib/roda/plugins/multi_run.rb +1 -0
  40. data/lib/roda/plugins/named_templates.rb +2 -2
  41. data/lib/roda/plugins/optimized_string_matchers.rb +0 -3
  42. data/lib/roda/plugins/padrino_render.rb +6 -9
  43. data/lib/roda/plugins/param_matchers.rb +6 -6
  44. data/lib/roda/plugins/params_capturing.rb +15 -35
  45. data/lib/roda/plugins/partials.rb +3 -8
  46. data/lib/roda/plugins/path.rb +5 -5
  47. data/lib/roda/plugins/path_matchers.rb +3 -3
  48. data/lib/roda/plugins/path_rewriter.rb +4 -9
  49. data/lib/roda/plugins/placeholder_string_matchers.rb +1 -1
  50. data/lib/roda/plugins/precompile_templates.rb +10 -20
  51. data/lib/roda/plugins/public.rb +6 -9
  52. data/lib/roda/plugins/render.rb +50 -171
  53. data/lib/roda/plugins/render_each.rb +4 -7
  54. data/lib/roda/plugins/render_locals.rb +6 -20
  55. data/lib/roda/plugins/request_headers.rb +2 -4
  56. data/lib/roda/plugins/run_append_slash.rb +1 -4
  57. data/lib/roda/plugins/run_handler.rb +4 -7
  58. data/lib/roda/plugins/shared_vars.rb +3 -6
  59. data/lib/roda/plugins/sinatra_helpers.rb +11 -40
  60. data/lib/roda/plugins/slash_path_empty.rb +0 -3
  61. data/lib/roda/plugins/static.rb +2 -2
  62. data/lib/roda/plugins/static_routing.rb +2 -3
  63. data/lib/roda/plugins/streaming.rb +15 -108
  64. data/lib/roda/plugins/strip_path_prefix.rb +1 -1
  65. data/lib/roda/plugins/symbol_matchers.rb +7 -23
  66. data/lib/roda/plugins/type_routing.rb +4 -9
  67. data/lib/roda/plugins/view_options.rb +10 -66
  68. data/lib/roda/version.rb +2 -2
  69. data/spec/all.rb +0 -2
  70. data/spec/composition_spec.rb +1 -1
  71. data/spec/env_spec.rb +1 -1
  72. data/spec/freeze_spec.rb +1 -1
  73. data/spec/integration_spec.rb +1 -1
  74. data/spec/matchers_spec.rb +26 -70
  75. data/spec/opts_spec.rb +1 -1
  76. data/spec/plugin/all_verbs_spec.rb +1 -1
  77. data/spec/plugin/assets_preloading_spec.rb +1 -1
  78. data/spec/plugin/assets_spec.rb +43 -27
  79. data/spec/plugin/backtracking_array_spec.rb +1 -1
  80. data/spec/plugin/branch_locals_spec.rb +1 -1
  81. data/spec/plugin/caching_spec.rb +1 -1
  82. data/spec/plugin/chunked_spec.rb +1 -1
  83. data/spec/plugin/class_level_routing_spec.rb +1 -1
  84. data/spec/plugin/class_matchers_spec.rb +1 -1
  85. data/spec/plugin/content_for_spec.rb +2 -7
  86. data/spec/plugin/cookies_spec.rb +1 -1
  87. data/spec/plugin/csrf_spec.rb +1 -1
  88. data/spec/plugin/default_headers_spec.rb +1 -1
  89. data/spec/plugin/default_status_spec.rb +1 -1
  90. data/spec/plugin/delay_build_spec.rb +1 -1
  91. data/spec/plugin/delegate_spec.rb +1 -1
  92. data/spec/plugin/delete_empty_headers_spec.rb +1 -1
  93. data/spec/plugin/disallow_file_uploads_spec.rb +2 -2
  94. data/spec/plugin/drop_body_spec.rb +1 -1
  95. data/spec/plugin/empty_root_spec.rb +1 -1
  96. data/spec/plugin/environments_spec.rb +1 -1
  97. data/spec/plugin/error_email_spec.rb +1 -1
  98. data/spec/plugin/error_handler_spec.rb +1 -1
  99. data/spec/plugin/error_mail_spec.rb +2 -2
  100. data/spec/plugin/flash_spec.rb +1 -1
  101. data/spec/plugin/h_spec.rb +1 -1
  102. data/spec/plugin/halt_spec.rb +2 -2
  103. data/spec/plugin/hash_matcher_spec.rb +1 -1
  104. data/spec/plugin/head_spec.rb +1 -1
  105. data/spec/plugin/header_matchers_spec.rb +4 -47
  106. data/spec/plugin/heartbeat_spec.rb +1 -1
  107. data/spec/plugin/hooks_spec.rb +1 -1
  108. data/spec/plugin/indifferent_params_spec.rb +1 -1
  109. data/spec/plugin/json_parser_spec.rb +12 -1
  110. data/spec/plugin/json_spec.rb +8 -1
  111. data/spec/plugin/mailer_spec.rb +1 -1
  112. data/spec/plugin/match_affix_spec.rb +1 -1
  113. data/spec/plugin/middleware_spec.rb +15 -1
  114. data/spec/plugin/module_include_spec.rb +1 -1
  115. data/spec/plugin/multi_route_spec.rb +5 -3
  116. data/spec/plugin/multi_run_spec.rb +1 -1
  117. data/spec/plugin/multi_view_spec.rb +1 -1
  118. data/spec/plugin/named_templates_spec.rb +1 -1
  119. data/spec/plugin/not_allowed_spec.rb +1 -1
  120. data/spec/plugin/not_found_spec.rb +1 -1
  121. data/spec/plugin/optimized_string_matchers_spec.rb +1 -1
  122. data/spec/plugin/padrino_render_spec.rb +1 -1
  123. data/spec/plugin/param_matchers_spec.rb +1 -1
  124. data/spec/plugin/params_capturing_spec.rb +6 -22
  125. data/spec/plugin/partials_spec.rb +1 -1
  126. data/spec/plugin/pass_spec.rb +1 -1
  127. data/spec/plugin/path_matchers_spec.rb +1 -1
  128. data/spec/plugin/path_rewriter_spec.rb +1 -1
  129. data/spec/plugin/path_spec.rb +1 -1
  130. data/spec/plugin/placeholder_string_matchers_spec.rb +3 -36
  131. data/spec/plugin/precompile_templates_spec.rb +1 -17
  132. data/spec/plugin/public_spec.rb +3 -4
  133. data/spec/plugin/render_each_spec.rb +1 -1
  134. data/spec/plugin/render_locals_spec.rb +1 -1
  135. data/spec/plugin/render_spec.rb +28 -114
  136. data/spec/plugin/request_headers_spec.rb +1 -1
  137. data/spec/plugin/response_request_spec.rb +1 -1
  138. data/spec/plugin/run_append_slash_spec.rb +1 -1
  139. data/spec/plugin/run_handler_spec.rb +1 -1
  140. data/spec/plugin/shared_vars_spec.rb +1 -1
  141. data/spec/plugin/sinatra_helpers_spec.rb +1 -1
  142. data/spec/plugin/slash_path_empty_spec.rb +1 -1
  143. data/spec/plugin/static_routing_spec.rb +1 -1
  144. data/spec/plugin/static_spec.rb +1 -1
  145. data/spec/plugin/status_303_spec.rb +1 -1
  146. data/spec/plugin/status_handler_spec.rb +1 -1
  147. data/spec/plugin/streaming_spec.rb +1 -106
  148. data/spec/plugin/strip_path_prefix_spec.rb +1 -1
  149. data/spec/plugin/symbol_matchers_spec.rb +1 -77
  150. data/spec/plugin/symbol_status_spec.rb +1 -1
  151. data/spec/plugin/symbol_views_spec.rb +1 -1
  152. data/spec/plugin/type_routing_spec.rb +1 -1
  153. data/spec/plugin/unescape_path_spec.rb +1 -1
  154. data/spec/plugin/view_options_spec.rb +16 -110
  155. data/spec/plugin_spec.rb +1 -1
  156. data/spec/redirect_spec.rb +1 -1
  157. data/spec/request_spec.rb +1 -1
  158. data/spec/response_spec.rb +1 -1
  159. data/spec/session_spec.rb +1 -1
  160. data/spec/spec_helper.rb +1 -3
  161. data/spec/version_spec.rb +1 -1
  162. metadata +6 -26
  163. data/lib/roda/plugins/_erubis_escaping.rb +0 -59
  164. data/lib/roda/plugins/per_thread_caching.rb +0 -71
  165. data/lib/roda/plugins/static_path_info.rb +0 -12
  166. data/lib/roda/plugins/view_subdirs.rb +0 -7
  167. data/lib/roda/plugins/websockets.rb +0 -107
  168. data/spec/plugin/_erubis_escaping_spec.rb +0 -97
  169. data/spec/plugin/per_thread_caching_spec.rb +0 -28
  170. data/spec/plugin/websockets_spec.rb +0 -84
data/spec/plugin_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "plugins" do
4
4
  it "should be able to override class, instance, response, and request methods, and execute configure method" do
@@ -1,4 +1,4 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "redirects" do
4
4
  it "should be immediately processed" do
data/spec/request_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "request.path, .remaining_path, and .matched_path" do
4
4
  it "should return the script name and path_info as a string" do
@@ -1,4 +1,4 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "response #[] and #[]=" do
4
4
  it "should get/set headers" do
data/spec/session_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "session handling" do
4
4
  it "should give a warning if session variable is not available" do
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  $:.unshift(File.expand_path("../lib", File.dirname(__FILE__)))
2
2
 
3
- require "rubygems"
4
-
5
3
  if ENV['WARNING']
6
4
  require 'warning'
7
5
  Warning.ignore([:missing_ivar, :method_redefined, :not_reached], File.dirname(File.dirname(__FILE__)))
@@ -24,7 +22,7 @@ if ENV['COVERAGE']
24
22
  SimpleCov.roda_coverage
25
23
  end
26
24
 
27
- require "roda"
25
+ require_relative "../lib/roda"
28
26
  require "stringio"
29
27
  gem 'minitest'
30
28
  require "minitest/autorun"
data/spec/version_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Roda version constants" do
4
4
  it "RodaVersion should be a string in x.y.z integer format" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roda
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.29.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-16 00:00:00.000000000 Z
11
+ date: 2017-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: erubis
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: erubi
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -209,6 +195,7 @@ extra_rdoc_files:
209
195
  - doc/release_notes/2.27.0.txt
210
196
  - doc/release_notes/2.28.0.txt
211
197
  - doc/release_notes/2.29.0.txt
198
+ - doc/release_notes/3.0.0.txt
212
199
  files:
213
200
  - CHANGELOG
214
201
  - MIT-LICENSE
@@ -250,8 +237,8 @@ files:
250
237
  - doc/release_notes/2.7.0.txt
251
238
  - doc/release_notes/2.8.0.txt
252
239
  - doc/release_notes/2.9.0.txt
240
+ - doc/release_notes/3.0.0.txt
253
241
  - lib/roda.rb
254
- - lib/roda/plugins/_erubis_escaping.rb
255
242
  - lib/roda/plugins/_symbol_regexp_matchers.rb
256
243
  - lib/roda/plugins/all_verbs.rb
257
244
  - lib/roda/plugins/assets.rb
@@ -307,7 +294,6 @@ files:
307
294
  - lib/roda/plugins/path.rb
308
295
  - lib/roda/plugins/path_matchers.rb
309
296
  - lib/roda/plugins/path_rewriter.rb
310
- - lib/roda/plugins/per_thread_caching.rb
311
297
  - lib/roda/plugins/placeholder_string_matchers.rb
312
298
  - lib/roda/plugins/precompile_templates.rb
313
299
  - lib/roda/plugins/public.rb
@@ -322,7 +308,6 @@ files:
322
308
  - lib/roda/plugins/sinatra_helpers.rb
323
309
  - lib/roda/plugins/slash_path_empty.rb
324
310
  - lib/roda/plugins/static.rb
325
- - lib/roda/plugins/static_path_info.rb
326
311
  - lib/roda/plugins/static_routing.rb
327
312
  - lib/roda/plugins/status_303.rb
328
313
  - lib/roda/plugins/status_handler.rb
@@ -334,8 +319,6 @@ files:
334
319
  - lib/roda/plugins/type_routing.rb
335
320
  - lib/roda/plugins/unescape_path.rb
336
321
  - lib/roda/plugins/view_options.rb
337
- - lib/roda/plugins/view_subdirs.rb
338
- - lib/roda/plugins/websockets.rb
339
322
  - lib/roda/version.rb
340
323
  - spec/all.rb
341
324
  - spec/assets/css/app.scss
@@ -348,7 +331,6 @@ files:
348
331
  - spec/integration_spec.rb
349
332
  - spec/matchers_spec.rb
350
333
  - spec/opts_spec.rb
351
- - spec/plugin/_erubis_escaping_spec.rb
352
334
  - spec/plugin/all_verbs_spec.rb
353
335
  - spec/plugin/assets_preloading_spec.rb
354
336
  - spec/plugin/assets_spec.rb
@@ -403,7 +385,6 @@ files:
403
385
  - spec/plugin/path_matchers_spec.rb
404
386
  - spec/plugin/path_rewriter_spec.rb
405
387
  - spec/plugin/path_spec.rb
406
- - spec/plugin/per_thread_caching_spec.rb
407
388
  - spec/plugin/placeholder_string_matchers_spec.rb
408
389
  - spec/plugin/precompile_templates_spec.rb
409
390
  - spec/plugin/public_spec.rb
@@ -429,7 +410,6 @@ files:
429
410
  - spec/plugin/type_routing_spec.rb
430
411
  - spec/plugin/unescape_path_spec.rb
431
412
  - spec/plugin/view_options_spec.rb
432
- - spec/plugin/websockets_spec.rb
433
413
  - spec/plugin_spec.rb
434
414
  - spec/redirect_spec.rb
435
415
  - spec/request_spec.rb
@@ -465,7 +445,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
465
445
  requirements:
466
446
  - - ">="
467
447
  - !ruby/object:Gem::Version
468
- version: 1.8.7
448
+ version: 1.9.2
469
449
  required_rubygems_version: !ruby/object:Gem::Requirement
470
450
  requirements:
471
451
  - - ">="
@@ -473,7 +453,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
473
453
  version: '0'
474
454
  requirements: []
475
455
  rubyforge_project:
476
- rubygems_version: 2.6.11
456
+ rubygems_version: 2.6.13
477
457
  signing_key:
478
458
  specification_version: 4
479
459
  summary: Routing tree web toolkit
@@ -1,59 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- require 'erubis'
4
-
5
- class Roda
6
- module RodaPlugins
7
- warn 'Using the render plugin :escape option for Erubis escaping support is deprecated. In Roda 3, the :escape option will use Erubi escaping support. You can turn on the Roda 3 behavior by using :escape=>:erubi.'
8
-
9
- # The _erubis_escaping plugin handles escaping of <tt><%= %></tt> inside
10
- # ERB templates. It is an internal plugin that should not be loaded
11
- # directlyn by user code.
12
- module ErubisEscaping
13
- # Escaper which escapes by default, but does not escape instances of
14
- # classes marked as safe.
15
- class UnsafeClassEscaper
16
- # Default escaper if the string needs to be escaped.
17
- Escaper = Erubis::XmlHelper
18
-
19
- # Record the classes to consider safe.
20
- def initialize(safe_classes)
21
- @safe_classes = Array(safe_classes).freeze
22
- freeze
23
- end
24
-
25
- # If the string given is not an instance of one of the safe
26
- # classes, escape it, otherwise return it verbatim. If the
27
- # given object is not already a string, convert it to a string first.
28
- def escape_xml(string)
29
- unless string.is_a?(String)
30
- string = string.to_s
31
- end
32
-
33
- if @safe_classes.any?{|c| string.is_a?(c)}
34
- string
35
- else
36
- Escaper.escape_xml(string)
37
- end
38
- end
39
- end
40
-
41
- # Subclass that works with specified escaper, also handling
42
- # postfix conditionals inside <tt><%= %></tt> tags.
43
- class Eruby < Erubis::EscapedEruby
44
- # Set escaping object to a local variable
45
- def convert_input(codebuf, input)
46
- codebuf << '_erubis_escaper = render_opts[:escaper];'
47
- super
48
- end
49
-
50
- # Use escaping object to escape the code, and handle postfix conditionals.
51
- def add_expr_escaped(src, code)
52
- src << " " << @bufvar << " << _erubis_escaper.escape_xml((" << code << "));"
53
- end
54
- end
55
- end
56
-
57
- register_plugin(:_erubis_escaping, ErubisEscaping)
58
- end
59
- end
@@ -1,71 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- #
4
- class Roda
5
- module RodaPlugins
6
- warn "The per_thread_caching plugin is deprecated and will be removed in Roda 3. Consider maintaining the plugin as a separate gem if you would like to keep using it."
7
-
8
- # The per_thread_caching plugin changes the default cache
9
- # from being a shared thread safe cache to a separate cache per
10
- # thread. This means getting or setting values no longer
11
- # needs a mutex, which may be faster when using a thread pool.
12
- # However, since the caches are no longer shared, this will
13
- # take up more memory.
14
- #
15
- # Using this plugin changes the matcher regexp cache to use
16
- # per-thread caches, and changes the default for future
17
- # thread-safe caches to use per-thread caches.
18
- #
19
- # If you want the render plugin's template cache to use
20
- # per-thread caches, you should load this plugin before the
21
- # render plugin.
22
- module PerThreadCaching
23
- def self.configure(app)
24
- app::RodaRequest.match_pattern_cache = app.thread_safe_cache
25
- end
26
-
27
- class Cache
28
- # Mutex used to ensure multiple per-thread caches
29
- # don't use the same key
30
- MUTEX = ::Mutex.new
31
-
32
- n = 0
33
- # Auto incrementing number proc used to make sure
34
- # multiple thread-thread caches don't use the same key.
35
- N = lambda{MUTEX.synchronize{n += 1}}
36
-
37
- # Store unique symbol used to look up in the per
38
- # thread caches.
39
- def initialize
40
- @o = :"roda_per_thread_cache_#{N.call}"
41
- end
42
-
43
- # Return the current thread's cached value.
44
- def [](key)
45
- _hash[key]
46
- end
47
-
48
- # Set the current thread's cached value.
49
- def []=(key, value)
50
- _hash[key] = value
51
- end
52
-
53
- private
54
-
55
- # The current thread's cache.
56
- def _hash
57
- ::Thread.current[@o] ||= {}
58
- end
59
- end
60
-
61
- module ClassMethods
62
- # Use the per-thread cache instead of the default cache.
63
- def thread_safe_cache
64
- Cache.new
65
- end
66
- end
67
- end
68
-
69
- register_plugin(:per_thread_caching, PerThreadCaching)
70
- end
71
- end
@@ -1,12 +0,0 @@
1
- class Roda
2
- module RodaPlugins
3
- warn 'The static_path_info plugin is deprecated and will be removed in Roda 3. It has been a no-op since Roda 2, and can just be removed from the application.'
4
-
5
- module StaticPathInfo
6
- end
7
-
8
- # For backwards compatibilty, don't raise an error
9
- # if trying to load the plugin
10
- register_plugin(:static_path_info, StaticPathInfo)
11
- end
12
- end
@@ -1,7 +0,0 @@
1
- # View options is a superset of the view_subdirs plugin,
2
- # which no longer exists. For backwards compatibility,
3
- # make attempts to load the view_subdirs plugin load the
4
- # view_options plugin instead.
5
- require 'roda/plugins/view_options'
6
- Roda::RodaPlugins.warn "The view_subdirs plugin is a deprecated alias for the view_options plugin that will be removed in Roda 3. Use the view_options plugin instead."
7
- Roda::RodaPlugins.register_plugin(:view_subdirs, Roda::RodaPlugins::ViewOptions)
@@ -1,107 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- require 'faye/websocket'
4
-
5
- class Roda
6
- module RodaPlugins
7
- warn "The websockets plugin is deprecated and will be removed in Roda 3. Consider maintaining the plugin as a separate gem if you would like to keep using it."
8
-
9
- # The websocket plugin adds integration support for websockets.
10
- # Currently, only 'faye-websocket' is supported, so eventmachine
11
- # is required for websockets. See the
12
- # {faye-websocket documentation}[https://github.com/faye/faye-websocket-ruby]
13
- # for details on the faye-websocket API. Note that faye-websocket
14
- # is only supported on ruby 1.9.3+, so the websockets plugin only works
15
- # on ruby 1.9.3+.
16
- #
17
- # Here's a simplified example for a basic multi-user,
18
- # multi-room chat server, where a message from any user in a room
19
- # is sent to all other users in the same room, using a websocket
20
- # per room:
21
- #
22
- # plugin :websockets, :adapter=>:thin, :ping=>45
23
- #
24
- # MUTEX = Mutex.new
25
- # ROOMS = {}
26
- #
27
- # def sync
28
- # MUTEX.synchronize{yield}
29
- # end
30
- #
31
- # route do |r|
32
- # r.get "room", Integer do |room_id|
33
- # room = sync{ROOMS[room_id] ||= []}
34
- #
35
- # r.websocket do |ws|
36
- # # Routing block taken if request is a websocket request,
37
- # # yields a Faye::WebSocket instance
38
- #
39
- # ws.on(:message) do |event|
40
- # sync{room.dup}.each{|user| user.send(event.data)}
41
- # end
42
- #
43
- # ws.on(:close) do |event|
44
- # sync{room.delete(ws)}
45
- # sync{room.dup}.each{|user| user.send("Someone left")}
46
- # end
47
- #
48
- # sync{room.dup}.each{|user| user.send("Someone joined")}
49
- # sync{room.push(ws)}
50
- # end
51
- #
52
- # # If the request is not a websocket request, execution
53
- # # continues, similar to how routing in general works.
54
- # view 'room'
55
- # end
56
- # end
57
- module Websockets
58
- WebSocket = ::Faye::WebSocket
59
- OPTS = {}.freeze
60
-
61
- # Add default opions used for websockets. These options are
62
- # passed to Faye:WebSocket.new, except that the following
63
- # options are handled separately.
64
- #
65
- # :adapter :: Calls Faye::WebSocket.load adapter with the given
66
- # value, used to set the adapter to load, if Faye
67
- # requires an adapter to work with the webserver.
68
- # Possible options: :thin, :rainbows, :goliath
69
- #
70
- # See RequestMethods#websocket for additional supported options.
71
- def self.configure(app, opts=OPTS)
72
- opts = app.opts[:websockets_opts] = (app.opts[:websockets_opts] || {}).merge(opts || {})
73
- if adapter = opts.delete(:adapter)
74
- WebSocket.load_adapter(adapter.to_s)
75
- end
76
- opts.freeze
77
- end
78
-
79
- module RequestMethods
80
- # True if this request is a websocket request, false otherwise.
81
- def websocket?
82
- WebSocket.websocket?(env)
83
- end
84
-
85
- # If the request is a websocket request, yield a websocket to the
86
- # block, and return the appropriate rack response after the block
87
- # returns. +opts+ is an options hash used when creating the
88
- # websocket, except the following options are handled specially:
89
- #
90
- # :protocols :: Set the protocols to accept, should be an array
91
- # of strings.
92
- def websocket(opts=OPTS)
93
- if websocket?
94
- always do
95
- opts = Hash[roda_class.opts[:websockets_opts]].merge!(opts)
96
- ws = WebSocket.new(env, opts.delete(:protocols), opts)
97
- yield ws
98
- halt ws.rack_response
99
- end
100
- end
101
- end
102
- end
103
- end
104
-
105
- register_plugin(:websockets, Websockets)
106
- end
107
- end
@@ -1,97 +0,0 @@
1
- require File.expand_path("spec_helper", File.dirname(File.dirname(__FILE__)))
2
-
3
- begin
4
- require 'erubis'
5
- require 'tilt'
6
- require 'tilt/erb'
7
- begin
8
- require 'tilt/erubis'
9
- rescue LoadError
10
- # Tilt 1 support
11
- end
12
- rescue LoadError
13
- warn "tilt or erubis not installed, skipping _erubis_escaping plugin test"
14
- else
15
- describe "_erubis_escaping plugin" do
16
- before do
17
- if defined?(Tilt::ErubisTemplate) && ::Tilt['erb'] != Tilt::ErubisTemplate
18
- # Set erubis as default erb template handler
19
- Tilt.register(Tilt::ErubisTemplate, 'erb')
20
- end
21
- end
22
-
23
- deprecated "should escape inside <%= %> and not inside <%== %>, and handle postfix conditionals" do
24
- app(:bare) do
25
- plugin :render, :escape=>true
26
-
27
- route do |r|
28
- render(:inline=>'<%= "<>" %> <%== "<>" %><%= "<>" if false %>')
29
- end
30
- end
31
-
32
- body.must_equal '&lt;&gt; <>'
33
- end
34
-
35
- deprecated "should consider classes in :escape_safe_classes as safe" do
36
- c = Class.new(String)
37
- c2 = Class.new(String)
38
- app(:bare) do
39
- plugin :render, :escape=>true, :escape_safe_classes=>c
40
-
41
- route do |r|
42
- @c, @c2 = c, c2
43
- render(:inline=>'<%= @c2.new("<>") %> <%= @c.new("<>") %>')
44
- end
45
- end
46
-
47
- body.must_equal '&lt;&gt; <>'
48
- end
49
-
50
- deprecated "should covnert arguments to strings when escaping with safe classes" do
51
- app(:bare) do
52
- plugin :render, :escape=>true, :escape_safe_classes=>[]
53
-
54
- route do |r|
55
- render(:inline=>'<%= :"<>" %> <%== :"<>" %><%= :"<>" if false %>')
56
- end
57
- end
58
-
59
- body.must_equal '&lt;&gt; <>'
60
- end
61
-
62
- deprecated "should allow use of custom :escaper" do
63
- escaper = Object.new
64
- def escaper.escape_xml(s)
65
- s.gsub("'", "''")
66
- end
67
- app(:bare) do
68
- plugin :render, :escape=>true, :escaper=>escaper
69
-
70
- route do |r|
71
- render(:inline=>'<%= "ab\'1" %> <%== "ab\'1" %>')
72
- end
73
- end
74
-
75
- body.must_equal "ab''1 ab'1"
76
- end
77
-
78
- deprecated "should allow for per-branch escaping via set_view options" do
79
- app(:bare) do
80
- plugin :render, :escape=>true
81
- plugin :view_options
82
-
83
- route do |r|
84
- set_view_options :template_opts=>{:engine_class=>nil}
85
- r.is 'a' do
86
- set_view_options :template_opts=>{:engine_class=>render_opts[:template_opts][:engine_class]}
87
- render(:inline=>'<%= "<>" %>')
88
- end
89
- render(:inline=>'<%= "<>" %>')
90
- end
91
- end
92
-
93
- body('/a').must_equal '&lt;&gt;'
94
- body.must_equal '<>'
95
- end
96
- end
97
- end