actionpack 3.2.22.5 → 5.2.4

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 (271) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +279 -603
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +13 -297
  5. data/lib/abstract_controller/asset_paths.rb +4 -2
  6. data/lib/abstract_controller/base.rb +82 -52
  7. data/lib/abstract_controller/caching/fragments.rb +166 -0
  8. data/lib/abstract_controller/caching.rb +66 -0
  9. data/lib/abstract_controller/callbacks.rb +117 -103
  10. data/lib/abstract_controller/collector.rb +18 -7
  11. data/lib/abstract_controller/error.rb +6 -0
  12. data/lib/abstract_controller/helpers.rb +65 -38
  13. data/lib/abstract_controller/logger.rb +3 -2
  14. data/lib/abstract_controller/railties/routes_helpers.rb +5 -3
  15. data/lib/abstract_controller/rendering.rb +77 -129
  16. data/lib/abstract_controller/translation.rb +21 -3
  17. data/lib/abstract_controller/url_for.rb +9 -7
  18. data/lib/abstract_controller.rb +12 -13
  19. data/lib/action_controller/api/api_rendering.rb +16 -0
  20. data/lib/action_controller/api.rb +149 -0
  21. data/lib/action_controller/base.rb +81 -40
  22. data/lib/action_controller/caching.rb +22 -62
  23. data/lib/action_controller/form_builder.rb +50 -0
  24. data/lib/action_controller/log_subscriber.rb +30 -18
  25. data/lib/action_controller/metal/basic_implicit_render.rb +13 -0
  26. data/lib/action_controller/metal/conditional_get.rb +190 -47
  27. data/lib/action_controller/metal/content_security_policy.rb +52 -0
  28. data/lib/action_controller/metal/cookies.rb +3 -3
  29. data/lib/action_controller/metal/data_streaming.rb +40 -65
  30. data/lib/action_controller/metal/etag_with_flash.rb +18 -0
  31. data/lib/action_controller/metal/etag_with_template_digest.rb +57 -0
  32. data/lib/action_controller/metal/exceptions.rb +19 -12
  33. data/lib/action_controller/metal/flash.rb +42 -9
  34. data/lib/action_controller/metal/force_ssl.rb +79 -19
  35. data/lib/action_controller/metal/head.rb +35 -10
  36. data/lib/action_controller/metal/helpers.rb +31 -21
  37. data/lib/action_controller/metal/http_authentication.rb +182 -134
  38. data/lib/action_controller/metal/implicit_render.rb +62 -8
  39. data/lib/action_controller/metal/instrumentation.rb +28 -26
  40. data/lib/action_controller/metal/live.rb +312 -0
  41. data/lib/action_controller/metal/mime_responds.rb +159 -163
  42. data/lib/action_controller/metal/parameter_encoding.rb +51 -0
  43. data/lib/action_controller/metal/params_wrapper.rb +146 -93
  44. data/lib/action_controller/metal/redirecting.rb +80 -56
  45. data/lib/action_controller/metal/renderers.rb +119 -47
  46. data/lib/action_controller/metal/rendering.rb +89 -32
  47. data/lib/action_controller/metal/request_forgery_protection.rb +373 -41
  48. data/lib/action_controller/metal/rescue.rb +9 -16
  49. data/lib/action_controller/metal/streaming.rb +39 -45
  50. data/lib/action_controller/metal/strong_parameters.rb +1086 -0
  51. data/lib/action_controller/metal/testing.rb +8 -29
  52. data/lib/action_controller/metal/url_for.rb +43 -32
  53. data/lib/action_controller/metal.rb +112 -106
  54. data/lib/action_controller/railtie.rb +56 -18
  55. data/lib/action_controller/railties/helpers.rb +24 -0
  56. data/lib/action_controller/renderer.rb +117 -0
  57. data/lib/action_controller/template_assertions.rb +11 -0
  58. data/lib/action_controller/test_case.rb +402 -347
  59. data/lib/action_controller.rb +31 -30
  60. data/lib/action_dispatch/http/cache.rb +133 -34
  61. data/lib/action_dispatch/http/content_security_policy.rb +272 -0
  62. data/lib/action_dispatch/http/filter_parameters.rb +40 -24
  63. data/lib/action_dispatch/http/filter_redirect.rb +37 -0
  64. data/lib/action_dispatch/http/headers.rb +117 -16
  65. data/lib/action_dispatch/http/mime_negotiation.rb +98 -33
  66. data/lib/action_dispatch/http/mime_type.rb +198 -146
  67. data/lib/action_dispatch/http/mime_types.rb +22 -7
  68. data/lib/action_dispatch/http/parameter_filter.rb +61 -49
  69. data/lib/action_dispatch/http/parameters.rb +94 -51
  70. data/lib/action_dispatch/http/rack_cache.rb +4 -3
  71. data/lib/action_dispatch/http/request.rb +262 -117
  72. data/lib/action_dispatch/http/response.rb +400 -86
  73. data/lib/action_dispatch/http/upload.rb +66 -29
  74. data/lib/action_dispatch/http/url.rb +232 -60
  75. data/lib/action_dispatch/journey/formatter.rb +189 -0
  76. data/lib/action_dispatch/journey/gtg/builder.rb +164 -0
  77. data/lib/action_dispatch/journey/gtg/simulator.rb +41 -0
  78. data/lib/action_dispatch/journey/gtg/transition_table.rb +158 -0
  79. data/lib/action_dispatch/journey/nfa/builder.rb +78 -0
  80. data/lib/action_dispatch/journey/nfa/dot.rb +36 -0
  81. data/lib/action_dispatch/journey/nfa/simulator.rb +49 -0
  82. data/lib/action_dispatch/journey/nfa/transition_table.rb +120 -0
  83. data/lib/action_dispatch/journey/nodes/node.rb +140 -0
  84. data/lib/action_dispatch/journey/parser.rb +199 -0
  85. data/lib/action_dispatch/journey/parser.y +50 -0
  86. data/lib/action_dispatch/journey/parser_extras.rb +31 -0
  87. data/lib/action_dispatch/journey/path/pattern.rb +199 -0
  88. data/lib/action_dispatch/journey/route.rb +203 -0
  89. data/lib/action_dispatch/journey/router/utils.rb +102 -0
  90. data/lib/action_dispatch/journey/router.rb +156 -0
  91. data/lib/action_dispatch/journey/routes.rb +82 -0
  92. data/lib/action_dispatch/journey/scanner.rb +64 -0
  93. data/lib/action_dispatch/journey/visitors.rb +268 -0
  94. data/lib/action_dispatch/journey/visualizer/fsm.css +30 -0
  95. data/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
  96. data/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
  97. data/lib/action_dispatch/journey.rb +7 -0
  98. data/lib/action_dispatch/middleware/callbacks.rb +17 -13
  99. data/lib/action_dispatch/middleware/cookies.rb +494 -162
  100. data/lib/action_dispatch/middleware/debug_exceptions.rb +176 -53
  101. data/lib/action_dispatch/middleware/debug_locks.rb +124 -0
  102. data/lib/action_dispatch/middleware/exception_wrapper.rb +103 -38
  103. data/lib/action_dispatch/middleware/executor.rb +21 -0
  104. data/lib/action_dispatch/middleware/flash.rb +128 -91
  105. data/lib/action_dispatch/middleware/public_exceptions.rb +43 -16
  106. data/lib/action_dispatch/middleware/reloader.rb +6 -83
  107. data/lib/action_dispatch/middleware/remote_ip.rb +151 -49
  108. data/lib/action_dispatch/middleware/request_id.rb +19 -15
  109. data/lib/action_dispatch/middleware/session/abstract_store.rb +38 -34
  110. data/lib/action_dispatch/middleware/session/cache_store.rb +14 -9
  111. data/lib/action_dispatch/middleware/session/cookie_store.rb +94 -44
  112. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +15 -4
  113. data/lib/action_dispatch/middleware/show_exceptions.rb +36 -61
  114. data/lib/action_dispatch/middleware/ssl.rb +150 -0
  115. data/lib/action_dispatch/middleware/stack.rb +33 -41
  116. data/lib/action_dispatch/middleware/static.rb +92 -48
  117. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +22 -0
  118. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
  119. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +27 -0
  120. data/lib/action_dispatch/middleware/templates/rescues/_source.text.erb +8 -0
  121. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +52 -0
  122. data/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +9 -0
  123. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +16 -0
  124. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +9 -0
  125. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +21 -0
  126. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +13 -0
  127. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +134 -5
  128. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +11 -0
  129. data/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
  130. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +32 -0
  131. data/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
  132. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +20 -0
  133. data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +7 -0
  134. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +6 -0
  135. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
  136. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
  137. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +200 -0
  138. data/lib/action_dispatch/railtie.rb +29 -8
  139. data/lib/action_dispatch/request/session.rb +234 -0
  140. data/lib/action_dispatch/request/utils.rb +78 -0
  141. data/lib/action_dispatch/routing/endpoint.rb +17 -0
  142. data/lib/action_dispatch/routing/inspector.rb +225 -0
  143. data/lib/action_dispatch/routing/mapper.rb +1329 -582
  144. data/lib/action_dispatch/routing/polymorphic_routes.rb +237 -94
  145. data/lib/action_dispatch/routing/redirection.rb +120 -50
  146. data/lib/action_dispatch/routing/route_set.rb +545 -322
  147. data/lib/action_dispatch/routing/routes_proxy.rb +37 -7
  148. data/lib/action_dispatch/routing/url_for.rb +103 -34
  149. data/lib/action_dispatch/routing.rb +66 -99
  150. data/lib/action_dispatch/system_test_case.rb +147 -0
  151. data/lib/action_dispatch/system_testing/browser.rb +49 -0
  152. data/lib/action_dispatch/system_testing/driver.rb +59 -0
  153. data/lib/action_dispatch/system_testing/server.rb +31 -0
  154. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +96 -0
  155. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +31 -0
  156. data/lib/action_dispatch/system_testing/test_helpers/undef_methods.rb +26 -0
  157. data/lib/action_dispatch/testing/assertion_response.rb +47 -0
  158. data/lib/action_dispatch/testing/assertions/response.rb +53 -42
  159. data/lib/action_dispatch/testing/assertions/routing.rb +79 -74
  160. data/lib/action_dispatch/testing/assertions.rb +15 -9
  161. data/lib/action_dispatch/testing/integration.rb +361 -207
  162. data/lib/action_dispatch/testing/request_encoder.rb +55 -0
  163. data/lib/action_dispatch/testing/test_process.rb +28 -19
  164. data/lib/action_dispatch/testing/test_request.rb +30 -33
  165. data/lib/action_dispatch/testing/test_response.rb +35 -11
  166. data/lib/action_dispatch.rb +42 -32
  167. data/lib/action_pack/gem_version.rb +17 -0
  168. data/lib/action_pack/version.rb +7 -7
  169. data/lib/action_pack.rb +4 -2
  170. metadata +116 -175
  171. data/lib/abstract_controller/layouts.rb +0 -423
  172. data/lib/abstract_controller/view_paths.rb +0 -96
  173. data/lib/action_controller/caching/actions.rb +0 -185
  174. data/lib/action_controller/caching/fragments.rb +0 -127
  175. data/lib/action_controller/caching/pages.rb +0 -187
  176. data/lib/action_controller/caching/sweeping.rb +0 -97
  177. data/lib/action_controller/deprecated/integration_test.rb +0 -2
  178. data/lib/action_controller/deprecated/performance_test.rb +0 -1
  179. data/lib/action_controller/deprecated.rb +0 -3
  180. data/lib/action_controller/metal/compatibility.rb +0 -65
  181. data/lib/action_controller/metal/hide_actions.rb +0 -41
  182. data/lib/action_controller/metal/rack_delegation.rb +0 -26
  183. data/lib/action_controller/metal/responder.rb +0 -286
  184. data/lib/action_controller/metal/session_management.rb +0 -14
  185. data/lib/action_controller/middleware.rb +0 -39
  186. data/lib/action_controller/railties/paths.rb +0 -25
  187. data/lib/action_controller/record_identifier.rb +0 -85
  188. data/lib/action_controller/vendor/html-scanner/html/document.rb +0 -68
  189. data/lib/action_controller/vendor/html-scanner/html/node.rb +0 -532
  190. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +0 -177
  191. data/lib/action_controller/vendor/html-scanner/html/selector.rb +0 -830
  192. data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +0 -107
  193. data/lib/action_controller/vendor/html-scanner/html/version.rb +0 -11
  194. data/lib/action_controller/vendor/html-scanner.rb +0 -20
  195. data/lib/action_dispatch/middleware/best_standards_support.rb +0 -30
  196. data/lib/action_dispatch/middleware/body_proxy.rb +0 -30
  197. data/lib/action_dispatch/middleware/head.rb +0 -18
  198. data/lib/action_dispatch/middleware/params_parser.rb +0 -75
  199. data/lib/action_dispatch/middleware/rescue.rb +0 -26
  200. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb +0 -31
  201. data/lib/action_dispatch/middleware/templates/rescues/_trace.erb +0 -26
  202. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +0 -10
  203. data/lib/action_dispatch/middleware/templates/rescues/missing_template.erb +0 -2
  204. data/lib/action_dispatch/middleware/templates/rescues/routing_error.erb +0 -15
  205. data/lib/action_dispatch/middleware/templates/rescues/template_error.erb +0 -17
  206. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb +0 -2
  207. data/lib/action_dispatch/testing/assertions/dom.rb +0 -37
  208. data/lib/action_dispatch/testing/assertions/selector.rb +0 -435
  209. data/lib/action_dispatch/testing/assertions/tag.rb +0 -138
  210. data/lib/action_dispatch/testing/performance_test.rb +0 -10
  211. data/lib/action_view/asset_paths.rb +0 -142
  212. data/lib/action_view/base.rb +0 -220
  213. data/lib/action_view/buffers.rb +0 -43
  214. data/lib/action_view/context.rb +0 -36
  215. data/lib/action_view/flows.rb +0 -79
  216. data/lib/action_view/helpers/active_model_helper.rb +0 -50
  217. data/lib/action_view/helpers/asset_paths.rb +0 -7
  218. data/lib/action_view/helpers/asset_tag_helper.rb +0 -457
  219. data/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb +0 -146
  220. data/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb +0 -93
  221. data/lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb +0 -193
  222. data/lib/action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers.rb +0 -148
  223. data/lib/action_view/helpers/atom_feed_helper.rb +0 -200
  224. data/lib/action_view/helpers/cache_helper.rb +0 -64
  225. data/lib/action_view/helpers/capture_helper.rb +0 -203
  226. data/lib/action_view/helpers/controller_helper.rb +0 -25
  227. data/lib/action_view/helpers/csrf_helper.rb +0 -32
  228. data/lib/action_view/helpers/date_helper.rb +0 -1062
  229. data/lib/action_view/helpers/debug_helper.rb +0 -40
  230. data/lib/action_view/helpers/form_helper.rb +0 -1486
  231. data/lib/action_view/helpers/form_options_helper.rb +0 -658
  232. data/lib/action_view/helpers/form_tag_helper.rb +0 -685
  233. data/lib/action_view/helpers/javascript_helper.rb +0 -110
  234. data/lib/action_view/helpers/number_helper.rb +0 -622
  235. data/lib/action_view/helpers/output_safety_helper.rb +0 -38
  236. data/lib/action_view/helpers/record_tag_helper.rb +0 -111
  237. data/lib/action_view/helpers/rendering_helper.rb +0 -92
  238. data/lib/action_view/helpers/sanitize_helper.rb +0 -259
  239. data/lib/action_view/helpers/tag_helper.rb +0 -167
  240. data/lib/action_view/helpers/text_helper.rb +0 -426
  241. data/lib/action_view/helpers/translation_helper.rb +0 -91
  242. data/lib/action_view/helpers/url_helper.rb +0 -693
  243. data/lib/action_view/helpers.rb +0 -60
  244. data/lib/action_view/locale/en.yml +0 -160
  245. data/lib/action_view/log_subscriber.rb +0 -28
  246. data/lib/action_view/lookup_context.rb +0 -258
  247. data/lib/action_view/path_set.rb +0 -101
  248. data/lib/action_view/railtie.rb +0 -55
  249. data/lib/action_view/renderer/abstract_renderer.rb +0 -41
  250. data/lib/action_view/renderer/partial_renderer.rb +0 -415
  251. data/lib/action_view/renderer/renderer.rb +0 -61
  252. data/lib/action_view/renderer/streaming_template_renderer.rb +0 -106
  253. data/lib/action_view/renderer/template_renderer.rb +0 -95
  254. data/lib/action_view/template/error.rb +0 -128
  255. data/lib/action_view/template/handlers/builder.rb +0 -26
  256. data/lib/action_view/template/handlers/erb.rb +0 -125
  257. data/lib/action_view/template/handlers.rb +0 -50
  258. data/lib/action_view/template/resolver.rb +0 -298
  259. data/lib/action_view/template/text.rb +0 -30
  260. data/lib/action_view/template.rb +0 -337
  261. data/lib/action_view/test_case.rb +0 -246
  262. data/lib/action_view/testing/resolvers.rb +0 -49
  263. data/lib/action_view.rb +0 -84
  264. data/lib/sprockets/assets.rake +0 -99
  265. data/lib/sprockets/bootstrap.rb +0 -37
  266. data/lib/sprockets/compressors.rb +0 -83
  267. data/lib/sprockets/helpers/isolated_helper.rb +0 -13
  268. data/lib/sprockets/helpers/rails_helper.rb +0 -182
  269. data/lib/sprockets/helpers.rb +0 -6
  270. data/lib/sprockets/railtie.rb +0 -62
  271. data/lib/sprockets/static_compiler.rb +0 -56
data/lib/action_view.rb DELETED
@@ -1,84 +0,0 @@
1
- #--
2
- # Copyright (c) 2004-2011 David Heinemeier Hansson
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- require 'active_support/ruby/shim'
25
- require 'active_support/core_ext/class/attribute_accessors'
26
-
27
- require 'action_pack'
28
-
29
- module ActionView
30
- extend ActiveSupport::Autoload
31
-
32
- eager_autoload do
33
- autoload :AssetPaths
34
- autoload :Base
35
- autoload :Context
36
- autoload :CompiledTemplates, "action_view/context"
37
- autoload :Helpers
38
- autoload :LookupContext
39
- autoload :PathSet
40
- autoload :Template
41
- autoload :TestCase
42
-
43
- autoload_under "renderer" do
44
- autoload :Renderer
45
- autoload :AbstractRenderer
46
- autoload :PartialRenderer
47
- autoload :TemplateRenderer
48
- autoload :StreamingTemplateRenderer
49
- end
50
-
51
- autoload_at "action_view/template/resolver" do
52
- autoload :Resolver
53
- autoload :PathResolver
54
- autoload :FileSystemResolver
55
- autoload :OptimizedFileSystemResolver
56
- autoload :FallbackFileSystemResolver
57
- end
58
-
59
- autoload_at "action_view/buffers" do
60
- autoload :OutputBuffer
61
- autoload :StreamingBuffer
62
- end
63
-
64
- autoload_at "action_view/flows" do
65
- autoload :OutputFlow
66
- autoload :StreamingFlow
67
- end
68
-
69
- autoload_at "action_view/template/error" do
70
- autoload :MissingTemplate
71
- autoload :ActionViewError
72
- autoload :EncodingError
73
- autoload :TemplateError
74
- autoload :WrongEncodingError
75
- end
76
- end
77
-
78
- ENCODING_FLAG = '#.*coding[:=]\s*(\S+)[ \t]*'
79
- end
80
-
81
- require 'active_support/i18n'
82
- require 'active_support/core_ext/string/output_safety'
83
-
84
- I18n.load_path << "#{File.dirname(__FILE__)}/action_view/locale/en.yml"
@@ -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
@@ -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,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,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,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