actionview 5.2.4.1 → 6.0.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionview might be problematic. Click here for more details.

Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +193 -79
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +4 -2
  5. data/lib/action_view.rb +3 -2
  6. data/lib/action_view/base.rb +107 -10
  7. data/lib/action_view/buffers.rb +15 -0
  8. data/lib/action_view/cache_expiry.rb +54 -0
  9. data/lib/action_view/context.rb +5 -9
  10. data/lib/action_view/digestor.rb +12 -20
  11. data/lib/action_view/gem_version.rb +4 -4
  12. data/lib/action_view/helpers.rb +0 -2
  13. data/lib/action_view/helpers/asset_tag_helper.rb +7 -30
  14. data/lib/action_view/helpers/asset_url_helper.rb +4 -3
  15. data/lib/action_view/helpers/cache_helper.rb +18 -10
  16. data/lib/action_view/helpers/capture_helper.rb +4 -0
  17. data/lib/action_view/helpers/csp_helper.rb +4 -2
  18. data/lib/action_view/helpers/csrf_helper.rb +1 -1
  19. data/lib/action_view/helpers/date_helper.rb +69 -25
  20. data/lib/action_view/helpers/form_helper.rb +238 -6
  21. data/lib/action_view/helpers/form_options_helper.rb +27 -18
  22. data/lib/action_view/helpers/form_tag_helper.rb +12 -9
  23. data/lib/action_view/helpers/javascript_helper.rb +9 -8
  24. data/lib/action_view/helpers/number_helper.rb +5 -0
  25. data/lib/action_view/helpers/output_safety_helper.rb +1 -1
  26. data/lib/action_view/helpers/rendering_helper.rb +6 -4
  27. data/lib/action_view/helpers/sanitize_helper.rb +12 -18
  28. data/lib/action_view/helpers/tag_helper.rb +7 -6
  29. data/lib/action_view/helpers/tags/base.rb +9 -5
  30. data/lib/action_view/helpers/tags/color_field.rb +1 -1
  31. data/lib/action_view/helpers/tags/translator.rb +1 -6
  32. data/lib/action_view/helpers/text_helper.rb +3 -3
  33. data/lib/action_view/helpers/translation_helper.rb +16 -12
  34. data/lib/action_view/helpers/url_helper.rb +14 -14
  35. data/lib/action_view/layouts.rb +5 -5
  36. data/lib/action_view/log_subscriber.rb +6 -6
  37. data/lib/action_view/lookup_context.rb +73 -31
  38. data/lib/action_view/path_set.rb +5 -10
  39. data/lib/action_view/railtie.rb +24 -1
  40. data/lib/action_view/record_identifier.rb +2 -2
  41. data/lib/action_view/renderer/abstract_renderer.rb +56 -3
  42. data/lib/action_view/renderer/partial_renderer.rb +66 -55
  43. data/lib/action_view/renderer/partial_renderer/collection_caching.rb +62 -16
  44. data/lib/action_view/renderer/renderer.rb +16 -4
  45. data/lib/action_view/renderer/streaming_template_renderer.rb +5 -5
  46. data/lib/action_view/renderer/template_renderer.rb +24 -18
  47. data/lib/action_view/rendering.rb +51 -31
  48. data/lib/action_view/routing_url_for.rb +12 -11
  49. data/lib/action_view/template.rb +102 -70
  50. data/lib/action_view/template/error.rb +21 -1
  51. data/lib/action_view/template/handlers.rb +27 -1
  52. data/lib/action_view/template/handlers/builder.rb +2 -2
  53. data/lib/action_view/template/handlers/erb.rb +17 -7
  54. data/lib/action_view/template/handlers/erb/erubi.rb +7 -3
  55. data/lib/action_view/template/handlers/html.rb +1 -1
  56. data/lib/action_view/template/handlers/raw.rb +2 -2
  57. data/lib/action_view/template/html.rb +14 -5
  58. data/lib/action_view/template/inline.rb +22 -0
  59. data/lib/action_view/template/raw_file.rb +28 -0
  60. data/lib/action_view/template/resolver.rb +136 -133
  61. data/lib/action_view/template/sources.rb +13 -0
  62. data/lib/action_view/template/sources/file.rb +17 -0
  63. data/lib/action_view/template/text.rb +5 -3
  64. data/lib/action_view/test_case.rb +1 -1
  65. data/lib/action_view/testing/resolvers.rb +33 -20
  66. data/lib/action_view/unbound_template.rb +32 -0
  67. data/lib/action_view/view_paths.rb +25 -1
  68. data/lib/assets/compiled/rails-ujs.js +29 -3
  69. metadata +25 -17
  70. data/lib/action_view/helpers/record_tag_helper.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26e44222b9ac065298a40d380e61ef50a66f3a7acdec237f4fb6716f993752f4
