padrino-helpers 0.12.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/padrino-helpers.rb +4 -1
- data/lib/padrino-helpers/asset_tag_helpers.rb +17 -14
- data/lib/padrino-helpers/breadcrumb_helpers.rb +6 -6
- data/lib/padrino-helpers/form_builder/abstract_form_builder.rb +119 -163
- data/lib/padrino-helpers/form_builder/deprecated_builder_methods.rb +92 -0
- data/lib/padrino-helpers/form_helpers.rb +66 -347
- data/lib/padrino-helpers/form_helpers/errors.rb +138 -0
- data/lib/padrino-helpers/form_helpers/options.rb +97 -0
- data/lib/padrino-helpers/form_helpers/security.rb +70 -0
- data/lib/padrino-helpers/output_helpers.rb +1 -1
- data/lib/padrino-helpers/output_helpers/abstract_handler.rb +1 -1
- data/lib/padrino-helpers/render_helpers.rb +10 -9
- data/lib/padrino-helpers/tag_helpers.rb +2 -1
- data/lib/padrino/rendering.rb +378 -0
- data/lib/padrino/rendering/extensions/erubis.rb +74 -0
- data/lib/padrino/rendering/extensions/haml.rb +29 -0
- data/lib/padrino/rendering/extensions/slim.rb +21 -0
- data/padrino-helpers.gemspec +2 -1
- data/test/fixtures/apps/.components +6 -0
- data/test/fixtures/apps/.gitignore +7 -0
- data/test/fixtures/apps/render.rb +25 -0
- data/test/fixtures/apps/views/article/comment/show.slim +1 -0
- data/test/fixtures/apps/views/blog/post.erb +1 -0
- data/test/fixtures/apps/views/layouts/specific.erb +1 -0
- data/test/fixtures/apps/views/test/post.erb +1 -0
- data/test/fixtures/layouts/layout.erb +1 -0
- data/test/fixtures/markup_app/app.rb +0 -1
- data/test/fixtures/render_app/app.rb +25 -1
- data/test/fixtures/render_app/views/_unsafe.html.builder +2 -0
- data/test/fixtures/render_app/views/_unsafe_object.html.builder +2 -0
- data/test/fixtures/render_app/views/ruby_block_capture_erb.erb +1 -0
- data/test/fixtures/render_app/views/ruby_block_capture_haml.haml +1 -0
- data/test/fixtures/render_app/views/ruby_block_capture_slim.slim +1 -0
- data/test/helper.rb +65 -1
- data/test/test_asset_tag_helpers.rb +83 -79
- data/test/test_breadcrumb_helpers.rb +20 -20
- data/test/test_form_builder.rb +196 -196
- data/test/test_form_helpers.rb +163 -163
- data/test/test_format_helpers.rb +65 -65
- data/test/test_locale.rb +1 -1
- data/test/test_number_helpers.rb +10 -11
- data/test/test_output_helpers.rb +28 -28
- data/test/test_render_helpers.rb +89 -35
- data/test/test_rendering.rb +683 -0
- data/test/test_rendering_extensions.rb +14 -0
- data/test/test_tag_helpers.rb +23 -23
- metadata +57 -5
| @@ -0,0 +1,74 @@ | |
| 1 | 
            +
            begin
         | 
| 2 | 
            +
              require 'erubis'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              module Padrino
         | 
| 5 | 
            +
                module Erubis
         | 
| 6 | 
            +
                  ##
         | 
| 7 | 
            +
                  # SafeBufferEnhancer is an Erubis Enhancer that compiles templates that
         | 
| 8 | 
            +
                  # are fit for using ActiveSupport::SafeBuffer as a Buffer.
         | 
| 9 | 
            +
                  #
         | 
| 10 | 
            +
                  # @api private
         | 
| 11 | 
            +
                  module SafeBufferEnhancer
         | 
| 12 | 
            +
                    def add_expr_literal(src, code)
         | 
| 13 | 
            +
                      src << " #{@bufvar}.concat((" << code << ').to_s);'
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    def add_stmt(src, code)
         | 
| 17 | 
            +
                      code = code.sub('end', 'nil;end') if code =~ /\A\s*end\s*\Z/
         | 
| 18 | 
            +
                      src << code
         | 
| 19 | 
            +
                      src << ';' unless code[-1] == ?\n
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    def add_expr_escaped(src, code)
         | 
| 23 | 
            +
                      src << " #{@bufvar}.safe_concat " << code << ';'
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    def add_text(src, text)
         | 
| 27 | 
            +
                      src << " #{@bufvar}.safe_concat '" << escape_text(text) << "';" unless text.empty?
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  ##
         | 
| 32 | 
            +
                  # SafeBufferTemplate is the classic Erubis template, augmented with
         | 
| 33 | 
            +
                  # SafeBufferEnhancer.
         | 
| 34 | 
            +
                  #
         | 
| 35 | 
            +
                  # @api private
         | 
| 36 | 
            +
                  class SafeBufferTemplate < ::Erubis::Eruby
         | 
| 37 | 
            +
                    include SafeBufferEnhancer
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  ##
         | 
| 41 | 
            +
                  # Modded ErubisTemplate that doesn't insist in an String as output
         | 
| 42 | 
            +
                  # buffer.
         | 
| 43 | 
            +
                  #
         | 
| 44 | 
            +
                  # @api private
         | 
| 45 | 
            +
                  class Template < Tilt::ErubisTemplate
         | 
| 46 | 
            +
                    def render(*args)
         | 
| 47 | 
            +
                      app       = args.first
         | 
| 48 | 
            +
                      app_class = app.class
         | 
| 49 | 
            +
                      @is_padrino_app = (defined?(Padrino::Application) && app.kind_of?(Padrino::Application)) || 
         | 
| 50 | 
            +
                                        (app_class.respond_to?(:erb) && app_class.erb[:engine_class] == Padrino::Erubis::SafeBufferTemplate)
         | 
| 51 | 
            +
                      super
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    ##
         | 
| 55 | 
            +
                    # In preamble we need a flag `__in_erb_template` and SafeBuffer for padrino apps.
         | 
| 56 | 
            +
                    #
         | 
| 57 | 
            +
                    def precompiled_preamble(locals)
         | 
| 58 | 
            +
                      original = super
         | 
| 59 | 
            +
                      return original unless @is_padrino_app
         | 
| 60 | 
            +
                      "__in_erb_template = true\n" << original.rpartition("\n").first << "#{@outvar} = _buf = ActiveSupport::SafeBuffer.new\n"
         | 
| 61 | 
            +
                    end
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              Tilt.prefer(Padrino::Erubis::Template, :erb)
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              if defined? Padrino::Rendering
         | 
