roadie 2.0.0 → 2.1.0.pre1
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.
- data/.gitignore +1 -0
 - data/Changelog.md +12 -1
 - data/Gemfile.lock +49 -30
 - data/README.md +39 -9
 - data/lib/roadie.rb +45 -26
 - data/lib/roadie/action_mailer_extensions.rb +13 -8
 - data/lib/roadie/asset_pipeline_provider.rb +28 -0
 - data/lib/roadie/asset_provider.rb +62 -0
 - data/lib/roadie/filesystem_provider.rb +74 -0
 - data/lib/roadie/inliner.rb +16 -16
 - data/lib/roadie/railtie.rb +22 -0
 - data/lib/roadie/version.rb +1 -1
 - data/roadie.gemspec +1 -0
 - data/spec/fixtures/public/stylesheets/integration.css +10 -0
 - data/spec/integration_spec.rb +62 -47
 - data/spec/lib/roadie/action_mailer_extensions_spec.rb +91 -75
 - data/spec/lib/roadie/asset_pipeline_provider_spec.rb +65 -0
 - data/spec/lib/roadie/filesystem_provider_spec.rb +94 -0
 - data/spec/lib/roadie/inliner_spec.rb +30 -5
 - data/spec/lib/roadie_spec.rb +31 -16
 - data/spec/shared_examples/asset_provider_examples.rb +11 -0
 - data/spec/spec_helper.rb +11 -7
 - metadata +30 -19
 - data/spec/fixtures/app/assets/stylesheets/bar.css +0 -1
 - data/spec/fixtures/app/assets/stylesheets/foo.css +0 -1
 - data/spec/fixtures/app/assets/stylesheets/green_paragraphs.css +0 -1
 - data/spec/fixtures/app/assets/stylesheets/large_purple_paragraphs.css +0 -1
 - data/spec/fixtures/app/assets/stylesheets/subdirectory/findme.css +0 -1
 - data/spec/fixtures/app/assets/stylesheets/subdirectory/red_paragraphs.css +0 -1
 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'shared_examples/asset_provider_examples'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Roadie
         
     | 
| 
      
 5 
     | 
    
         
            +
              describe AssetPipelineProvider do
         
     | 
| 
      
 6 
     | 
    
         
            +
                let(:provider) { AssetPipelineProvider.new }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                it_behaves_like AssetProvider
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                it "has a configurable prefix" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  AssetPipelineProvider.new("/prefix").prefix.should == "/prefix"
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                it 'has a prefix of "/assets" by default' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  provider.prefix.should == "/assets"
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                describe "#find(file)" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  let(:pipeline) { double("Rails asset pipeline") }
         
     | 
| 
      
 20 
     | 
    
         
            +
                  before(:each) { Roadie.app.stub(:assets => pipeline) }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def expect_pipeline_access(name, returning = '')
         
     | 
| 
      
 23 
     | 
    
         
            +
                    pipeline.should_receive(:[]).with(name).and_return(returning)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  it "loads files matching the target names in Rails assets" do
         
     | 
| 
      
 27 
     | 
    
         
            +
                    expect_pipeline_access('foo', 'contents of foo')
         
     | 
| 
      
 28 
     | 
    
         
            +
                    expect_pipeline_access('foo.css', 'contents of foo.css')
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    provider.find('foo').should == 'contents of foo'
         
     | 
| 
      
 31 
     | 
    
         
            +
                    provider.find('foo.css').should == 'contents of foo.css'
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  it "strips the contents" do
         
     | 
| 
      
 35 
     | 
    
         
            +
                    expect_pipeline_access('foo', "   contents  \n ")
         
     | 
| 
      
 36 
     | 
    
         
            +
                    provider.find('foo').should == "contents"
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  it "removes the prefix from the filename" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                    expect_pipeline_access('foo')
         
     | 
| 
      
 41 
     | 
    
         
            +
                    expect_pipeline_access('path/to/foo')
         
     | 
| 
      
 42 
     | 
    
         
            +
                    expect_pipeline_access('bar')
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                    provider = AssetPipelineProvider.new("/prefix")
         
     | 
| 
      
 45 
     | 
    
         
            +
                    provider.find('/prefix/foo')
         
     | 