4
- data.tar.gz: 9335d0266925c66f02fb06b43f809510a6c3bdfb3bd3bbb6bbac53309be12f31
3
+ metadata.gz: 9777ca123ed323ec9aed53466704bca99ff4db362d77ff5bcfec5ce47e3cec44
4
+ data.tar.gz: d77556ede8e3975c64d15456b07287ed55dcef6a13a451c73d4b51a8c071011c
5
5
  SHA512:
6
- metadata.gz: b04d4c91be4d3813c1289c5d59d2899e477e26ee5498fff8df115ba5b95fd98237afd51ff402a857eae2d60a2ca532168e0abbc87bc7fde320f73bce9ee905d9
7
- data.tar.gz: 1c01d9cd9b72f33a29cb60dba0ffdd3c2b05569a931aad3811f195b339c512db1a32f0f2c13c546d1fde691b3c72546d3ae6da3f479dfe86b3bc519647d4698d
6
+ metadata.gz: fa8c970c1009cd6c8f816fa5837ad2ae8a200d8053797c9a2391a0558c9ceeefd5aacfc7459dee9f2aa67c9811b59a193abf3c5f53fa1d836e02e9a5e7e1fdcb
7
+ data.tar.gz: c3197571913396be49933f59f6ab5020bbe53d289dacb88e9630d8e583f0d27a3c445d99343d44a84f6e2dad33572217b66f03f73263974b3cf78363d1d92bf5
@@ -1,32 +1,51 @@
1
- ## Rails 5.2.4.1 (December 18, 2019) ##
1
+ ## Rails 6.0.1 (November 5, 2019) ##
2
2
 
3
- * No changes.
3
+ * UJS avoids `Element.closest()` for IE 9 compatibility.
4
4
 
5
+ *George Claghorn*
5
6
 
6
- ## Rails 5.2.4 (November 27, 2019) ##
7
7
 
8
- * Allow programmatic click events to trigger Rails UJS click handlers.
9
- Programmatic click events (eg. ones generated by `Rails.fire(link, "click")`) don't specify a button. These events were being incorrectly stopped by code meant to ignore scroll wheel and right clicks introduced in #34573.
8
+ ## Rails 6.0.0 (August 16, 2019) ##
10
9
 
11
- *Sudara Williams*
10
+ * ActionView::Helpers::SanitizeHelper: support rails-html-sanitizer 1.1.0.
12
11
 
12
+ *Juanito Fatas*
13
13
 
14
- ## Rails 5.2.3 (March 27, 2019) ##
15
14
 
16
- * Prevent non-primary mouse keys from triggering Rails UJS click handlers.
17
- Firefox fires click events even if the click was triggered by non-primary mouse keys such as right- or scroll-wheel-clicks.
18
- For example, right-clicking a link such as the one described below (with an underlying ajax request registered on click) should not cause that request to occur.
15
+ ## Rails 6.0.0.rc2 (July 22, 2019) ##
19
16
 
20
- ```
21
- <%= link_to 'Remote', remote_path, class: 'remote', remote: true, data: { type: :json } %>
22
- ```
17
+ * Fix `select_tag` so that it doesn't change `options` when `include_blank` is present.
23
18
 
24
- Fixes #34541
19
+ *Younes SERRAJ*
25
20
 
26
- *Wolfgang Hobmaier*
27
21
 
22
+ ## Rails 6.0.0.rc1 (April 24, 2019) ##
23
+
24
+ * Fix partial caching skips same item issue
25
+
26
+ If we render cached collection partials with repeated items, those repeated items
27
+ will get skipped. For example, if you have 5 identical items in your collection, Rails
28
+ only renders the first one when `cached` is set to true. But it should render all
29
+ 5 items instead.
30
+
31
+ Fixes #35114.
32
+
33
+ *Stan Lo*
28
34
 
