forked from jeremyevans/roda
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGELOG
873 lines (437 loc) · 37.3 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
= 3.25.0 (2019-10-15)
* Support change in tilt 2.0.10 private API to continue to support compiled templates, with up to 33% performance improvement (jeremyevans)
* Improve render performance with :locals option up to 75% by calling compiled template methods directly (jeremyevans)
= 3.24.0 (2019-09-13)
* Fix Proc.new warning in module_include plugin on Ruby 2.7+ (jeremyevans)
* Improve render_each performance by calling compiled template methods directly (jeremyevans)
= 3.23.0 (2019-08-13)
* Make roda/session_middleware work if type_routing plugin is loaded into Roda itself (jeremyevans) (#169)
* Handle requests with nothing before extension in the path in the type_routing plugin (jeremyevans) (#168)
* Always show line number in exception_page output in exception_page plugin (jeremyevans)
* Improve render/view performance up to 2x in development mode in the default case by calling compiled template methods directly (jeremyevans)
= 3.22.0 (2019-07-12)
* Improve render performance up to 4x in the default case by calling compiled template methods directly (jeremyevans)
= 3.21.0 (2019-06-14)
* Cache compiled templates in development mode, until the template files are modified (jeremyevans)
= 3.20.0 (2019-05-16)
* Set Content-Length header to 0 for empty 205 responses (jeremyevans)
= 3.19.0 (2019-04-12)
* Allow assets plugin :timestamp_paths option to be a string to specify a custom separator (jeremyevans)
* Fix handling for blocks with arity > 1 where expected arity is 1 (jeremyevans)
* Improve performance for handling blocks with arity 0 where expected arity is 1 by avoiding instance_exec (jeremyevans)
* Improve terminal maching by around 4x (jeremyevans)
* Improve symbol matching by 10-20% (jeremyevans)
* Improve string matching by 10-20% (jeremyevans)
* Automatically load the direct_call plugin when freezing if no middleware is used for better performance (jeremyevans)
* Delay building rack app until Roda.app is called (jeremyevans)
* Add hash_routes plugin for O(1) route dispatching at any level in the routing tree (jeremyevans)
* Add support for per-cookie cipher secrets in the sessions plugin, and enable them by default (jeremyevans)
* Add match_hook plugin for calling hooks when there is a successful match block (adam12) (#164)
= 3.18.0 (2019-03-15)
* Add direct_call plugin for making Roda.call skip middleware, allowing more optimization when dispatching routes (jeremyevans)
* Improve performance of default_headers plugin by directly defining set_default_headers (jeremyevans)
* Improve performance when freezing app if certain methods have not been overridden (jeremyevans)
* Support :check_arity and :check_dynamic_arity app options for whether/how to check arity for blocks used to define methods (jeremyevans)
* Improve performance of the status_handler plugin by using methods instead of instance_exec (jeremyevans)
* Remove r.static_route method from the static_routing plugin (jeremyevans)
* Improve performance of the static_routing plugin by using methods instead of instance_exec (jeremyevans)
* Add support for the route_block_args plugin to the route_csrf plugin (jeremyevans)
* Improve performance of the route_csrf plugin by using a method instead of instance_exec (jeremyevans)
* Improve performance of the route_block_args plugin by using a method instead of instance_exec (jeremyevans)
* Improve performance of the path plugin by using methods instead of instance_exec (jeremyevans)
* Improve performance of the named_templates plugin by using methods instead of instance_exec (jeremyevans)
* Improve performance of the multi_route plugin by using methods instead of instance_exec (jeremyevans)
* Improve performance of the hooks plugin by using methods instead of instance_exec (jeremyevans)
* Improve performance of the mail_processor plugin by using methods instead of instance_exec (jeremyevans)
* Improve performance of the default_status plugin by directly defining the default_status method (jeremyevans)
* Improve performance of class_level_routing plugin using methods instead of instance_exec (jeremyevans)
* Do not have route_block_args plugin affect class_level_routes plugin (jeremyevans)
* Integrate internal after hook with error_handler plugin (jeremyevans)
* Improve performance of internal before and after hooks (jeremyevans)
* Improve performance by using method instead of instance_exec for main route block (jeremyevans)
* Add Roda.define_roda_method for defining instance methods instead of using instance_exec (jeremyevans)
* Include cookie_options when clearing the cookie (#162, #163) (eiko, jeremyevans)
= 3.17.0 (2019-02-15)
* Improve performance in the common case for RodaResponse#finish (jeremyevans)
* Support before hooks in the hooks plugin in the mailer and mail_processor plugins (jeremyevans)
* Allow set_layout_opts in view_options plugin to override layout if render plugin :layout option is given (jeremyevans)
* Add route_block_args plugin to control which arguments are yielded to the route block (jeremyevans, chrisfrank) (#159)
= 3.16.0 (2019-01-18)
* Add mail_processor plugin for processing mail using a routing tree (jeremyevans)
= 3.15.0 (2018-12-14)
* Support render plugin :escape option to be a string or array of strings and only add :escape option for those template engines (jeremyevans) (#158)
* Add :skip_missing option to convert!/convert_each! in the typecast_params plugin to support not storing keys not present in params (jeremyevans)
= 3.14.1 (2018-11-29)
* SECURITY: content_for plugin no longer post-processes block result with template engine (jeremyevans)
= 3.14.0 (2018-11-16)
* Add :raise option to convert!/convert_each! in the typecast_params plugin to support not raising for missing keys (celsworth) (#153)
* Do not persist convert!/convert_each! :symbolize setting in the typecast_params plugin (jeremyevans)
= 3.13.0 (2018-10-12)
* Make Stream#write in streaming plugin return number of bytes written instead of self, so it works with IO.copy_stream (jeremyevans)
* Add exception_page plugin for showing a page with debugging information for a given exception (jeremyevans)
* Make common_logger plugin handle raised errors (jeremyevans)
= 3.12.0 (2018-09-14)
* Add common_logger plugin for common log support (jeremyevans)
= 3.11.0 (2018-08-15)
* Disable default compression of sessions over 128 bytes in the sessions plugin (jeremyevans)
* Log but otherwise ignore exceptions raised by after processing of error handler response (jeremyevans)
* Modify internal before/after processing to avoid plugin load order issues (jeremyevans)
= 3.10.0 (2018-07-18)
* Remove flash key from session if new flash is empty when rotating flash (jeremyevans)
* Speed up RodaRequest initialization by avoiding 1-2 method calls (jeremyevans)
* Add roda/session_middleware (RodaSessionMiddleware), usable as a middleware by any Rack app to use Roda's session support (jeremyevans)
* Add sessions plugin for more secure (encrypted+signed) sessions (jeremyevans)
* Support :json_parser and :json_serializer application options as default implementations for parsing/serializing JSON (jeremyevans)
* Add :handle_result option to middleware plugin for modifying rack result before returning it (jeremyevans)
* Make the flash plugin work correctly when sessions are serialized with JSON (jeremyevans)
* Make Integer in typecast_params handle Numeric input, and require that Numeric input not have fractional parts (jeremyevans) (#146)
= 3.9.0 (2018-06-11)
* Add route_csrf plugin for CSRF protection, offering more control, better security, and request-specific tokens compared to rack_csrf (jeremyevans)
= 3.8.0 (2018-05-17)
* Accept convert_each! :keys option that is Proc or Method in typecast_params plugin (jeremyevans)
* Make convert_each! in typecast_params plugin handle hashes with '0'..'N' keys without :keys option (jeremyevans)
= 3.7.0 (2018-04-20)
* Make response_request plugin work with error_handler and class_level_routing plugins (jeremyevans)
* Add content_security_policy plugin for setting an appropriate Content-Security-Policy header (jeremyevans)
= 3.6.0 (2018-03-26)
* Add :wrap option to json_parser plugin, for whether/how to wrap the uploaded JSON object (jeremyevans) (#142)
* Add :early_hints option to the assets plugin, for supporting sending early hints for calls to assets (jeremyevans)
* Add early_hints plugin for sending 103 Early Hint responses, currently only working on puma (jeremyevans)
= 3.5.0 (2018-02-14)
* Add request_aref plugin for configuring behavior of request [] and []= methods (jeremyevans)
* Make public plugin not add Content-Type header when serving 304 response for gzipped file (jeremyevans)
* Make content_for call with block convert block result to string before passing to tilt (jeremyevans) (#135)
= 3.4.0 (2018-01-12)
* Add middleware_stack plugin for removing middleware and inserting middleware before the end of the stack (jeremyevans)
* Make head plugin handle closing existing response bodies if the body responds to close (Eric Wong)
= 3.3.0 (2017-12-14)
* Add typecast_params plugin for converting param values to explicit types (jeremyevans)
= 3.2.0 (2017-11-16)
* Use microseconds in assets plugin :timestamp_paths timestamps (jeremyevans)
* Add timestamp_public plugin for serving static files with paths that change based on modify timestamp (jeremyevans)
= 3.1.0 (2017-10-13)
* Make set_layout_locals and set_view_locals in branch_locals plugin work when the other is not called (jeremyevans)
* Add :timestamp_paths option to assets plugin to include timestamps in paths in non-compiled mode (jeremyevans)
* Handle ExecJS::RuntimeUnavailable when testing for javascript compression support using uglifier (jeremyevans)
* Remove deprecated Roda.thread_safe_cache and RodaRequest#placeholder_string_matcher? methods (jeremyevans)
= 3.0.0 (2017-09-15)
* Make defined symbol_matcher and hash_matcher match methods private (jeremyevans)
* Use public_send instead of send unless calling private methods is expected (jeremyevans)
* Compute multi_run regexp when freezing app to avoid thread safety issues at runtime (jeremyevans)
* Remove deprecated support for using undefined multi_route namespaces when routing (jeremyevans)
* Make it possible to reset :include_request options to false for json and json_parser plugins (jeremyevans)
* Deprecate RodaRequest#placeholder_string_matcher? private method (jeremyevans)
* Deprecate Roda.thread_safe_cache, use RodaCache directly (jeremyevans)
* Make using an app as middleware always create a subclass of the app (jeremyevans)
* Enable SHA256 subresource integrity by default in assets plugin (jeremyevans)
* Make subclassing a roda app always inherit the render cache (jeremyevans)
* Make :cache=>nil render plugin option still allow caching via :cache render method option (jeremyevans)
* Make content_for plugin append to existing content by default (jeremyevans)
* Make :host matcher in the header_matchers plugin always yield captures if given a regexp (jeremyevans)
* Make :header matcher in the header_matchers plugin now always prefix header with HTTP_ (jeremyevans)
* Remove deprecated support for locals handling at the plugin level in the render plugin (jeremyevans)
* Remove deprecated support for handling locals in the view_options plugin (jeremyevans)
* Remove deprecated support for :ext option in render plugin (jeremyevans)
* Remove deprecated view_subdirs alias for view_options plugin (jeremyevans)
* Remove deprecated support for EventMachine and Stream#callback method in the streaming plugin (jeremyevans)
* Drop support for ruby 1.8.7 (jeremyevans)
* Make using an unsupported matcher raise error by default (jeremyevans)
* Make having a match/route block return an unsupported value raise error by default (jeremyevans)
* Remove deprecated :format, :opt, and :optd symbol matchers in symbol_matchers plugin (jeremyevans)
* Remove deprecated support for placeholders in string matchers (jeremyevans)
* Remove deprecated constants and plugins (jeremyevans)
= 2.29.0 (2017-08-16)
* Deprecate accessing multi_route namespace when there are no routes (jeremyevans)
* Deprecate additional internal constants (jeremyevans)
* Respect :root app option when using :layout_opts=>:views render plugin option (jeremyevans)
* Deprecate rendering templates outside of render plugin :allowed_paths option by default (jeremyevans)
* Deprecate :cache=>nil/false render plugin option overriding :cache render/view method option (jeremyevans)
* Deprecate using :header matcher in header_matchers plugin without :header_matcher_prefix app option (jeremyevans)
* Deprecate using content_for multiple times with the same key in the content_for plugin unless :append plugin option is used (jeremyevans)
* Deprecate use of :host matcher with regexp value in header_matchers plugin without :host_matcher_captures app option (jeremyevans)
* Deprecate view_options plugin locals handling, move to the new branch_locals plugin (jeremyevans)
* Deprecate render plugin locals handling, move to the new render_locals plugin (jeremyevans)
* Deprecate the :ext render method and plugin option (jeremyevans)
* Deprecate the view_subdirs plugin alias for the view_options plugin (jeremyevans)
* Deprecate Stream#callback in the streaming plugin (jeremyevans)
* Deprecate the automatic support for EventMachine in the streaming plugin (jeremyevans)
* Deprecate static_path_info plugin, which has been a no-op in Roda 2 (jeremyevans)
* Deprecate render plugin :escape option loading Erubis escaping support (jeremyevans)
* Deprecate the per_thread_caching plugin (jeremyevans)
* Deprecate the websockets plugin (jeremyevans)
* Deprecate treating unsupported matchers as always matching (jeremyevans)
* Deprecate ignoring unsupported match block return values (jeremyevans)
* Deprecate the :format, :opt, and :optd default symbol matchers in the symbol_matchers plugin (jeremyevans)
* Deprecate use of placeholders in string matchers by default, add placeholder_string_matchers plugin for it (jeremyevans)
= 2.28.0 (2017-07-14)
* Deprecate unneeded internal constants (jeremyevans)
* Optimize for ruby 2.3+ using frozen string literals instead of constants (jeremyevans)
* Move 303 default redirect status from sinatra_helpers to status_303 plugin, so it can be loaded separately (plujon) (#122)
= 2.27.0 (2017-06-14)
* Add class_matchers plugin for matching other classes (in addition to String/Integer), with user specified regexps and type conversion (jeremyevans)
* Support String class matcher for non-empty segments, same behavior as symbol matchers but more intuitive and DRY (jeremyevans)
* Support Integer class matcher for \d+ segments, yielding matched values as integers (jeremyevans)
= 2.26.0 (2017-05-16)
* Support :skip_middleware option to csrf plugin to add only the methods and not add the middleware (luciusgone) (#118)
* Handle multiple types with matching suffixes in the type_routing plugin (e.g. tar.gz and gz) (tomdalling) (#117)
= 2.25.0 (2017-04-18)
* Add error_mail plugin, similar to error_email but using mail instead of net/smtp directly (jeremyevans)
= 2.24.0 (2017-03-15)
* Have h plugin use cgi/escape if available for faster escaping (jeremyevans)
* Add disallow_file_uploads plugin for raising an exception if a multipart file upload is attempted (jeremyevans)
* Add strip_path_prefix plugin for stripping prefixes off of internal absolute paths, making them relative paths (jeremyevans)
* Add Roda.expand_path method to DRY up path expansion (jeremyevans)
* Support :freeze_middleware option, which freezes all middleware instances when building the rack app (jeremyevans)
* Allow middleware plugin to accept a block that will be used to configure the application when used as middleware (jeremyevans)
* Support an options hash when loading the cookies plugin, that will be used as the defaults for setting and deleting cookies (mwpastore, jeremyevans) (#112)
* Make the static_routing plugin work with the hooks plugin if the hooks plugin is loaded first (jeremyevans) (#110)
* Do not modify the render plugin's cache if loading the plugin multiple times (jeremyevans)
= 2.23.0 (2017-02-24)
* Add :inherit_cache render plugin option, to create a copy of the cache for subclasses, instead of using an empty cache (jeremyevans)
* In development mode, default to :explicit_cache=>true, :cache=>true instead of :cache=>false (jeremyevans)
* Add :explicit_cache render plugin option, to only cache templates if the :cache option is given to render/view (jeremyevans)
* Add error_email_content method to error_email plugin (jeremyevans)
* Make error_email method in error_email plugin support non-exception arguments (jeremyevans)
* Make Roda.freeze in the static_routing plugin return self (jeremyevans)
= 2.22.0 (2017-01-20)
* Add support for :verbatim_string_matcher option, for making all string matchers match verbatim (jeremyevans)
* Add support for :unsupported_matcher => :raise option, for raising on unsupported matcher values (jeremyevans)
* Add support for :unsupported_block_result => :raise option, for raising on unsupported route/match block return values (jeremyevans)
= 2.21.0 (2016-12-16)
* Add handle_stream_error method to streaming plugin, for handling errors when using stream(:loop=>true) (jeremyevans)
= 2.20.0 (2016-11-13)
* Support :escape=>:erubi option in the render plugin to use the erubi template engine (jeremyevans)
= 2.19.0 (2016-10-14)
* Don't add Content-Type/Content-Length headers for 1xx, 204, 205, 304 statuses (celsworth, jeremyevans) (#101, #102)
* Optimize indifferent_params plugin when using Rack 2 (jeremyevans)
* Fix assets_paths method in assets plugin when subresource integrity is used (jeremyevans, celsworth)
* Make assets plugin depend on h plugin, instead of using Rack::Utils.escape_html (jeremyevans)
* Make h plugin not escape / (celsworth, jeremyevans) (#100)
= 2.18.0 (2016-09-13)
* Add assets_preloading plugin, for creating link tags or Link header for preloading assets (celsworth, jeremyevans) (#98)
* Add assets_paths method to assets plugin, for just the paths to the assets, instead of the full tags (celsworth) (#96)
* Make type_routing plugin work correctly with public plugin (celsworth, jeremyevans) (#95)
* Add static_routing plugin for 3-4x increase in performance for large numbers of static routes (jeremyevans)
* Make head plugin work with not_allowed plugin if loaded after (jeremyevans) (#92)
= 2.17.0 (2016-08-13)
* Add :postprocessor option to assets plugin, for postprocessing assets (e.g. autoprefixing CSS) (celsworth) (#86)
* Fix path passed to rack apps when using r.run and the type_routing plugin (jeremyevans) (#82)
* Support :classes option to error_handler plugin for overriding which exception classes to rescue (jeremyevans)
* Support :layout_opts=>:merge_locals option in render plugin for merging view template locals into layout template locals (jeremyevans) (#80)
* Support :sri option to assets plugin to enable subresource integrity (jeremyevans)
* Add run_append_slash plugin, so r.run uses "/" instead of "" for app's PATH_INFO (kenaniah) (#77)
= 2.16.0 (2016-07-13)
* Add type_routing plugin, for routing based on path extensions and Accept headers (Papierkorb, jeremyevans) (#75)
* Add unescape_path plugin, for decoding URL-encoded PATH_INFO before routing (jeremyevans) (#74)
* Add request_headers plugin, for simpler access to request headers (celsworth) (#72)
= 2.15.0 (2016-06-13)
* Add public plugin for r.public method for serving all files in the public directory (jeremyevans)
* Make send_file in sinatra_helpers plugin work with Rack 2 (jeremyevans)
* Make :header matcher prefixes the env key with HTTP_ if application :header_matcher_prefix option is set (timothypage, jeremyevans) (#69)
* Add content_for plugin :append option to support appending to the existing content (evanleck, jeremyevans) (#66)
= 2.14.0 (2016-05-13)
* Add symbol_status plugin for using symbols as status codes (Papierkorb) (#65)
* Make middleware plugin also run the application's middleware (jeremyevans)
= 2.13.0 (2016-04-14)
* Add :check_paths and :allowed_paths to render plugin options to avoid security issues with template rendering (jeremyevans)
= 2.12.0 (2016-03-15)
* Allow error handler access to the request's remaining_path (jeremyevans)
* Add optimized_string_matchers plugin, containing optimized matchers for single string arguments (jeremyevans)
* Optimize string matching code for strings without placeholders for up to a 60% performance increase (jeremyevans)
* Optimize symbol matching code for up to a 60% performance increase (jeremyevans)
= 2.11.0 (2016-02-16)
* Support :scope option in render plugin, for specifying object in which to evaluate the template (jeremyevans)
* Make minjs compressor support in assets plugin support latest version of Minjs (jeremyevans)
* Add params_capturing plugin, for storing matcher captures in the request params (jeremyevans)
= 2.10.0 (2016-01-15)
* Do not override existing Content-Type header in json plugin (jeremyevans)
* Add :content_type option to json plugin to override Content-Type header used (Kyrremann) (#58)
* Add support for running with --enable-frozen-string-literal on ruby 2.3 (jeremyevans)
* Add Streaming::Stream#write method so that IO.copy_stream will work (janko-m) (#56)
= 2.9.0 (2015-12-15)
* Support passing the content as a string argument instead of a block in the content_for plugin (badosu) (#52)
= 2.8.0 (2015-11-16)
* Add multi_view plugin for easily setting up routing for rendering multiple views (jeremyevans)
* Make content_for plugin work with haml and potentially other non-erb template engines (plukevdh) (#50)
= 2.7.0 (2015-10-13)
* Add run_handler plugin for modifying rack response arrays when using r.run, and continuing routing for 404 responses (jeremyevans)
* Add response_request plugin allowing response object access to request object (jeremyevans)
* Add default_status plugin for overriding the default response status (celsworth) (#47)
* Make RodaCache synchronize access on MRI (jeremyevans)
* Support opts[:host_matcher_captures] = true to make :host=>/regexp/ matcher yield captures in the header_matchers plugin (jeremyevans)
* Allow Roda.rewrite_path to take a block in the path_rewriter plugin (Freaky) (#45)
= 2.6.0 (2015-09-14)
* Add :params and :params! matchers to param_matchers plugin (jeremyevans)
* Merge options when loading csrf plugin multiple times (jeremyevans)
* Allow request.halt to work in before hooks in the hooks plugin (celsworth) (#38)
= 2.5.1 (2015-08-13)
* Allow multi_route and middleware plugins to work together (janko-m) (#36)
= 2.5.0 (2015-07-14)
* Make :by_name option to path plugin default to true in development (jeremyevans)
* Add :cache_class option to render plugin, for customized template cache behavior (celsworth) (#34)
* Add :compiled_asset_host option to assets plugin, to use a host for compiled assets (jeremyevans)
* Allow r.multi_run to take a block that is called with the prefix before dispatching to the rack app (mikz) (#32)
= 2.4.0 (2015-06-15)
* Add websockets plugin, for integration with faye-websocket (jeremyevans)
* Add status_handler plugin, similar to not_found but for any status code (celsworth) (#29)
* Support Closure Compiler, Uglifier, and MinJS for compressing javascript in the assets plugin (jeremyevans)
* Make Roda.plugin always return nil (jeremyevans)
* Add :gzip option to assets plugin (jeremyevans)
= 2.3.0 (2015-05-13)
* Make assets plugin work better with json plugin when r.assets is the last method called in a route block (jeremyevans) (#27)
* Support no_mail! method in the mailer plugin, for skipping an email (jeremyevans)
* Add precompile_templates plugin, for saving memory when using a forking webserver (jeremyevans)
* Document how to allow per-branch HTML escaping of <%= %> in the view_options plugin (jeremyevans)
* Add :include_request option to json and json_parser plugins to include request in :serializer/:parser call (janko-m) (#26)
* Optimize template cache lookup in render plugin when :cache_key is given (jeremyevans)
* Add :engine_opts option to render plugin, for specifying per-template engine options (jeremyevans)
* The render plugin and render/view :ext option is now replaced by the :engine option (jeremyevans)
* Add path_rewriter plugin, for rewriting paths before routing (jeremyevans)
* Add :cache_key option to render/view to explicitly set the template cache key (jeremyevans)
* Don't cache templates if :template_block is given to render/view, unless :cache=>true is used (jeremyevans)
* Add :cache option to render/view to force caching or not caching the template (jeremyevans)
* Avoid rehashing hashes at runtime in plugins (jeremyevans)
* Add heartbeat plugin for heartbeat support (jeremyevans)
* Support :serializer option in json plugin (janko-m) (#21)
* Add json_parser plugin, for parsing request bodies in JSON format (jeremyevans)
= 2.2.0 (2015-04-13)
* Add :escaper render plugin option to support custom escaping of <%= %> tags when :escape is used (jeremyevans)
* Add :escape_safe_classes render plugin option, to not escape certain string subclasses when :escape is used (jeremyevans)
* Split partials method from padrino_render plugin into partials plugin (kematzy) (#19)
* Add shared_vars plugin, for sharing variables between multiple Roda apps (jeremyevans)
* Add delay method to chunked plugin, for delaying a block execution until right before content template rendering (jeremyevans)
* Have default Content-Type header when using the default_headers plugin (jeremyevans)
* Add :by_name option to the path plugin, for registering classes by name, useful when reloading code (jeremyevans)
* Add Roda.path_block to get the block related to the given class used for Road#path (jeremyevans)
* Make Roda#path work correctly in subclasses (jeremyevans)
= 2.1.0 (2015-03-13)
* Have add_file in the mailer plugin support blocks, which are called after the file has been added (jeremyevans)
* Add append_view_subdir to view_options, for appending to an existing view subdirectory (jeremyevans)
* Rename view_subdirs plugin to view_options, add support for branch/route specific view/layout options/locals (jeremyevans)
* Merge :locals set in the render plugin options into :locals provided in call to view/render (jeremyevans)
* Add support for registering classes in the path plugin for use with Roda#path (jeremyevans)
* Use :add_script_name app option as default for path method :add_script_name option in path plugin (jeremyevans)
* Support :add_script_name app option in assets plugin, to prefix URLs with SCRIPT_NAME (jeremyevans)
* Make r.multi_route in multi_route plugin work without any named routes defined (jeremyevans)
* Add :static plugin, for more easily serving static files (jeremyevans)
* Recognize Roda :root option in render and assets plugins (jeremyevans)
* Make :layout=>false option in render plugin override previous layout template (jeremyevans)
* Make add_file in the mailer plugin add the files after the email body instead of before (jeremyevans)
= 2.0.0 (2015-02-13)
* Allow Roda app to be used as a regular rack app even when using the middleware plugin (jeremyevans)
* Make render plugin :layout option always be true or false (jeremyevans)
* Make :layout=>true view option use the default layout (jeremyevans)
* Make error_handler plugin rescue ScriptError in addition to StandardError (jeremyevans)
* Make halt plugin integrate with symbol_views, json, and similar plugins (jeremyevans)
* Add padrino_render plugin, adding render/partial methods that work similar to Padrino (jeremyevans)
* Add Roda#render_template private method for template rendering, for use by plugins (jeremyevans)
* Make Roda#initialize take env hash, #call take route_block, remove private #_route (jeremyevans)
* Remove keep_remaining_path/update_remaining_path private request methods (jeremyevans)
* Don't modify SCRIPT_NAME/PATH_INFO during routing, merging static_path_info plugin into core (jeremyevans)
* Remove code deprecated in Roda 1.3.0 (jeremyevans)
= 1.3.0 (2015-01-13)
* Make static_path_info plugin restore original SCRIPT_NAME/PATH_INFO before returning from r.run (jeremyevans)
* Add RodaMajorVersion, RodaMinorVersion, and RodaPatchVersion (jeremyevans)
* Add delete_empty_headers plugin for deleting response headers that are empty before return response (jeremyevans)
* Make freeze class method freeze internal data structures to avoid thread safety issues (jeremyevans)
* Deprecate mutating plugin option hashes for chunked, default_headers, error_email, json, and render plugins (jeremyevans)
* Fix subclassing app and using r.multi_run in subclass in multi_run plugin (jeremyevans)
* Support :classes option in json plugin to set the classes to use (jeremyevans)
* Improve performance in default_headers plugin by not duping the headers (jeremyevans)
* Use :template_opts instead of :opts for providing options to the template in the render plugin (jeremyevans)
* Support :match_header_yield Roda option in the header_matchers plugin, causing the :header match to yield the value (jeremyevans)
* Move :param and :param! hash matchers to the param_matchers plugin (jeremyevans)
* Add path_matchers plugin, for :extension, :prefix, and :suffix hash matchers (jeremyevans)
* Move Roda.hash_matcher to hash_matcher plugin (jeremyevans)
* Move Roda.request_module and .response_module to module_include plugin (jeremyevans)
* Move RodaResponse#set_cookie and #delete_cookie to cookies plugin (jeremyevans)
* Deprecate RodaRequest#full_path_info, use #path instead (jeremyevans)
* Add class_delegate to the delegate plugin (jeremyevans)
* Make not_found plugin clear headers for response if it is not found (jeremyevans)
* Make error_handler plugin use a new response instead of reusing existing response (jeremyevans)
* Make RodaResponse a subclass of Object instead of Rack::Response (jeremyevans)
= 1.2.0 (2014-12-17)
* Don't override explicit nil :default_encoding template option in the render plugin (jeremyevans)
* Add remaining_path and matched_path request methods (jeremyevans)
* Add slash_path_emty plugin, for considering a path of "/" as empty when doing a terminal match (jeremyevans)
* Remove def_verb_method request class method (jeremyevans)
* Support :add_script_name, :name, :url, and :url_only options when creating named paths in the path plugin (jeremyevans)
* Add match_affix plugin, for overriding default prefix/suffix used in match patterns (jeremyevans)
* Add empty_root plugin, for making root matcher also match empty string (jeremyevans)
* Add roda_class instance methods to RodaRequest and RodaResponse, to DRY up plugin code (jeremyevans)
* Add sinatra_helpers plugin, porting Sinatra::Helpers methods not covered by other plugins (jeremyevans)
* Don't set the default headers until the response is finished (jeremyevans)
* Add RodaRequest#default_redirect_status, so plugins can override the default status used for redirects (jeremyevans)
* Add drop_body plugin, for automatically dropping body and Content-{Length,Type} headers based on response status (jeremyevans)
* Add clear_middleware! class method, for clearing the current middleware (jeremyevans)
* Add inherit_middleware class accessor, allowing users to turn off middleware inheritance (jeremyevans)
* Add multi_run plugin, for dispatching to multiple rack applications based on the request path prefix (jeremyevans)
* Add environments plugin, for handling development/test/production environments (jeremyevans)
* Do not cache templates by default if RACK_ENV is development (jeremyevans)
* Add delay_build plugin, to delay building the rack app until Roda.app is called (jeremyevans)
* Add :user_agent hash matcher to the header_matchers plugin (jeremyevans)
* Fix caching of templates in the render plugin when :opts or :template_class is used (jeremyevans)
* Require loading the render plugin again if you want to change the default layout (jeremyevans)
* Pass :css_opts and :js_opts as template options (via :opts) instead of render options when rendering (jeremyevans)
* Only pass :opts hash to template class during rendering, instead of all render/view options (jeremyevans)
* Support :template_class option in the render plugin for overriding template class to use (jeremyevans)
* Automatically dup unfrozen Array/Hash opts values when subclassing (jeremyevans)
* Add named_templates plugin, for creating inline templates by name, instead of storing them in the file system (jeremyevans)
* Support :template option in for render/view to specify template to use, instead of requiring separate argument (jeremyevans)
* Add class_level_routing plugin, for a DSL similar to Sinatra (jeremyevans)
* Make RodaRequest.consume_pattern not capture pattern by default (jeremyevans)
* Add static_path_info plugin, making Roda not modify PATH_INFO or SCRIPT_NAME during routing (jeremyevans)
* Use local/instance variable lookups instead of method calls to improve performance (jeremyevans)
* Add RodaRequest#session, and have #session delegate to that (jeremyevans)
* Add delegate plugin, for easily creating methods that delegate to request or response (jeremyevans)
* Add mailer plugin, allowing use of a routing tree for email instead of web responses (jeremyevans)
= 1.1.0 (2014-11-11)
* Add assets plugin, for rendering assets on the fly, or compiling them to a single compressed file (cj, jeremyevans) (#5)
* Make InstanceMethods in plugins not include constants, as they would pollute the constant namespace (jeremyevans)
* Make response.finish add the Content-Length header, not response.write (jeremyevans)
* Add response.finish_with_body to override response body used (jeremyevans)
* Use allocate instead of new in rack app (jeremyevans)
* Add chunked plugin, for easy streaming of template responses using Transfer-Encoding: chunked (jeremyevans)
* Add namespace support to the multi_route plugin, to support more complex applications (jeremyevans)
* Make r.multi_route use named route return value if not passed a block (jeremyevans)
* Make r.multi_route prefer longer route if multiple routes have the same prefix (jeremyevans)
* Add caching plugin, for handling http caching (jeremyevans)
* Support adding middleware after the route block has been added (jeremyevans)
* Allow Roda subclasses to use route block from superclass (jeremyevans)
* Have r.multi_route ignore non-String named routes (jeremyevans)
* Pick up newly added named routes while running in the multi_route plugin, useful for development (jeremyevans)
* Add path plugin, for named path support (jeremyevans) (#4)
* Add error_email plugin, for easily emailing an error notification for an exception (jeremyevans)
= 1.0.0 (2014-08-19)
* Don't have :extension hash matcher force a terminal match (jeremyevans)
* Add :content option to view method in render plugin to use given content instead of rendering a template (jeremyevans)
* Add :escape option to render plugin for using erb templates where <%= %> escapes and <%== %> does not (jeremyevans)
* Make multi_route plugin route("route_name") method a request method instead of an instance method (jeremyevans)
* Add r.multi_route method to multi_route plugin, for dispatching to named route based on first segment in path (jeremyevans)
* Allow non-GET requests to use r.redirect with no argument, redirecting to current path (jeremyevans)
* Add head plugin, for handling HEAD requests like GET requests with an empty body (jeremyevans)
* Optimize consuming patterns by using a positive lookahead assertion (jeremyevans)
* Add not_allowed plugin, for automatically returning 405 Method Not Allowed responses (jeremyevans)
* Optimize match blocks with no arguments (jeremyevans)
* Add content_for plugin, for storing content in one template and retrieving it in another (jeremyevans)
* Add render_each plugin, for rendering a template for each value in an enumerable (jeremyevans)
* Add backtracking_array plugin, allowing array matchers to backtrack if later matchers do not match (jeremyevans)
* Add :all hash matcher, allowing array matchers to include conditions where you want to match multiple conditions (jeremyevans)
* Add json plugin, allowing match blocks to return arrays/hashes, returning JSON (jeremyevans)
* Add view_subdirs plugin, for setting a subdirectory for views on a per-request basis (jeremyevans)
* Allow default halt method to take no arguments, and use the current response (jeremyevans)
* Add symbol_views plugin, allowing match blocks to return a template name symbol (jeremyevans)
* Add per_thread_caching plugin, for using separate caches per thread instead of shared thread-safe caches (jeremyevans)
* Add hash_matcher class method, for easily creating hash match methods (jeremyevans)
* Add symbol_matchers plugin, for using symbol-specific matching regexps (jeremyevans)
* Add csrf plugin for csrf protection using rack_csrf (jeremyevans)
* Optimize r.is, r.get, r.post and similar methods by reducing the number of Array objects created (jeremyevans)
* Support RequestClassMethods and ResponseClassMethods in plugins (jeremyevans)
* Add Roda::RodaCache for a thread safe cache, currently used for match patterns, templates, and plugins (jeremyevans)
* Optimize matching by caching consume regexp for strings, regexp, symbol, and :extension matchers (jeremyevans)
* Add r.root for GET / requests, for easier to read version of r.get "" (jeremyevans)
* Optimize r.is terminal matcher, remove :term hash matcher (jeremyevans)
* Make flash plugin no longer depend on sinatra-flash (jeremyevans)
* Move version file to roda/version so it can be required separately without loading dependencies (jeremyevans)
= 0.9.0 (2014-07-30)
* Initial public release