| 
      
 46 
     | 
    
         
            +
                    provider.find('/prefix/path/to/foo')
         
     | 
| 
      
 47 
     | 
    
         
            +
                    provider.find('prefix/bar')
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  it "cleans up double slashes from the path" do
         
     | 
| 
      
 51 
     | 
    
         
            +
                    expect_pipeline_access('path/to/foo')
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    provider = AssetPipelineProvider.new("/prefix/")
         
     | 
| 
      
 54 
     | 
    
         
            +
                    provider.find('/prefix/path/to//foo')
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  it "raises a Roadie::CSSFileNotFound error when the file could not be found" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                    expect_pipeline_access('not_here', nil)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    expect {
         
     | 
| 
      
 60 
     | 
    
         
            +
                      provider.find('not_here')
         
     | 
| 
      
 61 
     | 
    
         
            +
                    }.to raise_error(Roadie::CSSFileNotFound, /not_here/)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,94 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'shared_examples/asset_provider_examples'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'tmpdir'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Roadie
         
     | 
| 
      
 6 
     | 
    
         
            +
              describe FilesystemProvider do
         
     | 
| 
      
 7 
     | 
    
         
            +
                let(:provider) { FilesystemProvider.new }
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                it_behaves_like AssetProvider
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                it "has a configurable prefix" do
         
     | 
| 
      
 12 
     | 
    
         
            +
                  FilesystemProvider.new("/prefix").prefix.should == "/prefix"
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                it "has a configurable path" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  path = Pathname.new("/path")
         
     | 
| 
      
 17 
     | 
    
         
            +
                  FilesystemProvider.new('', path).path.should == path
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                it "bases the path on the project root if passed a string with a relative path" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                  FilesystemProvider.new('', "foo/bar").path.should == Roadie.app.root.join("foo", "bar")
         
     | 
| 
      
 22 
     | 
    
         
            +
                  FilesystemProvider.new('', "/foo/bar").path.should == Pathname.new("/foo/bar")
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                it 'has a path of "<root>/public/stylesheets" by default' do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  FilesystemProvider.new.path.should == Roadie.app.root.join('public', 'stylesheets')
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                it 'has a prefix of "/stylesheets" by default' do
         
     | 
| 
      
 30 
     | 
    
         
            +
                  FilesystemProvider.new.prefix.should == "/stylesheets"
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                describe "#find(file)" do
         
     | 
| 
      
 34 
     | 
    
         
            +
                  around(:each) do |example|
         
     | 
| 
      
 35 
     | 
    
         
            +
                    Dir.mktmpdir do |path|
         
     | 
| 
      
 36 
     | 
    
         
            +
                      Dir.chdir(path) { example.run }
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  let(:provider) { FilesystemProvider.new('/prefix', Pathname.new('.')) }
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  def create_file(name, contents = '')
         
     | 
| 
      
 43 
     | 
    
         
            +
                    Pathname.new(name).tap do |path|
         
     | 
| 
      
 44 
     | 
    
         
            +
                      path.dirname.mkpath unless path.dirname.directory?
         
     | 
| 
      
 45 
     | 
    
         
            +
                      path.open('w') { |file| file << contents }
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  it "loads files from the filesystem" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                    create_file('foo.css', 'contents of foo.css')
         
     | 
| 
      
 51 
     | 
    
         
            +
                    provider.find('foo.css').should == 'contents of foo.css'
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  it "removes the prefix" do
         
     | 
| 
      
 55 
     | 
    
         
            +
                    create_file('foo.css', 'contents of foo.css')
         
     | 
| 
      
 56 
     | 
    
         
            +
                    provider.find('/prefix/foo.css').should == 'contents of foo.css'
         
     | 
| 
      
 57 
     | 
    
         
            +
                    provider.find('prefix/foo.css').should == 'contents of foo.css'
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  it 'tries the filename with a ".css" extension if it does not exist' do
         
     | 
| 
      
 61 
     | 
    
         
            +
                    create_file('bar',     'in bare bar')
         
     | 
| 
      
 62 
     | 
    
         
            +
                    create_file('bar.css', 'in bar.css')
         
     | 
| 
      
 63 
     | 
    
         
            +
                    create_file('foo.css', 'in foo.css')
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                    provider.find('bar').should == 'in bare bar'
         
     | 
