md-roadie 2.4.2.md.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/.autotest +10 -0
  2. data/.gitignore +12 -0
  3. data/.travis.yml +22 -0
  4. data/.yardopts +1 -0
  5. data/Appraisals +15 -0
  6. data/Changelog.md +185 -0
  7. data/Gemfile +11 -0
  8. data/Guardfile +8 -0
  9. data/MIT-LICENSE +20 -0
  10. data/README.md +310 -0
  11. data/Rakefile +30 -0
  12. data/autotest/discover.rb +1 -0
  13. data/gemfiles/rails_3.0.gemfile +7 -0
  14. data/gemfiles/rails_3.0.gemfile.lock +123 -0
  15. data/gemfiles/rails_3.1.gemfile +7 -0
  16. data/gemfiles/rails_3.1.gemfile.lock +126 -0
  17. data/gemfiles/rails_3.2.gemfile +7 -0
  18. data/gemfiles/rails_3.2.gemfile.lock +124 -0
  19. data/gemfiles/rails_4.0.gemfile +7 -0
  20. data/gemfiles/rails_4.0.gemfile.lock +119 -0
  21. data/lib/roadie.rb +79 -0
  22. data/lib/roadie/action_mailer_extensions.rb +95 -0
  23. data/lib/roadie/asset_pipeline_provider.rb +28 -0
  24. data/lib/roadie/asset_provider.rb +62 -0
  25. data/lib/roadie/css_file_not_found.rb +22 -0
  26. data/lib/roadie/filesystem_provider.rb +74 -0
  27. data/lib/roadie/inliner.rb +251 -0
  28. data/lib/roadie/railtie.rb +39 -0
  29. data/lib/roadie/selector.rb +50 -0
  30. data/lib/roadie/style_declaration.rb +42 -0
  31. data/lib/roadie/version.rb +3 -0
  32. data/md-roadie.gemspec +36 -0
  33. data/spec/fixtures/app/assets/stylesheets/integration.css +10 -0
  34. data/spec/fixtures/public/stylesheets/integration.css +10 -0
  35. data/spec/fixtures/views/integration_mailer/marketing.html.erb +2 -0
  36. data/spec/fixtures/views/integration_mailer/notification.html.erb +8 -0
  37. data/spec/fixtures/views/integration_mailer/notification.text.erb +6 -0
  38. data/spec/integration_spec.rb +110 -0
  39. data/spec/lib/roadie/action_mailer_extensions_spec.rb +227 -0
  40. data/spec/lib/roadie/asset_pipeline_provider_spec.rb +65 -0
  41. data/spec/lib/roadie/css_file_not_found_spec.rb +29 -0
  42. data/spec/lib/roadie/filesystem_provider_spec.rb +94 -0
  43. data/spec/lib/roadie/inliner_spec.rb +591 -0
  44. data/spec/lib/roadie/selector_spec.rb +55 -0
  45. data/spec/lib/roadie/style_declaration_spec.rb +49 -0
  46. data/spec/lib/roadie_spec.rb +101 -0
  47. data/spec/shared_examples/asset_provider_examples.rb +11 -0
  48. data/spec/spec_helper.rb +69 -0
  49. data/spec/support/anonymous_mailer.rb +21 -0
  50. data/spec/support/change_url_options.rb +5 -0
  51. data/spec/support/have_attribute_matcher.rb +28 -0
  52. data/spec/support/have_node_matcher.rb +19 -0
  53. data/spec/support/have_selector_matcher.rb +6 -0
  54. data/spec/support/have_styling_matcher.rb +25 -0
  55. data/spec/support/parse_styling.rb +25 -0
  56. metadata +318 -0
