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,37 +0,0 @@
1
- module Sprockets
2
- class Bootstrap
3
- def initialize(app)
4
- @app = app
5
- end
6
-
7
- # TODO: Get rid of config.assets.enabled
8
- def run
9
- app, config = @app, @app.config
10
- return unless app.assets
11
-
12
- config.assets.paths.each { |path| app.assets.append_path(path) }
13
-
14
- if config.assets.compress
15
- # temporarily hardcode default JS compressor to uglify. Soon, it will work
16
- # the same as SCSS, where a default plugin sets the default.
17
- unless config.assets.js_compressor == false
18
- app.assets.js_compressor = LazyCompressor.new { Sprockets::Compressors.registered_js_compressor(config.assets.js_compressor || :uglifier) }
19
- end
20
-
21
- unless config.assets.css_compressor == false
22
- app.assets.css_compressor = LazyCompressor.new { Sprockets::Compressors.registered_css_compressor(config.assets.css_compressor) }
23
- end
24
- end
25
-
26
- if config.assets.compile
27
- app.routes.prepend do
28
- mount app.assets => config.assets.prefix
29
- end
30
- end
31
-
32
- if config.assets.digest
33
- app.assets = app.assets.index
34
- end
35
- end
36
- end
37
- end
@@ -1,83 +0,0 @@
1
- module Sprockets
2
- module Compressors
3
- @@css_compressors = {}
4
- @@js_compressors = {}
5
- @@default_css_compressor = nil
6
- @@default_js_compressor = nil
7
-
8
- def self.register_css_compressor(name, klass, options = {})
9
- @@default_css_compressor = name.to_sym if options[:default] || @@default_css_compressor.nil?
10
- @@css_compressors[name.to_sym] = {:klass => klass.to_s, :require => options[:require]}
11
- end
12
-
13
- def self.register_js_compressor(name, klass, options = {})
14
- @@default_js_compressor = name.to_sym if options[:default] || @@default_js_compressor.nil?
15
- @@js_compressors[name.to_sym] = {:klass => klass.to_s, :require => options[:require]}
16
- end
17
-
18
- def self.registered_css_compressor(name)
19
- if name.respond_to?(:to_sym)
20
- compressor = @@css_compressors[name.to_sym] || @@css_compressors[@@default_css_compressor]
21
- require compressor[:require] if compressor[:require]
22
- compressor[:klass].constantize.new
23
- else
24
- name
25
- end
26
- end
27
-
28
- def self.registered_js_compressor(name)
29
- if name.respond_to?(:to_sym)
30
- compressor = @@js_compressors[name.to_sym] || @@js_compressors[@@default_js_compressor]
31
- require compressor[:require] if compressor[:require]
32
- compressor[:klass].constantize.new
33
- else
34
- name
35
- end
36
- end
37
-
38
- # The default compressors must be registered in default plugins (ex. Sass-Rails)
39
- register_css_compressor(:scss, 'Sass::Rails::Compressor', :require => 'sass/rails/compressor', :default => true)
40
- register_js_compressor(:uglifier, 'Uglifier', :require => 'uglifier', :default => true)
41
-
42
- # Automaticaly register some compressors
43
- register_css_compressor(:yui, 'YUI::CssCompressor', :require => 'yui/compressor')
44
- register_js_compressor(:closure, 'Closure::Compiler', :require => 'closure-compiler')
45
- register_js_compressor(:yui, 'YUI::JavaScriptCompressor', :require => 'yui/compressor')
46
- end
47
-
48
- # An asset compressor which does nothing.
49
- #
50
- # This compressor simply returns the asset as-is, without any compression
51
- # whatsoever. It is useful in development mode, when compression isn't
52
- # needed but using the same asset pipeline as production is desired.
53
- class NullCompressor #:nodoc:
54
- def compress(content)
55
- content
56
- end
57
- end
58
-
59
- # An asset compressor which only initializes the underlying compression
60
- # engine when needed.
61
- #
62
- # This postpones the initialization of the compressor until
63
- # <code>#compress</code> is called the first time.
64
- class LazyCompressor #:nodoc:
65
- # Initializes a new LazyCompressor.
66
- #
67
- # The block should return a compressor when called, i.e. an object
68
- # which responds to <code>#compress</code>.
69
- def initialize(&block)
70
- @block = block
71
- end
72
-
73
- def compress(content)
74
- compressor.compress(content)
75
- end
76
-
77
- private
78
-
79
- def compressor
80
- @compressor ||= (@block.call || NullCompressor.new)
81
- end
82
- end
83
- end
@@ -1,6 +0,0 @@
1
- module Sprockets
2
- module Helpers
3
- autoload :RailsHelper, "sprockets/helpers/rails_helper"
4
- autoload :IsolatedHelper, "sprockets/helpers/isolated_helper"
5
- end
6
- end
@@ -1,13 +0,0 @@
1
- module Sprockets
2
- module Helpers
3
- module IsolatedHelper
4
- def controller
5
- nil
6
- end
7
-
8
- def config
9
- Rails.application.config.action_controller
10
- end
11
- end
12
- end
13
- end
@@ -1,182 +0,0 @@
1
- require "action_view"
2
-
3
- module Sprockets
4
- module Helpers
5
- module RailsHelper
6
- extend ActiveSupport::Concern
7
- include ActionView::Helpers::AssetTagHelper
8
-
9
- def asset_paths
10
- @asset_paths ||= begin
11
- paths = RailsHelper::AssetPaths.new(config, controller)
12
- paths.asset_environment = asset_environment
13
- paths.asset_digests = asset_digests
14
- paths.compile_assets = compile_assets?
15
- paths.digest_assets = digest_assets?
16
- paths
17
- end
18
- end
19
-
20
- def javascript_include_tag(*sources)
21
- options = sources.extract_options!
22
- debug = options.key?(:debug) ? options.delete(:debug) : debug_assets?
23
- body = options.key?(:body) ? options.delete(:body) : false
24
- digest = options.key?(:digest) ? options.delete(:digest) : digest_assets?
25
-
26
- sources.collect do |source|
27
- if debug && asset = asset_paths.asset_for(source, 'js')
28
- asset.to_a.map { |dep|
29
- super(dep.pathname.to_s, { :src => path_to_asset(dep, :ext => 'js', :body => true, :digest => digest) }.merge!(options))
30
- }
31
- else
32
- super(source.to_s, { :src => path_to_asset(source, :ext => 'js', :body => body, :digest => digest) }.merge!(options))
33
- end
34
- end.flatten.uniq.join("\n").html_safe
35
- end
36
-
37
- def stylesheet_link_tag(*sources)
38
- options = sources.extract_options!
39
- debug = options.key?(:debug) ? options.delete(:debug) : debug_assets?
40
- body = options.key?(:body) ? options.delete(:body) : false
41
- digest = options.key?(:digest) ? options.delete(:digest) : digest_assets?
42
-
43
- sources.collect do |source|
44
- if debug && asset = asset_paths.asset_for(source, 'css')
45
- asset.to_a.map { |dep|
46
- super(dep.pathname.to_s, { :href => path_to_asset(dep, :ext => 'css', :body => true, :protocol => :request, :digest => digest) }.merge!(options))
47
- }
48
- else
49
- super(source.to_s, { :href => path_to_asset(source, :ext => 'css', :body => body, :protocol => :request, :digest => digest) }.merge!(options))
50
- end
51
- end.flatten.uniq.join("\n").html_safe
52
- end
53
-
54
- def asset_path(source, options = {})
55
- source = source.logical_path if source.respond_to?(:logical_path)
56
- path = asset_paths.compute_public_path(source, asset_prefix, options.merge(:body => true))
57
- options[:body] ? "#{path}?body=1" : path
58
- end
59
- alias_method :path_to_asset, :asset_path # aliased to avoid conflicts with an asset_path named route
60
-
61
- def image_path(source)
62
- path_to_asset(source)
63
- end
64
- alias_method :path_to_image, :image_path # aliased to avoid conflicts with an image_path named route
65
-
66
- def font_path(source)
67
- path_to_asset(source)
68
- end
69
- alias_method :path_to_font, :font_path # aliased to avoid conflicts with an font_path named route
70
-
71
- def javascript_path(source)
72
- path_to_asset(source, :ext => 'js')
73
- end
74
- alias_method :path_to_javascript, :javascript_path # aliased to avoid conflicts with an javascript_path named route
75
-
76
- def stylesheet_path(source)
77
- path_to_asset(source, :ext => 'css')
78
- end
79
- alias_method :path_to_stylesheet, :stylesheet_path # aliased to avoid conflicts with an stylesheet_path named route
80
-
81
- private
82
- def debug_assets?
83
- compile_assets? && (Rails.application.config.assets.debug || params[:debug_assets])
84
- rescue NameError
85
- false
86
- end
87
-
88
- # Override to specify an alternative prefix for asset path generation.
89
- # When combined with a custom +asset_environment+, this can be used to
90
- # implement themes that can take advantage of the asset pipeline.
91
- #
92
- # If you only want to change where the assets are mounted, refer to
93
- # +config.assets.prefix+ instead.
94
- def asset_prefix
95
- Rails.application.config.assets.prefix
96
- end
97
-
98
- def asset_digests
99
- Rails.application.config.assets.digests
100
- end
101
-
102
- def compile_assets?
103
- Rails.application.config.assets.compile
104
- end
105
-
106
- def digest_assets?
107
- Rails.application.config.assets.digest
108
- end
109
-
110
- # Override to specify an alternative asset environment for asset
111
- # path generation. The environment should already have been mounted
112
- # at the prefix returned by +asset_prefix+.
113
- def asset_environment
114
- Rails.application.assets
115
- end
116
-
117
- class AssetPaths < ::ActionView::AssetPaths #:nodoc:
118
- attr_accessor :asset_environment, :asset_prefix, :asset_digests, :compile_assets, :digest_assets
119
-
120
- class AssetNotPrecompiledError < StandardError; end
121
-
122
- def asset_for(source, ext)
123
- source = source.to_s
124
- return nil if is_uri?(source)
125
- source = rewrite_extension(source, nil, ext)
126
- asset_environment[source]
127
- rescue Sprockets::FileOutsidePaths
128
- nil
129
- end
130
-
131
- def digest_for(logical_path)
132
- if digest_assets && asset_digests && (digest = asset_digests[logical_path])
133
- return digest
134
- end
135
-
136
- if compile_assets
137
- if digest_assets && asset = asset_environment[logical_path]
138
- return asset.digest_path
139
- end
140
- return logical_path
141
- else
142
- raise AssetNotPrecompiledError.new("#{logical_path} isn't precompiled")
143
- end
144
- end
145
-
146
- def rewrite_asset_path(source, dir, options = {})
147
- if source[0] == ?/
148
- source
149
- else
150
- if digest_assets && options[:digest] != false
151
- source = digest_for(source)
152
- end
153
- source = File.join(dir, source)
154
- source = "/#{source}" unless source =~ /^\//
155
- source
156
- end
157
- end
158
-
159
- def rewrite_extension(source, dir, ext)
160
- source_ext = File.extname(source)[1..-1]
161
-
162
- if !ext || ext == source_ext
163
- source
164
- elsif source_ext.blank?
165
- "#{source}.#{ext}"
166
- elsif File.exists?(source) || exact_match_present?(source)
167
- source
168
- else
169
- "#{source}.#{ext}"
170
- end
171
- end
172
-
173
- def exact_match_present?(source)
174
- pathname = asset_environment.resolve(source)
175
- pathname.to_s =~ /#{Regexp.escape(source)}\Z/
176
- rescue Sprockets::FileNotFound
177
- false
178
- end
179
- end
180
- end
181
- end
182
- end
@@ -1,62 +0,0 @@
1
- require "action_controller/railtie"
2
-
3
- module Sprockets
4
- autoload :Bootstrap, "sprockets/bootstrap"
5
- autoload :Helpers, "sprockets/helpers"
6
- autoload :Compressors, "sprockets/compressors"
7
- autoload :LazyCompressor, "sprockets/compressors"
8
- autoload :NullCompressor, "sprockets/compressors"
9
- autoload :StaticCompiler, "sprockets/static_compiler"
10
-
11
- # TODO: Get rid of config.assets.enabled
12
- class Railtie < ::Rails::Railtie
13
- rake_tasks do
14
- load "sprockets/assets.rake"
15
- end
16
-
17
- initializer "sprockets.environment", :group => :all do |app|
18
- config = app.config
19
- next unless config.assets.enabled
20
-
21
- require 'sprockets'
22
-
23
- app.assets = Sprockets::Environment.new(app.root.to_s) do |env|
24
- env.version = ::Rails.env + "-#{config.assets.version}"
25
-
26
- if config.assets.logger != false
27
- env.logger = config.assets.logger || ::Rails.logger
28
- end
29
-
30
- if config.assets.cache_store != false
31
- env.cache = ActiveSupport::Cache.lookup_store(config.assets.cache_store) || ::Rails.cache
32
- end
33
- end
34
-
35
- if config.assets.manifest
36
- path = File.join(config.assets.manifest, "manifest.yml")
37
- else
38
- path = File.join(Rails.public_path, config.assets.prefix, "manifest.yml")
39
- end
40
-
41
- if File.exist?(path)
42
- config.assets.digests = YAML.load_file(path)
43
- end
44
-
45
- ActiveSupport.on_load(:action_view) do
46
- include ::Sprockets::Helpers::RailsHelper
47
- app.assets.context_class.instance_eval do
48
- include ::Sprockets::Helpers::IsolatedHelper
49
- include ::Sprockets::Helpers::RailsHelper
50
- end
51
- end
52
- end
53
-
54
- # We need to configure this after initialization to ensure we collect
55
- # paths from all engines. This hook is invoked exactly before routes
56
- # are compiled, and so that other Railties have an opportunity to
57
- # register compressors.
58
- config.after_initialize do |app|
59
- Sprockets::Bootstrap.new(app).run
60
- end
61
- end
62
- end
@@ -1,56 +0,0 @@
1
- require 'fileutils'
2
-
3
- module Sprockets
4
- class StaticCompiler
5
- attr_accessor :env, :target, :paths
6
-
7
- def initialize(env, target, paths, options = {})
8
- @env = env
9
- @target = target
10
- @paths = paths
11
- @digest = options.key?(:digest) ? options.delete(:digest) : true
12
- @manifest = options.key?(:manifest) ? options.delete(:manifest) : true
13
- @manifest_path = options.delete(:manifest_path) || target
14
- end
15
-
16
- def compile
17
- manifest = {}
18
- env.each_logical_path(paths) do |logical_path|
19
- if asset = env.find_asset(logical_path)
20
- digest_path = write_asset(asset)
21
- manifest[asset.logical_path] = digest_path
22
- manifest[aliased_path_for(asset.logical_path)] = digest_path
23
- end
24
- end
25
- write_manifest(manifest) if @manifest
26
- end
27
-
28
- def write_manifest(manifest)
29
- FileUtils.mkdir_p(@manifest_path)
30
- File.open("#{@manifest_path}/manifest.yml", 'wb') do |f|
31
- YAML.dump(manifest, f)
32
- end
33
- end
34
-
35
- def write_asset(asset)
36
- path_for(asset).tap do |path|
37
- filename = File.join(target, path)
38
- FileUtils.mkdir_p File.dirname(filename)
39
- asset.write_to(filename)
40
- asset.write_to("#{filename}.gz") if filename.to_s =~ /\.(css|js)$/
41
- end
42
- end
43
-
44
- def path_for(asset)
45
- @digest ? asset.digest_path : asset.logical_path
46
- end
47
-
48
- def aliased_path_for(logical_path)
49
- if File.basename(logical_path).start_with?('index')
50
- logical_path.sub(/\/index([^\/]+)$/, '\1')
51
- else
52
- logical_path.sub(/\.([^\/]+)$/, '/index.\1')
53
- end
54
- end
55
- end
56
- end