actionpack 3.2.22.5 → 4.0.0.beta1

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

Potentially problematic release.


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

Files changed (265) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +641 -418
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +5 -288
  5. data/lib/abstract_controller.rb +1 -8
  6. data/lib/abstract_controller/asset_paths.rb +2 -2
  7. data/lib/abstract_controller/base.rb +39 -37
  8. data/lib/abstract_controller/callbacks.rb +101 -82
  9. data/lib/abstract_controller/collector.rb +7 -3
  10. data/lib/abstract_controller/helpers.rb +23 -11
  11. data/lib/abstract_controller/layouts.rb +68 -73
  12. data/lib/abstract_controller/logger.rb +1 -2
  13. data/lib/abstract_controller/rendering.rb +22 -13
  14. data/lib/abstract_controller/translation.rb +16 -1
  15. data/lib/abstract_controller/url_for.rb +6 -6
  16. data/lib/abstract_controller/view_paths.rb +1 -1
  17. data/lib/action_controller.rb +15 -6
  18. data/lib/action_controller/base.rb +46 -22
  19. data/lib/action_controller/caching.rb +46 -33
  20. data/lib/action_controller/caching/fragments.rb +23 -53
  21. data/lib/action_controller/deprecated.rb +5 -1
  22. data/lib/action_controller/deprecated/integration_test.rb +3 -0
  23. data/lib/action_controller/log_subscriber.rb +11 -8
  24. data/lib/action_controller/metal.rb +16 -30
  25. data/lib/action_controller/metal/conditional_get.rb +76 -32
  26. data/lib/action_controller/metal/data_streaming.rb +20 -26
  27. data/lib/action_controller/metal/exceptions.rb +19 -6
  28. data/lib/action_controller/metal/flash.rb +24 -9
  29. data/lib/action_controller/metal/force_ssl.rb +32 -9
  30. data/lib/action_controller/metal/head.rb +25 -4
  31. data/lib/action_controller/metal/helpers.rb +6 -9
  32. data/lib/action_controller/metal/hide_actions.rb +1 -2
  33. data/lib/action_controller/metal/http_authentication.rb +105 -87
  34. data/lib/action_controller/metal/implicit_render.rb +1 -1
  35. data/lib/action_controller/metal/instrumentation.rb +2 -1
  36. data/lib/action_controller/metal/live.rb +141 -0
  37. data/lib/action_controller/metal/mime_responds.rb +161 -47
  38. data/lib/action_controller/metal/params_wrapper.rb +112 -74
  39. data/lib/action_controller/metal/rack_delegation.rb +9 -3
  40. data/lib/action_controller/metal/redirecting.rb +15 -20
  41. data/lib/action_controller/metal/renderers.rb +11 -9
  42. data/lib/action_controller/metal/rendering.rb +8 -0
  43. data/lib/action_controller/metal/request_forgery_protection.rb +112 -19
  44. data/lib/action_controller/metal/responder.rb +20 -19
  45. data/lib/action_controller/metal/streaming.rb +12 -18
  46. data/lib/action_controller/metal/strong_parameters.rb +516 -0
  47. data/lib/action_controller/metal/testing.rb +13 -18
  48. data/lib/action_controller/metal/url_for.rb +27 -25
  49. data/lib/action_controller/model_naming.rb +12 -0
  50. data/lib/action_controller/railtie.rb +33 -17
  51. data/lib/action_controller/railties/helpers.rb +22 -0
  52. data/lib/action_controller/record_identifier.rb +18 -72
  53. data/lib/action_controller/test_case.rb +215 -123
  54. data/lib/action_controller/vendor/html-scanner.rb +4 -19
  55. data/lib/action_dispatch.rb +27 -19
  56. data/lib/action_dispatch/http/cache.rb +63 -11
  57. data/lib/action_dispatch/http/filter_parameters.rb +18 -8
  58. data/lib/action_dispatch/http/filter_redirect.rb +37 -0
  59. data/lib/action_dispatch/http/headers.rb +27 -19
  60. data/lib/action_dispatch/http/mime_negotiation.rb +25 -2
  61. data/lib/action_dispatch/http/mime_type.rb +145 -113
  62. data/lib/action_dispatch/http/mime_types.rb +1 -1
  63. data/lib/action_dispatch/http/parameter_filter.rb +44 -46
  64. data/lib/action_dispatch/http/parameters.rb +12 -5
  65. data/lib/action_dispatch/http/rack_cache.rb +2 -3
  66. data/lib/action_dispatch/http/request.rb +49 -18
  67. data/lib/action_dispatch/http/response.rb +129 -35
  68. data/lib/action_dispatch/http/upload.rb +60 -17
  69. data/lib/action_dispatch/http/url.rb +53 -31
  70. data/lib/action_dispatch/journey.rb +5 -0
  71. data/lib/action_dispatch/journey/backwards.rb +5 -0
  72. data/lib/action_dispatch/journey/formatter.rb +146 -0
  73. data/lib/action_dispatch/journey/gtg/builder.rb +162 -0
  74. data/lib/action_dispatch/journey/gtg/simulator.rb +44 -0
  75. data/lib/action_dispatch/journey/gtg/transition_table.rb +156 -0
  76. data/lib/action_dispatch/journey/nfa/builder.rb +76 -0
  77. data/lib/action_dispatch/journey/nfa/dot.rb +36 -0
  78. data/lib/action_dispatch/journey/nfa/simulator.rb +47 -0
  79. data/lib/action_dispatch/journey/nfa/transition_table.rb +163 -0
  80. data/lib/action_dispatch/journey/nodes/node.rb +124 -0
  81. data/lib/action_dispatch/journey/parser.rb +206 -0
  82. data/lib/action_dispatch/journey/parser.y +47 -0
  83. data/lib/action_dispatch/journey/parser_extras.rb +23 -0
  84. data/lib/action_dispatch/journey/path/pattern.rb +196 -0
  85. data/lib/action_dispatch/journey/route.rb +116 -0
  86. data/lib/action_dispatch/journey/router.rb +164 -0
  87. data/lib/action_dispatch/journey/router/strexp.rb +24 -0
  88. data/lib/action_dispatch/journey/router/utils.rb +54 -0
  89. data/lib/action_dispatch/journey/routes.rb +75 -0
  90. data/lib/action_dispatch/journey/scanner.rb +61 -0
  91. data/lib/action_dispatch/journey/visitors.rb +189 -0
  92. data/lib/action_dispatch/journey/visualizer/fsm.css +34 -0
  93. data/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
  94. data/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
  95. data/lib/action_dispatch/middleware/callbacks.rb +9 -4
  96. data/lib/action_dispatch/middleware/cookies.rb +168 -57
  97. data/lib/action_dispatch/middleware/debug_exceptions.rb +26 -17
  98. data/lib/action_dispatch/middleware/exception_wrapper.rb +27 -3
  99. data/lib/action_dispatch/middleware/flash.rb +58 -58
  100. data/lib/action_dispatch/middleware/params_parser.rb +14 -29
  101. data/lib/action_dispatch/middleware/public_exceptions.rb +31 -14
  102. data/lib/action_dispatch/middleware/reloader.rb +6 -6
  103. data/lib/action_dispatch/middleware/remote_ip.rb +145 -39
  104. data/lib/action_dispatch/middleware/request_id.rb +2 -6
  105. data/lib/action_dispatch/middleware/session/abstract_store.rb +22 -20
  106. data/lib/action_dispatch/middleware/session/cache_store.rb +3 -3
  107. data/lib/action_dispatch/middleware/session/cookie_store.rb +81 -7
  108. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +8 -3
  109. data/lib/action_dispatch/middleware/show_exceptions.rb +12 -45
  110. data/lib/action_dispatch/middleware/ssl.rb +70 -0
  111. data/lib/action_dispatch/middleware/stack.rb +6 -1
  112. data/lib/action_dispatch/middleware/static.rb +5 -24
  113. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb +14 -11
  114. data/lib/action_dispatch/middleware/templates/rescues/_source.erb +25 -0
  115. data/lib/action_dispatch/middleware/templates/rescues/_trace.erb +3 -3
  116. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +15 -9
  117. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +121 -5
  118. data/lib/action_dispatch/middleware/templates/rescues/missing_template.erb +7 -2
  119. data/lib/action_dispatch/middleware/templates/rescues/routing_error.erb +30 -15
  120. data/lib/action_dispatch/middleware/templates/rescues/template_error.erb +39 -13
  121. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb +6 -2
  122. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
  123. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +144 -0
  124. data/lib/action_dispatch/railtie.rb +16 -6
  125. data/lib/action_dispatch/request/session.rb +181 -0
  126. data/lib/action_dispatch/routing.rb +41 -40
  127. data/lib/action_dispatch/routing/inspector.rb +240 -0
  128. data/lib/action_dispatch/routing/mapper.rb +501 -273
  129. data/lib/action_dispatch/routing/polymorphic_routes.rb +16 -20
  130. data/lib/action_dispatch/routing/redirection.rb +46 -29
  131. data/lib/action_dispatch/routing/route_set.rb +203 -164
  132. data/lib/action_dispatch/routing/routes_proxy.rb +2 -0
  133. data/lib/action_dispatch/routing/url_for.rb +48 -33
  134. data/lib/action_dispatch/testing/assertions/dom.rb +3 -13
  135. data/lib/action_dispatch/testing/assertions/response.rb +32 -40
  136. data/lib/action_dispatch/testing/assertions/routing.rb +40 -39
  137. data/lib/action_dispatch/testing/assertions/selector.rb +15 -20
  138. data/lib/action_dispatch/testing/assertions/tag.rb +20 -23
  139. data/lib/action_dispatch/testing/integration.rb +41 -22
  140. data/lib/action_dispatch/testing/test_process.rb +9 -6
  141. data/lib/action_dispatch/testing/test_request.rb +7 -3
  142. data/lib/action_pack.rb +1 -1
  143. data/lib/action_pack/version.rb +4 -4
  144. data/lib/action_view.rb +17 -8
  145. data/lib/action_view/base.rb +15 -34
  146. data/lib/action_view/buffers.rb +1 -1
  147. data/lib/action_view/context.rb +4 -4
  148. data/lib/action_view/dependency_tracker.rb +91 -0
  149. data/lib/action_view/digestor.rb +85 -0
  150. data/lib/action_view/flows.rb +1 -4
  151. data/lib/action_view/helpers.rb +2 -4
  152. data/lib/action_view/helpers/active_model_helper.rb +3 -4
  153. data/lib/action_view/helpers/asset_tag_helper.rb +211 -353
  154. data/lib/action_view/helpers/asset_url_helper.rb +354 -0
  155. data/lib/action_view/helpers/atom_feed_helper.rb +13 -10
  156. data/lib/action_view/helpers/cache_helper.rb +150 -18
  157. data/lib/action_view/helpers/capture_helper.rb +42 -29
  158. data/lib/action_view/helpers/csrf_helper.rb +0 -2
  159. data/lib/action_view/helpers/date_helper.rb +268 -247
  160. data/lib/action_view/helpers/debug_helper.rb +10 -11
  161. data/lib/action_view/helpers/form_helper.rb +904 -547
  162. data/lib/action_view/helpers/form_options_helper.rb +341 -166
  163. data/lib/action_view/helpers/form_tag_helper.rb +188 -88
  164. data/lib/action_view/helpers/javascript_helper.rb +23 -16
  165. data/lib/action_view/helpers/number_helper.rb +148 -354
  166. data/lib/action_view/helpers/output_safety_helper.rb +3 -3
  167. data/lib/action_view/helpers/record_tag_helper.rb +17 -22
  168. data/lib/action_view/helpers/rendering_helper.rb +2 -4
  169. data/lib/action_view/helpers/sanitize_helper.rb +3 -6
  170. data/lib/action_view/helpers/tag_helper.rb +43 -37
  171. data/lib/action_view/helpers/tags.rb +39 -0
  172. data/lib/action_view/helpers/tags/base.rb +148 -0
  173. data/lib/action_view/helpers/tags/check_box.rb +64 -0
  174. data/lib/action_view/helpers/tags/checkable.rb +16 -0
  175. data/lib/action_view/helpers/tags/collection_check_boxes.rb +43 -0
  176. data/lib/action_view/helpers/tags/collection_helpers.rb +83 -0
  177. data/lib/action_view/helpers/tags/collection_radio_buttons.rb +36 -0
  178. data/lib/action_view/helpers/tags/collection_select.rb +28 -0
  179. data/lib/action_view/helpers/tags/color_field.rb +25 -0
  180. data/lib/action_view/helpers/tags/date_field.rb +13 -0
  181. data/lib/action_view/helpers/tags/date_select.rb +72 -0
  182. data/lib/action_view/helpers/tags/datetime_field.rb +22 -0
  183. data/lib/action_view/helpers/tags/datetime_local_field.rb +19 -0
  184. data/lib/action_view/helpers/tags/datetime_select.rb +8 -0
  185. data/lib/action_view/helpers/tags/email_field.rb +8 -0
  186. data/lib/action_view/helpers/tags/file_field.rb +8 -0
  187. data/lib/action_view/helpers/tags/grouped_collection_select.rb +29 -0
  188. data/lib/action_view/helpers/tags/hidden_field.rb +8 -0
  189. data/lib/action_view/helpers/tags/label.rb +65 -0
  190. data/lib/action_view/helpers/tags/month_field.rb +13 -0
  191. data/lib/action_view/helpers/tags/number_field.rb +18 -0
  192. data/lib/action_view/helpers/tags/password_field.rb +12 -0
  193. data/lib/action_view/helpers/tags/radio_button.rb +31 -0
  194. data/lib/action_view/helpers/tags/range_field.rb +8 -0
  195. data/lib/action_view/helpers/tags/search_field.rb +24 -0
  196. data/lib/action_view/helpers/tags/select.rb +41 -0
  197. data/lib/action_view/helpers/tags/tel_field.rb +8 -0
  198. data/lib/action_view/helpers/tags/text_area.rb +18 -0
  199. data/lib/action_view/helpers/tags/text_field.rb +29 -0
  200. data/lib/action_view/helpers/tags/time_field.rb +13 -0
  201. data/lib/action_view/helpers/tags/time_select.rb +8 -0
  202. data/lib/action_view/helpers/tags/time_zone_select.rb +20 -0
  203. data/lib/action_view/helpers/tags/url_field.rb +8 -0
  204. data/lib/action_view/helpers/tags/week_field.rb +13 -0
  205. data/lib/action_view/helpers/text_helper.rb +126 -113
  206. data/lib/action_view/helpers/translation_helper.rb +32 -16
  207. data/lib/action_view/helpers/url_helper.rb +200 -271
  208. data/lib/action_view/locale/en.yml +1 -105
  209. data/lib/action_view/log_subscriber.rb +6 -4
  210. data/lib/action_view/lookup_context.rb +15 -39
  211. data/lib/action_view/model_naming.rb +12 -0
  212. data/lib/action_view/path_set.rb +9 -39
  213. data/lib/action_view/railtie.rb +6 -22
  214. data/lib/action_view/record_identifier.rb +84 -0
  215. data/lib/action_view/renderer/abstract_renderer.rb +10 -19
  216. data/lib/action_view/renderer/partial_renderer.rb +144 -81
  217. data/lib/action_view/renderer/renderer.rb +2 -19
  218. data/lib/action_view/renderer/streaming_template_renderer.rb +2 -5
  219. data/lib/action_view/renderer/template_renderer.rb +14 -13
  220. data/lib/action_view/routing_url_for.rb +107 -0
  221. data/lib/action_view/template.rb +22 -21
  222. data/lib/action_view/template/error.rb +22 -12
  223. data/lib/action_view/template/handlers.rb +12 -9
  224. data/lib/action_view/template/handlers/builder.rb +1 -1
  225. data/lib/action_view/template/handlers/erb.rb +11 -16
  226. data/lib/action_view/template/handlers/raw.rb +11 -0
  227. data/lib/action_view/template/resolver.rb +111 -83
  228. data/lib/action_view/template/text.rb +12 -8
  229. data/lib/action_view/template/types.rb +57 -0
  230. data/lib/action_view/test_case.rb +66 -43
  231. data/lib/action_view/testing/resolvers.rb +3 -2
  232. data/lib/action_view/vendor/html-scanner.rb +20 -0
  233. data/lib/{action_controller → action_view}/vendor/html-scanner/html/document.rb +0 -0
  234. data/lib/{action_controller → action_view}/vendor/html-scanner/html/node.rb +12 -12
  235. data/lib/{action_controller → action_view}/vendor/html-scanner/html/sanitizer.rb +18 -7
  236. data/lib/{action_controller → action_view}/vendor/html-scanner/html/selector.rb +1 -1
  237. data/lib/{action_controller → action_view}/vendor/html-scanner/html/tokenizer.rb +1 -1
  238. data/lib/{action_controller → action_view}/vendor/html-scanner/html/version.rb +0 -0
  239. metadata +135 -125
  240. data/lib/action_controller/caching/actions.rb +0 -185
  241. data/lib/action_controller/caching/pages.rb +0 -187
  242. data/lib/action_controller/caching/sweeping.rb +0 -97
  243. data/lib/action_controller/deprecated/performance_test.rb +0 -1
  244. data/lib/action_controller/metal/compatibility.rb +0 -65
  245. data/lib/action_controller/metal/session_management.rb +0 -14
  246. data/lib/action_controller/railties/paths.rb +0 -25
  247. data/lib/action_dispatch/middleware/best_standards_support.rb +0 -30
  248. data/lib/action_dispatch/middleware/body_proxy.rb +0 -30
  249. data/lib/action_dispatch/middleware/head.rb +0 -18
  250. data/lib/action_dispatch/middleware/rescue.rb +0 -26
  251. data/lib/action_dispatch/testing/performance_test.rb +0 -10
  252. data/lib/action_view/asset_paths.rb +0 -142
  253. data/lib/action_view/helpers/asset_paths.rb +0 -7
  254. data/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb +0 -146
  255. data/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb +0 -93
  256. data/lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb +0 -193
  257. data/lib/action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers.rb +0 -148
  258. data/lib/sprockets/assets.rake +0 -99
  259. data/lib/sprockets/bootstrap.rb +0 -37
  260. data/lib/sprockets/compressors.rb +0 -83
  261. data/lib/sprockets/helpers.rb +0 -6
  262. data/lib/sprockets/helpers/isolated_helper.rb +0 -13
  263. data/lib/sprockets/helpers/rails_helper.rb +0 -182
  264. data/lib/sprockets/railtie.rb +0 -62
  265. data/lib/sprockets/static_compiler.rb +0 -56