@@ -0,0 +1,55 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ module Roadie
5
+ describe Selector do
6
+ it "can be coerced into String" do
7
+ ("I love " + Selector.new("html")).should == "I love html"
8
+ end
9
+
10
+ it "can be inlined when simple" do
11
+ Selector.new("html body #main p.class").should be_inlinable
12
+ end
13
+
14
+ it "cannot be inlined when containing pseudo functions" do
15
+ %w[
16
+ p:active
17
+ p:focus
18
+ p:hover
19
+ p:link
20
+ p:target
21
+ p:visited
22
+ p:before
23
+ p:after
24
+ p:-ms-input-placeholder
25
+ p:-moz-placeholder
26
+ ].each do |bad_selector|
27
+ Selector.new(bad_selector).should_not be_inlinable
28
+ end
29
+
30
+ Selector.new('p.active').should be_inlinable
31
+ end
32
+
33
+ it "cannot be inlined when containing pseudo elements" do
34
+ Selector.new('p::some-element').should_not be_inlinable
35
+ end
36
+
37
+ it "cannot be inlined when selector is an at-rule" do
38
+ Selector.new('@keyframes progress-bar-stripes').should_not be_inlinable
39
+ end
40
+
41
+ it "has a calculated specificity" do
42
+ selector = "html p.active.nice #main.deep-selector"
43
+ Selector.new(selector).specificity.should == CssParser.calculate_specificity(selector)
44
+ end
45
+
46
+ it "is equal to other selectors when they match the same things" do
47
+ Selector.new("foo").should == Selector.new("foo ")
48
+ Selector.new("foo").should_not == "foo"
49
+ end
50
+
51
+ it "strips the given selector" do
52
+ Selector.new(" foo \n").to_s.should == Selector.new("foo").to_s
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,49 @@
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
@@ -0,0 +1,101 @@
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
@@ -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
@@ -0,0 +1,69 @@
1
+ $: << File.dirname(__FILE__) + '/../lib'
2
+
3
+ require 'ostruct'
4
+ require 'rubygems'
5
+ require 'bundler'
6
+
7
+ begin
8
+ Bundler.setup(:default, :development)
9
+ rescue Bundler::BundlerError => e
10
+ $stderr.puts e.message
11
+ $stderr.puts "Run `bundle install` to install missing gems"
12
+ exit e.status_code
13
+ end
14
+
15
+ require 'rspec'
16
+ require 'rails'
17
+ require 'sprockets'
18
+
19
+ require 'roadie/railtie'
20
+ require 'action_mailer/railtie'
21
+
22
+ FIXTURES_PATH = Pathname.new(File.dirname(__FILE__)).join('fixtures')
23
+
24
+ class TestApplication < Rails::Application
25
+ def config
26
+ @config
27
+ end
28
+
29
+ def assets
30
+ env = Sprockets::Environment.new
31
+ env.append_path root.join('app','assets','stylesheets')
32
+ env
33
+ end
34
+
35
+ def root
36
+ FIXTURES_PATH
37
+ end
38
+
39
+ def reset_test_config
40
+ @config = OpenStruct.new({
41
+ :action_mailer => OpenStruct.new(:default_url_options => {}),
42
+ :assets => OpenStruct.new(:enabled => false),
43
+ :roadie => OpenStruct.new(:provider => nil, :enabled => true),
44
+ })
45
+ change_default_url_options(:host => "example.com")
46
+ end
47
+ end
48
+
49
+ if Roadie::Railtie.respond_to?(:run_initializers)
50
+ # Rails >= 3.1
51
+ ActionMailer::Railtie.run_initializers(:default, Rails.application)
52
+ Roadie::Railtie.run_initializers(:default, Rails.application)
53
+ else
54
+ # Rails 3.0
55
+ Rails.application.config.active_support.deprecation = :log
56
+ Rails.logger = Logger.new('/dev/null')
57
+ Rails.application.initialize!
58
+ end
59
+
60
+ RSpec.configure do |config|
61
+ config.before(:each) do
62
+ Rails.application.reset_test_config
63
+ end
64
+
65
+ config.treat_symbols_as_metadata_keys_with_true_values = true
66
+ config.run_all_when_everything_filtered = true
67
+ end
68
+
69
+ Dir['./spec/support/**/*.rb'].each { |file| require file }
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,5 @@
1
+ # ActionMailer::Base loads the default_url_options on startup via its Railtie
2
+ def change_default_url_options(new_options)
3
+ Rails.application.config.action_mailer.default_url_options = new_options
4
+ ActionMailer::Base.default_url_options = new_options
5
+ end
@@ -0,0 +1,28 @@
1
+ RSpec::Matchers.define :have_attribute do |attribute|
2
+ @selector = 'body > *:first'
3
+
4
+ chain :at_selector do |selector|
5
+ @selector = selector
6
+ end
7
+
8
+ match do |document|
9
+ name, expected = attribute.first
10
+ expected == attribute(document, name)
11
+ end
12
+
13
+ description { "have attribute #{attribute.inspect} at selector #{@selector.inspect}" }
14
+ failure_message_for_should do |document|
15
+ name, expected = attribute.first
16
+ "expected #{name} attribute at #{@selector.inspect} to be #{expected.inspect} but was #{attribute(document, name).inspect}"
17
+ end
18
+ failure_message_for_should_not do |document|
19
+ name, expected = attribute.first
20
+ "expected #{name} attribute at #{@selector.inspect} to not be #{expected.inspect}"
21
+ end
22
+
23
+ def attribute(document, attribute_name)
24
+ node = document.css(@selector).first
25
+ node && node[attribute_name]
26
+ end
27
+ end
28
+
@@ -0,0 +1,19 @@
1
+ RSpec::Matchers.define :have_node do |selector|
2
+ chain(:with_attributes) { |attributes| @attributes = attributes }
3
+ match do |document|
4
+ node = document.at_css(selector)
5
+ if @attributes
6
+ node.present? and match_attributes(node.attributes)
7
+ else
8
+ node.present?
9
+ end
10
+ end
11
+
12
+ failure_message_for_should { "expected document to #{name_to_sentence}#{expected_to_sentence}"}
13
+ failure_message_for_should_not { "expected document to not #{name_to_sentence}#{expected_to_sentence}"}
14
+
15
+ def match_attributes(node_attributes)
16
+ attributes = Hash[node_attributes.map { |name, attribute| [name, attribute.value] }]
17
+ @attributes == attributes
18
+ end
19
+ end
@@ -0,0 +1,6 @@
1
+ RSpec::Matchers.define :have_selector do |selector|
2
+ match { |document| document.css(selector).present? }
3
+ failure_message_for_should { "expected document to #{name_to_sentence}#{expected_to_sentence}"}
4
+ failure_message_for_should_not { "expected document to not #{name_to_sentence}#{expected_to_sentence}"}
5
+ end
6
+
@@ -0,0 +1,25 @@
1
+ RSpec::Matchers.define :have_styling do |rules|
2
+ @selector = 'body > *:first'
3
+
4
+ chain :at_selector do |selector|
5
+ @selector = selector
6
+ end
7
+
8
+ match do |document|
9
+ if rules.nil?
10
+ parsed_styles(document).blank?
11
+ else
12
+ rules.to_a.should == parsed_styles(document)
13
+ end
14
+ end
15
+
16
+ description { "have styles #{rules.inspect} at selector #{@selector.inspect}" }
17
+ failure_message_for_should { |document| "expected styles at #{@selector.inspect} to be #{rules.inspect} but was #{parsed_styles(document).inspect}" }
18
+ failure_message_for_should_not { "expected styles at #{@selector.inspect} to not be #{rules.inspect}" }
19
+
20
+ def parsed_styles(document)
21
+ node = document.css(@selector).first
22
+ SpecHelpers.styling_of_node(node)
23
+ end
24
+ end
25
+
@@ -0,0 +1,25 @@
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
metadata ADDED
@@ -0,0 +1,318 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: md-roadie
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.4.2.md.1
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Magnus Bergmark
9
+ - BJ Neilsen
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-10-10 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: nokogiri
17
+ version_requirements: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - !binary |-
20
+ Pg==
21
+ - !ruby/object:Gem::Version
22
+ version: 1.5.0
23
+ none: false
24
+ requirement: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - !binary |-
27
+ Pg==
28
+ - !ruby/object:Gem::Version
29
+ version: 1.5.0
30
+ none: false
31
+ prerelease: false
32
+ type: :runtime
33
+ - !ruby/object:Gem::Dependency
34
+ name: css_parser
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 1.3.4
40
+ none: false
41
+ requirement: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: 1.3.4
46
+ none: false
47
+ prerelease: false
48
+ type: :runtime
49
+ - !ruby/object:Gem::Dependency
50
+ name: actionmailer
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - !binary |-
54
+ Pg==
55
+ - !ruby/object:Gem::Version
56
+ version: 3.0.0
57
+ - - !binary |-
58
+ PA==
59
+ - !ruby/object:Gem::Version
60
+ version: 5.0.0
61
+ none: false
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - !binary |-
65
+ Pg==
66
+ - !ruby/object:Gem::Version
67
+ version: 3.0.0
68
+ - - !binary |-
69
+ PA==
70
+ - !ruby/object:Gem::Version
71
+ version: 5.0.0
72
+ none: false
73
+ prerelease: false
74
+ type: :runtime
75
+ - !ruby/object:Gem::Dependency
76
+ name: sprockets
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: !binary |-
82
+ MA==
83
+ none: false
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: !binary |-
89
+ MA==
90
+ none: false
91
+ prerelease: false
92
+ type: :runtime
93
+ - !ruby/object:Gem::Dependency
94
+ name: rake
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: !binary |-
100
+ MA==
101
+ none: false
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: !binary |-
107
+ MA==
108
+ none: false
109
+ prerelease: false
110
+ type: :development
111
+ - !ruby/object:Gem::Dependency
112
+ name: rails
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: !binary |-
118
+ MA==
119
+ none: false
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: !binary |-
125
+ MA==
126
+ none: false
127
+ prerelease: false
128
+ type: :development
129
+ - !ruby/object:Gem::Dependency
130
+ name: rspec
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: !binary |-
136
+ MA==
137
+ none: false
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: !binary |-
143
+ MA==
144
+ none: false
145
+ prerelease: false
146
+ type: :development
147
+ - !ruby/object:Gem::Dependency
148
+ name: rspec-rails
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: !binary |-
154
+ MA==
155
+ none: false
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: !binary |-
161
+ MA==
162
+ none: false
163
+ prerelease: false
164
+ type: :development
165
+ - !ruby/object:Gem::Dependency
166
+ name: special_delivery
167
+ version_requirements: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: !binary |-
172
+ MA==
173
+ none: false
174
+ requirement: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: !binary |-
179
+ MA==
180
+ none: false
181
+ prerelease: false
182
+ type: :development
183
+ - !ruby/object:Gem::Dependency
184
+ name: appraisal
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: !binary |-
190
+ MA==
191
+ none: false
192
+ requirement: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: !binary |-
197
+ MA==
198
+ none: false
199
+ prerelease: false
200
+ type: :development
201
+ description: Roadie tries to make sending HTML emails a little less painful in Rails 3 by inlining stylesheets and rewrite relative URLs for you.
202
+ email:
203
+ - magnus.bergmark@gmail.com
204
+ - bj.neilsen@gmail.com
205
+ executables: []
206
+ extensions: []
207
+ extra_rdoc_files:
208
+ - README.md
209
+ - Changelog.md
210
+ files:
211
+ - ".autotest"
212
+ - ".gitignore"
213
+ - ".travis.yml"
214
+ - ".yardopts"
215
+ - Appraisals
216
+ - Changelog.md
217
+ - Gemfile
218
+ - Guardfile
219
+ - MIT-LICENSE
220
+ - README.md
221
+ - Rakefile
222
+ - autotest/discover.rb
223
+ - gemfiles/rails_3.0.gemfile
224
+ - gemfiles/rails_3.0.gemfile.lock
225
+ - gemfiles/rails_3.1.gemfile
226
+ - gemfiles/rails_3.1.gemfile.lock
227
+ - gemfiles/rails_3.2.gemfile
228
+ - gemfiles/rails_3.2.gemfile.lock
229
+ - gemfiles/rails_4.0.gemfile
230
+ - gemfiles/rails_4.0.gemfile.lock
231
+ - lib/roadie.rb
232
+ - lib/roadie/action_mailer_extensions.rb
233
+ - lib/roadie/asset_pipeline_provider.rb
234
+ - lib/roadie/asset_provider.rb
235
+ - lib/roadie/css_file_not_found.rb
236
+ - lib/roadie/filesystem_provider.rb
237
+ - lib/roadie/inliner.rb
238
+ - lib/roadie/railtie.rb
239
+ - lib/roadie/selector.rb
240
+ - lib/roadie/style_declaration.rb
241
+ - lib/roadie/version.rb
242
+ - md-roadie.gemspec
243
+ - spec/fixtures/app/assets/stylesheets/integration.css
244
+ - spec/fixtures/public/stylesheets/integration.css
245
+ - spec/fixtures/views/integration_mailer/marketing.html.erb
246
+ - spec/fixtures/views/integration_mailer/notification.html.erb
247
+ - spec/fixtures/views/integration_mailer/notification.text.erb
248
+ - spec/integration_spec.rb
249
+ - spec/lib/roadie/action_mailer_extensions_spec.rb
250
+ - spec/lib/roadie/asset_pipeline_provider_spec.rb
251
+ - spec/lib/roadie/css_file_not_found_spec.rb
252
+ - spec/lib/roadie/filesystem_provider_spec.rb
253
+ - spec/lib/roadie/inliner_spec.rb
254
+ - spec/lib/roadie/selector_spec.rb
255
+ - spec/lib/roadie/style_declaration_spec.rb
256
+ - spec/lib/roadie_spec.rb
257
+ - spec/shared_examples/asset_provider_examples.rb
258
+ - spec/spec_helper.rb
259
+ - spec/support/anonymous_mailer.rb
260
+ - spec/support/change_url_options.rb
261
+ - spec/support/have_attribute_matcher.rb
262
+ - spec/support/have_node_matcher.rb
263
+ - spec/support/have_selector_matcher.rb
264
+ - spec/support/have_styling_matcher.rb
265
+ - spec/support/parse_styling.rb
266
+ homepage: http://github.com/Mange/roadie
267
+ licenses: []
268
+ post_install_message:
269
+ rdoc_options: []
270
+ require_paths:
271
+ - lib
272
+ required_ruby_version: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ segments:
277
+ - 0
278
+ version: !binary |-
279
+ MA==
280
+ hash: 2
281
+ none: false
282
+ required_rubygems_version: !ruby/object:Gem::Requirement
283
+ requirements:
284
+ - - !binary |-
285
+ Pg==
286
+ - !ruby/object:Gem::Version
287
+ version: 1.3.1
288
+ none: false
289
+ requirements: []
290
+ rubyforge_project:
291
+ rubygems_version: 1.8.24
292
+ signing_key:
293
+ specification_version: 3
294
+ summary: Making HTML emails comfortable for the Rails rockstars
295
+ test_files:
296
+ - spec/fixtures/app/assets/stylesheets/integration.css
297
+ - spec/fixtures/public/stylesheets/integration.css
298
+ - spec/fixtures/views/integration_mailer/marketing.html.erb
299
+ - spec/fixtures/views/integration_mailer/notification.html.erb
300
+ - spec/fixtures/views/integration_mailer/notification.text.erb
301
+ - spec/integration_spec.rb
302
+ - spec/lib/roadie/action_mailer_extensions_spec.rb
303
+ - spec/lib/roadie/asset_pipeline_provider_spec.rb
304
+ - spec/lib/roadie/css_file_not_found_spec.rb
305
+ - spec/lib/roadie/filesystem_provider_spec.rb
306
+ - spec/lib/roadie/inliner_spec.rb
307
+ - spec/lib/roadie/selector_spec.rb
308
+ - spec/lib/roadie/style_declaration_spec.rb
309
+ - spec/lib/roadie_spec.rb
310
+ - spec/shared_examples/asset_provider_examples.rb
311
+ - spec/spec_helper.rb
312
+ - spec/support/anonymous_mailer.rb
313
+ - spec/support/change_url_options.rb
314
+ - spec/support/have_attribute_matcher.rb
315
+ - spec/support/have_node_matcher.rb
316
+ - spec/support/have_selector_matcher.rb
317
+ - spec/support/have_styling_matcher.rb
318
+ - spec/support/parse_styling.rb