| 
      
 66 
     | 
    
         
            +
                    provider.find('foo').should == 'in foo.css'
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  it "strips the contents" do
         
     | 
| 
      
 70 
     | 
    
         
            +
                    create_file('foo.css', "   contents  \n ")
         
     | 
| 
      
 71 
     | 
    
         
            +
                    provider.find('foo.css').should == "contents"
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                  it "supports nested directories" do
         
     | 
| 
      
 75 
     | 
    
         
            +
                    create_file('path/to/foo.css')
         
     | 
| 
      
 76 
     | 
    
         
            +
                    create_file('path/from/bar.css')
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    provider.find('path/to/foo.css')
         
     | 
| 
      
 79 
     | 
    
         
            +
                    provider.find('path/from/bar.css')
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  it "works with double slashes in the path" do
         
     | 
| 
      
 83 
     | 
    
         
            +
                    create_file('path/to/foo.css')
         
     | 
| 
      
 84 
     | 
    
         
            +
                    provider.find('path/to//foo.css')
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  it "raises a Roadie::CSSFileNotFound error when the file could not be found" do
         
     | 
| 
      
 88 
     | 
    
         
            +
                    expect {
         
     | 
| 
      
 89 
     | 
    
         
            +
                      provider.find('not_here.css')
         
     | 
| 
      
 90 
     | 
    
         
            +
                    }.to raise_error(Roadie::CSSFileNotFound, /not_here/)
         
     | 
| 
      
 91 
     | 
    
         
            +
                  end
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
              end
         
     | 
| 
      
 94 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -2,10 +2,23 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            describe Roadie::Inliner do
         
     | 
| 
       5 
     | 
    
         
            -
               
     | 
| 
      
 5 
     | 
    
         
            +
              let(:provider) { double("asset provider", :all => '') }
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def use_css(css)
         
     | 
| 
      
 8 
     | 
    
         
            +
                provider.stub(:all).with(['global.css']).and_return(css)
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       6 
11 
     | 
    
         
             
              def rendering(html, options = {})
         
     | 
| 
       7 
12 
     | 
    
         
             
                url_options = options.fetch(:url_options, {:host => 'example.com'})
         
     | 
