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 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
@@ -0,0 +1,5 @@
1
+ # Ignore bundler lock file
2
+ /Gemfile.lock
3
+
4
+ # Ignore pkg folder
5
+ /pkg
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,4 @@
1
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
2
+ require 'middleman-core'
3
+ require 'middleman-core/step_definitions'
4
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-roadie')
@@ -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,5 @@
1
+ module Middleman
2
+ module Roadie
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ require "middleman-core"
2
+
3
+
4
+ Middleman::Extensions.register :roadie do
5
+ require "middleman-roadie/extension"
6
+ Middleman::RoadieExtension
7
+ 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: