roadie 2.4.3 → 3.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.travis.yml +9 -14
- data/.yardopts +1 -1
- data/Changelog.md +22 -10
- data/Gemfile +3 -0
- data/Guardfile +11 -1
- data/README.md +165 -163
- data/Rakefile +2 -19
- data/lib/roadie.rb +14 -69
- data/lib/roadie/asset_provider.rb +7 -58
- data/lib/roadie/asset_scanner.rb +92 -0
- data/lib/roadie/document.rb +103 -0
- data/lib/roadie/errors.rb +57 -0
- data/lib/roadie/filesystem_provider.rb +21 -62
- data/lib/roadie/inliner.rb +71 -218
- data/lib/roadie/markup_improver.rb +88 -0
- data/lib/roadie/null_provider.rb +13 -0
- data/lib/roadie/null_url_rewriter.rb +12 -0
- data/lib/roadie/provider_list.rb +67 -0
- data/lib/roadie/rspec.rb +1 -0
- data/lib/roadie/rspec/asset_provider.rb +49 -0
- data/lib/roadie/selector.rb +42 -18
- data/lib/roadie/style_block.rb +33 -0
- data/lib/roadie/style_properties.rb +29 -0
- data/lib/roadie/style_property.rb +93 -0
- data/lib/roadie/stylesheet.rb +65 -0
- data/lib/roadie/url_generator.rb +126 -0
- data/lib/roadie/url_rewriter.rb +84 -0
- data/lib/roadie/version.rb +1 -1
- data/roadie.gemspec +6 -10
- data/spec/fixtures/big_em.css +1 -0
- data/spec/fixtures/stylesheets/green.css +1 -0
- data/spec/integration_spec.rb +125 -95
- data/spec/lib/roadie/asset_scanner_spec.rb +153 -0
- data/spec/lib/roadie/css_not_found_spec.rb +16 -0
- data/spec/lib/roadie/document_spec.rb +123 -0
- data/spec/lib/roadie/filesystem_provider_spec.rb +25 -72
- data/spec/lib/roadie/inliner_spec.rb +105 -537
- data/spec/lib/roadie/markup_improver_spec.rb +78 -0
- data/spec/lib/roadie/null_provider_spec.rb +21 -0
- data/spec/lib/roadie/null_url_rewriter_spec.rb +19 -0
- data/spec/lib/roadie/provider_list_spec.rb +81 -0
- data/spec/lib/roadie/selector_spec.rb +7 -5
- data/spec/lib/roadie/style_block_spec.rb +35 -0
- data/spec/lib/roadie/style_properties_spec.rb +61 -0
- data/spec/lib/roadie/style_property_spec.rb +82 -0
- data/spec/lib/roadie/stylesheet_spec.rb +41 -0
- data/spec/lib/roadie/test_provider_spec.rb +29 -0
- data/spec/lib/roadie/url_generator_spec.rb +120 -0
- data/spec/lib/roadie/url_rewriter_spec.rb +79 -0
- data/spec/shared_examples/asset_provider.rb +11 -0
- data/spec/shared_examples/url_rewriter.rb +23 -0
- data/spec/spec_helper.rb +5 -60
- data/spec/support/have_node_matcher.rb +2 -2
- data/spec/support/have_selector_matcher.rb +1 -1
- data/spec/support/have_styling_matcher.rb +48 -14
- data/spec/support/test_provider.rb +13 -0
- metadata +73 -177
- data/Appraisals +0 -15
- data/gemfiles/rails_3.0.gemfile +0 -7
- data/gemfiles/rails_3.0.gemfile.lock +0 -123
- data/gemfiles/rails_3.1.gemfile +0 -7
- data/gemfiles/rails_3.1.gemfile.lock +0 -126
- data/gemfiles/rails_3.2.gemfile +0 -7
- data/gemfiles/rails_3.2.gemfile.lock +0 -124
- data/gemfiles/rails_4.0.gemfile +0 -7
- data/gemfiles/rails_4.0.gemfile.lock +0 -119
- data/lib/roadie/action_mailer_extensions.rb +0 -95
- data/lib/roadie/asset_pipeline_provider.rb +0 -28
- data/lib/roadie/css_file_not_found.rb +0 -22
- data/lib/roadie/railtie.rb +0 -39
- data/lib/roadie/style_declaration.rb +0 -42
- data/spec/fixtures/app/assets/stylesheets/integration.css +0 -10
- data/spec/fixtures/public/stylesheets/integration.css +0 -10
- data/spec/fixtures/views/integration_mailer/marketing.html.erb +0 -2
- data/spec/fixtures/views/integration_mailer/notification.html.erb +0 -8
- data/spec/fixtures/views/integration_mailer/notification.text.erb +0 -6
- data/spec/lib/roadie/action_mailer_extensions_spec.rb +0 -227
- data/spec/lib/roadie/asset_pipeline_provider_spec.rb +0 -65
- data/spec/lib/roadie/css_file_not_found_spec.rb +0 -29
- data/spec/lib/roadie/style_declaration_spec.rb +0 -49
- data/spec/lib/roadie_spec.rb +0 -101
- data/spec/shared_examples/asset_provider_examples.rb +0 -11
- data/spec/support/anonymous_mailer.rb +0 -21
- data/spec/support/change_url_options.rb +0 -5
- data/spec/support/parse_styling.rb +0 -25
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Roadie
|
4
|
-
describe CSSFileNotFound do
|
5
|
-
it "is initialized with a filename" do
|
6
|
-
CSSFileNotFound.new('file.css').filename.should == 'file.css'
|
7
|
-
end
|
8
|
-
|
9
|
-
it "can be initialized with the guess the filename was based on" do
|
10
|
-
CSSFileNotFound.new('file.css', :file).guess.should == :file
|
11
|
-
end
|
12
|
-
|
13
|
-
it "has a nil guess when no guess was specified" do
|
14
|
-
CSSFileNotFound.new('').guess.should be_nil
|
15
|
-
end
|
16
|
-
|
17
|
-
context "without a guess" do
|
18
|
-
it "has a message with the wanted filename" do
|
19
|
-
CSSFileNotFound.new('style.css').message.should == 'Could not find style.css'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "with a guess" do
|
24
|
-
it "has a message with the wanted filename and the guess" do
|
25
|
-
CSSFileNotFound.new('style.css', :style).message.should == 'Could not find style.css (guessed from :style)'
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Roadie
|
4
|
-
describe StyleDeclaration do
|
5
|
-
it "is initialized with a property, value, if it is marked as important, and the specificity" do
|
6
|
-
StyleDeclaration.new('color', 'green', true, 45).tap do |declaration|
|
7
|
-
declaration.property.should == 'color'
|
8
|
-
declaration.value.should == 'green'
|
9
|
-
declaration.should be_important
|
10
|
-
declaration.specificity.should == 45
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "string representation" do
|
15
|
-
it "is the property and the value joined with a colon" do
|
16
|
-
StyleDeclaration.new('color', 'green', false, 1).to_s.should == 'color:green'
|
17
|
-
StyleDeclaration.new('font-size', '1.1em', false, 1).to_s.should == 'font-size:1.1em'
|
18
|
-
end
|
19
|
-
|
20
|
-
it "contains the !important flag when set" do
|
21
|
-
StyleDeclaration.new('color', 'green', true, 1).to_s.should == 'color:green !important'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "comparing" do
|
26
|
-
def declaration(specificity, important = false)
|
27
|
-
StyleDeclaration.new('color', 'green', important, specificity)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "compares on specificity" do
|
31
|
-
declaration(5).should be == declaration(5)
|
32
|
-
declaration(4).should be < declaration(5)
|
33
|
-
declaration(6).should be > declaration(5)
|
34
|
-
end
|
35
|
-
|
36
|
-
context "with an important declaration" do
|
37
|
-
it "is less than the important declaration regardless of the specificity" do
|
38
|
-
declaration(99, false).should be < declaration(1, true)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "compares like normal when both declarations are important" do
|
42
|
-
declaration(5, true).should be == declaration(5, true)
|
43
|
-
declaration(4, true).should be < declaration(5, true)
|
44
|
-
declaration(6, true).should be > declaration(5, true)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
data/spec/lib/roadie_spec.rb
DELETED
@@ -1,101 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Roadie do
|
4
|
-
let(:config) { Rails.application.config }
|
5
|
-
|
6
|
-
describe ".inline_css" do
|
7
|
-
it "creates an instance of Roadie::Inliner and execute it" do
|
8
|
-
Roadie::Inliner.should_receive(:new).with('attri', 'butes').and_return(double('inliner', :execute => 'html'))
|
9
|
-
Roadie.inline_css('attri', 'butes').should == 'html'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe ".app" do
|
14
|
-
it "delegates to Rails.application" do
|
15
|
-
Rails.stub(:application => 'application')
|
16
|
-
Roadie.app.should == 'application'
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe ".providers" do
|
21
|
-
it "returns an array of all provider classes" do
|
22
|
-
Roadie.should have(2).providers
|
23
|
-
Roadie.providers.should include(Roadie::AssetPipelineProvider, Roadie::FilesystemProvider)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe ".enabled?" do
|
28
|
-
it "returns the value of config.roadie.enabled" do
|
29
|
-
config.roadie.stub :enabled => true
|
30
|
-
Roadie.should be_enabled
|
31
|
-
config.roadie.stub :enabled => false
|
32
|
-
Roadie.should_not be_enabled
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe ".current_provider" do
|
37
|
-
let(:provider) { double("provider instance") }
|
38
|
-
|
39
|
-
context "with a set provider in the config" do
|
40
|
-
it "uses the set provider" do
|
41
|
-
config.roadie.provider = provider
|
42
|
-
Roadie.current_provider.should == provider
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "when Rails' asset pipeline is not present" do
|
47
|
-
before(:each) do
|
48
|
-
# Turns out it's pretty much impossible to work with Rails.application.config
|
49
|
-
# in a nice way; it changed quite a lot since 3.0. There's also no way of
|
50
|
-
# removing a configuration key after it's set, we cannot remove the assets
|
51
|
-
# config completely to trigger the normal error triggered in a 3.0 app (NoMethodError)
|
52
|
-
# We'll simulate it by mutating it in an ugly way for this test
|
53
|
-
config.stub(:assets).and_raise(NoMethodError)
|
54
|
-
config.stub(:respond_to?).with(:assets) { false }
|
55
|
-
end
|
56
|
-
|
57
|
-
it "uses the FilesystemProvider" do
|
58
|
-
Roadie::FilesystemProvider.should_receive(:new).and_return(provider)
|
59
|
-
Roadie.current_provider.should == provider
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "with rails' asset pipeline enabled" do
|
64
|
-
before(:each) { config.assets.enabled = true }
|
65
|
-
|
66
|
-
it "uses the AssetPipelineProvider" do
|
67
|
-
Roadie::AssetPipelineProvider.should_receive(:new).and_return(provider)
|
68
|
-
Roadie.current_provider.should == provider
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context "with rails 4.0's asset pipeline enabled" do
|
73
|
-
before(:each) { config.assets.enabled = nil }
|
74
|
-
|
75
|
-
it "uses the AssetPipelineProvider" do
|
76
|
-
Roadie::AssetPipelineProvider.should_receive(:new).and_return(provider)
|
77
|
-
Roadie.current_provider.should == provider
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context "with rails' asset pipeline disabled" do
|
82
|
-
before(:each) { config.assets.enabled = false }
|
83
|
-
|
84
|
-
it "uses the FilesystemProvider" do
|
85
|
-
Roadie::FilesystemProvider.should_receive(:new).and_return(provider)
|
86
|
-
Roadie.current_provider.should == provider
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe ".after_inlining_handler" do
|
92
|
-
let(:after_inlining_handler) { double("after inlining handler") }
|
93
|
-
|
94
|
-
it "returns the value of config.roadie.after_inlining_handler" do
|
95
|
-
config.roadie.after_inlining = after_inlining_handler
|
96
|
-
Roadie.after_inlining_handler.should == after_inlining_handler
|
97
|
-
config.roadie.after_inlining = nil
|
98
|
-
Roadie.after_inlining_handler.should == nil
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
@@ -1,11 +0,0 @@
|
|
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
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# Subclass of ActionMailer::Base that does not crash when the class
|
2
|
-
# is anonymous. Subclassed in the specs whenever a new mailer is
|
3
|
-
# needed
|
4
|
-
class AnonymousMailer < ActionMailer::Base
|
5
|
-
class << self
|
6
|
-
# Pretty much like super, but returns "anonymous" when no
|
7
|
-
# name is set
|
8
|
-
def mailer_name
|
9
|
-
if @mailer_name or name
|
10
|
-
super
|
11
|
-
else
|
12
|
-
"anonymous"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Was an alias. (e.g. pointed to the old, non-overridden method)
|
17
|
-
def controller_path
|
18
|
-
mailer_name
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module SpecHelpers
|
2
|
-
class << self
|
3
|
-
def styling_of_node(node)
|
4
|
-
if node and node['style'].present?
|
5
|
-
parse_styling(node['style'])
|
6
|
-
else
|
7
|
-
[]
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def parse_styling(styles)
|
12
|
-
styles.split(';').map { |style| parse_style(style) }
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
def parse_style(style)
|
17
|
-
rule, value = style.split(':', 2).map(&:strip)
|
18
|
-
[rule, normalize_escaped_quotes(value)]
|
19
|
-
end
|
20
|
-
|
21
|
-
def normalize_escaped_quotes(string)
|
22
|
-
string.gsub('%22', '"')
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|