| 69 | 
            +
                Padrino::Rendering.engine_configurations[:erb] = {
         | 
| 70 | 
            +
                  :engine_class => Padrino::Erubis::SafeBufferTemplate,
         | 
| 71 | 
            +
                }
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
            rescue LoadError
         | 
| 74 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            begin
         | 
| 2 | 
            +
              require 'haml'
         | 
| 3 | 
            +
              require 'haml/helpers/xss_mods'
         | 
| 4 | 
            +
              require 'haml/helpers/action_view_extensions'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              module Haml
         | 
| 7 | 
            +
                module Helpers
         | 
| 8 | 
            +
                  include XssMods
         | 
| 9 | 
            +
                  include ActionViewExtensions
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                module Util
         | 
| 13 | 
            +
                  def self.rails_xss_safe?
         | 
| 14 | 
            +
                    true
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              if defined? Padrino::Rendering
         | 
| 20 | 
            +
                Padrino::Rendering.engine_configurations[:haml] = {
         | 
| 21 | 
            +
                  :escape_html => true,
         | 
| 22 | 
            +
                }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                class Tilt::HamlTemplate
         | 
| 25 | 
            +
                  include Padrino::Rendering::SafeTemplate
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            rescue LoadError
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            begin
         | 
| 2 | 
            +
              require 'slim'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              if defined? Padrino::Rendering
         | 
| 5 | 
            +
                Padrino::Rendering.engine_configurations[:slim] = {
         | 
| 6 | 
            +
                  :generator => Temple::Generators::RailsOutputBuffer,
         | 
| 7 | 
            +
                  :buffer => "@_out_buf",
         | 
| 8 | 
            +
                  :use_html_safe => true,
         | 
| 9 | 
            +
                  :disable_capture => true,
         | 
| 10 | 
            +
                }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                class Slim::Template
         | 
| 13 | 
            +
                  include Padrino::Rendering::SafeTemplate
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def precompiled_preamble(locals)
         | 
| 16 | 
            +
                    "__in_slim_template = true\n" << super
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            rescue LoadError
         | 
| 21 | 
            +
            end
         | 
    
        data/padrino-helpers.gemspec
    CHANGED
    
    | @@ -23,6 +23,7 @@ Gem::Specification.new do |s| | |
| 23 23 | 
             
              s.require_paths = ["lib"]
         | 
| 24 24 | 
             
              s.rdoc_options  = ["--charset=UTF-8"]
         | 