| 
       8 
     | 
    
         
            -
                Nokogiri::HTML.parse Roadie::Inliner.new( 
     | 
| 
      
 13 
     | 
    
         
            +
                Nokogiri::HTML.parse Roadie::Inliner.new(provider, ['global.css'], html, url_options).execute
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              describe "initialization" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                it "warns about asset_path_prefix being non-functional" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  expect {
         
     | 
| 
      
 19 
     | 
    
         
            +
                    Roadie::Inliner.new(provider, [], '', :asset_path_prefix => 'foo')
         
     | 
| 
      
 20 
     | 
    
         
            +
                  }.to raise_error(ArgumentError, /asset_path_prefix/)
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
       9 
22 
     | 
    
         
             
              end
         
     | 
| 
       10 
23 
     | 
    
         | 
| 
       11 
24 
     | 
    
         
             
              describe "inlining styles" do
         
     | 
| 
         @@ -149,7 +162,13 @@ describe Roadie::Inliner do 
     | 
|
| 
       149 
162 
     | 
    
         
             
              end
         
     | 
| 
       150 
163 
     | 
    
         | 
| 
       151 
164 
     | 
    
         
             
              describe "linked stylesheets" do
         
     | 
| 
      
 165 
     | 
    
         
            +
                def fake_file(name, contents)
         
     | 
| 
      
 166 
     | 
    
         
            +
                  provider.should_receive(:find).with(name).and_return(contents)
         
     | 
| 
      
 167 
     | 
    
         
            +
                end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
       152 
169 
     | 
    
         
             
                it "inlines styles from the linked stylesheet" do
         
     | 
| 
      
 170 
     | 
    
         
            +
                  fake_file('/assets/green_paragraphs.css', 'p { color: green; }')
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
       153 
172 
     | 
    
         
             
                  rendering(<<-HTML).should have_styling('color' => 'green').at_selector('p')
         
     | 
| 
       154 
173 
     | 
    
         
             
                    <html>
         
     | 
| 
       155 
174 
     | 
    
         
             
                      <head>
         
     | 
| 
         @@ -163,6 +182,8 @@ describe Roadie::Inliner do 
     | 
|
| 
       163 
182 
     | 
    
         
             
                end
         
     | 
| 
       164 
183 
     | 
    
         | 
| 
       165 
184 
     | 
    
         
             
                it "inlines styles from the linked stylesheet in subdirectory" do
         
     | 
| 
      
 185 
     | 
    
         
            +
                  fake_file('/assets/subdirectory/red_paragraphs.css', 'p { color: red; }')
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
       166 
187 
     | 
    
         
             
                  rendering(<<-HTML).should have_styling('color' => 'red').at_selector('p')
         
     | 
| 
       167 
188 
     | 
    
         
             
                    <html>
         
     | 
| 
       168 
189 
     | 
    
         
             
                      <head>
         
     | 
| 
         @@ -176,11 +197,14 @@ describe Roadie::Inliner do 
     | 
|
| 
       176 
197 
     | 
    
         
             
                end
         
     | 
| 
       177 
198 
     | 
    
         | 
| 
       178 
199 
     | 
    
         
             
                it "inlines styles from more than one linked stylesheet" do
         
     | 
| 
      
 200 
     | 
    
         
            +
                  fake_file('/assets/large_purple_paragraphs.css', 'p { font-size: 18px; color: purple; }')
         
     | 
| 
      
 201 
     | 
    
         
            +
                  fake_file('/assets/green_paragraphs.css', 'p { color: green; }')
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
       179 
203 
     | 
    
         
             
                  html = <<-HTML
         
     | 
| 
       180 
204 
     | 
    
         
             
                    <html>
         
     | 
| 
       181 
205 
     | 
    
         
             
                      <head>
         
     | 
| 
       182 
     | 
    
         
            -
                        <link rel="stylesheet" href="/assets/green_paragraphs.css">
         
     | 
| 
       183 
206 
     | 
    
         
             
                        <link rel="stylesheet" href="/assets/large_purple_paragraphs.css">
         
     | 
| 
      
 207 
     | 
    
         
            +
                        <link rel="stylesheet" href="/assets/green_paragraphs.css">
         
     | 
| 
       184 
208 
     | 
    
         
             
                      </head>
         
     | 
| 
       185 
209 
     | 
    
         
             
                      <body>
         
     | 
| 
       186 
210 
     | 
    
         
             
                        <p></p>
         
     | 
| 
         @@ -189,12 +213,13 @@ describe Roadie::Inliner do 
     | 
|
| 
       189 
213 
     | 
    
         
             
                  HTML
         
     | 
| 
       190 
214 
     | 
    
         | 
| 
       191 
215 
     | 
    
         
             
                  rendering(html).should have_styling([
         
     | 
| 
       192 
     | 
    
         
            -
                    ['color', 'purple'],
         
     | 
| 
       193 
216 
     | 
    
         
             
                    ['font-size', '18px'],
         
     | 
| 
      
 217 
     | 
    
         
            +
                    ['color', 'green'],
         
     | 
| 
       194 
218 
     | 
    
         
             
                  ]).at_selector('p')
         
     | 
| 
       195 
219 
     | 
    
         
             
                end
         
     | 
| 
       196 
220 
     | 
    
         | 
| 
       197 
221 
     | 
    
         
             
                it "removes the stylesheet links from the DOM" do
         
     | 
| 
      
 222 
     | 
    
         
            +
                  provider.stub(:find => '')
         
     | 
| 
       198 
223 
     | 
    
         
             
                  rendering(<<-HTML).should_not have_selector('link')
         
     | 
| 
       199 
224 
     | 
    
         
             
                    <html>
         
     | 
| 
       200 
225 
     | 
    
         
             
                      <head>
         
     | 
| 
         @@ -302,7 +327,7 @@ describe Roadie::Inliner do 
     | 
|
| 
       302 
327 
     | 
    
         | 
| 
       303 
328 
     | 
    
         
             
                    expect { rendering(html) }.to raise_error do |error|
         
     | 
| 
       304 
329 
     | 
    
         
             
                      error.should be_a(Roadie::CSSFileNotFound)
         
     | 
| 
       305 
     | 
    
         
            -
                      error.filename.should == Roadie.assets['not_found.css']
         
     | 
| 
      
 330 
     | 
    
         
            +
                      error.filename.should == Roadie.app.assets['not_found.css']
         
     | 
| 
       306 
331 
     | 
    
         
             
                      error.guess.should == '/assets/not_found.css'
         
     | 
| 
       307 
332 
     | 
    
         
             
                    end
         
     | 
| 
       308 
333 
     | 
    
         
             
                  end
         
     | 
    
        data/spec/lib/roadie_spec.rb
    CHANGED
    
    | 
         @@ -8,31 +8,46 @@ describe Roadie do 
     | 
|
| 
       8 
8 
     | 
    
         
             
                end
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
              describe ". 
     | 
| 
       12 
     | 
    
         
            -
                it "delegates to Rails.application 
     | 
| 
       13 
     | 
    
         
            -
                  Rails.stub(:application =>  
     | 
| 
       14 
     | 
    
         
            -
                  Roadie. 
     | 
| 
      
 11 
     | 
    
         
            +
              describe ".app" do
         
     | 
| 
      
 12 
     | 
    
         
            +
                it "delegates to Rails.application" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                  Rails.stub(:application => 'application')
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Roadie.app.should == 'application'
         
     | 
| 
       15 
15 
     | 
    
         
             
                end
         
     | 
| 
       16 
16 
     | 
    
         
             
              end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
              describe ". 
     | 
| 
       19 
     | 
    
         
            -
                it " 
     | 
| 
       20 
     | 
    
         
            -
                  Roadie. 
     | 
| 
       21 
     | 
    
         
            -
                  Roadie. 
     | 
| 
      
 18 
     | 
    
         
            +
              describe ".providers" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                it "returns an array of all provider classes" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  Roadie.should have(2).providers
         
     | 
| 
      
 21 
     | 
    
         
            +
                  Roadie.providers.should include(Roadie::AssetPipelineProvider, Roadie::FilesystemProvider)
         
     | 
| 
       22 
22 
     | 
    
         
             
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              describe ".current_provider" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                let(:provider) { Object.new }
         
     | 
| 
       23 
27 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                 
     | 
| 
       25 
     | 
    
         
            -
                   
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
      
 28 
     | 
    
         
            +
                context "with a set provider in the config" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  it "uses the set provider" do
         
     | 
| 
      
 30 
     | 
    
         
            +
                    Roadie.app.config.roadie.provider = provider
         
     | 
| 
      
 31 
     | 
    
         
            +
                    Roadie.current_provider.should == provider
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
       27 
33 
     | 
    
         
             
                end
         
     | 
| 
       28 
34 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
                 
     | 
| 
       30 
     | 
    
         
            -
                   
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
      
 35 
     | 
    
         
            +
                context "with rails' asset pipeline enabled" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                  before(:each) { Roadie.app.config.assets.enabled = true }
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  it "uses the AssetPipelineProvider" do
         
     | 
| 
      
 39 
     | 
    
         
            +
                    Roadie::AssetPipelineProvider.should_receive(:new).and_return(provider)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    Roadie.current_provider.should == provider
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
       32 
42 
     | 
    
         
             
                end
         
     | 
| 
       33 
43 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                 
     | 
| 
       35 
     | 
    
         
            -
                   
     | 
| 
      
 44 
     | 
    
         
            +
                context "with rails' asset pipeline disabled" do
         
     | 
| 
      
 45 
     | 
    
         
            +
                  before(:each) { Roadie.app.config.assets.enabled = false }
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  it "uses the FilesystemProvider" do
         
     | 
| 
      
 48 
     | 
    
         
            +
                    Roadie::FilesystemProvider.should_receive(:new).and_return(provider)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    Roadie.current_provider.should == provider
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
       36 
51 
     | 
    
         
             
                end
         
     | 
| 
       37 
52 
     | 
    
         
             
              end
         
     | 
| 
       38 
53 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            shared_examples_for Roadie::AssetProvider do
         
     | 
| 
      
 2 
     | 
    
         
            +
              describe "#all(files)" do
         
     | 
| 
      
 3 
     | 
    
         
            +
                it "loads files in order and join them with a newline" do
         
     | 
| 
      
 4 
     | 
    
         
            +
                  provider.should_receive(:find).with('one').twice.and_return('contents of one')
         
     | 
| 
      
 5 
     | 
    
         
            +
                  provider.should_receive(:find).with('two').twice.and_return('contents of two')
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                  provider.all(%w[one two]).should == "contents of one\ncontents of two"
         
     | 
| 
      
 8 
     | 
    
         
            +
                  provider.all(%w[two one]).should == "contents of two\ncontents of one"
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -13,27 +13,31 @@ rescue Bundler::BundlerError => e 
     | 
|
| 
       13 
13 
     | 
    
         
             
            end
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
            require 'rspec'
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            require 'action_mailer'
         
     | 
| 
      
 16 
     | 
    
         
            +
            require 'rails'
         
     | 
| 
       18 
17 
     | 
    
         
             
            require 'sprockets'
         
     | 
| 
       19 
18 
     | 
    
         
             
            require 'roadie'
         
     | 
| 
       20 
19 
     | 
    
         | 
| 
       21 
20 
     | 
    
         
             
            FIXTURES_PATH = Pathname.new(File.dirname(__FILE__)).join('fixtures')
         
     | 
| 
      
 21 
     | 
    
         
            +
            Roadie::Railtie.run_initializers
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
            class TestApplication
         
     | 
| 
       24 
24 
     | 
    
         
             
              def config
         
     | 
| 
       25 
     | 
    
         
            -
                 
     | 
| 
      
 25 
     | 
    
         
            +
                @config ||= OpenStruct.new({
         
     | 
| 
      
 26 
     | 
    
         
            +
                  :action_mailer => OpenStruct.new(:default_url_options => {:host => "example.com"}),
         
     | 
| 
      
 27 
     | 
    
         
            +
                  :assets => OpenStruct.new(:enabled => false),
         
     | 
| 
      
 28 
     | 
    
         
            +
                  :roadie => OpenStruct.new(:provider => nil),
         
     | 
| 
      
 29 
     | 
    
         
            +
                })
         
     | 
| 
       26 
30 
     | 
    
         
             
              end
         
     | 
| 
       27 
31 
     | 
    
         | 
| 
       28 
32 
     | 
    
         
             
              def assets
         
     | 
| 
       29 
33 
     | 
    
         
             
                env = Sprockets::Environment.new
         
     | 
| 
       30 
     | 
    
         
            -
                env.append_path  
     | 
| 
      
 34 
     | 
    
         
            +
                env.append_path root.join('app','assets','stylesheets')
         
     | 
| 
       31 
35 
     | 
    
         
             
                env
         
     | 
| 
       32 
36 
     | 
    
         
             
              end
         
     | 
| 
       33 
     | 
    
         
            -
            end
         
     | 
| 
       34 
37 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 38 
     | 
    
         
            +
              def root
         
     | 
| 
      
 39 
     | 
    
         
            +
                FIXTURES_PATH
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
       37 
41 
     | 
    
         
             
            end
         
     | 
| 
       38 
42 
     | 
    
         | 
| 
       39 
43 
     | 
    
         
             
            RSpec.configure do |c|
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,8 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: roadie
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              prerelease: 
         
     | 
| 
       5 
     | 
    
         
            -
              version: 2.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              prerelease: 6
         
     | 
| 
      
 5 
     | 
    
         
            +
              version: 2.1.0.pre1
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors: 
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Magnus Bergmark
         
     | 
| 
         @@ -10,7 +10,7 @@ autorequire: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            date: 2011- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2011-11-24 00:00:00 +01:00
         
     | 
| 
       14 
14 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       16 
16 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -58,16 +58,27 @@ dependencies: 
     | 
|
| 
       58 
58 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       59 
59 
     | 
    
         
             
              version_requirements: *id004
         
     | 
| 
       60 
60 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       61 
     | 
    
         
            -
              name:  
     | 
| 
      
 61 
     | 
    
         
            +
              name: rails
         
     | 
| 
       62 
62 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       63 
63 
     | 
    
         
             
              requirement: &id005 !ruby/object:Gem::Requirement 
         
     | 
| 
       64 
64 
     | 
    
         
             
                none: false
         
     | 
| 
       65 
65 
     | 
    
         
             
                requirements: 
         
     | 
| 
       66 
66 
     | 
    
         
             
                - - ">="
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       68 
     | 
    
         
            -
                    version:  
     | 
| 
      
 68 
     | 
    
         
            +
                    version: "0"
         
     | 
| 
       69 
69 
     | 
    
         
             
              type: :development
         
     | 
| 
       70 
70 
     | 
    
         
             
              version_requirements: *id005
         
     | 
| 
      
 71 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 72 
     | 
    
         
            +
              name: rspec-rails
         
     | 
| 
      
 73 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 74 
     | 
    
         
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 75 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 76 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 77 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 78 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 79 
     | 
    
         
            +
                    version: 2.0.0
         
     | 
| 
      
 80 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 81 
     | 
    
         
            +
              version_requirements: *id006
         
     | 
| 
       71 
82 
     | 
    
         
             
            description: Roadie tries to make sending HTML emails a little less painful in Rails 3 by inlining stylesheets and rewrite relative URLs for you.
         
     | 
| 
       72 
83 
     | 
    
         
             
            email: 
         
     | 
| 
       73 
84 
     | 
    
         
             
            - magnus.bergmark@gmail.com
         
     | 
| 
         @@ -92,27 +103,29 @@ files: 
     | 
|
| 
       92 
103 
     | 
    
         
             
            - autotest/discover.rb
         
     | 
| 
       93 
104 
     | 
    
         
             
            - lib/roadie.rb
         
     | 
| 
       94 
105 
     | 
    
         
             
            - lib/roadie/action_mailer_extensions.rb
         
     | 
| 
      
 106 
     | 
    
         
            +
            - lib/roadie/asset_pipeline_provider.rb
         
     | 
| 
      
 107 
     | 
    
         
            +
            - lib/roadie/asset_provider.rb
         
     | 
| 
       95 
108 
     | 
    
         
             
            - lib/roadie/css_file_not_found.rb
         
     | 
| 
      
 109 
     | 
    
         
            +
            - lib/roadie/filesystem_provider.rb
         
     | 
| 
       96 
110 
     | 
    
         
             
            - lib/roadie/inliner.rb
         
     | 
| 
      
 111 
     | 
    
         
            +
            - lib/roadie/railtie.rb
         
     | 
| 
       97 
112 
     | 
    
         
             
            - lib/roadie/style_declaration.rb
         
     | 
| 
       98 
113 
     | 
    
         
             
            - lib/roadie/version.rb
         
     | 
| 
       99 
114 
     | 
    
         
             
            - roadie.gemspec
         
     | 
| 
       100 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/bar.css
         
     | 
| 
       101 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/foo.css
         
     | 
| 
       102 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/green_paragraphs.css
         
     | 
| 
       103 
115 
     | 
    
         
             
            - spec/fixtures/app/assets/stylesheets/integration.css
         
     | 
| 
       104 
     | 
    
         
            -
            - spec/fixtures/ 
     | 
| 
       105 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/subdirectory/findme.css
         
     | 
| 
       106 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/subdirectory/red_paragraphs.css
         
     | 
| 
      
 116 
     | 
    
         
            +
            - spec/fixtures/public/stylesheets/integration.css
         
     | 
| 
       107 
117 
     | 
    
         
             
            - spec/fixtures/views/integration_mailer/marketing.html.erb
         
     | 
| 
       108 
118 
     | 
    
         
             
            - spec/fixtures/views/integration_mailer/notification.html.erb
         
     | 
| 
       109 
119 
     | 
    
         
             
            - spec/fixtures/views/integration_mailer/notification.text.erb
         
     | 
| 
       110 
120 
     | 
    
         
             
            - spec/integration_spec.rb
         
     | 
| 
       111 
121 
     | 
    
         
             
            - spec/lib/roadie/action_mailer_extensions_spec.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
            - spec/lib/roadie/asset_pipeline_provider_spec.rb
         
     | 
| 
       112 
123 
     | 
    
         
             
            - spec/lib/roadie/css_file_not_found_spec.rb
         
     | 
| 
      
 124 
     | 
    
         
            +
            - spec/lib/roadie/filesystem_provider_spec.rb
         
     | 
| 
       113 
125 
     | 
    
         
             
            - spec/lib/roadie/inliner_spec.rb
         
     | 
| 
       114 
126 
     | 
    
         
             
            - spec/lib/roadie/style_declaration_spec.rb
         
     | 
| 
       115 
127 
     | 
    
         
             
            - spec/lib/roadie_spec.rb
         
     | 
| 
      
 128 
     | 
    
         
            +
            - spec/shared_examples/asset_provider_examples.rb
         
     | 
| 
       116 
129 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       117 
130 
     | 
    
         
             
            - spec/support/have_attribute_matcher.rb
         
     | 
| 
       118 
131 
     | 
    
         
             
            - spec/support/have_selector_matcher.rb
         
     | 
| 
         @@ -136,9 +149,9 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       136 
149 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
       137 
150 
     | 
    
         
             
              none: false
         
     | 
| 
       138 
151 
     | 
    
         
             
              requirements: 
         
     | 
| 
       139 
     | 
    
         
            -
              - - " 
     | 
| 
      
 152 
     | 
    
         
            +
              - - ">"
         
     | 
| 
       140 
153 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
       141 
     | 
    
         
            -
                  version:  
     | 
| 
      
 154 
     | 
    
         
            +
                  version: 1.3.1
         
     | 
| 
       142 
155 
     | 
    
         
             
            requirements: []
         
     | 
| 
       143 
156 
     | 
    
         | 
| 
       144 
157 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
         @@ -147,22 +160,20 @@ signing_key: 
     | 
|
| 
       147 
160 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       148 
161 
     | 
    
         
             
            summary: Making HTML emails comfortable for the Rails rockstars
         
     | 
| 
       149 
162 
     | 
    
         
             
            test_files: 
         
     | 
| 
       150 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/bar.css
         
     | 
| 
       151 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/foo.css
         
     | 
| 
       152 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/green_paragraphs.css
         
     | 
| 
       153 
163 
     | 
    
         
             
            - spec/fixtures/app/assets/stylesheets/integration.css
         
     | 
| 
       154 
     | 
    
         
            -
            - spec/fixtures/ 
     | 
| 
       155 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/subdirectory/findme.css
         
     | 
| 
       156 
     | 
    
         
            -
            - spec/fixtures/app/assets/stylesheets/subdirectory/red_paragraphs.css
         
     | 
| 
      
 164 
     | 
    
         
            +
            - spec/fixtures/public/stylesheets/integration.css
         
     | 
| 
       157 
165 
     | 
    
         
             
            - spec/fixtures/views/integration_mailer/marketing.html.erb
         
     | 
| 
       158 
166 
     | 
    
         
             
            - spec/fixtures/views/integration_mailer/notification.html.erb
         
     | 
| 
       159 
167 
     | 
    
         
             
            - spec/fixtures/views/integration_mailer/notification.text.erb
         
     | 
| 
       160 
168 
     | 
    
         
             
            - spec/integration_spec.rb
         
     | 
| 
       161 
169 
     | 
    
         
             
            - spec/lib/roadie/action_mailer_extensions_spec.rb
         
     | 
| 
      
 170 
     | 
    
         
            +
            - spec/lib/roadie/asset_pipeline_provider_spec.rb
         
     | 
| 
       162 
171 
     | 
    
         
             
            - spec/lib/roadie/css_file_not_found_spec.rb
         
     | 
| 
      
 172 
     | 
    
         
            +
            - spec/lib/roadie/filesystem_provider_spec.rb
         
     | 
| 
       163 
173 
     | 
    
         
             
            - spec/lib/roadie/inliner_spec.rb
         
     | 
| 
       164 
174 
     | 
    
         
             
            - spec/lib/roadie/style_declaration_spec.rb
         
     | 
| 
       165 
175 
     | 
    
         
             
            - spec/lib/roadie_spec.rb
         
     | 
| 
      
 176 
     | 
    
         
            +
            - spec/shared_examples/asset_provider_examples.rb
         
     | 
| 
       166 
177 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       167 
178 
     | 
    
         
             
            - spec/support/have_attribute_matcher.rb
         
     | 
| 
       168 
179 
     | 
    
         
             
            - spec/support/have_selector_matcher.rb
         
     |