middleman-roadie 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/Gemfile +18 -0
- data/README.md +23 -0
- data/Rakefile +14 -0
- data/features/support/env.rb +4 -0
- data/lib/middleman-roadie/asset_provider.rb +47 -0
- data/lib/middleman-roadie/extension.rb +35 -0
- data/lib/middleman-roadie/rack_inliner.rb +35 -0
- data/lib/middleman-roadie/version.rb +5 -0
- data/lib/middleman-roadie.rb +7 -0
- data/middleman-roadie.gemspec +25 -0
- metadata +84 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b1266233fb00c55a5abd2c37899ff284a7cb372d
|
4
|
+
data.tar.gz: 52108a111c6fc868df551301ddc7b4337fff5da9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6aef760d23c735a6dd77dd4ad50a8dbb04ec287df950899219462537f3dc07e7c00e2acbf39947303307d44c20f8575ee7a6c9e6cd511742d86ea773337a605f
|
7
|
+
data.tar.gz: c66e044bbcf2d5ad2ba9cb5f80eee8422767d66f1e880cb02016381cde705e2e690c9deceed1fd9a92503d282d951aac8af57b64ba9a689693ace5bfc113e808
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# If you do not have OpenSSL installed, update
|
2
|
+
# the following line to use "http://" instead
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in middleman-roadie.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem 'rake'
|
10
|
+
gem 'rdoc'
|
11
|
+
gem 'yard'
|
12
|
+
end
|
13
|
+
|
14
|
+
group :test do
|
15
|
+
gem 'cucumber'
|
16
|
+
gem 'aruba'
|
17
|
+
gem 'rspec'
|
18
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Middleman Roadie
|
2
|
+
|
3
|
+
[Roadie](https://github.com/Mange/roadie) extension wrapper for [Middleman](https://middlemanapp.com/).
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Install the gem as usual: put `gem 'middleman-roadie'` in Gemfile, then run `bundle install`.
|
8
|
+
|
9
|
+
Put `activate :roadie` in config.rb (*not* in the `configure :build` block).
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
Use a custom layout for email rendering page `'/email/*', layout: :email` in config.rb.
|
14
|
+
|
15
|
+
**Important:** link stylesheets to be inlined using `stylesheet_inline_tag 'your_css'` helper.
|
16
|
+
|
17
|
+
## Contributing
|
18
|
+
|
19
|
+
1. Fork it
|
20
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
21
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
22
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
23
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'cucumber/rake/task'
|
5
|
+
|
6
|
+
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
7
|
+
t.cucumber_opts = '--color --tags ~@wip --strict'
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'rake/clean'
|
11
|
+
|
12
|
+
task test: ['cucumber']
|
13
|
+
|
14
|
+
task default: :test
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class AssetPipelineProvider
|
2
|
+
include ::Roadie::AssetProvider
|
3
|
+
attr_reader :pipeline
|
4
|
+
|
5
|
+
def initialize(pipeline)
|
6
|
+
raise ArgumentError, "You need to pass a pipeline to initialize AssetPipelineProvider" unless pipeline
|
7
|
+
super()
|
8
|
+
@pipeline = pipeline
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_stylesheet(name)
|
12
|
+
if (asset = find_asset_in_pipeline(name))
|
13
|
+
Stylesheet.new("#{asset.pathname} (live compiled)", asset.to_s)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def find_asset_in_pipeline(name)
|
19
|
+
normalized_name = normalize_asset_name(name)
|
20
|
+
@pipeline[normalized_name] || @pipeline[remove_asset_digest(normalized_name)]
|
21
|
+
end
|
22
|
+
|
23
|
+
def normalize_asset_name(href)
|
24
|
+
remove_asset_prefix(href.split('?').first)
|
25
|
+
end
|
26
|
+
|
27
|
+
DIGEST_PATTERN = /
|
28
|
+
- # Digest comes after a dash
|
29
|
+
(?:
|
30
|
+
[a-z0-9]{32} | # Old style is 32 character hash
|
31
|
+
[a-z0-9]{64} # New style is 64 characters
|
32
|
+
)
|
33
|
+
\. # Dot for the file extension
|
34
|
+
/x.freeze
|
35
|
+
|
36
|
+
def remove_asset_digest(path)
|
37
|
+
path.gsub(DIGEST_PATTERN, '.')
|
38
|
+
end
|
39
|
+
|
40
|
+
def remove_asset_prefix(path)
|
41
|
+
path.sub(Regexp.new("^#{Regexp.quote(asset_prefix)}/?"), "")
|
42
|
+
end
|
43
|
+
|
44
|
+
def asset_prefix
|
45
|
+
::Rails.application.try(:config).try(:assets).try(:prefix) || "/assets"
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'roadie'
|
2
|
+
require 'middleman-core'
|
3
|
+
|
4
|
+
# Extension namespace
|
5
|
+
module Middleman
|
6
|
+
class RoadieExtension < Extension
|
7
|
+
option :path, 'email', 'Path to render override'
|
8
|
+
|
9
|
+
def initialize(app, options_hash={}, &block)
|
10
|
+
# Call super to build options from the options_hash
|
11
|
+
super
|
12
|
+
|
13
|
+
# set up your extension
|
14
|
+
# puts options.my_option
|
15
|
+
end
|
16
|
+
|
17
|
+
def after_configuration
|
18
|
+
app.use RackInliner, options
|
19
|
+
end
|
20
|
+
|
21
|
+
# A Sitemap Manipulator
|
22
|
+
# def manipulate_resource_list(resources)
|
23
|
+
# end
|
24
|
+
helpers do
|
25
|
+
def stylesheet_inline_tag(name)
|
26
|
+
name += ".css" unless name.include?(".css")
|
27
|
+
css_path = sitemap.resources.select { |p| p.source_file.include?(name) }.first
|
28
|
+
"<style type='text/css'>#{css_path.render}</style>"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
require_relative 'asset_provider'
|
35
|
+
require_relative 'rack_inliner'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class RackInliner
|
2
|
+
def initialize(app, options = {})
|
3
|
+
@app = app
|
4
|
+
@path = /^(\/#{ options[:path] }\/)/
|
5
|
+
end
|
6
|
+
|
7
|
+
def call(env)
|
8
|
+
status, headers, body = @app.call(env)
|
9
|
+
|
10
|
+
if env['PATH_INFO'].match(@path) && headers.key?('Content-Type') and headers['Content-Type'].start_with?('text/html')
|
11
|
+
binding.pry
|
12
|
+
content = ''
|
13
|
+
|
14
|
+
body.each do |part|
|
15
|
+
content << part
|
16
|
+
end
|
17
|
+
|
18
|
+
email = transform_html(content)
|
19
|
+
|
20
|
+
headers['Content-Length'] = Rack::Utils.bytesize(email).to_s if headers['Content-Length']
|
21
|
+
[status, headers, [email]]
|
22
|
+
else
|
23
|
+
[status, headers, body]
|
24
|
+
end
|
25
|
+
ensure
|
26
|
+
body.close if body.respond_to?(:close)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def transform_html(old_html)
|
32
|
+
document = ::Roadie::Document.new old_html
|
33
|
+
document.transform
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "middleman-roadie/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "middleman-roadie"
|
7
|
+
s.version = Middleman::Roadie::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Victor Ortiz"]
|
10
|
+
s.email = ["kespers@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/vortizhe/middleman-roadie"
|
12
|
+
s.summary = %q{Roadie Middleman extension adaptor}
|
13
|
+
s.description = %q{Automatize email inlining css with roadie}
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
# The version of middleman-core your extension depends on
|
21
|
+
s.add_runtime_dependency("middleman-core", [">= 4.1.2"])
|
22
|
+
|
23
|
+
# Additional dependencies
|
24
|
+
s.add_runtime_dependency("roadie", ["~> 3.1.1"])
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-roadie
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Victor Ortiz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: middleman-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.1.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.1.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: roadie
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.1.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.1.1
|
41
|
+
description: Automatize email inlining css with roadie
|
42
|
+
email:
|
43
|
+
- kespers@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- Gemfile
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- features/support/env.rb
|
53
|
+
- lib/middleman-roadie.rb
|
54
|
+
- lib/middleman-roadie/asset_provider.rb
|
55
|
+
- lib/middleman-roadie/extension.rb
|
56
|
+
- lib/middleman-roadie/rack_inliner.rb
|
57
|
+
- lib/middleman-roadie/version.rb
|
58
|
+
- middleman-roadie.gemspec
|
59
|
+
homepage: https://github.com/vortizhe/middleman-roadie
|
60
|
+
licenses: []
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.5.1
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Roadie Middleman extension adaptor
|
82
|
+
test_files:
|
83
|
+
- features/support/env.rb
|
84
|
+
has_rdoc:
|