@@ -1,93 +0,0 @@
1
- require 'thread'
2
- require 'active_support/core_ext/file'
3
- require 'active_support/core_ext/module/attribute_accessors'
4
-
5
- module ActionView
6
- module Helpers
7
- module AssetTagHelper
8
-
9
- class AssetPaths < ::ActionView::AssetPaths #:nodoc:
10
- # You can enable or disable the asset tag ids cache.
11
- # With the cache enabled, the asset tag helper methods will make fewer
12
- # expensive file system calls (the default implementation checks the file
13
- # system timestamp). However this prevents you from modifying any asset
14
- # files while the server is running.
15
- #
16
- # ActionView::Helpers::AssetTagHelper::AssetPaths.cache_asset_ids = false
17
- mattr_accessor :cache_asset_ids
18
-
19
- # Add or change an asset id in the asset id cache. This can be used
20
- # for SASS on Heroku.
21
- # :api: public
22
- def add_to_asset_ids_cache(source, asset_id)
23
- self.asset_ids_cache_guard.synchronize do
24
- self.asset_ids_cache[source] = asset_id
25
- end
26
- end
27
-
28
- private
29
-
30
- def rewrite_extension(source, dir, ext)
31
- source_ext = File.extname(source)
32
-
33
- source_with_ext = if source_ext.empty?
34
- "#{source}.#{ext}"
35
- elsif ext != source_ext[1..-1]
36
- with_ext = "#{source}.#{ext}"
37
- with_ext if File.exist?(File.join(config.assets_dir, dir, with_ext))
38
- end
39
-
40
- source_with_ext || source
41
- end
42
-
43
- # Break out the asset path rewrite in case plugins wish to put the asset id
44
- # someplace other than the query string.
45
- def rewrite_asset_path(source, dir, options = nil)
46
- source = "/#{dir}/#{source}" unless source[0] == ?/
47
- path = config.asset_path
48
-
49
- if path && path.respond_to?(:call)
50
- return path.call(source)
51
- elsif path && path.is_a?(String)
52
- return path % [source]
53
- end
54
-
55
- asset_id = rails_asset_id(source)
56
- if asset_id.empty?
57
- source
58
- else
59
- "#{source}?#{asset_id}"
60
- end
61
- end
62
-
63
- mattr_accessor :asset_ids_cache
64
- self.asset_ids_cache = {}
65
-
66
- mattr_accessor :asset_ids_cache_guard
67
- self.asset_ids_cache_guard = Mutex.new
68
-
69
- # Use the RAILS_ASSET_ID environment variable or the source's
70
- # modification time as its cache-busting asset id.
71
- def rails_asset_id(source)
72
- if asset_id = ENV["RAILS_ASSET_ID"]
73
- asset_id
74
- else
75
- if self.cache_asset_ids && (asset_id = self.asset_ids_cache[source])
76
- asset_id
77
- else
78
- path = File.join(config.assets_dir, source)
79
- asset_id = File.exist?(path) ? File.mtime(path).to_i.to_s : ''
80
-
81
- if self.cache_asset_ids
82
- add_to_asset_ids_cache(source, asset_id)
83
- end
84
-
85
- asset_id
86
- end
87
- end
88
- end
89
- end
90
-
91
- end
92
- end
93
- end
@@ -1,193 +0,0 @@
1
- require 'active_support/concern'
2
- require 'active_support/core_ext/file'
3
- require 'action_view/helpers/asset_tag_helpers/asset_include_tag'
4
-
5
- module ActionView
6
- module Helpers
7
- module AssetTagHelper
8
-
9
- class JavascriptIncludeTag < AssetIncludeTag
10
- def asset_name
11
- 'javascript'
12
- end
13
-
14
- def extension
15
- 'js'
16
- end
17
-
18
- def asset_tag(source, options)
19
- content_tag("script", "", { "type" => Mime::JS, "src" => path_to_asset(source) }.merge(options))
20
- end
21
-
22
- def custom_dir
23
- config.javascripts_dir
24
- end
25
-
26
- private
27
-
28
- def expand_sources(sources, recursive = false)
29
- if sources.include?(:all)
30
- all_asset_files = (collect_asset_files(custom_dir, ('**' if recursive), "*.#{extension}") - ['application'])
31
- add_application_js(all_asset_files, sources)
32
- ((determine_source(:defaults, expansions).dup & all_asset_files) + all_asset_files).uniq
33
- else
34
- expanded_sources = sources.inject([]) do |list, source|
35
- determined_source = determine_source(source, expansions)
36
- update_source_list(list, determined_source)
37
- end
38
- add_application_js(expanded_sources, sources)
39
- expanded_sources
40
- end
41
- end
42
-
43
- def add_application_js(expanded_sources, sources)
44
- if (sources.include?(:defaults) || sources.include?(:all)) && File.exist?(File.join(custom_dir, "application.#{extension}"))
45
- expanded_sources.delete('application')
46
- expanded_sources << "application"
47
- end
48
- end
49
- end
50
-
51
-
52
- module JavascriptTagHelpers
53
- extend ActiveSupport::Concern
54
-
55
- module ClassMethods
56
- # Register one or more javascript files to be included when <tt>symbol</tt>
57
- # is passed to <tt>javascript_include_tag</tt>. This method is typically intended
58
- # to be called from plugin initialization to register javascript files
59
- # that the plugin installed in <tt>public/javascripts</tt>.
60
- #
61
- # ActionView::Helpers::AssetTagHelper.register_javascript_expansion :monkey => ["head", "body", "tail"]
62
- #
63
- # javascript_include_tag :monkey # =>
64
- # <script type="text/javascript" src="/javascripts/head.js"></script>
65
- # <script type="text/javascript" src="/javascripts/body.js"></script>
66
- # <script type="text/javascript" src="/javascripts/tail.js"></script>
67
- def register_javascript_expansion(expansions)
68
- js_expansions = JavascriptIncludeTag.expansions
69
- expansions.each do |key, values|
70
- js_expansions[key] = (js_expansions[key] || []) | Array(values)
71
- end
72
- end
73
- end
74
-
75
- # Computes the path to a javascript asset in the public javascripts directory.
76
- # If the +source+ filename has no extension, .js will be appended (except for explicit URIs)
77
- # Full paths from the document root will be passed through.
78
- # Used internally by javascript_include_tag to build the script path.
79
- #
80
- # ==== Examples
81
- # javascript_path "xmlhr" # => /javascripts/xmlhr.js
82
- # javascript_path "dir/xmlhr.js" # => /javascripts/dir/xmlhr.js
83
- # javascript_path "/dir/xmlhr" # => /dir/xmlhr.js
84
- # javascript_path "http://www.example.com/js/xmlhr" # => http://www.example.com/js/xmlhr
85
- # javascript_path "http://www.example.com/js/xmlhr.js" # => http://www.example.com/js/xmlhr.js
86
- def javascript_path(source)
87
- asset_paths.compute_public_path(source, 'javascripts', :ext => 'js')
88
- end
89
- alias_method :path_to_javascript, :javascript_path # aliased to avoid conflicts with a javascript_path named route
90
-
91
- # Returns an HTML script tag for each of the +sources+ provided.
92
- #
93
- # Sources may be paths to JavaScript files. Relative paths are assumed to be relative
94
- # to <tt>public/javascripts</tt>, full paths are assumed to be relative to the document
95
- # root. Relative paths are idiomatic, use absolute paths only when needed.
96
- #
97
- # When passing paths, the ".js" extension is optional.
98
- #
99
- # If the application is not using the asset pipeline, to include the default JavaScript
100
- # expansion pass <tt>:defaults</tt> as source. By default, <tt>:defaults</tt> loads jQuery,
101
- # and that can be overridden in <tt>config/application.rb</tt>:
102
- #
103
- # config.action_view.javascript_expansions[:defaults] = %w(foo.js bar.js)
104
- #
105
- # When using <tt>:defaults</tt> or <tt>:all</tt>, if an <tt>application.js</tt> file exists
106
- # in <tt>public/javascripts</tt> it will be included as well at the end.
107
- #
108
- # You can modify the HTML attributes of the script tag by passing a hash as the
109
- # last argument.
110
- #
111
- # ==== Examples
112
- # javascript_include_tag "xmlhr"
113
- # # => <script type="text/javascript" src="/javascripts/xmlhr.js?1284139606"></script>
114
- #
115
- # javascript_include_tag "xmlhr.js"
116
- # # => <script type="text/javascript" src="/javascripts/xmlhr.js?1284139606"></script>
117
- #
118
- # javascript_include_tag "common.javascript", "/elsewhere/cools"
119
- # # => <script type="text/javascript" src="/javascripts/common.javascript?1284139606"></script>
120
- # # <script type="text/javascript" src="/elsewhere/cools.js?1423139606"></script>
121
- #
122
- # javascript_include_tag "http://www.example.com/xmlhr"
123
- # # => <script type="text/javascript" src="http://www.example.com/xmlhr"></script>
124
- #
125
- # javascript_include_tag "http://www.example.com/xmlhr.js"
126
- # # => <script type="text/javascript" src="http://www.example.com/xmlhr.js"></script>
127
- #
128
- # javascript_include_tag :defaults
129
- # # => <script type="text/javascript" src="/javascripts/jquery.js?1284139606"></script>
130
- # # <script type="text/javascript" src="/javascripts/rails.js?1284139606"></script>
131
- # # <script type="text/javascript" src="/javascripts/application.js?1284139606"></script>
132
- #
133
- # Note: The application.js file is only referenced if it exists
134
- #
135
- # You can also include all JavaScripts in the +javascripts+ directory using <tt>:all</tt> as the source:
136
- #
137
- # javascript_include_tag :all
138
- # # => <script type="text/javascript" src="/javascripts/jquery.js?1284139606"></script>
139
- # # <script type="text/javascript" src="/javascripts/rails.js?1284139606"></script>
140
- # # <script type="text/javascript" src="/javascripts/shop.js?1284139606"></script>
141
- # # <script type="text/javascript" src="/javascripts/checkout.js?1284139606"></script>
142
- # # <script type="text/javascript" src="/javascripts/application.js?1284139606"></script>
143
- #
144
- # Note that your defaults of choice will be included first, so they will be available to all subsequently
145
- # included files.
146
- #
147
- # If you want Rails to search in all the subdirectories under <tt>public/javascripts</tt>, you should
148
- # explicitly set <tt>:recursive</tt>:
149
- #
150
- # javascript_include_tag :all, :recursive => true
151
- #
152
- # == Caching multiple JavaScripts into one
153
- #
154
- # You can also cache multiple JavaScripts into one file, which requires less HTTP connections to download
155
- # and can better be compressed by gzip (leading to faster transfers). Caching will only happen if
156
- # <tt>config.perform_caching</tt> is set to true (which is the case by default for the Rails
157
- # production environment, but not for the development environment).
158
- #
159
- # ==== Examples
160
- #
161
- # # assuming config.perform_caching is false
162
- # javascript_include_tag :all, :cache => true
163
- # # => <script type="text/javascript" src="/javascripts/jquery.js?1284139606"></script>
164
- # # <script type="text/javascript" src="/javascripts/rails.js?1284139606"></script>
165
- # # <script type="text/javascript" src="/javascripts/shop.js?1284139606"></script>
166
- # # <script type="text/javascript" src="/javascripts/checkout.js?1284139606"></script>
167
- # # <script type="text/javascript" src="/javascripts/application.js?1284139606"></script>
168
- #
169
- # # assuming config.perform_caching is true
170
- # javascript_include_tag :all, :cache => true
171
- # # => <script type="text/javascript" src="/javascripts/all.js?1344139789"></script>
172
- #
173
- # # assuming config.perform_caching is false
174
- # javascript_include_tag "jquery", "cart", "checkout", :cache => "shop"
175
- # # => <script type="text/javascript" src="/javascripts/jquery.js?1284139606"></script>
176
- # # <script type="text/javascript" src="/javascripts/cart.js?1289139157"></script>
177
- # # <script type="text/javascript" src="/javascripts/checkout.js?1299139816"></script>
178
- #
179
- # # assuming config.perform_caching is true
180
- # javascript_include_tag "jquery", "cart", "checkout", :cache => "shop"
181
- # # => <script type="text/javascript" src="/javascripts/shop.js?1299139816"></script>
182
- #
183
- # The <tt>:recursive</tt> option is also available for caching:
184
- #
185
- # javascript_include_tag :all, :cache => true, :recursive => true
186
- def javascript_include_tag(*sources)
187
- @javascript_include ||= JavascriptIncludeTag.new(config, asset_paths)
188
- @javascript_include.include_tag(*sources)
189
- end
190
- end
191
- end
192
- end
193
- end
@@ -1,148 +0,0 @@
1
- require 'active_support/concern'
2
- require 'active_support/core_ext/file'
3
- require 'action_view/helpers/asset_tag_helpers/asset_include_tag'
4
-
5
- module ActionView
6
- module Helpers
7
- module AssetTagHelper
8
-
9
- class StylesheetIncludeTag < AssetIncludeTag
10
- def asset_name
11
- 'stylesheet'
12
- end
13
-
14
- def extension
15
- 'css'
16
- end
17
-
18
- def asset_tag(source, options)
19
- # We force the :request protocol here to avoid a double-download bug in IE7 and IE8
20
- tag("link", { "rel" => "stylesheet", "type" => Mime::CSS, "media" => "screen", "href" => path_to_asset(source, :protocol => :request) }.merge(options))
21
- end
22
-
23
- def custom_dir
24
- config.stylesheets_dir
25
- end
26
- end
27
-
28
-
29
- module StylesheetTagHelpers
30
- extend ActiveSupport::Concern
31
-
32
- module ClassMethods
33
- # Register one or more stylesheet files to be included when <tt>symbol</tt>
34
- # is passed to <tt>stylesheet_link_tag</tt>. This method is typically intended
35
- # to be called from plugin initialization to register stylesheet files
36
- # that the plugin installed in <tt>public/stylesheets</tt>.
37
- #
38
- # ActionView::Helpers::AssetTagHelper.register_stylesheet_expansion :monkey => ["head", "body", "tail"]
39
- #
40
- # stylesheet_link_tag :monkey # =>
41
- # <link href="/stylesheets/head.css" media="screen" rel="stylesheet" type="text/css" />
42
- # <link href="/stylesheets/body.css" media="screen" rel="stylesheet" type="text/css" />
43
- # <link href="/stylesheets/tail.css" media="screen" rel="stylesheet" type="text/css" />
44
- def register_stylesheet_expansion(expansions)
45
- style_expansions = StylesheetIncludeTag.expansions
46
- expansions.each do |key, values|
47
- style_expansions[key] = (style_expansions[key] || []) | Array(values)
48
- end
49
- end
50
- end
51
-
52
- # Computes the path to a stylesheet asset in the public stylesheets directory.
53
- # If the +source+ filename has no extension, <tt>.css</tt> will be appended (except for explicit URIs).
54
- # Full paths from the document root will be passed through.
55
- # Used internally by +stylesheet_link_tag+ to build the stylesheet path.
56
- #
57
- # ==== Examples
58
- # stylesheet_path "style" # => /stylesheets/style.css
59
- # stylesheet_path "dir/style.css" # => /stylesheets/dir/style.css
60
- # stylesheet_path "/dir/style.css" # => /dir/style.css
61
- # stylesheet_path "http://www.example.com/css/style" # => http://www.example.com/css/style
62
- # stylesheet_path "http://www.example.com/css/style.css" # => http://www.example.com/css/style.css
63
- def stylesheet_path(source)
64
- asset_paths.compute_public_path(source, 'stylesheets', :ext => 'css', :protocol => :request)
65
- end
66
- alias_method :path_to_stylesheet, :stylesheet_path # aliased to avoid conflicts with a stylesheet_path named route
67
-
68
- # Returns a stylesheet link tag for the sources specified as arguments. If
69
- # you don't specify an extension, <tt>.css</tt> will be appended automatically.
70
- # You can modify the link attributes by passing a hash as the last argument.
71
- # For historical reasons, the 'media' attribute will always be present and defaults
72
- # to "screen", so you must explicitely set it to "all" for the stylesheet(s) to
73
- # apply to all media types.
74
- #
75
- # ==== Examples
76
- # stylesheet_link_tag "style" # =>
77
- # <link href="/stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" />
78
- #
79
- # stylesheet_link_tag "style.css" # =>
80
- # <link href="/stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" />
81
- #
82
- # stylesheet_link_tag "http://www.example.com/style.css" # =>
83
- # <link href="http://www.example.com/style.css" media="screen" rel="stylesheet" type="text/css" />
84
- #
85
- # stylesheet_link_tag "style", :media => "all" # =>
86
- # <link href="/stylesheets/style.css" media="all" rel="stylesheet" type="text/css" />
87
- #
88
- # stylesheet_link_tag "style", :media => "print" # =>
89
- # <link href="/stylesheets/style.css" media="print" rel="stylesheet" type="text/css" />
90
- #
91
- # stylesheet_link_tag "random.styles", "/css/stylish" # =>
92
- # <link href="/stylesheets/random.styles" media="screen" rel="stylesheet" type="text/css" />
93
- # <link href="/css/stylish.css" media="screen" rel="stylesheet" type="text/css" />
94
- #
95
- # You can also include all styles in the stylesheets directory using <tt>:all</tt> as the source:
96
- #
97
- # stylesheet_link_tag :all # =>
98
- # <link href="/stylesheets/style1.css" media="screen" rel="stylesheet" type="text/css" />
99
- # <link href="/stylesheets/styleB.css" media="screen" rel="stylesheet" type="text/css" />
100
- # <link href="/stylesheets/styleX2.css" media="screen" rel="stylesheet" type="text/css" />
101
- #
102
- # If you want Rails to search in all the subdirectories under stylesheets, you should explicitly set <tt>:recursive</tt>:
103
- #
104
- # stylesheet_link_tag :all, :recursive => true
105
- #
106
- # == Caching multiple stylesheets into one
107
- #
108
- # You can also cache multiple stylesheets into one file, which requires less HTTP connections and can better be
109
- # compressed by gzip (leading to faster transfers). Caching will only happen if config.perform_caching
110
- # is set to true (which is the case by default for the Rails production environment, but not for the development
111
- # environment). Examples:
112
- #
113
- # ==== Examples
114
- # stylesheet_link_tag :all, :cache => true # when config.perform_caching is false =>
115
- # <link href="/stylesheets/style1.css" media="screen" rel="stylesheet" type="text/css" />
116
- # <link href="/stylesheets/styleB.css" media="screen" rel="stylesheet" type="text/css" />
117
- # <link href="/stylesheets/styleX2.css" media="screen" rel="stylesheet" type="text/css" />
118
- #
119
- # stylesheet_link_tag :all, :cache => true # when config.perform_caching is true =>
120
- # <link href="/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />
121
- #
122
- # stylesheet_link_tag "shop", "cart", "checkout", :cache => "payment" # when config.perform_caching is false =>
123
- # <link href="/stylesheets/shop.css" media="screen" rel="stylesheet" type="text/css" />
124
- # <link href="/stylesheets/cart.css" media="screen" rel="stylesheet" type="text/css" />
125
- # <link href="/stylesheets/checkout.css" media="screen" rel="stylesheet" type="text/css" />
126
- #
127
- # stylesheet_link_tag "shop", "cart", "checkout", :cache => "payment" # when config.perform_caching is true =>
128
- # <link href="/stylesheets/payment.css" media="screen" rel="stylesheet" type="text/css" />
129
- #
130
- # The <tt>:recursive</tt> option is also available for caching:
131
- #
132
- # stylesheet_link_tag :all, :cache => true, :recursive => true
133
- #
134
- # To force concatenation (even in development mode) set <tt>:concat</tt> to true. This is useful if
135
- # you have too many stylesheets for IE to load.
136
- #
137
- # stylesheet_link_tag :all, :concat => true
138
- #
139
- def stylesheet_link_tag(*sources)
140
- @stylesheet_include ||= StylesheetIncludeTag.new(config, asset_paths)
141
- @stylesheet_include.include_tag(*sources)
142
- end
143
-
144
- end
145
-
146
- end
147
- end
148
- end
@@ -1,99 +0,0 @@
1
- require "fileutils"
2
-
3
- namespace :assets do
4
- def ruby_rake_task(task, fork = true)
5
- env = ENV['RAILS_ENV'] || 'production'
6
- groups = ENV['RAILS_GROUPS'] || 'assets'
7
- args = [$0, task,"RAILS_ENV=#{env}","RAILS_GROUPS=#{groups}"]
8
- args << "--trace" if Rake.application.options.trace
9
- if $0 =~ /rake\.bat\Z/i
10
- Kernel.exec $0, *args
11
- else
12
- fork ? ruby(*args) : Kernel.exec(FileUtils::RUBY, *args)
13
- end
14
- end
15
-
16
- # We are currently running with no explicit bundler group
17
- # and/or no explicit environment - we have to reinvoke rake to
18
- # execute this task.
19
- def invoke_or_reboot_rake_task(task)
20
- if ENV['RAILS_GROUPS'].to_s.empty? || ENV['RAILS_ENV'].to_s.empty?
21
- ruby_rake_task task
22
- else
23
- Rake::Task[task].invoke
24
- end
25
- end
26
-
27
- desc "Compile all the assets named in config.assets.precompile"
28
- task :precompile do
29
- invoke_or_reboot_rake_task "assets:precompile:all"
30
- end
31
-
32
- namespace :precompile do
33
- def internal_precompile(digest=nil)
34
- unless Rails.application.config.assets.enabled
35
- warn "Cannot precompile assets if sprockets is disabled. Please set config.assets.enabled to true"
36
- exit
37
- end
38
-
39
- # Ensure that action view is loaded and the appropriate
40
- # sprockets hooks get executed
41
- _ = ActionView::Base
42
-
43
- config = Rails.application.config
44
- config.assets.compile = true
45
- config.assets.digest = digest unless digest.nil?
46
- config.assets.digests = {}
47
-
48
- env = Rails.application.assets
49
- target = File.join(Rails.public_path, config.assets.prefix)
50
- compiler = Sprockets::StaticCompiler.new(env,
51
- target,
52
- config.assets.precompile,
53
- :manifest_path => config.assets.manifest,
54
- :digest => config.assets.digest,
55
- :manifest => digest.nil?)
56
- compiler.compile
57
- end
58
-
59
- task :all do
60
- Rake::Task["assets:precompile:primary"].invoke
61
- # We need to reinvoke in order to run the secondary digestless
62
- # asset compilation run - a fresh Sprockets environment is
63
- # required in order to compile digestless assets as the
64
- # environment has already cached the assets on the primary
65
- # run.
66
- ruby_rake_task("assets:precompile:nondigest", false) if Rails.application.config.assets.digest
67
- end
68
-
69
- task :primary => ["assets:environment", "tmp:cache:clear"] do
70
- internal_precompile
71
- end
72
-
73
- task :nondigest => ["assets:environment", "tmp:cache:clear"] do
74
- internal_precompile(false)
75
- end
76
- end
77
-
78
- desc "Remove compiled assets"
79
- task :clean do
80
- invoke_or_reboot_rake_task "assets:clean:all"
81
- end
82
-
83
- namespace :clean do
84
- task :all => ["assets:environment", "tmp:cache:clear"] do
85
- config = Rails.application.config
86
- public_asset_path = File.join(Rails.public_path, config.assets.prefix)
87
- rm_rf public_asset_path, :secure => true
88
- end
89
- end
90
-
91
- task :environment do
92
- if Rails.application.config.assets.initialize_on_precompile
93
- Rake::Task["environment"].invoke
94
- else
95
- Rails.application.initialize!(:assets)
96
- Sprockets::Bootstrap.new(Rails.application).run
97
- end
98
- end
99
- end