29
- ## Rails 5.2.2.1 (March 11, 2019) ##
35
+ * Only clear ActionView cache in development on file changes
36
+
37
+ To speed up development mode, view caches are only cleared when files in
38
+ the view paths have changed. Applications which have implemented custom
39
+ `ActionView::Resolver` subclasses may need to add their own cache clearing.
40
+
41
+ *John Hawthorn*
42
+
43
+ * Fix `ActionView::FixtureResolver` so that it handles template variants correctly.
44
+
45
+ *Edward Rudd*
46
+
47
+
48
+ ## Rails 6.0.0.beta3 (March 11, 2019) ##
30
49
 
31
50
  * Only accept formats from registered mime types
32
51
 
@@ -40,22 +59,104 @@
40
59
  *John Hawthorn*, *Eileen M. Uchitelle*, *Aaron Patterson*
41
60
 
42
61
 
43
- ## Rails 5.2.2 (December 04, 2018) ##
62
+ ## Rails 6.0.0.beta2 (February 25, 2019) ##
63
+
64
+ * `ActionView::Template.finalize_compiled_template_methods` is deprecated with
65
+ no replacement.
66
+
67
+ *tenderlove*
68
+
69
+ * `config.action_view.finalize_compiled_template_methods` is deprecated with
70
+ no replacement.
71
+
72
+ *tenderlove*
73
+
74
+ * Ensure unique DOM IDs for collection inputs with float values.
75
+
76
+ Fixes #34974.
77
+
78
+ *Mark Edmondson*
79
+
80
+
81
+ ## Rails 6.0.0.beta1 (January 18, 2019) ##
82
+
83
+ * [Rename npm package](https://github.com/rails/rails/pull/34905) from
84
+ [`rails-ujs`](https://www.npmjs.com/package/rails-ujs) to
85
+ [`@rails/ujs`](https://www.npmjs.com/package/@rails/ujs).
86
+
87
+ *Javan Makhmali*
88
+
89
+ * Remove deprecated `image_alt` helper.
90
+
91
+ *Rafael Mendonça França*
92
+
93
+ * Fix the need of `#protect_against_forgery?` method defined in
94
+ `ActionView::Base` subclasses. This prevents the use of forms and buttons.
95
+
96
+ *Genadi Samokovarov*
97
+
98
+ * Fix UJS permanently showing disabled text in a[data-remote][data-disable-with] elements within forms.
99
+
100
+ Fixes #33889.
101
+
102
+ *Wolfgang Hobmaier*
103
+
104
+ * Prevent non-primary mouse keys from triggering Rails UJS click handlers.
105
+ Firefox fires click events even if the click was triggered by non-primary mouse keys such as right- or scroll-wheel-clicks.
106
+ For example, right-clicking a link such as the one described below (with an underlying ajax request registered on click) should not cause that request to occur.
107
+
108
+ ```
109
+ <%= link_to 'Remote', remote_path, class: 'remote', remote: true, data: { type: :json } %>
110
+ ```
111
+
112
+ Fixes #34541.
44
113
 
45
- * No changes.
114
+ *Wolfgang Hobmaier*
46
115
 
116
+ * Prevent `ActionView::TextHelper#word_wrap` from unexpectedly stripping white space from the _left_ side of lines.
47
117
 
48
- ## Rails 5.2.1.1 (November 27, 2018) ##
118
+ For example, given input like this:
49
119
 
50
- * No changes.
120
+ ```
121
+ This is a paragraph with an initial indent,
122
+ followed by additional lines that are not indented,
123
+ and finally terminated with a blockquote:
124
+ "A pithy saying"
125
+ ```
126
+
127
+ Calling `word_wrap` should not trim the indents on the first and last lines.
128
+
129
+ Fixes #34487.
51
130
 
131
+ *Lyle Mullican*
52
132
 
53
- ## Rails 5.2.1 (August 07, 2018) ##
133
+ * Add allocations to template rendering instrumentation.
54
134
 
55
- * Fix leak of `skip_default_ids` and `allow_method_names_outside_object` options
56
- to HTML attributes.
135
+ Adds the allocations for template and partial rendering to the server output on render.
57
136
 
58
- *Yurii Cherniavskyi*
137
+ ```
138
+ Rendered posts/_form.html.erb (Duration: 7.1ms | Allocations: 6004)
139
+ Rendered posts/new.html.erb within layouts/application (Duration: 8.3ms | Allocations: 6654)
140
+ Completed 200 OK in 858ms (Views: 848.4ms | ActiveRecord: 0.4ms | Allocations: 1539564)
141
+ ```
142
+
143
+ *Eileen M. Uchitelle*, *Aaron Patterson*
144
+
145
+ * Respect the `only_path` option passed to `url_for` when the options are passed in as an array
146
+
147
+ Fixes #33237.
148
+
149
+ *Joel Ambass*
150
+
151
+ * Deprecate calling private model methods from view helpers.
152
+
153
+ For example, in methods like `options_from_collection_for_select`
154
+ and `collection_select` it is possible to call private methods from
155
+ the objects used.
156
+
157
+ Fixes #33546.
158
+
159
+ *Ana María Martínez Gómez*
59
160
 
60
161
  * Fix issue with `button_to`'s `to_form_params`
61
162
 
@@ -68,97 +169,110 @@
68
169
 
69
170
  *Georgi Georgiev*
70
171
 
71
- * Fix JavaScript views rendering does not work with Firefox when using
72
- Content Security Policy.
73
-
74
- Fixes #32577.
172
+ * Mark arrays of translations as trusted safe by using the `_html` suffix.
75
173
 
76
- *Yuji Yaginuma*
174
+ Example:
77
175
 
78
- * Add the `nonce: true` option for `javascript_include_tag` helper to
79
- support automatic nonce generation for Content Security Policy.
80
- Works the same way as `javascript_tag nonce: true` does.
81
-
82
- *Yaroslav Markin*
176
+ en:
177
+ foo_html:
178
+ - "One"
179
+ - "<strong>Two</strong>"
180
+ - "Three &#128075; &#128578;"
83
181
 
182
+ *Juan Broullon*
84
183
 
85
- ## Rails 5.2.0 (April 09, 2018) ##
184
+ * Add `year_format` option to date_select tag. This option makes it possible to customize year
185
+ names. Lambda should be passed to use this option.
86
186
 
87
- * Pass the `:skip_pipeline` option in `image_submit_tag` when calling `path_to_image`.
187
+ Example:
88
188
 
89
- Fixes #32248.
189
+ date_select('user_birthday', '', start_year: 1998, end_year: 2000, year_format: ->year { "Heisei #{year - 1988}" })
90
190
 
91
- *Andrew White*
191
+ The HTML produced:
92
192
 
93
- * Allow the use of callable objects as group methods for grouped selects.
193
+ <select id="user_birthday__1i" name="user_birthday[(1i)]">
194
+ <option value="1998">Heisei 10</option>
195
+ <option value="1999">Heisei 11</option>
196
+ <option value="2000">Heisei 12</option>
197
+ </select>
198
+ /* The rest is omitted */
94
199
 
95
- Until now, the `option_groups_from_collection_for_select` method was only able to
96
- handle method names as `group_method` and `group_label_method` parameters,
97
- it is now able to receive procs and other callable objects too.
200
+ *Koki Ryu*
98
201
 
99
- *Jérémie Bonal*
100
-
101
- * Add `preload_link_tag` helper.
202
+ * Fix JavaScript views rendering does not work with Firefox when using
203
+ Content Security Policy.
102
204
 
103
- This helper that allows to the browser to initiate early fetch of resources
104
- (different to the specified in `javascript_include_tag` and `stylesheet_link_tag`).
105
- Additionally, this sends Early Hints if supported by browser.
205
+ Fixes #32577.
106
206
 
107
- *Guillermo Iguaran*
207
+ *Yuji Yaginuma*
108
208
 
109
- * Change `form_with` to generates ids by default.
209
+ * Add the `nonce: true` option for `javascript_include_tag` helper to
210
+ support automatic nonce generation for Content Security Policy.
211
+ Works the same way as `javascript_tag nonce: true` does.
110
212
 
111
- When `form_with` was introduced we disabled the automatic generation of ids
112
- that was enabled in `form_for`. This usually is not an good idea since labels don't work
113
- when the input doesn't have an id and it made harder to test with Capybara.
213
+ *Yaroslav Markin*
114
214
 
115
- You can still disable the automatic generation of ids setting `config.action_view.form_with_generates_ids`
116
- to `false.`
215
+ * Remove `ActionView::Helpers::RecordTagHelper`.
117
216
 
118
- *Nick Pezza*
217
+ *Yoshiyuki Hirano*
119
218
 
120
- * Fix issues with `field_error_proc` wrapping `optgroup` and select divider `option`.
219
+ * Disable `ActionView::Template` finalizers in test environment.
121
220
 
122
- Fixes #31088
221
+ Template finalization can be expensive in large view test suites.
222
+ Add a configuration option,
223
+ `action_view.finalize_compiled_template_methods`, and turn it off in
224
+ the test environment.
123
225
 
124
- *Matthias Neumayr*
226
+ *Simon Coffey*
125
227
 
126
- * Remove deprecated Erubis ERB handler.
228
+ * Extract the `confirm` call in its own, overridable method in `rails_ujs`.
127
229
 
128
- *Rafael Mendonça França*
230
+ Example:
129
231
 
130
- * Remove default `alt` text generation.
232
+ Rails.confirm = function(message, element) {
233
+ return (my_bootstrap_modal_confirm(message));
234
+ }
131
235
 
132
- Fixes #30096
236
+ *Mathieu Mahé*
133
237
 
134
- *Cameron Cundiff*
238
+ * Enable select tag helper to mark `prompt` option as `selected` and/or `disabled` for `required`
239
+ field.
135
240
 
136
- * Add `srcset` option to `image_tag` helper.
241
+ Example:
137
242
 
138
- *Roberto Miranda*
243
+ select :post,
244
+ :category,
245
+ ["lifestyle", "programming", "spiritual"],
246
+ { selected: "", disabled: "", prompt: "Choose one" },
247
+ { required: true }
139
248
 
140
- * Fix issues with scopes and engine on `current_page?` method.
249
+ Placeholder option would be selected and disabled.
141
250
 
142
- Fixes #29401.
251
+ The HTML produced:
143
252
 
144
- *Nikita Savrov*
253
+ <select required="required" name="post[category]" id="post_category">
254
+ <option disabled="disabled" selected="selected" value="">Choose one</option>
255
+ <option value="lifestyle">lifestyle</option>
256
+ <option value="programming">programming</option>
257
+ <option value="spiritual">spiritual</option></select>
145
258
 
146
- * Generate field ids in `collection_check_boxes` and `collection_radio_buttons`.
259
+ *Sergey Prikhodko*
147
260
 
148
- This makes sure that the labels are linked up with the fields.
261
+ * Don't enforce UTF-8 by default.
149
262
 
150
- Fixes #29014.
263
+ With the disabling of TLS 1.0 by most major websites, continuing to run
264
+ IE8 or lower becomes increasingly difficult so default to not enforcing
265
+ UTF-8 encoding as it's not relevant to other browsers.
151
266
 
152
- *Yuji Yaginuma*
267
+ *Andrew White*
153
268
 
154
- * Add `:json` type to `auto_discovery_link_tag` to support [JSON Feeds](https://jsonfeed.org/version/1).
269
+ * Change translation key of `submit_tag` from `module_name_class_name` to `module_name/class_name`.
155
270
 
156
- *Mike Gunderloy*
271
+ *Rui Onodera*
157
272
 
158
- * Update `distance_of_time_in_words` helper to display better error messages
159
- for bad input.
273
+ * Rails 6 requires Ruby 2.5.0 or newer.
160
274
 
161
- *Jay Hayes*
275
+ *Jeremy Daer*, *Kasper Timm Hansen*
162
276
 
163
277
 
164
- Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/actionview/CHANGELOG.md) for previous changes.
278
+ Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/actionview/CHANGELOG.md) for previous changes.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2004-2018 David Heinemeier Hansson
1
+ Copyright (c) 2004-2019 David Heinemeier Hansson
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -5,6 +5,8 @@ view helpers that assist when building HTML forms, Atom feeds and more.
5
5
  Template formats that Action View handles are ERB (embedded Ruby, typically
6
6
  used to inline short Ruby snippets inside HTML), and XML Builder.
7
7
 
8
+ You can read more about Action View in the {Action View Overview}[https://edgeguides.rubyonrails.org/action_view_overview.html] guide.
9
+
8
10
  == Download and installation
9
11
 
10
12
  The latest version of Action View can be installed with RubyGems:
@@ -13,7 +15,7 @@ The latest version of Action View can be installed with RubyGems:
13
15
 
14
16
  Source code can be downloaded as part of the Rails project on GitHub:
15
17
 
16
- * https://github.com/rails/rails/tree/5-2-stable/actionview
18
+ * https://github.com/rails/rails/tree/master/actionview
17
19
 
18
20
 
19
21
  == License
@@ -27,7 +29,7 @@ Action View is released under the MIT license:
27
29
 
28
30
  API documentation is at
29
31
 
30
- * http://api.rubyonrails.org
32
+ * https://api.rubyonrails.org
31
33
 
32
34
  Bug reports for the Ruby on Rails project can be filed here:
33
35
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  #--
4
- # Copyright (c) 2004-2018 David Heinemeier Hansson
4
+ # Copyright (c) 2004-2019 David Heinemeier Hansson
5
5
  #
6
6
  # Permission is hereby granted, free of charge, to any person obtaining
7
7
  # a copy of this software and associated documentation files (the
@@ -35,7 +35,6 @@ module ActionView
35
35
  eager_autoload do
36
36
  autoload :Base
37
37
  autoload :Context
38
- autoload :CompiledTemplates, "action_view/context"
39
38
  autoload :Digestor
40
39
  autoload :Helpers
41
40
  autoload :LookupContext
@@ -45,6 +44,7 @@ module ActionView
45
44
  autoload :Rendering
46
45
  autoload :RoutingUrlFor
47
46
  autoload :Template
47
+ autoload :UnboundTemplate
48
48
  autoload :ViewPaths
49
49
 
50
50
  autoload_under "renderer" do
@@ -81,6 +81,7 @@ module ActionView
81
81
  end
82
82
  end
83
83
 
84
+ autoload :CacheExpiry
84
85
  autoload :TestCase
85
86
 
86
87
  def self.eager_load!
@@ -3,6 +3,7 @@
3
3
  require "active_support/core_ext/module/attr_internal"
4
4
  require "active_support/core_ext/module/attribute_accessors"
5
5
  require "active_support/ordered_options"
6
+ require "active_support/deprecation"
6
7
  require "action_view/log_subscriber"
7
8
  require "action_view/helpers"
8
9
  require "action_view/context"
@@ -179,37 +180,133 @@ module ActionView #:nodoc:
179
180
  def xss_safe? #:nodoc:
180
181
  true
181
182
  end
183
+
184
+ def with_empty_template_cache # :nodoc:
185
+ subclass = Class.new(self) {
186
+ # We can't implement these as self.class because subclasses will
187
+ # share the same template cache as superclasses, so "changed?" won't work
188
+ # correctly.
189
+ define_method(:compiled_method_container) { subclass }
190
+ define_singleton_method(:compiled_method_container) { subclass }
191
+ }
192
+ end
193
+
194
+ def changed?(other) # :nodoc:
195
+ compiled_method_container != other.compiled_method_container
196
+ end
182
197
  end
183
198
 
184
- attr_accessor :view_renderer
199
+ attr_reader :view_renderer, :lookup_context
185
200
  attr_internal :config, :assigns
186
201
 
187
- delegate :lookup_context, to: :view_renderer
188
202
  delegate :formats, :formats=, :locale, :locale=, :view_paths, :view_paths=, to: :lookup_context
189
203
 
190
204
  def assign(new_assigns) # :nodoc:
191
205
  @_assigns = new_assigns.each { |key, value| instance_variable_set("@#{key}", value) }
192
206
  end
193
207
 
194
- def initialize(context = nil, assigns = {}, controller = nil, formats = nil) #:nodoc:
208
+ # :stopdoc:
209
+
210
+ def self.build_lookup_context(context)
211
+ case context
212
+ when ActionView::Renderer
213
+ context.lookup_context
214
+ when Array
215
+ ActionView::LookupContext.new(context)
216
+ when ActionView::PathSet
217
+ ActionView::LookupContext.new(context)
218
+ when nil
219
+ ActionView::LookupContext.new([])
220
+ else
221
+ raise NotImplementedError, context.class.name
222
+ end
223
+ end
224
+
225
+ def self.empty
226
+ with_view_paths([])
227
+ end
228
+
229
+ def self.with_view_paths(view_paths, assigns = {}, controller = nil)
230
+ with_context ActionView::LookupContext.new(view_paths), assigns, controller
231
+ end
232
+
233
+ def self.with_context(context, assigns = {}, controller = nil)
234
+ new context, assigns, controller
235
+ end
236
+
237
+ NULL = Object.new
238
+
239
+ # :startdoc:
240
+
241
+ def initialize(lookup_context = nil, assigns = {}, controller = nil, formats = NULL) #:nodoc:
195
242
  @_config = ActiveSupport::InheritableOptions.new
196
243
 
197
- if context.is_a?(ActionView::Renderer)
198
- @view_renderer = context
244
+ unless formats == NULL
245
+ ActiveSupport::Deprecation.warn <<~eowarn.squish
246
+ Passing formats to ActionView::Base.new is deprecated
247
+ eowarn
248
+ end
249
+
250
+ case lookup_context
251
+ when ActionView::LookupContext
252
+ @lookup_context = lookup_context
199
253
  else
200
- lookup_context = context.is_a?(ActionView::LookupContext) ?
201
- context : ActionView::LookupContext.new(context)
202
- lookup_context.formats = formats if formats
203
- lookup_context.prefixes = controller._prefixes if controller
204
- @view_renderer = ActionView::Renderer.new(lookup_context)
254
+ ActiveSupport::Deprecation.warn <<~eowarn.squish
255
+ ActionView::Base instances should be constructed with a lookup context,
256
+ assignments, and a controller.
257
+ eowarn
258
+ @lookup_context = self.class.build_lookup_context(lookup_context)
205
259
  end
206
260
 
261
+ @view_renderer = ActionView::Renderer.new @lookup_context
262
+ @current_template = nil
263
+
207
264
  @cache_hit = {}
208
265
  assign(assigns)
209
266
  assign_controller(controller)
210
267
  _prepare_context
211
268
  end
212
269
 
270
+ def _run(method, template, locals, buffer, &block)
271
+ _old_output_buffer, _old_virtual_path, _old_template = @output_buffer, @virtual_path, @current_template
272
+ @current_template = template
273
+ @output_buffer = buffer
274
+ send(method, locals, buffer, &block)
275
+ ensure
276
+ @output_buffer, @virtual_path, @current_template = _old_output_buffer, _old_virtual_path, _old_template
277
+ end
278
+
279
+ def compiled_method_container
280
+ if self.class == ActionView::Base
281
+ ActiveSupport::Deprecation.warn <<~eowarn.squish
282
+ ActionView::Base instances must implement `compiled_method_container`
283
+ or use the class method `with_empty_template_cache` for constructing
284
+ an ActionView::Base instances that has an empty cache.
285
+ eowarn
286
+ end
287
+
288
+ self.class
289
+ end
290
+
291
+ def in_rendering_context(options)
292
+ old_view_renderer = @view_renderer
293
+ old_lookup_context = @lookup_context
294
+
295
+ if !lookup_context.html_fallback_for_js && options[:formats]
296
+ formats = Array(options[:formats])
297
+ if formats == [:js]
298
+ formats << :html
299
+ end
300
+ @lookup_context = lookup_context.with_prepended_formats(formats)
301
+ @view_renderer = ActionView::Renderer.new @lookup_context
302
+ end
303
+
304
+ yield @view_renderer
305
+ ensure
306
+ @view_renderer = old_view_renderer
307
+ @lookup_context = old_lookup_context
308
+ end
309
+
213
310
  ActiveSupport.run_load_hooks(:action_view, self)
214
311
  end
215
312
  end