getinline 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 09a05db327f32692a0b317922c4ba8ccf78617d0
4
- data.tar.gz: 1dbf186eefa0d144cd263bbaedd5e50f232b6288
3
+ metadata.gz: a02e79e72792bc59b5a1f2ce8fac01f2ab49e8b4
4
+ data.tar.gz: c37596ccbd34fc3a1da68f5eeb52fa739e8d7f06
5
5
  SHA512:
6
- metadata.gz: eff7dd871a48fd166b4a0f9e9f1d3f546462e4d62579ffa4623ac76026561b2d579cb2896b6341f8355453222cce11c6856dc42cdcf5daa11814b95cbcb18a01
7
- data.tar.gz: 27b594ff4cbaffa3df0d7f62938cc65135065b886c05e7e4ae9834500784e31f2485ab3bf90a2dc37db8cc86b908814d3f3ebeda7c3df6074528571e39839ed7
6
+ metadata.gz: 5884a60805ecdec97665505d8cfa1af06c816150c6ce28ab84afc0dd27ab5697cb3c9988eb0353dcff84ea16a7c7be1b60e0bd47f078529ed4e9ab4fbbf077a4
7
+ data.tar.gz: 0365058cdfb46720933437cd27a358c42625f6632fbd34422a6ea1a6d0f5bc12112aca649f6729ca9414e9495bfbdc4e62fb01ca83e08df43ddabcbd25440cf3
data/Gemfile CHANGED
@@ -2,10 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in getinline.gemspec
4
4
  gemspec
5
-
6
- gem 'premailer', '1.8.6'
7
- gem 'nokogiri', '1.6.7'
8
-
9
- group :development, :test do
10
- gem 'pry', '0.10.3'
11
- end
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
data/bin/console CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "getinline"
3
+ require 'bundler/setup'
4
+ require 'getinline'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
10
+ # require 'pry'
11
11
  # Pry.start
12
12
 
13
- require "irb"
14
- IRB.start
13
+ require 'irb'
14
+ IRB.start
data/exe/getinline CHANGED
@@ -5,21 +5,80 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
5
5
  require 'getinline'
6
6
  require 'optparse'
7
7
 
8
- options = {}
8
+ options = {
9
+ mode: :html
10
+ }
11
+ premailer_options = {
12
+ base_url: nil,
13
+ link_query_string: nil,
14
+ remove_classes: false,
15
+ verbose: false,
16
+ line_length: 9001,
17
+ warn_level: Premailer::Warnings::SAFE
18
+ }
9
19
 
10
20
  option_parser = OptionParser.new do |opts|
11
21
  executable_name = File.basename($PROGRAM_NAME)
12
- opts.banner = "
13
- getinline inlines CSS styles for HTML email development
22
+ opts.banner = "A CSS inliner for Ruby ERB templates.\n\n"
23
+ opts.define_head 'Usage: getinline <optional path> [options]'
24
+ opts.separator ''
25
+ opts.separator 'Examples:'
26
+ opts.separator " #{executable_name} ./public/index.html"
27
+ opts.separator " #{executable_name} < ./public/index.html"
28
+ opts.separator " cat ./public/index.html | #{executable_name}"
29
+ opts.separator ''
30
+ opts.separator 'Options:'
14
31
 
15
- Usage:
16
- #{executable_name} file_name
17
- #{executable_name} < file_name
18
- cat file_name | #{executable_name}
19
- "
32
+ opts.on('--mode MODE', [:html, :txt], 'Output: html or txt') do |v|
33
+ options[:mode] = v
34
+ end
20
35
 
21
36
  opts.on('-h', '--help', 'Print usage instructions') do
22
- options[:show_help] = true
37
+ puts option_parser
38
+ exit
39
+ end
40
+
41
+ # TODO: Ideally this gem would be an option within premailer and unfortunately
42
+ # there is no way to extend the premailer CLI or interface with its options so
43
+ # copying the options from premailer/executor is a temporary solution.
44
+ # Github issue: https://github.com/premailer/premailer/issues/259
45
+ opts.separator ''
46
+ opts.separator 'Premailer Options:'
47
+
48
+ opts.on('-b', '--base-url STRING', String, 'Base URL, useful for local files') do |v|
49
+ premailer_options[:base_url] = v
50
+ end
51
+
52
+ opts.on('-q', '--query-string STRING', String, 'Query string to append to links') do |v|
53
+ premailer_options[:link_query_string] = v
54
+ end
55
+
56
+ opts.on('--css FILE,FILE', Array, 'Additional CSS stylesheets') do |v|
57
+ premailer_options[:css] = v
58
+ end
59
+
60
+ opts.on('-r', '--remove-classes', 'Remove HTML classes') do |v|
61
+ premailer_options[:remove_classes] = v
62
+ end
63
+
64
+ opts.on('-j', '--remove-scripts', 'Remove <script> elements') do |v|
65
+ premailer_options[:remove_classes] = v
66
+ end
67
+
68
+ opts.on('-l', '--line-length N', Integer, "Line length for plaintext (default: #{premailer_options[:line_length]})") do |v|
69
+ premailer_options[:line_length] = v
70
+ end
71
+
72
+ opts.on('-e', '--entities', 'Output HTML entities instead of UTF-8 when using Nokogiri') do
73
+ premailer_options[:output_encoding] = 'US-ASCII'
74
+ end
75
+
76
+ opts.on('-d', '--io-exceptions', 'Abort on I/O errors') do |v|
77
+ premailer_options[:io_exceptions] = v
78
+ end
79
+
80
+ opts.on('-v', '--verbose', 'Print additional information at runtime') do |v|
81
+ premailer_options[:verbose] = v
23
82
  end
