diff options
-rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
-rw-r--r-- | actionpack/lib/action_view/helpers/asset_tag_helper.rb | 124 | ||||
-rw-r--r-- | actionpack/test/template/asset_tag_helper_test.rb | 171 |
3 files changed, 150 insertions, 147 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 7858d9296e..ddd6050480 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Add more extensive documentation to the AssetTagHelper. Closes #6452 [Bob Silva] + * Clean up multiple calls to #stringify_keys in TagHelper, add better documentation and testing for TagHelper. Closes #6394 [Bob Silva] * [DOCS] fix reference to ActionController::Macros::AutoComplete for #text_field_with_auto_complete. Closes #2578 [Jan Prill] diff --git a/actionpack/lib/action_view/helpers/asset_tag_helper.rb b/actionpack/lib/action_view/helpers/asset_tag_helper.rb index 086880b06d..29d77f479d 100644 --- a/actionpack/lib/action_view/helpers/asset_tag_helper.rb +++ b/actionpack/lib/action_view/helpers/asset_tag_helper.rb @@ -3,20 +3,36 @@ require File.dirname(__FILE__) + '/url_helper' require File.dirname(__FILE__) + '/tag_helper' module ActionView - module Helpers - # Provides methods for linking a HTML page together with other assets, such as javascripts, stylesheets, and feeds. + module Helpers #:nodoc: + # Provides methods for linking an HTML page together with other assets such + # as images, javascripts, stylesheets, and feeds. You can direct Rails to + # link to assets from a dedicated assets server by setting ActionController::Base.asset_host + # in your environment.rb. These methods do not verify the assets exist before + # linking to them. + # + # ActionController::Base.asset_host = "http://assets.example.com" + # image_tag("rails.png") + # => <img src="http://assets.example.com/images/rails.png" alt="Rails" /> + # stylesheet_include_tag("application") + # => <link href="http://assets.example.com/stylesheets/application.css" media="screen" rel="Stylesheet" type="text/css" /> module AssetTagHelper - # Returns a link tag that browsers and news readers can use to auto-detect a RSS or ATOM feed for this page. The +type+ can - # either be <tt>:rss</tt> (default) or <tt>:atom</tt> and the +options+ follow the url_for style of declaring a link target. + # Returns a link tag that browsers and news readers can use to auto-detect + # an RSS or ATOM feed. The +type+ can either be <tt>:rss</tt> (default) or + # <tt>:atom</tt>. Control the link options in url_for format using the + # +url_options+. You can modify the LINK tag itself in +tag_options+. # - # Examples: - # auto_discovery_link_tag # => + # Tag Options: + # * <tt>:rel</tt> - Specify the relation of this link, defaults to "alternate" + # * <tt>:type</tt> - Override the auto-generated mime type + # * <tt>:title</tt> - Specify the title of the link, defaults to the +type+ + # + # auto_discovery_link_tag # => # <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.curenthost.com/controller/action" /> - # auto_discovery_link_tag(:atom) # => + # auto_discovery_link_tag(:atom) # => # <link rel="alternate" type="application/atom+xml" title="ATOM" href="http://www.curenthost.com/controller/action" /> - # auto_discovery_link_tag(:rss, {:action => "feed"}) # => + # auto_discovery_link_tag(:rss, {:action => "feed"}) # => # <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.curenthost.com/controller/feed" /> - # auto_discovery_link_tag(:rss, {:action => "feed"}, {:title => "My RSS"}) # => + # auto_discovery_link_tag(:rss, {:action => "feed"}, {:title => "My RSS"}) # => # <link rel="alternate" type="application/rss+xml" title="My RSS" href="http://www.curenthost.com/controller/feed" /> def auto_discovery_link_tag(type = :rss, url_options = {}, tag_options = {}) tag( @@ -28,9 +44,14 @@ module ActionView ) end - # Returns path to a javascript asset. Example: + # Computes the path to a javascript asset in the public javascripts directory. + # If the +source+ filename has no extension, .js will be appended. + # Full paths from the document root will be passed through. + # Used internally by javascript_include_tag to build the script path. # # javascript_path "xmlhr" # => /javascripts/xmlhr.js + # javascript_path "dir/xmlhr.js" # => /javascripts/dir/xmlhr.js + # javascript_path "/dir/xmlhr" # => /dir/xmlhr.js def javascript_path(source) compute_public_path(source, 'javascripts', 'js') end @@ -38,7 +59,15 @@ module ActionView JAVASCRIPT_DEFAULT_SOURCES = ['prototype', 'effects', 'dragdrop', 'controls'] unless const_defined?(:JAVASCRIPT_DEFAULT_SOURCES) @@javascript_default_sources = JAVASCRIPT_DEFAULT_SOURCES.dup - # Returns a script include tag per source given as argument. Examples: + # Returns an html script tag for each of the +sources+ provided. You + # can pass in the filename (.js extension is optional) of javascript files + # that exist in your public/javascripts directory for inclusion into the + # current page or you can pass the full path relative to your document + # root. To include the Prototype and Scriptaculous javascript libraries in + # your application, pass <tt>:defaults</tt> as the source. When using + # :defaults, if an <tt>application.js</tt> file exists in your public + # javascripts directory, it will be included as well. You can modify the + # html attributes of the script tag by passing a hash as the last argument. # # javascript_include_tag "xmlhr" # => # <script type="text/javascript" src="/javascripts/xmlhr.js"></script> @@ -52,11 +81,6 @@ module ActionView # <script type="text/javascript" src="/javascripts/effects.js"></script> # ... # <script type="text/javascript" src="/javascripts/application.js"></script> *see below - # - # If there's an <tt>application.js</tt> file in your <tt>public/javascripts</tt> directory, - # <tt>javascript_include_tag :defaults</tt> will automatically include it. This file - # facilitates the inclusion of small snippets of JavaScript code, along the lines of - # <tt>controllers/application.rb</tt> and <tt>helpers/application_helper.rb</tt>. def javascript_include_tag(*sources) options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { } @@ -69,18 +93,16 @@ module ActionView sources << "application" if defined?(RAILS_ROOT) && File.exists?("#{RAILS_ROOT}/public/javascripts/application.js") end - sources.collect { |source| + sources.collect do |source| source = javascript_path(source) content_tag("script", "", { "type" => "text/javascript", "src" => source }.merge(options)) - }.join("\n") + end.join("\n") end # Register one or more additional JavaScript files to be included when - # - # javascript_include_tag :defaults - # - # is called. This method is intended to be called only from plugin initialization - # to register extra .js files the plugin installed in <tt>public/javascripts</tt>. + # <tt>javascript_include_tag :defaults</tt> is called. This method is + # only intended to be called from plugin initialization to register additional + # .js files that the plugin installed in <tt>public/javascripts</tt>. def self.register_javascript_include_default(*sources) @@javascript_default_sources.concat(sources) end @@ -89,14 +111,21 @@ module ActionView @@javascript_default_sources = JAVASCRIPT_DEFAULT_SOURCES.dup end - # Returns path to a stylesheet asset. Example: + # Computes the path to a stylesheet asset in the public stylesheets directory. + # If the +source+ filename has no extension, .css will be appended. + # Full paths from the document root will be passed through. + # Used internally by stylesheet_link_tag to build the stylesheet path. # # stylesheet_path "style" # => /stylesheets/style.css + # stylesheet_path "dir/style.css" # => /stylesheets/dir/style.css + # stylesheet_path "/dir/style.css" # => /dir/style.css def stylesheet_path(source) compute_public_path(source, 'stylesheets', 'css') end - # Returns a css link tag per source given as argument. Examples: + # Returns a stylesheet link tag for the sources specified as arguments. If + # you don't specify an extension, .css will be appended automatically. + # You can modify the link attributes by passing a hash as the last argument. # # stylesheet_link_tag "style" # => # <link href="/stylesheets/style.css" media="screen" rel="Stylesheet" type="text/css" /> @@ -109,18 +138,20 @@ module ActionView # <link href="/css/stylish.css" media="screen" rel="Stylesheet" type="text/css" /> def stylesheet_link_tag(*sources) options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { } - sources.collect { |source| + sources.collect do |source| source = stylesheet_path(source) tag("link", { "rel" => "Stylesheet", "type" => "text/css", "media" => "screen", "href" => source }.merge(options)) - }.join("\n") + end.join("\n") end - # Returns path to an image asset. Example: + # Computes the path to an image asset in the public images directory. + # Full paths from the document root will be passed through. + # Used internally by image_tag to build the image path. Passing + # a filename without an extension is deprecated. # - # The +src+ can be supplied as a... - # * full path, like "/my_images/image.gif" - # * file name, like "rss.gif", that gets expanded to "/images/rss.gif" - # * file name without extension, like "logo", that gets expanded to "/images/logo.png" + # image_path("edit.png") # => /images/edit.png + # image_path("icons/edit.png") # => /images/icons/edit.png + # image_path("/icons/edit.png") # => /icons/edit.png def image_path(source) unless (source.split("/").last || source).include?(".") || source.blank? ActiveSupport::Deprecation.warn( @@ -133,15 +164,24 @@ module ActionView compute_public_path(source, 'images', 'png') end - # Returns an image tag converting the +options+ into html options on the tag, but with these special cases: + # Returns an html image tag for the +source+. The +source+ can be a full + # path or a file that exists in your public images directory. Note that + # specifying a filename without the extension is now deprecated in Rails. + # You can add html attributes using the +options+. The +options+ supports + # two additional keys for convienence and conformance: # - # * <tt>:alt</tt> - If no alt text is given, the file name part of the +src+ is used (capitalized and without the extension) - # * <tt>:size</tt> - Supplied as "XxY", so "30x45" becomes width="30" and height="45" + # * <tt>:alt</tt> - If no alt text is given, the file name part of the + # +source+ is used (capitalized and without the extension) + # * <tt>:size</tt> - Supplied as "{Width}x{Height}", so "30x45" becomes + # width="30" and height="45". <tt>:size</tt> will be ignored if the + # value is not in the correct format. # - # The +src+ can be supplied as a... - # * full path, like "/my_images/image.gif" - # * file name, like "rss.gif", that gets expanded to "/images/rss.gif" - # * file name without extension, like "logo", that gets expanded to "/images/logo.png" + # image_tag("icon.png") # => + # <img src="/images/icon.png" alt="Icon" /> + # image_tag("icon.png", :size => "16x10", :alt => "Edit Entry") # => + # <img src="/images/icon.png" width="16" height="10" alt="Edit Entry" /> + # image_tag("/icons/icon.gif", :size => "16x16") # => + # <img src="/icons/icon.gif" width="16" height="16" alt="Icon" /> def image_tag(source, options = {}) options.symbolize_keys! @@ -149,8 +189,8 @@ module ActionView options[:alt] ||= File.basename(options[:src], '.*').split('.').first.capitalize if options[:size] - options[:width], options[:height] = options[:size].split("x") - options.delete :size + options[:width], options[:height] = options[:size].split("x") if options[:size] =~ %r{^\d+x\d+$} + options.delete(:size) end tag("img", options) @@ -163,7 +203,7 @@ module ActionView unless source =~ %r{^[-a-z]+://} source = "/#{dir}/#{source}" unless source[0] == ?/ asset_id = rails_asset_id(source) - source << '?' + asset_id if defined?(RAILS_ROOT) and not asset_id.blank? + source << '?' + asset_id if defined?(RAILS_ROOT) && !asset_id.blank? source = "#{ActionController::Base.asset_host}#{@controller.request.relative_url_root}#{source}" end source diff --git a/actionpack/test/template/asset_tag_helper_test.rb b/actionpack/test/template/asset_tag_helper_test.rb index 4b941921cf..f730f80a92 100644 --- a/actionpack/test/template/asset_tag_helper_test.rb +++ b/actionpack/test/template/asset_tag_helper_test.rb @@ -34,6 +34,7 @@ class AssetTagHelperTest < Test::Unit::TestCase AutoDiscoveryToTag = { %(auto_discovery_link_tag) => %(<link href="http://www.example.com" rel="alternate" title="RSS" type="application/rss+xml" />), + %(auto_discovery_link_tag(:rss)) => %(<link href="http://www.example.com" rel="alternate" title="RSS" type="application/rss+xml" />), %(auto_discovery_link_tag(:atom)) => %(<link href="http://www.example.com" rel="alternate" title="ATOM" type="application/atom+xml" />), %(auto_discovery_link_tag(:rss, :action => "feed")) => %(<link href="http://www.example.com" rel="alternate" title="RSS" type="application/rss+xml" />), %(auto_discovery_link_tag(:rss, "http://localhost/feed")) => %(<link href="http://localhost/feed" rel="alternate" title="RSS" type="application/rss+xml" />), @@ -47,11 +48,13 @@ class AssetTagHelperTest < Test::Unit::TestCase JavascriptPathToTag = { %(javascript_path("xmlhr")) => %(/javascripts/xmlhr.js), - %(javascript_path("super/xmlhr")) => %(/javascripts/super/xmlhr.js) + %(javascript_path("super/xmlhr")) => %(/javascripts/super/xmlhr.js), + %(javascript_path("/super/xmlhr.js")) => %(/super/xmlhr.js) } JavascriptIncludeToTag = { %(javascript_include_tag("xmlhr")) => %(<script src="/javascripts/xmlhr.js" type="text/javascript"></script>), + %(javascript_include_tag("xmlhr.js")) => %(<script src="/javascripts/xmlhr.js" type="text/javascript"></script>), %(javascript_include_tag("xmlhr", :lang => "vbscript")) => %(<script lang="vbscript" src="/javascripts/xmlhr.js" type="text/javascript"></script>), %(javascript_include_tag("common.javascript", "/elsewhere/cools")) => %(<script src="/javascripts/common.javascript" type="text/javascript"></script>\n<script src="/elsewhere/cools.js" type="text/javascript"></script>), %(javascript_include_tag(:defaults)) => %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>), @@ -61,12 +64,14 @@ class AssetTagHelperTest < Test::Unit::TestCase StylePathToTag = { %(stylesheet_path("style")) => %(/stylesheets/style.css), + %(stylesheet_path("style.css")) => %(/stylesheets/style.css), %(stylesheet_path('dir/file')) => %(/stylesheets/dir/file.css), - %(stylesheet_path('/dir/file')) => %(/dir/file.css) + %(stylesheet_path('/dir/file.rcss')) => %(/dir/file.rcss) } StyleLinkToTag = { %(stylesheet_link_tag("style")) => %(<link href="/stylesheets/style.css" media="screen" rel="Stylesheet" type="text/css" />), + %(stylesheet_link_tag("style.css")) => %(<link href="/stylesheets/style.css" media="screen" rel="Stylesheet" type="text/css" />), %(stylesheet_link_tag("/dir/file")) => %(<link href="/dir/file.css" media="screen" rel="Stylesheet" type="text/css" />), %(stylesheet_link_tag("dir/file")) => %(<link href="/stylesheets/dir/file.css" media="screen" rel="Stylesheet" type="text/css" />), %(stylesheet_link_tag("style", :media => "all")) => %(<link href="/stylesheets/style.css" media="all" rel="Stylesheet" type="text/css" />), @@ -75,18 +80,28 @@ class AssetTagHelperTest < Test::Unit::TestCase } ImagePathToTag = { - %(image_path("xml")) => %(/images/xml.png), + %(image_path("xml.png")) => %(/images/xml.png), + %(image_path("dir/xml.png")) => %(/images/dir/xml.png), + %(image_path("/dir/xml.png")) => %(/dir/xml.png) } ImageLinkToTag = { - %(image_tag("xml")) => %(<img alt="Xml" src="/images/xml.png" />), - %(image_tag("rss", :alt => "rss syndication")) => %(<img alt="rss syndication" src="/images/rss.png" />), - %(image_tag("gold", :size => "45x70")) => %(<img alt="Gold" height="70" src="/images/gold.png" width="45" />), - %(image_tag("symbolize", "size" => "45x70")) => %(<img alt="Symbolize" height="70" src="/images/symbolize.png" width="45" />), - %(image_tag("http://www.rubyonrails.com/images/rails")) => %(<img alt="Rails" src="http://www.rubyonrails.com/images/rails.png" />) + %(image_tag("xml.png")) => %(<img alt="Xml" src="/images/xml.png" />), + %(image_tag("rss.gif", :alt => "rss syndication")) => %(<img alt="rss syndication" src="/images/rss.gif" />), + %(image_tag("gold.png", :size => "45x70")) => %(<img alt="Gold" height="70" src="/images/gold.png" width="45" />), + %(image_tag("gold.png", "size" => "45x70")) => %(<img alt="Gold" height="70" src="/images/gold.png" width="45" />), + %(image_tag("error.png", "size" => "45")) => %(<img alt="Error" src="/images/error.png" />), + %(image_tag("error.png", "size" => "45 x 70")) => %(<img alt="Error" src="/images/error.png" />), + %(image_tag("error.png", "size" => "x")) => %(<img alt="Error" src="/images/error.png" />), + %(image_tag("http://www.rubyonrails.com/images/rails.png")) => %(<img alt="Rails" src="http://www.rubyonrails.com/images/rails.png" />) } - def test_auto_discovery + DeprecatedImagePathToTag = { + %(image_path("xml")) => %(/images/xml.png) + } + + + def test_auto_discovery_link_tag AutoDiscoveryToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } end @@ -94,8 +109,12 @@ class AssetTagHelperTest < Test::Unit::TestCase JavascriptPathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } end - def test_javascript_include + def test_javascript_include_tag JavascriptIncludeToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } + + Object.send(:const_set, :RAILS_ROOT, File.dirname(__FILE__) + "/../fixtures/") + ENV["RAILS_ASSET_ID"] = "1" + assert_dom_equal(%(<script src="/javascripts/prototype.js?1" type="text/javascript"></script>\n<script src="/javascripts/effects.js?1" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js?1" type="text/javascript"></script>\n<script src="/javascripts/controls.js?1" type="text/javascript"></script>\n<script src="/javascripts/application.js?1" type="text/javascript"></script>), javascript_include_tag(:defaults)) end def test_register_javascript_include_default @@ -105,23 +124,25 @@ class AssetTagHelperTest < Test::Unit::TestCase assert_dom_equal %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/slider.js" type="text/javascript"></script>\n<script src="/javascripts/lib1.js" type="text/javascript"></script>\n<script src="/elsewhere/blub/lib2.js" type="text/javascript"></script>), javascript_include_tag(:defaults) end - def test_style_path + def test_stylesheet_path StylePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } end - def test_style_link + def test_stylesheet_link_tag StyleLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } end def test_image_path - ImagePathToTag.each do |method, tag| - assert_deprecated(/image_path/) { assert_dom_equal(tag, eval(method)) } - end + ImagePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } end - + def test_image_tag - ImageLinkToTag.each do |method, tag| - assert_deprecated(/image_path/) { assert_dom_equal(tag, eval(method)) } + ImageLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } + end + + def test_should_deprecate_image_filename_with_no_extension + DeprecatedImagePathToTag.each do |method, tag| + assert_deprecated("image_path") { assert_dom_equal(tag, eval(method)) } end end @@ -131,12 +152,12 @@ class AssetTagHelperTest < Test::Unit::TestCase assert_equal %(<img alt="Rails" src="/images/rails.png?#{expected_time}" />), image_tag("rails.png") end - def test_skipping_asset_id_on_complete_url + def test_should_skip_asset_id_on_complete_url Object.send(:const_set, :RAILS_ROOT, File.dirname(__FILE__) + "/../fixtures/") assert_equal %(<img alt="Rails" src="http://www.example.com/rails.png" />), image_tag("http://www.example.com/rails.png") end - def test_preset_asset_id + def test_should_use_preset_asset_id Object.send(:const_set, :RAILS_ROOT, File.dirname(__FILE__) + "/../fixtures/") ENV["RAILS_ASSET_ID"] = "4500" assert_equal %(<img alt="Rails" src="/images/rails.png?4500" />), image_tag("rails.png") @@ -148,13 +169,11 @@ class AssetTagHelperTest < Test::Unit::TestCase assert_equal %(<img alt="Rails" src="/images/rails.png" />), image_tag("rails.png") end - def test_url_dup_image_tag - Object.send(:const_set, :RAILS_ROOT, File.dirname(__FILE__) + "/../fixtures/") - img_url = '/images/rails.png' - url_copy = img_url.dup - image_tag(img_url) - - assert_equal url_copy, img_url + def test_should_not_modify_source_string + source = '/images/rails.png' + copy = source.dup + image_tag(source) + assert_equal copy, source end end @@ -168,13 +187,13 @@ class AssetTagHelperNonVhostTest < Test::Unit::TestCase attr_accessor :request def url_for(options, *parameters_for_method_reference) - "http://www.example.com/calloboration/hieraki" + "http://www.example.com/collaboration/hieraki" end end.new @request = Class.new do def relative_url_root - "/calloboration/hieraki" + "/collaboration/hieraki" end end.new @@ -183,89 +202,31 @@ class AssetTagHelperNonVhostTest < Test::Unit::TestCase ActionView::Helpers::AssetTagHelper::reset_javascript_include_default end - AutoDiscoveryToTag = { - %(auto_discovery_link_tag(:rss, :action => "feed")) => %(<link href="http://www.example.com/calloboration/hieraki" rel="alternate" title="RSS" type="application/rss+xml" />), - %(auto_discovery_link_tag(:atom)) => %(<link href="http://www.example.com/calloboration/hieraki" rel="alternate" title="ATOM" type="application/atom+xml" />), - %(auto_discovery_link_tag) => %(<link href="http://www.example.com/calloboration/hieraki" rel="alternate" title="RSS" type="application/rss+xml" />), - } - - JavascriptPathToTag = { - %(javascript_path("xmlhr")) => %(/calloboration/hieraki/javascripts/xmlhr.js), - } - - JavascriptIncludeToTag = { - %(javascript_include_tag("xmlhr")) => %(<script src="/calloboration/hieraki/javascripts/xmlhr.js" type="text/javascript"></script>), - %(javascript_include_tag("common.javascript", "/elsewhere/cools")) => %(<script src="/calloboration/hieraki/javascripts/common.javascript" type="text/javascript"></script>\n<script src="/calloboration/hieraki/elsewhere/cools.js" type="text/javascript"></script>), - %(javascript_include_tag(:defaults)) => %(<script src="/calloboration/hieraki/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/effects.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/controls.js" type="text/javascript"></script>) - } - - StylePathToTag = { - %(stylesheet_path("style")) => %(/calloboration/hieraki/stylesheets/style.css), - } - - StyleLinkToTag = { - %(stylesheet_link_tag("style")) => %(<link href="/calloboration/hieraki/stylesheets/style.css" media="screen" rel="Stylesheet" type="text/css" />), - %(stylesheet_link_tag("random.styles", "/css/stylish")) => %(<link href="/calloboration/hieraki/stylesheets/random.styles" media="screen" rel="Stylesheet" type="text/css" />\n<link href="/calloboration/hieraki/css/stylish.css" media="screen" rel="Stylesheet" type="text/css" />) - } - - ImagePathToTag = { - %(image_path("xml")) => %(/calloboration/hieraki/images/xml.png), - } - - ImageLinkToTag = { - %(image_tag("xml")) => %(<img alt="Xml" src="/calloboration/hieraki/images/xml.png" />), - %(image_tag("rss", :alt => "rss syndication")) => %(<img alt="rss syndication" src="/calloboration/hieraki/images/rss.png" />), - %(image_tag("gold", :size => "45x70")) => %(<img alt="Gold" height="70" src="/calloboration/hieraki/images/gold.png" width="45" />), - %(image_tag("symbolize", "size" => "45x70")) => %(<img alt="Symbolize" height="70" src="/calloboration/hieraki/images/symbolize.png" width="45" />) - } - - def test_auto_discovery - AutoDiscoveryToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } - end - - def test_javascript_path - JavascriptPathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } - end - - def test_javascript_include - JavascriptIncludeToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } + def test_should_compute_proper_path + assert_dom_equal(%(<link href="http://www.example.com/collaboration/hieraki" rel="alternate" title="RSS" type="application/rss+xml" />), auto_discovery_link_tag) + assert_dom_equal(%(/collaboration/hieraki/javascripts/xmlhr.js), javascript_path("xmlhr")) + assert_dom_equal(%(/collaboration/hieraki/stylesheets/style.css), stylesheet_path("style")) + assert_dom_equal(%(/collaboration/hieraki/images/xml.png), image_path("xml.png")) end - def test_register_javascript_include_default - ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'slider' - assert_dom_equal %(<script src="/calloboration/hieraki/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/effects.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/controls.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/slider.js" type="text/javascript"></script>), javascript_include_tag(:defaults) - ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'lib1', '/elsewhere/blub/lib2' - assert_dom_equal %(<script src="/calloboration/hieraki/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/effects.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/controls.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/slider.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/javascripts/lib1.js" type="text/javascript"></script>\n<script src="/calloboration/hieraki/elsewhere/blub/lib2.js" type="text/javascript"></script>), javascript_include_tag(:defaults) + def test_should_ignore_relative_root_path_on_complete_url + assert_dom_equal(%(http://www.example.com/images/xml.png), image_path("http://www.example.com/images/xml.png")) end - def test_style_path - StylePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } - end - - def test_style_link - StyleLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } + def test_should_compute_proper_path_with_asset_host + ActionController::Base.asset_host = "http://assets.example.com" + assert_dom_equal(%(<link href="http://www.example.com/collaboration/hieraki" rel="alternate" title="RSS" type="application/rss+xml" />), auto_discovery_link_tag) + assert_dom_equal(%(http://assets.example.com/collaboration/hieraki/javascripts/xmlhr.js), javascript_path("xmlhr")) + assert_dom_equal(%(http://assets.example.com/collaboration/hieraki/stylesheets/style.css), stylesheet_path("style")) + assert_dom_equal(%(http://assets.example.com/collaboration/hieraki/images/xml.png), image_path("xml.png")) + ensure + ActionController::Base.asset_host = "" end - def test_image_path - ImagePathToTag.each { |method, tag| assert_deprecated(/image_path/) { assert_dom_equal(tag, eval(method)) } } - end - - def test_image_tag - ImageLinkToTag.each do |method, tag| - assert_deprecated(/image_path/) { assert_dom_equal(tag, eval(method)) } - end - # Assigning a default alt tag should not cause an exception to be raised - assert_nothing_raised { image_tag('') } - end - - def test_stylesheet_with_asset_host_already_encoded - ActionController::Base.asset_host = "http://foo.example.com" - result = stylesheet_link_tag("http://bar.example.com/stylesheets/style.css") - assert_dom_equal( - %(<link href="http://bar.example.com/stylesheets/style.css" media="screen" rel="Stylesheet" type="text/css" />), - result) + def test_should_ignore_asset_host_on_complete_url + ActionController::Base.asset_host = "http://assets.example.com" + assert_dom_equal(%(<link href="http://bar.example.com/stylesheets/style.css" media="screen" rel="Stylesheet" type="text/css" />), stylesheet_link_tag("http://bar.example.com/stylesheets/style.css")) ensure ActionController::Base.asset_host = "" end - end |