| 25 25 |  | 
| 26 | 
            -
              s.add_dependency("padrino- | 
| 26 | 
            +
              s.add_dependency("padrino-support", Padrino.version)
         | 
| 27 | 
            +
              s.add_dependency("tilt", "~> 1.4.1")
         | 
| 27 28 | 
             
              s.add_dependency("i18n", "~> 0.6", ">= 0.6.7")
         | 
| 28 29 | 
             
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            PADRINO_ROOT = File.dirname(__FILE__) unless defined? PADRINO_ROOT
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class RenderDemo2 < Padrino::Application
         | 
| 4 | 
            +
              register Padrino::Rendering
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              set :reload, true
         | 
| 7 | 
            +
            end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            RenderDemo2.controllers :blog do
         | 
| 10 | 
            +
              get '/' do
         | 
| 11 | 
            +
                render 'post'
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              get '/override' do
         | 
| 15 | 
            +
                render 'post', :layout => RenderDemo2.layout_path('specific') 
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            RenderDemo2.controllers :article, :comment do
         | 
| 20 | 
            +
              get '/' do
         | 
| 21 | 
            +
                render 'show'
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            Padrino.load!
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            | okay comment
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            okay
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            otay
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            test
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            <%= yield %> absolute layout
         | 
| @@ -9,7 +9,6 @@ class RenderUser | |
| 9 9 | 
             
            end
         | 
| 10 10 |  | 
| 11 11 | 
             
            class RenderDemo < Padrino::Application
         | 
| 12 | 
            -
              register Padrino::Rendering
         | 
| 13 12 | 
             
              register Padrino::Helpers
         | 
| 14 13 |  | 
| 15 14 | 
             
              configure do
         | 
| @@ -36,6 +35,10 @@ class RenderDemo < Padrino::Application | |
| 36 35 | 
             
                render "wrong_capture_#{params[:ext]}"
         | 
| 37 36 | 
             
              end
         | 
| 38 37 |  | 
| 38 | 
            +
              get '/ruby_block_capture_:ext' do
         | 
| 39 | 
            +
                render "ruby_block_capture_#{params[:ext]}"
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 39 42 | 
             
              # partial with object
         | 
| 40 43 | 
             
              get '/partial/object' do
         | 
| 41 44 | 
             
                partial 'template/user', :object => RenderUser.new('John'), :locals => { :extra => "bar" }
         | 
| @@ -46,6 +49,11 @@ class RenderDemo < Padrino::Application | |
| 46 49 | 
             
                partial 'template/user', :collection => [RenderUser.new('John'), RenderUser.new('Billy')], :locals => { :extra => "bar" }
         | 
| 47 50 | 
             
              end
         | 
| 48 51 |  | 
| 52 | 
            +
              # partial with collection and ext
         | 
| 53 | 
            +
              get '/partial/collection.ext' do
         | 
| 54 | 
            +
                partial 'template/user.haml', :collection => [RenderUser.new('John'), RenderUser.new('Billy')], :locals => { :extra => "bar" }
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 49 57 | 
             
              # partial with locals
         | 
| 50 58 | 
             
              get '/partial/locals' do
         | 
| 51 59 | 
             
                partial 'template/user', :locals => { :user => RenderUser.new('John'), :extra => "bar" }
         | 
| @@ -56,6 +64,22 @@ class RenderDemo < Padrino::Application | |
| 56 64 | 
             
                partial '/template/user', :object => RenderUser.new('John'), :locals => { :extra => "bar" }
         | 
| 57 65 | 
             
              end
         | 
| 58 66 |  | 
| 67 | 
            +
              # partial with unsafe engine
         | 
| 68 | 
            +
              get '/partial/unsafe' do
         | 
| 69 | 
            +
                block = params[:block] ? proc{ params[:block] } : nil
         | 
| 70 | 
            +
                partial 'unsafe.html.builder', &block
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
              get '/partial/unsafe_one' do
         | 
| 74 | 
            +
                block = params[:block] ? proc{ params[:block] } : nil
         | 
| 75 | 
            +
                partial 'unsafe_object', :object => 'Mary', &block
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              get '/partial/unsafe_many' do
         | 
| 79 | 
            +
                block = params[:block] ? proc{ params[:block] } : nil
         | 
| 80 | 
            +
                partial 'unsafe_object', :collection => ['John', 'Mary'], &block
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 59 83 | 
             
              get '/render_block_:ext' do
         | 
| 60 84 | 
             
                render "render_block_#{params[:ext]}" do
         | 
| 61 85 | 
             
                  content_tag :div, 'go block!'
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            <%= content_tag(:a) { content_tag :b, 'c' } %>
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            = content_tag(:a) { content_tag :b, 'c' }
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            = content_tag(:a) { content_tag :b, 'c' }
         | 
    
        data/test/helper.rb
    CHANGED
    
    | @@ -1,9 +1,14 @@ | |
| 1 | 
            +
            ENV['RACK_ENV'] = 'test'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require File.expand_path('../../../load_paths', __FILE__)
         | 
| 2 | 
            -
            require  | 
| 4 | 
            +
            require 'minitest/autorun'
         | 
| 5 | 
            +
            require 'minitest/pride'
         | 
| 6 | 
            +
            require 'mocha/setup'
         | 
| 3 7 | 
             
            require 'rack/test'
         | 
| 4 8 | 
             
            require 'webrat'
         | 
| 5 9 | 
             
            require 'padrino-helpers'
         | 
| 6 10 | 
             
            require 'active_support/time'
         | 
| 11 | 
            +
            require 'builder'
         | 
| 7 12 |  | 
| 8 13 | 
             
            class MiniTest::Spec
         | 
| 9 14 | 
             
              include Padrino::Helpers::OutputHelpers
         | 
| @@ -56,6 +61,65 @@ class MiniTest::Spec | |
| 56 61 | 
             
                record.stubs(:to_ary => [record])
         | 
| 57 62 | 
             
                record
         | 
| 58 63 | 
             
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              def create_template(name, content, options={})
         | 
| 66 | 
            +
                FileUtils.mkdir_p(File.dirname(__FILE__) + "/views")
         | 
| 67 | 
            +
                FileUtils.mkdir_p(File.dirname(__FILE__) + "/views/layouts")
         | 
| 68 | 
            +
                path  = "/views/#{name}"
         | 
| 69 | 
            +
                path += ".#{options.delete(:locale)}" if options[:locale].present?
         | 
| 70 | 
            +
                path += ".#{options[:format]}" if options[:format].present?
         | 
| 71 | 
            +
                path += ".erb" unless options[:format].to_s =~ /erb|slim|haml|rss|atom/
         | 
| 72 | 
            +
                path += ".builder" if options[:format].to_s =~ /rss|atom/
         | 
| 73 | 
            +
                file  = File.dirname(__FILE__) + path
         | 
| 74 | 
            +
                File.open(file, 'w') { |io| io.write content }
         | 
| 75 | 
            +
                file
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
              alias :create_view   :create_template
         | 
| 78 | 
            +
              alias :create_layout :create_template
         | 
| 79 | 
            +
             | 
| 80 | 
            +
              def remove_views
         | 
| 81 | 
            +
                FileUtils.rm_rf(File.dirname(__FILE__) + "/views")
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              def with_template(name, content, options={})
         | 
| 85 | 
            +
                # Build a temp layout
         | 
| 86 | 
            +
                template = create_template(name, content, options)
         | 
| 87 | 
            +
                yield
         | 
| 88 | 
            +
              ensure
         | 
| 89 | 
            +
                # Remove temp layout
         | 
| 90 | 
            +
                File.unlink(template) rescue nil
         | 
| 91 | 
            +
                remove_views
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
              alias :with_view   :with_template
         | 
| 94 | 
            +
              alias :with_layout :with_template
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              def mock_app(base=Padrino::Application.dup, &block)
         | 
| 97 | 
            +
                base.register Padrino::Rendering
         | 
| 98 | 
            +
                @app = Sinatra.new(base, &block)
         | 
| 99 | 
            +
              end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
              def app
         | 
| 102 | 
            +
                Rack::Lint.new(@app)
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
              # Asserts that a file matches the pattern
         | 
| 106 | 
            +
              def assert_match_in_file(pattern, file)
         | 
| 107 | 
            +
                assert File.exist?(file), "File '#{file}' does not exist!"
         | 
| 108 | 
            +
                assert_match pattern, File.read(file)
         | 
| 109 | 
            +
              end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
              # Delegate other missing methods to response.
         | 
| 112 | 
            +
              def method_missing(name, *args, &block)
         | 
| 113 | 
            +
                if response && response.respond_to?(name)
         | 
| 114 | 
            +
                  response.send(name, *args, &block)
         | 
| 115 | 
            +
                else
         | 
| 116 | 
            +
                  super(name, *args, &block)
         | 
| 117 | 
            +
                end
         | 
| 118 | 
            +
              rescue Rack::Test::Error # no response yet
         | 
| 119 | 
            +
                super(name, *args, &block)
         | 
| 120 | 
            +
              end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              alias :response :last_response
         | 
| 59 123 | 
             
            end
         | 
| 60 124 |  | 
| 61 125 | 
             
            module Webrat
         | 
| @@ -12,15 +12,15 @@ describe "AssetTagHelpers" do | |
| 12 12 | 
             
                @_flash ||= { :notice => "Demo notice" }
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 | 
            -
               | 
| 16 | 
            -
                should  | 
| 15 | 
            +
              describe 'for #flash_tag method' do
         | 
| 16 | 
            +
                it 'should display flash with no given attributes' do
         | 
| 17 17 | 
             
                  assert_has_tag('div.notice', :content => "Demo notice") { flash_tag(:notice) }
         | 
| 18 18 | 
             
                end
         | 
| 19 | 
            -
                should  | 
| 19 | 
            +
                it 'should display flash with given attributes' do
         | 
| 20 20 | 
             
                  actual_html = flash_tag(:notice, :class => 'notice', :id => 'notice-area')
         | 
| 21 21 | 
             
                  assert_has_tag('div.notice#notice-area', :content => "Demo notice") { actual_html }
         | 
| 22 22 | 
             
                end
         | 
| 23 | 
            -
                should  | 
| 23 | 
            +
                it 'should display multiple flash tags with given attributes' do
         | 
| 24 24 | 
             
                  flash[:error] = 'wrong'
         | 
| 25 25 | 
             
                  flash[:success] = 'okey'
         | 
| 26 26 | 
             
                  actual_html = flash_tag(:success, :warning, :error, :id => 'area')
         | 
| @@ -30,98 +30,98 @@ describe "AssetTagHelpers" do | |
| 30 30 | 
             
                end
         | 
| 31 31 | 
             
              end
         | 
| 32 32 |  | 
| 33 | 
            -
               | 
| 34 | 
            -
                should  | 
| 33 | 
            +
              describe 'for #link_to method' do
         | 
| 34 | 
            +
                it 'should display link element with no given attributes' do
         | 
| 35 35 | 
             
                  assert_has_tag('a', :content => "Sign up", :href => '/register') { link_to('Sign up', '/register') }
         | 
| 36 36 | 
             
                end
         | 
| 37 37 |  | 
| 38 | 
            -
                should  | 
| 38 | 
            +
                it 'should display link element with given attributes' do
         | 
| 39 39 | 
             
                  actual_html = link_to('Sign up', '/register', :class => 'first', :id => 'linky')
         | 
| 40 40 | 
             
                  assert_has_tag('a#linky.first', :content => "Sign up", :href => '/register') { actual_html }
         | 
| 41 41 | 
             
                end
         | 
| 42 42 |  | 
| 43 | 
            -
                should  | 
| 43 | 
            +
                it 'should display link element with anchor attribute' do
         | 
| 44 44 | 
             
                  actual_html = link_to("Anchor", "/anchor", :anchor => :foo)
         | 
| 45 45 | 
             
                  assert_has_tag('a', :content => "Anchor", :href => '/anchor#foo') { actual_html }
         | 
| 46 46 | 
             
                end
         | 
| 47 47 |  | 
| 48 | 
            -
                should  | 
| 48 | 
            +
                it 'should display link element with void url and options' do
         | 
| 49 49 | 
             
                  actual_link = link_to('Sign up', :class => "test")
         | 
| 50 50 | 
             
                  assert_has_tag('a', :content => "Sign up", :href => '#', :class => 'test') { actual_link }
         | 
| 51 51 | 
             
                end
         | 
| 52 52 |  | 
| 53 | 
            -
                should  | 
| 53 | 
            +
                it 'should display link element with remote option' do
         | 
| 54 54 | 
             
                  actual_link = link_to('Sign up', '/register', :remote => true)
         | 
| 55 55 | 
             
                  assert_has_tag('a', :content => "Sign up", :href => '/register', 'data-remote' => 'true') { actual_link }
         | 
| 56 56 | 
             
                end
         | 
| 57 57 |  | 
| 58 | 
            -
                should  | 
| 58 | 
            +
                it 'should display link element with method option' do
         | 
| 59 59 | 
             
                  actual_link = link_to('Sign up', '/register', :method => :delete)
         | 
| 60 60 | 
             
                  assert_has_tag('a', :content => "Sign up", :href => '/register', 'data-method' => 'delete', :rel => 'nofollow') { actual_link }
         | 
| 61 61 | 
             
                end
         | 
| 62 62 |  | 
| 63 | 
            -
                should  | 
| 63 | 
            +
                it 'should display link element with confirm option' do
         | 
| 64 64 | 
             
                  actual_link = link_to('Sign up', '/register', :confirm => "Are you sure?")
         | 
| 65 65 | 
             
                  assert_has_tag('a', :content => "Sign up", :href => '/register', 'data-confirm' => 'Are you sure?') { actual_link }
         | 
| 66 66 | 
             
                end
         | 
| 67 67 |  | 
| 68 | 
            -
                should  | 
| 68 | 
            +
                it 'should display link element with ruby block' do
         | 
| 69 69 | 
             
                  actual_link = link_to('/register', :class => 'first', :id => 'binky') { "Sign up" }
         | 
| 70 70 | 
             
                  assert_has_tag('a#binky.first', :content => "Sign up", :href => '/register') { actual_link }
         | 
| 71 71 | 
             
                end
         | 
| 72 72 |  | 
| 73 | 
            -
                should  | 
| 73 | 
            +
                it 'should escape the link text' do
         | 
| 74 74 | 
             
                  actual_link = link_to('/register', :class => 'first', :id => 'binky') { "<&>" }
         | 
| 75 75 | 
             
                  assert_has_tag('a#binky.first', :href => '/register') { actual_link }
         | 
| 76 76 | 
             
                  assert_match "<&>", actual_link
         | 
| 77 77 | 
             
                end
         | 
| 78 78 |  | 
| 79 | 
            -
                should  | 
| 79 | 
            +
                it 'should not escape image_tag' do
         | 
| 80 80 | 
             
                  actual_link = link_to(image_tag("/my/fancy/image.png"), :class => 'first', :id => 'binky')
         | 
| 81 81 | 
             
                  assert_has_tag('img', :src => "/my/fancy/image.png") { actual_link }
         | 
| 82 82 | 
             
                end
         | 
| 83 83 |  | 
| 84 | 
            -
                should  | 
| 84 | 
            +
                it 'should display link block element in haml' do
         | 
| 85 85 | 
             
                  visit '/haml/link_to'
         | 
| 86 86 | 
             
                  assert_have_selector :a, :content => "Test 1 No Block", :href => '/test1', :class => 'test', :id => 'test1'
         | 
| 87 87 | 
             
                  assert_have_selector :a, :content => "Test 2 With Block", :href => '/test2', :class => 'test', :id => 'test2'
         | 
| 88 88 | 
             
                end
         | 
| 89 89 |  | 
| 90 | 
            -
                should  | 
| 90 | 
            +
                it 'should display link block element in erb' do
         | 
| 91 91 | 
             
                  visit '/erb/link_to'
         | 
| 92 92 | 
             
                  assert_have_selector :a, :content => "Test 1 No Block", :href => '/test1', :class => 'test', :id => 'test1'
         | 
| 93 93 | 
             
                  assert_have_selector :a, :content => "Test 2 With Block", :href => '/test2', :class => 'test', :id => 'test2'
         | 
| 94 94 | 
             
                end
         | 
| 95 95 |  | 
| 96 | 
            -
                should  | 
| 96 | 
            +
                it 'should display link block element in slim' do
         | 
| 97 97 | 
             
                  visit '/slim/link_to'
         | 
| 98 98 | 
             
                  assert_have_selector :a, :content => "Test 1 No Block", :href => '/test1', :class => 'test', :id => 'test1'
         | 
| 99 99 | 
             
                  assert_have_selector :a, :content => "Test 2 With Block", :href => '/test2', :class => 'test', :id => 'test2'
         | 
| 100 100 | 
             
                end
         | 
| 101 101 |  | 
| 102 | 
            -
                should  | 
| 102 | 
            +
                it 'should not double-escape' do
         | 
| 103 103 | 
             
                  actual_link = link_to('test escape', '?a=1&b=2')
         | 
| 104 104 | 
             
                  assert_has_tag('a', :href => '?a=1&b=2') { actual_link }
         | 
| 105 105 | 
             
                end
         | 
| 106 106 |  | 
| 107 | 
            -
                should  | 
| 107 | 
            +
                it 'should escape scary things' do
         | 
| 108 108 | 
             
                  actual_link = link_to('test escape<adfs>', '?a=1&b=<script>alert(1)</script>')
         | 
| 109 | 
            -
                   | 
| 109 | 
            +
                  refute_match('<script', actual_link)
         | 
| 110 110 | 
             
                end
         | 
| 111 111 | 
             
              end
         | 
| 112 112 |  | 
| 113 | 
            -
               | 
| 114 | 
            -
                should  | 
| 113 | 
            +
              describe 'for #mail_to method' do
         | 
| 114 | 
            +
                it 'should display link element for mail to no caption' do
         | 
| 115 115 | 
             
                  actual_html = mail_to('test@demo.com')
         | 
| 116 116 | 
             
                  assert_has_tag(:a, :href => "mailto:test@demo.com", :content => 'test@demo.com') { actual_html }
         | 
| 117 117 | 
             
                end
         | 
| 118 118 |  | 
| 119 | 
            -
                should  | 
| 119 | 
            +
                it 'should display link element for mail to with caption' do
         | 
| 120 120 | 
             
                  actual_html = mail_to('test@demo.com', "My Email", :class => 'demo')
         | 
| 121 121 | 
             
                  assert_has_tag(:a, :href => "mailto:test@demo.com", :content => 'My Email', :class => 'demo') { actual_html }
         | 
| 122 122 | 
             
                end
         | 
| 123 123 |  | 
| 124 | 
            -
                should  | 
| 124 | 
            +
                it 'should display link element for mail to with caption and mail options' do
         | 
| 125 125 | 
             
                  actual_html = mail_to('test@demo.com', "My Email", :subject => 'demo test', :class => 'demo', :cc => 'foo@test.com')
         | 
| 126 126 | 
             
                  assert_has_tag(:a, :class => 'demo') { actual_html }
         | 
| 127 127 | 
             
                  assert_match %r{mailto\:test\@demo.com\?}, actual_html
         | 
| @@ -129,157 +129,161 @@ describe "AssetTagHelpers" do | |
| 129 129 | 
             
                  assert_match %r{subject\=demo\%20test}, actual_html
         | 
| 130 130 | 
             
                end
         | 
| 131 131 |  | 
| 132 | 
            -
                should  | 
| 132 | 
            +
                it 'should escape & with encoded string and & in HTML' do
         | 
| 133 133 | 
             
                  actual_html = mail_to('test@demo.com', "My&Email", :subject => "this&that")
         | 
| 134 134 | 
             
                  assert_match 'this%26that', actual_html
         | 
| 135 135 | 
             
                  assert_match 'My&Email', actual_html
         | 
| 136 136 | 
             
                end
         | 
| 137 137 |  | 
| 138 | 
            -
                should  | 
| 138 | 
            +
                it 'should display mail link element in haml' do
         | 
| 139 139 | 
             
                  visit '/haml/mail_to'
         | 
| 140 140 | 
             
                  assert_have_selector 'p.simple a', :href => 'mailto:test@demo.com', :content => 'test@demo.com'
         | 
| 141 141 | 
             
                  assert_have_selector 'p.captioned a', :href => 'mailto:test@demo.com', :content => 'Click my Email'
         | 
| 142 142 | 
             
                end
         | 
| 143 143 |  | 
| 144 | 
            -
                should  | 
| 144 | 
            +
                it 'should display mail link element in erb' do
         | 
| 145 145 | 
             
                  visit '/erb/mail_to'
         | 
| 146 146 | 
             
                  assert_have_selector 'p.simple a', :href => 'mailto:test@demo.com', :content => 'test@demo.com'
         | 
| 147 147 | 
             
                  assert_have_selector 'p.captioned a', :href => 'mailto:test@demo.com', :content => 'Click my Email'
         | 
| 148 148 | 
             
                end
         | 
| 149 149 |  | 
| 150 | 
            -
                should  | 
| 150 | 
            +
                it 'should display mail link element in slim' do
         | 
| 151 151 | 
             
                  visit '/slim/mail_to'
         | 
| 152 152 | 
             
                  assert_have_selector 'p.simple a', :href => 'mailto:test@demo.com', :content => 'test@demo.com'
         | 
| 153 153 | 
             
                  assert_have_selector 'p.captioned a', :href => 'mailto:test@demo.com', :content => 'Click my Email'
         | 
| 154 154 | 
             
                end
         | 
| 155 155 | 
             
              end
         | 
| 156 156 |  | 
| 157 | 
            -
               | 
| 158 | 
            -
                should  | 
| 157 | 
            +
              describe 'for #meta_tag method' do
         | 
| 158 | 
            +
                it 'should display meta tag with given content and name' do
         | 
| 159 159 | 
             
                  actual_html = meta_tag("weblog,news", :name => "keywords")
         | 
| 160 160 | 
             
                  assert_has_tag("meta", :name => "keywords", "content" => "weblog,news") { actual_html }
         | 
| 161 161 | 
             
                end
         | 
| 162 162 |  | 
| 163 | 
            -
                should  | 
| 163 | 
            +
                it 'should display meta tag with given content and http-equiv' do
         | 
| 164 164 | 
             
                  actual_html = meta_tag("text/html; charset=UTF-8", :"http-equiv" => "Content-Type")
         | 
| 165 165 | 
             
                  assert_has_tag("meta", :"http-equiv" => "Content-Type", "content" => "text/html; charset=UTF-8") { actual_html }
         | 
| 166 166 | 
             
                end
         | 
| 167 167 |  | 
| 168 | 
            -
                should  | 
| 168 | 
            +
                it 'should display meta tag element in haml' do
         | 
| 169 169 | 
             
                  visit '/haml/meta_tag'
         | 
| 170 170 | 
             
                  assert_have_selector 'meta', "content" => "weblog,news", :name => "keywords"
         | 
| 171 171 | 
             
                  assert_have_selector 'meta', "content" => "text/html; charset=UTF-8", :"http-equiv" => "Content-Type"
         | 
| 172 172 | 
             
                end
         | 
| 173 173 |  | 
| 174 | 
            -
                should  | 
| 174 | 
            +
                it 'should display meta tag element in erb' do
         | 
| 175 175 | 
             
                  visit '/erb/meta_tag'
         | 
| 176 176 | 
             
                  assert_have_selector 'meta', "content" => "weblog,news", :name => "keywords"
         | 
| 177 177 | 
             
                  assert_have_selector 'meta', "content" => "text/html; charset=UTF-8", :"http-equiv" => "Content-Type"
         | 
| 178 178 | 
             
                end
         | 
| 179 179 |  | 
| 180 | 
            -
                should  | 
| 180 | 
            +
                it 'should display meta tag element in slim' do
         | 
| 181 181 | 
             
                  visit '/slim/meta_tag'
         | 
| 182 182 | 
             
                  assert_have_selector 'meta', "content" => "weblog,news", :name => "keywords"
         | 
| 183 183 | 
             
                  assert_have_selector 'meta', "content" => "text/html; charset=UTF-8", :"http-equiv" => "Content-Type"
         | 
| 184 184 | 
             
                end
         | 
| 185 185 | 
             
              end
         | 
| 186 186 |  | 
| 187 | 
            -
               | 
| 188 | 
            -
                should  | 
| 187 | 
            +
              describe 'for #image_tag method' do
         | 
| 188 | 
            +
                it 'should display image tag absolute link with no options' do
         | 
| 189 189 | 
             
                  time = stop_time_for_test
         | 
| 190 190 | 
             
                  assert_has_tag('img', :src => "/absolute/pic.gif") { image_tag('/absolute/pic.gif') }
         | 
| 191 191 | 
             
                end
         | 
| 192 192 |  | 
| 193 | 
            -
                should  | 
| 193 | 
            +
                it 'should display image tag relative link with specified uri root' do
         | 
| 194 194 | 
             
                  time = stop_time_for_test
         | 
| 195 195 | 
             
                  self.class.stubs(:uri_root).returns("/blog")
         | 
| 196 196 | 
             
                  assert_has_tag('img', :src => "/blog/images/relative/pic.gif?#{time.to_i}") { image_tag('relative/pic.gif') }
         | 
| 197 197 | 
             
                end
         | 
| 198 198 |  | 
| 199 | 
            -
                should  | 
| 199 | 
            +
                it 'should display image tag relative link with options' do
         | 
| 200 200 | 
             
                  time = stop_time_for_test
         | 
| 201 201 | 
             
                  assert_has_tag('img.photo', :src => "/images/relative/pic.gif?#{time.to_i}") {
         | 
| 202 202 | 
             
                    image_tag('relative/pic.gif', :class => 'photo') }
         | 
| 203 203 | 
             
                end
         | 
| 204 204 |  | 
| 205 | 
            -
                should  | 
| 205 | 
            +
                it 'should display image tag uri link with options' do
         | 
| 206 206 | 
             
                  time = stop_time_for_test
         | 
| 207 207 | 
             
                  assert_has_tag('img.photo', :src => "http://demo.org/pic.gif") { image_tag('http://demo.org/pic.gif', :class => 'photo') }
         | 
| 208 208 | 
             
                end
         | 
| 209 209 |  | 
| 210 | 
            -
                should  | 
| 210 | 
            +
                it 'should display image tag relative link with incorrect spacing' do
         | 
| 211 211 | 
             
                  time = stop_time_for_test
         | 
| 212 212 | 
             
                  assert_has_tag('img.photo', :src => "/images/%20relative/%20pic.gif%20%20?#{time.to_i}") {
         | 
| 213 213 | 
             
                    image_tag(' relative/ pic.gif  ', :class => 'photo')
         | 
| 214 214 | 
             
                  }
         | 
| 215 215 | 
             
                end
         | 
| 216 216 |  | 
| 217 | 
            -
                should  | 
| 217 | 
            +
                it 'should not use a timestamp if stamp setting is false' do
         | 
| 218 218 | 
             
                  assert_has_tag('img', :src => "/absolute/pic.gif") { image_tag('/absolute/pic.gif') }
         | 
| 219 219 | 
             
                end
         | 
| 220 220 |  | 
| 221 | 
            -
                should  | 
| 221 | 
            +
                it 'should have xhtml convention tag' do
         | 
| 222 222 | 
             
                  assert_equal image_tag('/absolute/pic.gif'), '<img src="/absolute/pic.gif" />'
         | 
| 223 223 | 
             
                end
         | 
| 224 224 | 
             
              end
         | 
| 225 225 |  | 
| 226 | 
            -
               | 
| 227 | 
            -
                should  | 
| 226 | 
            +
              describe 'for #stylesheet_link_tag method' do
         | 
| 227 | 
            +
                it 'should display stylesheet link item' do
         | 
| 228 228 | 
             
                  time = stop_time_for_test
         | 
| 229 229 | 
             
                  actual_html = stylesheet_link_tag('style')
         | 
| 230 | 
            -
                  expected_options = { : | 
| 230 | 
            +
                  expected_options = { :rel => "stylesheet", :type => "text/css" }
         | 
| 231 231 | 
             
                  assert_has_tag('link', expected_options.merge(:href => "/stylesheets/style.css?#{time.to_i}")) { actual_html }
         | 
| 232 232 | 
             
                  assert actual_html.html_safe?
         | 
| 233 233 | 
             
                end
         | 
| 234 234 |  | 
| 235 | 
            -
                should  | 
| 235 | 
            +
                it 'should display stylesheet link item for long relative path' do
         | 
| 236 236 | 
             
                  time = stop_time_for_test
         | 
| 237 | 
            -
                  expected_options = { : | 
| 237 | 
            +
                  expected_options = { :rel => "stylesheet", :type => "text/css" }
         | 
| 238 238 | 
             
                  actual_html = stylesheet_link_tag('example/demo/style')
         | 
| 239 239 | 
             
                  assert_has_tag('link', expected_options.merge(:href => "/stylesheets/example/demo/style.css?#{time.to_i}")) { actual_html }
         | 
| 240 240 | 
             
                end
         | 
| 241 241 |  | 
| 242 | 
            -
                should  | 
| 242 | 
            +
                it 'should display stylesheet link item with absolute path' do
         | 
| 243 243 | 
             
                  time = stop_time_for_test
         | 
| 244 | 
            -
                  expected_options = { : | 
| 244 | 
            +
                  expected_options = { :rel => "stylesheet", :type => "text/css" }
         | 
| 245 245 | 
             
                  actual_html = stylesheet_link_tag('/css/style')
         | 
| 246 246 | 
             
                  assert_has_tag('link', expected_options.merge(:href => "/css/style.css")) { actual_html }
         | 
| 247 247 | 
             
                end
         | 
| 248 248 |  | 
| 249 | 
            -
                should  | 
| 249 | 
            +
                it 'should display stylesheet link item with uri root' do
         | 
| 250 250 | 
             
                  self.class.stubs(:uri_root).returns("/blog")
         | 
| 251 251 | 
             
                  time = stop_time_for_test
         | 
| 252 | 
            -
                  expected_options = { : | 
| 252 | 
            +
                  expected_options = { :rel => "stylesheet", :type => "text/css" }
         | 
| 253 253 | 
             
                  actual_html = stylesheet_link_tag('style')
         | 
| 254 254 | 
             
                  assert_has_tag('link', expected_options.merge(:href => "/blog/stylesheets/style.css?#{time.to_i}")) { actual_html }
         | 
| 255 255 | 
             
                end
         | 
| 256 256 |  | 
| 257 | 
            -
                should  | 
| 257 | 
            +
                it 'should display stylesheet link items' do
         | 
| 258 258 | 
             
                  time = stop_time_for_test
         | 
| 259 259 | 
             
                  actual_html = stylesheet_link_tag('style', 'layout.css', 'http://google.com/style.css')
         | 
| 260 | 
            -
                  assert_has_tag('link', : | 
| 260 | 
            +
                  assert_has_tag('link', :rel => "stylesheet", :type => "text/css", :count => 3) { actual_html }
         | 
| 261 261 | 
             
                  assert_has_tag('link', :href => "/stylesheets/style.css?#{time.to_i}") { actual_html }
         | 
| 262 262 | 
             
                  assert_has_tag('link', :href => "/stylesheets/layout.css?#{time.to_i}") { actual_html }
         | 
| 263 263 | 
             
                  assert_has_tag('link', :href => "http://google.com/style.css") { actual_html }
         | 
| 264 264 | 
             
                  assert_equal actual_html, stylesheet_link_tag(['style', 'layout.css', 'http://google.com/style.css'])
         | 
| 265 265 | 
             
                end
         | 
| 266 266 |  | 
| 267 | 
            -
                should  | 
| 267 | 
            +
                it 'should not use a timestamp if stamp setting is false' do
         | 
| 268 268 | 
             
                  self.class.expects(:asset_stamp).returns(false)
         | 
| 269 | 
            -
                  expected_options = { : | 
| 269 | 
            +
                  expected_options = { :rel => "stylesheet", :type => "text/css" }
         | 
| 270 270 | 
             
                  assert_has_tag('link', expected_options.merge(:href => "/stylesheets/style.css")) { stylesheet_link_tag('style') }
         | 
| 271 271 | 
             
                end
         | 
| 272 | 
            +
             | 
| 273 | 
            +
                it 'should display stylesheet link used custom options' do
         | 
| 274 | 
            +
                  assert_has_tag('link', :rel => 'stylesheet', :media => 'screen') { stylesheet_link_tag('style', :media => 'screen') }
         | 
| 275 | 
            +
                end
         | 
| 272 276 | 
             
              end
         | 
| 273 277 |  | 
| 274 | 
            -
               | 
| 275 | 
            -
                should  | 
| 278 | 
            +
              describe 'for #javascript_include_tag method' do
         | 
| 279 | 
            +
                it 'should display javascript item' do
         | 
| 276 280 | 
             
                  time = stop_time_for_test
         | 
| 277 281 | 
             
                  actual_html = javascript_include_tag('application')
         | 
| 278 282 | 
             
                  assert_has_tag('script', :src => "/javascripts/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
         | 
| 279 283 | 
             
                  assert actual_html.html_safe?
         | 
| 280 284 | 
             
                end
         | 
| 281 285 |  | 
| 282 | 
            -
                should  | 
| 286 | 
            +
                it 'should respond to js_asset_folder setting' do
         | 
| 283 287 | 
             
                  time = stop_time_for_test
         | 
| 284 288 | 
             
                  self.class.stubs(:js_asset_folder).returns('js')
         | 
| 285 289 | 
             
                  assert_equal 'js', asset_folder_name(:js)
         | 
| @@ -287,44 +291,44 @@ describe "AssetTagHelpers" do | |
| 287 291 | 
             
                  assert_has_tag('script', :src => "/js/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
         | 
| 288 292 | 
             
                end
         | 
| 289 293 |  | 
| 290 | 
            -
                should  | 
| 294 | 
            +
                it 'should display javascript item for long relative path' do
         | 
| 291 295 | 
             
                  time = stop_time_for_test
         | 
| 292 296 | 
             
                  actual_html = javascript_include_tag('example/demo/application')
         | 
| 293 297 | 
             
                  assert_has_tag('script', :src => "/javascripts/example/demo/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
         | 
| 294 298 | 
             
                end
         | 
| 295 299 |  | 
| 296 | 
            -
                should  | 
| 300 | 
            +
                it 'should display javascript item for path containing js' do
         | 
| 297 301 | 
             
                  time = stop_time_for_test
         | 
| 298 302 | 
             
                  actual_html = javascript_include_tag 'test/jquery.json'
         | 
| 299 303 | 
             
                  assert_has_tag('script', :src => "/javascripts/test/jquery.json?#{time.to_i}", :type => "text/javascript") { actual_html }
         | 
| 300 304 | 
             
                end
         | 
| 301 305 |  | 
| 302 | 
            -
                should  | 
| 306 | 
            +
                it 'should display javascript item for path containing period' do
         | 
| 303 307 | 
             
                  time = stop_time_for_test
         | 
| 304 308 | 
             
                  actual_html = javascript_include_tag 'test/jquery.min'
         | 
| 305 309 | 
             
                  assert_has_tag('script', :src => "/javascripts/test/jquery.min.js?#{time.to_i}", :type => "text/javascript") { actual_html }
         | 
| 306 310 | 
             
                end
         | 
| 307 311 |  | 
| 308 | 
            -
                should  | 
| 312 | 
            +
                it 'should display javascript item with absolute path' do
         | 
| 309 313 | 
             
                  time = stop_time_for_test
         | 
| 310 314 | 
             
                  actual_html = javascript_include_tag('/js/application')
         | 
| 311 315 | 
             
                  assert_has_tag('script', :src => "/js/application.js", :type => "text/javascript") { actual_html }
         | 
| 312 316 | 
             
                end
         | 
| 313 317 |  | 
| 314 | 
            -
                should  | 
| 318 | 
            +
                it 'should display javascript item with uri root' do
         | 
| 315 319 | 
             
                  self.class.stubs(:uri_root).returns("/blog")
         | 
| 316 320 | 
             
                  time = stop_time_for_test
         | 
| 317 321 | 
             
                  actual_html = javascript_include_tag('application')
         | 
| 318 322 | 
             
                  assert_has_tag('script', :src => "/blog/javascripts/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
         | 
| 319 323 | 
             
                end
         | 
| 320 324 |  | 
| 321 | 
            -
                should  | 
| 325 | 
            +
                it 'should not append extension to absolute paths' do
         | 
| 322 326 | 
             
                  time = stop_time_for_test
         | 
| 323 327 | 
             
                  actual_html = javascript_include_tag('https://maps.googleapis.com/maps/api/js?key=value&sensor=false')
         | 
| 324 328 | 
             
                  assert_has_tag('script', :src => "https://maps.googleapis.com/maps/api/js?key=value&sensor=false") { actual_html }
         | 
| 325 329 | 
             
                end
         | 
| 326 330 |  | 
| 327 | 
            -
                should  | 
| 331 | 
            +
                it 'should display javascript items' do
         | 
| 328 332 | 
             
                  time = stop_time_for_test
         | 
| 329 333 | 
             
                  actual_html = javascript_include_tag('application', 'base.js', 'http://google.com/lib.js')
         | 
| 330 334 | 
             
                  assert_has_tag('script', :type => "text/javascript", :count => 3) { actual_html }
         | 
| @@ -334,59 +338,59 @@ describe "AssetTagHelpers" do | |
| 334 338 | 
             
                  assert_equal actual_html, javascript_include_tag(['application', 'base.js', 'http://google.com/lib.js'])
         | 
| 335 339 | 
             
                end
         | 
| 336 340 |  | 
| 337 | 
            -
                should  | 
| 341 | 
            +
                it 'should not use a timestamp if stamp setting is false' do
         | 
| 338 342 | 
             
                  self.class.expects(:asset_stamp).returns(false)
         | 
| 339 343 | 
             
                  actual_html = javascript_include_tag('application')
         | 
| 340 344 | 
             
                  assert_has_tag('script', :src => "/javascripts/application.js", :type => "text/javascript") { actual_html }
         | 
| 341 345 | 
             
                end
         | 
| 342 346 | 
             
              end
         | 
| 343 347 |  | 
| 344 | 
            -
               | 
| 345 | 
            -
                should  | 
| 348 | 
            +
              describe "for #favicon_tag method" do
         | 
| 349 | 
            +
                it 'should display favicon' do
         | 
| 346 350 | 
             
                  time = stop_time_for_test
         | 
| 347 351 | 
             
                  actual_html = favicon_tag('icons/favicon.png')
         | 
| 348 352 | 
             
                  assert_has_tag('link', :rel => 'icon', :type => 'image/png', :href => "/images/icons/favicon.png?#{time.to_i}") { actual_html }
         | 
| 349 353 | 
             
                end
         | 
| 350 354 |  | 
| 351 | 
            -
                should  | 
| 355 | 
            +
                it 'should match type with file ext' do
         | 
| 352 356 | 
             
                  time = stop_time_for_test
         | 
| 353 357 | 
             
                  actual_html = favicon_tag('favicon.ico')
         | 
| 354 358 | 
             
                  assert_has_tag('link', :rel => 'icon', :type => 'image/ico', :href => "/images/favicon.ico?#{time.to_i}") { actual_html }
         | 
| 355 359 | 
             
                end
         | 
| 356 360 |  | 
| 357 | 
            -
                should  | 
| 361 | 
            +
                it 'should allow option overrides' do
         | 
| 358 362 | 
             
                  time = stop_time_for_test
         | 
| 359 363 | 
             
                  actual_html = favicon_tag('favicon.png', :type => 'image/ico')
         | 
| 360 364 | 
             
                  assert_has_tag('link', :rel => 'icon', :type => 'image/ico', :href => "/images/favicon.png?#{time.to_i}") { actual_html }
         | 
| 361 365 | 
             
                end
         | 
| 362 366 | 
             
              end
         | 
| 363 367 |  | 
| 364 | 
            -
               | 
| 365 | 
            -
                should  | 
| 368 | 
            +
              describe 'for #feed_tag method' do
         | 
| 369 | 
            +
                it 'should generate correctly link tag for rss' do
         | 
| 366 370 | 
             
                  assert_has_tag('link', :type => 'application/rss+xml', :rel => 'alternate', :href => "/blog/post.rss", :title => 'rss') { feed_tag :rss, "/blog/post.rss" }
         | 
| 367 371 | 
             
                end
         | 
| 368 372 |  | 
| 369 | 
            -
                should  | 
| 373 | 
            +
                it 'should generate correctly link tag for atom' do
         | 
| 370 374 | 
             
                  assert_has_tag('link', :type => 'application/atom+xml', :rel => 'alternate', :href => "/blog/post.atom", :title => 'atom') { feed_tag :atom, "/blog/post.atom" }
         | 
| 371 375 | 
             
                end
         | 
| 372 376 |  | 
| 373 | 
            -
                should  | 
| 377 | 
            +
                it 'should override options' do
         | 
| 374 378 | 
             
                  assert_has_tag('link', :type => 'my-type', :rel => 'my-rel', :href => "/blog/post.rss", :title => 'my-title') { feed_tag :rss, "/blog/post.rss", :type => "my-type", :rel => "my-rel", :title => "my-title" }
         | 
| 375 379 | 
             
                end
         | 
| 376 380 | 
             
              end
         | 
| 377 381 |  | 
| 378 | 
            -
               | 
| 379 | 
            -
                should  | 
| 382 | 
            +
              describe 'for #asset_path method' do
         | 
| 383 | 
            +
                it 'should generate proper paths for js and css' do
         | 
| 380 384 | 
             
                  assert_match /\/javascripts\/app.js\?\d+/, asset_path(:js, 'app')
         | 
| 381 385 | 
             
                  assert_match /\/stylesheets\/app.css\?\d+/, asset_path(:css, 'app')
         | 
| 382 386 | 
             
                end
         | 
| 383 387 |  | 
| 384 | 
            -
                should  | 
| 388 | 
            +
                it 'should generate proper paths for images and other files' do
         | 
| 385 389 | 
             
                  assert_match /\/images\/app.png\?\d+/, asset_path(:images, 'app.png')
         | 
| 386 390 | 
             
                  assert_match /\/documents\/app.pdf\?\d+/, asset_path(:documents, 'app.pdf')
         | 
| 387 391 | 
             
                end
         | 
| 388 392 |  | 
| 389 | 
            -
                should  | 
| 393 | 
            +
                it 'should generate proper paths for public folder' do
         | 
| 390 394 | 
             
                  assert_match /\/files\/file.ext\?\d+/, asset_path('files/file.ext')
         | 
| 391 395 | 
             
                end
         | 
| 392 396 | 
             
              end
         |