24
83
  end
25
84
 
@@ -31,19 +90,14 @@ rescue OptionParser::AmbiguousOption => error
31
90
  abort "That's an #{error}"
32
91
  end
33
92
 
34
- if options[:show_help] == true
35
- puts option_parser.banner
36
- exit
37
- end
38
-
39
- def transform (file_contents)
40
- transformer = Getinline::Transformer.new(file_contents)
93
+ def transform(file_contents, options, premailer_options)
94
+ transformer = Getinline::Transformer.new(file_contents, options, premailer_options)
41
95
  puts transformer.transform
42
96
  end
43
97
 
44
- if ARGF.filename != '-' or (not STDIN.tty? and not STDIN.closed?)
45
- transform ARGF.read
98
+ if ARGF.filename != '-' || (!STDIN.tty? && !STDIN.closed?)
99
+ transform(ARGF.read, options, premailer_options)
46
100
  else
47
- puts option_parser.banner
101
+ puts option_parser
48
102
  exit
49
103
  end
data/getinline.gemspec CHANGED
@@ -4,22 +4,25 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'getinline/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "getinline"
7
+ spec.name = 'getinline'
8
8
  spec.version = Getinline::VERSION
9
- spec.authors = ["Jeremy Kahn"]
10
- spec.email = ["jeremy@jellyvision.com"]
9
+ spec.authors = ['Jeremy Kahn', 'Travis Pennetti']
10
+ spec.email = ['jeremy@jellyvision.com', 'tpennetti@jellyvision.com']
11
11
 
12
- spec.summary = %q{Inlines CSS styles for HTML email development}
13
- spec.description = %q{Inlines CSS styles for HTML email development and preserves ERB tags}
14
- spec.homepage = "https://github.com/jellyvision/getinline"
15
- spec.license = "MIT"
12
+ spec.summary = 'Inlines CSS styles for HTML email development'
13
+ spec.description = 'Inlines CSS styles for HTML email development and preserves ERB tags'
14
+ spec.homepage = 'https://github.com/jellyvision/getinline'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.10"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec"
22
+ spec.add_development_dependency 'bundler', '~> 1.10'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'pry', '~> 0.10.3'
25
+ spec.add_development_dependency 'rspec'
26
+ spec.add_runtime_dependency 'premailer', '~> 1.8.6'
27
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6.6.4'
25
28
  end
data/lib/getinline.rb CHANGED
@@ -1,2 +1,2 @@
1
- require "getinline/version"
2
- require "getinline/transformer"
1
+ require 'getinline/version'
2
+ require 'getinline/transformer'
@@ -1,12 +1,15 @@
1
- require "premailer"
1
+ require 'premailer'
2
+ require 'nokogiri'
2
3
 
3
- TOKEN = "@TOKEN"
4
- TOKENIZED_ERB_FILE_NAME = "/tmp/tokenized.erb"
4
+ TOKEN = '@TOKEN'
5
+ TOKENIZED_ERB_FILE_NAME = '/tmp/tokenized.erb'
5
6
 
6
7
  module Getinline
7
8
  class Transformer
8
- def initialize (raw_text)
9
+ def initialize(raw_text, options = {}, premailer_options = {})
9
10
  @raw_text = raw_text
11
+ @options = options
12
+ @premailer_options = premailer_options
10
13
  end
11
14
 
12
15
  def transform
@@ -18,8 +21,9 @@ module Getinline
18
21
 
19
22
  File.write(TOKENIZED_ERB_FILE_NAME, tokenized_text)
20
23
 
21
- @premailer = Premailer.new(TOKENIZED_ERB_FILE_NAME, :warn_level => Premailer::Warnings::SAFE)
22
- premailed_tokenized_text = @premailer.to_inline_css
24
+ @premailer = Premailer.new(TOKENIZED_ERB_FILE_NAME, @premailer_options)
25
+ premailed_tokenized_text = @options[:mode] == :txt ?
26
+ @premailer.to_plain_text : Nokogiri::HTML(@premailer.to_inline_css).to_html(encoding:'US-ASCII')
23
27
  premailed_text = premailed_tokenized_text.dup
24
28
 
25
29
  matches.each do |match|
@@ -29,4 +33,4 @@ module Getinline
29
33
  premailed_text
30
34
  end
31
35
  end
32
- end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Getinline
2
- VERSION = "0.1.0"
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: getinline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Kahn
8
+ - Travis Pennetti
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2015-12-14 00:00:00.000000000 Z
12
+ date: 2015-12-16 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
@@ -38,6 +39,20 @@ dependencies:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
41
  version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: pry
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.10.3
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 0.10.3
41
56
  - !ruby/object:Gem::Dependency
42
57
  name: rspec
43
58
  requirement: !ruby/object:Gem::Requirement
@@ -52,9 +67,38 @@ dependencies:
52
67
  - - ">="
53
68
  - !ruby/object:Gem::Version
54
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: premailer
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 1.8.6
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 1.8.6
84
+ - !ruby/object:Gem::Dependency
85
+ name: nokogiri
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 1.6.6.4
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 1.6.6.4
55
98
  description: Inlines CSS styles for HTML email development and preserves ERB tags
56
99
  email:
57
100
  - jeremy@jellyvision.com
101
+ - tpennetti@jellyvision.com
58
102
  executables:
59
103
  - getinline
60
104
  extensions: []
@@ -99,4 +143,3 @@ signing_key:
99
143
  specification_version: 4
100
144
  summary: Inlines CSS styles for HTML email development
101
145
  test_files: []
102
- has_rdoc: