ghost_in_the_post 0.0.1 → 0.0.2

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.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ghost_in_the_post.rb +8 -0
  3. data/lib/ghost_in_the_post/automatic.rb +3 -1
  4. data/lib/ghost_in_the_post/ghost_on_command.rb +2 -2
  5. data/lib/ghost_in_the_post/mail_ghost.rb +5 -3
  6. data/lib/ghost_in_the_post/mailer.rb +3 -1
  7. data/lib/ghost_in_the_post/phantom/staticize.js +26 -12
  8. data/lib/ghost_in_the_post/phantom_transform.rb +38 -33
  9. data/lib/ghost_in_the_post/version.rb +1 -1
  10. data/spec/dummy/Gemfile +4 -0
  11. data/spec/dummy/Gemfile.lock +8 -0
  12. data/spec/dummy/log/development.log +56 -0
  13. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4PgfVpd4CZQ0vAsVTl2KDb1z4f6GLl4mXIc3jSrahHM.cache +2 -0
  14. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6wWiAXBcdY6PLKOIhXQ6c8h9UtViuvdLcEO6wXK3mh0.cache +1 -0
  15. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/J_D4gpddr1KPVysTvEE48iHsNzrL5Pbj8S5ZNt3PhA4.cache +1 -0
  16. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UbKcvOd2xh3MJoKxz4l4RHMy5IupdsiDoSllZDvYCZA.cache +0 -0
  17. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XuOqk2dVOcltjkihZ8J_u5Pbcm9Of5KFkjyihP6-5tc.cache +0 -0
  18. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +0 -0
  19. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +0 -0
  20. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xstXMnjOlL2Ynn6MaI9bxlRnhTPYdgCIeOWnWphFSlA.cache +1 -0
  21. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zRSH1x7PsiRf9MSILPhc4GKDjRo4xaFNd41wHFCtJSo.cache +0 -0
  22. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zUYxDxkUr_FKBi6fF7kellqyG52AoZbYItHMUq17DJo.cache +1 -0
  23. data/spec/lib/ghost_in_the_post/ghost_on_command_spec.rb +3 -1
  24. data/spec/lib/ghost_in_the_post/mail_ghost_spec.rb +5 -3
  25. data/spec/lib/ghost_in_the_post/phantom_transform_spec.rb +79 -94
  26. metadata +17 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5264602db0f4c3dff7764e85b40b297046a9a55
4
- data.tar.gz: 289c490672985941a51227c4a9133ec1ba9e175c
3
+ metadata.gz: 8fdee37440de2543663fe6262bbb9462814f01dd
4
+ data.tar.gz: 015968eca2634d160b1902de601061f3c7538e6f
5
5
  SHA512:
6
- metadata.gz: c7b6aca158ff83c738d9cb85d01d7011d9cae5d8e47a8f5ed6650dc394086a216217ab2e7c557796fbe02583b0c6489d959caa90c00e3ff1376bc3c38aa20f75
7
- data.tar.gz: 40ae64bdf2f34875db66564f55de75b23563ed87595fe10102fc894e78ea091abf67e0d0c9572106c65fc1e358a74f0be406d1a19bf9d44737eb481f1ddc9fb2
6
+ metadata.gz: 2aadad0634b972c587c121282b199f53820300a91d1fb950aa2fc2b3ea3c3bbfbf7cbca9aee87c8da2fd05f47952c9c2283c6782205fb43a0831c51470c412b9
7
+ data.tar.gz: f34444669b33981f2057279e08c637cd168a4bc0c1d3aa18a060fbfe3066292ea2aad7b75a42850f04e6a0a74b82a713910c1aeb980a9e4353bc4715bd136876
@@ -4,11 +4,17 @@ module GhostInThePost
4
4
  :phantomjs_path,
5
5
  :includes,
6
6
  :remove_js_tags,
7
+ :timeout,
8
+ :wait_event,
7
9
  ]
10
+ DEFAULT_TIMEOUT = 1000
11
+ DEFAULT_WAIT_EVENT = "ghost_in_the_post:done"
8
12
  private_constant :ATTRIBUTE_NAMES
9
13
  cattr_reader(*ATTRIBUTE_NAMES)
10
14
 
11
15
  @@phantomjs_path = nil #setting this to nil helps testing
16
+ @@timeout = DEFAULT_TIMEOUT
17
+ @@wait_event = DEFAULT_WAIT_EVENT
12
18
  @@includes = []
13
19
  @@remove_js_tags = true
14
20
 
@@ -17,6 +23,8 @@ module GhostInThePost
17
23
  @@phantomjs_path = new_config[:phantomjs_path]
18
24
  @@includes = Array(new_config[:includes])
19
25
  @@remove_js_tags = new_config[:remove_js_tags].nil? ? true : new_config[:remove_js_tags]
26
+ @@timeout = new_config[:timeout] || DEFAULT_TIMEOUT
27
+ @@wait_event = new_config[:wait_event] || DEFAULT_WAIT_EVENT
20
28
  raise ArgumentError, "GhostInThePost.config.phantomjs_path is not set" if self.phantomjs_path.nil?
21
29
  end
22
30
 
@@ -1,6 +1,6 @@
1
1
  module GhostInThePost
2
2
  module Automatic
3
- attr_accessor :included_scripts
3
+ attr_accessor :included_scripts, :ghost_timeout, :ghost_wait_event
4
4
 
5
5
  def include_script(*paths)
6
6
  @included_scripts ||= []
@@ -12,6 +12,8 @@ module GhostInThePost
12
12
  email.extend GhostOnCommand
13
13
  email.extend GhostOnDelivery
14
14
  email.included_scripts = @included_scripts
15
+ email.ghost_timeout = @ghost_timeout
16
+ email.ghost_wait_event = @ghost_wait_event
15
17
  end
16
18
  end
17
19
 
@@ -1,9 +1,9 @@
1
1
  module GhostInThePost
2
2
  module GhostOnCommand
3
- attr_accessor :included_scripts
3
+ attr_accessor :included_scripts, :ghost_timeout, :ghost_wait_event
4
4
 
5
5
  def ghost
6
- MailGhost.new(self, included_scripts).execute
6
+ MailGhost.new(self, ghost_timeout, ghost_wait_event, included_scripts).execute
7
7
  end
8
8
  end
9
9
  end
@@ -1,9 +1,11 @@
1
1
  module GhostInThePost
2
2
  class MailGhost
3
- attr_reader :email, :included_scripts
3
+ attr_reader :email, :included_scripts, :timeout, :wait_event
4
4
 
5
- def initialize(email, included_scripts)
5
+ def initialize(email, timeout=nil, wait_event=nil, included_scripts=[])
6
6
  @email = email
7
+ @timeout = timeout
8
+ @wait_event = wait_event
7
9
  @included_scripts = Array(included_scripts).compact
8
10
  end
9
11
 
@@ -24,7 +26,7 @@ module GhostInThePost
24
26
  end
25
27
 
26
28
  def ghost_html(old_html)
27
- PhantomTransform.new(old_html, included_scripts).transform
29
+ PhantomTransform.new(old_html, timeout, wait_event, included_scripts).transform
28
30
  end
29
31
  end
30
32
  end
@@ -1,6 +1,6 @@
1
1
  module GhostInThePost
2
2
  module Mailer
3
- attr_accessor :included_scripts
3
+ attr_accessor :included_scripts, :ghost_timeout, :ghost_wait_event
4
4
 
5
5
  def include_script(*paths)
6
6
  @included_scripts ||= []
@@ -11,6 +11,8 @@ module GhostInThePost
11
11
  super.tap do |email|
12
12
  email.extend GhostOnCommand
13
13
  email.included_scripts = included_scripts
14
+ email.ghost_timeout = @ghost_timeout
15
+ email.ghost_wait_event = @ghost_wait_event
14
16
  end
15
17
  end
16
18
 
@@ -1,15 +1,26 @@
1
1
  "use strict";
2
2
  var system = require('system'),
3
3
  page = require('webpage').create(),
4
- html = system.args[1], //the email to be processed
4
+ address = system.args[1], //tmp file of the html to be processed
5
5
  no_script = system.args[2] == "true",
6
- include = system.args[3]; //the injected js file
6
+ include = system.args[3], //tmp file for the injected js file
7
+ timeout = parseInt(system.args[4]) || 1000, //return page contents after a timeout
8
+ wait_event = system.args[5]; //return page contents after an event
7
9
 
8
- page.onLoadFinished = function(status) {
9
- //load included scripts to be loaded on the dom
10
- if(!!include){
11
- page.injectJs(include);
12
- }
10
+ //write out to console to export contents
11
+ //and get out of here
12
+ function finish(){
13
+ console.log(page.content);
14
+ phantom.exit();
15
+ }
16
+
17
+ page.onLoadFinished = function(status){
18
+ //catch wait_event
19
+ page.onCallback = finish
20
+ page.evaluate(function(finish, wait_event) {
21
+ document.addEventListener(wait_event, window.callPhantom, false)
22
+ }, finish, wait_event)
23
+ //clear script tags
13
24
  if(no_script) {
14
25
  page.evaluate(function(){
15
26
  var script_tags = document.getElementsByTagName("script");
@@ -18,10 +29,13 @@ page.onLoadFinished = function(status) {
18
29
  }
19
30
  })
20
31
  }
21
- //write out to console to export contents
22
- console.log(page.content);
23
- phantom.exit(); //get out of here
32
+ //load included scripts to be loaded on the dom
33
+ if(!!include){
34
+ page.injectJs(include);
35
+ }
36
+ if(timeout > 0){
37
+ setTimeout(finish, timeout);//timout to bailout after a period
38
+ }
24
39
  };
25
- //load html content
26
- page.setContent(html, 'http://www.whatever.com');
27
40
 
41
+ page.open("file://"+address)
@@ -2,55 +2,60 @@ module GhostInThePost
2
2
  class PhantomTransform
3
3
  PHANTOMJS_SCRIPT = File.expand_path('../phantom/staticize.js', __FILE__)
4
4
 
5
- def initialize(html, included_scripts=[])
5
+ def initialize(html, timeout=nil, wait_event=nil, included_scripts=[])
6
6
  @html = html
7
+ @timeout = timeout || GhostInThePost.timeout
8
+ @wait_event = wait_event || GhostInThePost.wait_event
7
9
  @included_scripts = Array(included_scripts).compact
8
10
  end
9
11
 
10
12
  def transform
11
- injectable_scripts.any? ? transform_with_injections : simple_transform
13
+ output = @html
14
+ begin
15
+ htmlfile = html_file()
16
+ jsfile = js_file()
17
+ p command(htmlfile, jsfile)
18
+ output = IO.popen(command(htmlfile, jsfile)){|io| io.read}
19
+ ensure
20
+ htmlfile.unlink unless htmlfile.nil?
21
+ jsfile.unlink unless jsfile.nil?
22
+ end
23
+ output
12
24
  end
13
25
 
14
26
  private
15
27
 
16
- def command
28
+ def command(htmlfile, jsfile)
17
29
  [
18
30
  GhostInThePost.phantomjs_path,
19
31
  PHANTOMJS_SCRIPT,
20
- @html,
21
- GhostInThePost.remove_js_tags
22
- ]
32
+ htmlfile.path,
33
+ GhostInThePost.remove_js_tags,
34
+ jsfile.path,
35
+ @timeout,
36
+ @wait_event,
37
+ ].map(&:to_s)
23
38
  end
24
39
 
25
- #there is scripts to inject so create a tmp file to put them all in
26
- def transform_with_injections
27
- #set output to just html so that if there is an error that is caught it will
28
- #at least return valid html
29
- output = @html
30
- begin
31
- #generate a tempfile with all the js that we need so that phantom can inject
32
- #easily and not have to max out a single command
33
- file = Tempfile.new(['inject', '.js'])
34
- injectable_scripts.map do |script|
35
- asset = find_asset_in_pipeline(script)
36
- file.write(asset.to_s) unless asset.nil?
37
- end.compact
38
- file.close #closing the file makes it accessible by phantom
39
-
40
- #generate the html with the javascript
41
- output = IO.popen(command + [file.path]){|io| io.read}
42
-
43
- file.unlink
44
- rescue => e
45
- #clean up the temp file
46
- file.unlink
47
- end
48
- output
40
+ #generate a tempfile with all the html that we need so that phantom can inject
41
+ #easily and not have to max out a single command
42
+ def html_file
43
+ file = Tempfile.new(['inject', '.html'])
44
+ file.write(@html)
45
+ file.close #closing the file makes it accessible by phantom
46
+ file
49
47
  end
50
48
 
51
- #no scripts to inject so just run the command
52
- def simple_transform
53
- IO.popen(command){|io| io.read}
49
+ #generate a tempfile with all the js that we need so that phantom can inject
50
+ #easily and not have to max out a single command
51
+ def js_file
52
+ jsfile = Tempfile.new(['inject', '.js'])
53
+ injectable_scripts.map do |script|
54
+ asset = find_asset_in_pipeline(script)
55
+ jsfile.write(asset.to_s) unless asset.nil?
56
+ end.compact
57
+ jsfile.close #closing the file makes it accessible by phantom
58
+ jsfile
54
59
  end
55
60
 
56
61
  def injectable_scripts
@@ -1,3 +1,3 @@
1
1
  module GhostInThePost
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/dummy/Gemfile CHANGED
@@ -1,3 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
  gem 'rails', '4.2.3'
3
3
  gem 'ghost_in_the_post', :path => '../..'
4
+
5
+ group :development do
6
+ gem 'pry'
7
+ end
@@ -44,6 +44,7 @@ GEM
44
44
  tzinfo (~> 1.1)
45
45
  arel (6.0.3)
46
46
  builder (3.2.2)
47
+ coderay (1.1.0)
47
48
  concurrent-ruby (1.0.0)
48
49
  concurrent-ruby (1.0.0-java)
49
50
  erubis (2.7.0)
@@ -56,12 +57,17 @@ GEM
56
57
  nokogiri (>= 1.5.9)
57
58
  mail (2.6.3)
58
59
  mime-types (>= 1.16, < 3)
60
+ method_source (0.8.2)
59
61
  mime-types (2.99)
60
62
  mini_portile2 (2.0.0)
61
63
  minitest (5.8.4)
62
64
  nokogiri (1.6.7.2)
63
65
  mini_portile2 (~> 2.0.0.rc2)
64
66
  nokogiri (1.6.7.2-java)
67
+ pry (0.10.3)
68
+ coderay (~> 1.1.0)
69
+ method_source (~> 0.8.1)
70
+ slop (~> 3.4)
65
71
  rack (1.6.4)
66
72
  rack-test (0.6.3)
67
73
  rack (>= 1.0)
@@ -90,6 +96,7 @@ GEM
90
96
  rake (>= 0.8.7)
91
97
  thor (>= 0.18.1, < 2.0)
92
98
  rake (10.5.0)
99
+ slop (3.6.0)
93
100
  sprockets (3.5.2)
94
101
  concurrent-ruby (~> 1.0)
95
102
  rack (> 1, < 3)
@@ -109,6 +116,7 @@ PLATFORMS
109
116
 
110
117
  DEPENDENCIES
111
118
  ghost_in_the_post!
119
+ pry
112
120
  rails (= 4.2.3)
113
121
 
114
122
  BUNDLED WITH
@@ -214,3 +214,59 @@ AutoMailer#normal_email: processed outbound mail in 42.0ms
214
214
  Rendered auto_mailer/normal_email.text (4.0ms)
215
215
 
216
216
  AutoMailer#normal_email: processed outbound mail in 415.0ms
217
+ Rendered auto_mailer/normal_email.html.erb (1.9ms)
218
+ Rendered auto_mailer/normal_email.text (0.3ms)
219
+
220
+ AutoMailer#normal_email: processed outbound mail in 218.4ms
221
+ Rendered auto_mailer/normal_email.html.erb (0.1ms)
222
+ Rendered auto_mailer/normal_email.text (0.0ms)
223
+
224
+ AutoMailer#normal_email: processed outbound mail in 10.3ms
225
+ Rendered auto_mailer/normal_email.html.erb (1.7ms)
226
+ Rendered auto_mailer/normal_email.text (0.3ms)
227
+
228
+ AutoMailer#normal_email: processed outbound mail in 222.5ms
229
+ Rendered auto_mailer/normal_email.html.erb (1.8ms)
230
+ Rendered auto_mailer/normal_email.text (0.3ms)
231
+
232
+ AutoMailer#normal_email: processed outbound mail in 221.7ms
233
+ Rendered auto_mailer/normal_email.html.erb (1.9ms)
234
+ Rendered auto_mailer/normal_email.text (0.3ms)
235
+
236
+ AutoMailer#normal_email: processed outbound mail in 217.4ms
237
+ Rendered auto_mailer/normal_email.html.erb (0.1ms)
238
+ Rendered auto_mailer/normal_email.text (0.1ms)
239
+
240
+ AutoMailer#normal_email: processed outbound mail in 11.7ms
241
+ Rendered auto_mailer/normal_email.html.erb (0.1ms)
242
+ Rendered auto_mailer/normal_email.text (0.1ms)
243
+
244
+ AutoMailer#normal_email: processed outbound mail in 14.3ms
245
+ Rendered auto_mailer/normal_email.html.erb (4.9ms)
246
+ Rendered auto_mailer/normal_email.text (0.7ms)
247
+
248
+ AutoMailer#normal_email: processed outbound mail in 318.1ms
249
+ Rendered auto_mailer/normal_email.html.erb (2.0ms)
250
+ Rendered auto_mailer/normal_email.text (0.4ms)
251
+
252
+ AutoMailer#normal_email: processed outbound mail in 226.4ms
253
+ Rendered auto_mailer/normal_email.html.erb (0.1ms)
254
+ Rendered auto_mailer/normal_email.text (0.0ms)
255
+
256
+ AutoMailer#normal_email: processed outbound mail in 8.6ms
257
+ Rendered auto_mailer/normal_email.html.erb (2.1ms)
258
+ Rendered auto_mailer/normal_email.text (0.4ms)
259
+
260
+ AutoMailer#normal_email: processed outbound mail in 226.5ms
261
+ Rendered auto_mailer/normal_email.html.erb (2.0ms)
262
+ Rendered auto_mailer/normal_email.text (0.3ms)
263
+
264
+ AutoMailer#normal_email: processed outbound mail in 218.6ms
265
+ Rendered auto_mailer/normal_email.html.erb (1.1ms)
266
+ Rendered auto_mailer/normal_email.text (0.3ms)
267
+
268
+ AutoMailer#normal_email: processed outbound mail in 180.1ms
269
+ Rendered auto_mailer/normal_email.html.erb (1.8ms)
270
+ Rendered auto_mailer/normal_email.text (0.3ms)
271
+
272
+ AutoMailer#normal_email: processed outbound mail in 224.1ms
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash{ I"environment-version:ETTI"environment-paths;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"1file-digest://app/assets/javascripts/test.js;TT
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/test.js?type=application/javascript&pipeline=self&id=12b05e7da72de9b196b844829893c6dd17135d893a81b9a1872199b8189a69da:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&id=24a76124d867ad27aa7510f40701c74430d66668ae273445d54914f5c29b5ef8:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=e3a979bc569cf175e48bf432cbfc5f77aa2bcf282931866a1f4a71d049d118ab:ET
@@ -0,0 +1 @@
1
+ "%f�먞3���@�����Ŝ���q�3|b��ϡB�
@@ -12,7 +12,9 @@ module GhostInThePost
12
12
  end
13
13
  it "should create a MailGhost" do
14
14
  email.included_scripts = ["test"]
15
- expect(MailGhost).to receive(:new).with(email, ["test"]).and_call_original
15
+ email.ghost_timeout = 1000
16
+ email.ghost_wait_event = "test"
17
+ expect(MailGhost).to receive(:new).with(email, 1000, "test", ["test"]).and_call_original
16
18
  email.ghost
17
19
  end
18
20
  it "should apply included scripts to the mail ghost" do
@@ -5,10 +5,12 @@ module GhostInThePost
5
5
  describe MailGhost do
6
6
  let(:email) { Mail.new }
7
7
  let(:included_scripts) { ["application.js"] }
8
- subject(:ghost) { MailGhost.new(email, included_scripts) }
8
+ subject(:ghost) { MailGhost.new(email, 1000, "wait", included_scripts) }
9
9
 
10
10
  it "takes an email and options" do
11
11
  expect(ghost.email).to eq(email)
12
+ expect(ghost.timeout).to eq(1000)
13
+ expect(ghost.wait_event).to eq("wait")
12
14
  expect(ghost.included_scripts).to eq(included_scripts)
13
15
  end
14
16
 
@@ -44,7 +46,7 @@ module GhostInThePost
44
46
 
45
47
  it "adjusts the html part using Roadie" do
46
48
  document = double "A document", transform: "transformed HTML"
47
- expect(PhantomTransform).to receive(:new).with(html, included_scripts).and_return document
49
+ expect(PhantomTransform).to receive(:new).with(html,1000, "wait", included_scripts).and_return document
48
50
  ghost.execute
49
51
  expect(email.body.decoded).to eq("transformed HTML")
50
52
  end
@@ -62,7 +64,7 @@ module GhostInThePost
62
64
 
63
65
  it "adjusts the html part using Roadie" do
64
66
  document = double "A document", transform: "transformed HTML"
65
- expect(PhantomTransform).to receive(:new).with(html, included_scripts).and_return document
67
+ expect(PhantomTransform).to receive(:new).with(html,1000, "wait", included_scripts).and_return document
66
68
  ghost.execute
67
69
  expect(email.html_part.body.decoded).to eq("transformed HTML")
68
70
  end
@@ -5,7 +5,7 @@ module GhostInThePost
5
5
  let(:html){"<html><head><script></script></head><body><div id='test'></div></body></html>"}
6
6
  let(:js){"(function(){document.getElementById('test').innerHTML='complete';})()"}
7
7
  let(:included_scripts){["application.js"]}
8
- subject {PhantomTransform.new(html, included_scripts)}
8
+ subject {PhantomTransform.new(html, nil, nil,included_scripts)}
9
9
 
10
10
  before :each do
11
11
  GhostInThePost.config = {phantomjs_path: "this/is/path"}
@@ -14,121 +14,106 @@ module GhostInThePost
14
14
 
15
15
  describe "#initialize" do
16
16
  it "should set html" do
17
- pt = PhantomTransform.new(html, included_scripts)
17
+ pt = PhantomTransform.new(html, nil, nil, included_scripts)
18
18
  expect(pt.instance_variable_get(:@html)).to eq(html)
19
19
  end
20
+ it "should set the timeout" do
21
+ pt = PhantomTransform.new(html, 45, nil, included_scripts)
22
+ expect(pt.instance_variable_get(:@timeout)).to eq(45)
23
+ end
24
+ it "should set the default timeout if none given" do
25
+ pt = PhantomTransform.new(html, nil, nil, included_scripts)
26
+ expect(pt.instance_variable_get(:@timeout)).to eq(GhostInThePost.timeout)
27
+ end
28
+ it "should set the wait event" do
29
+ pt = PhantomTransform.new(html, nil, "my wait", included_scripts)
30
+ expect(pt.instance_variable_get(:@wait_event)).to eq("my wait")
31
+ end
32
+ it "should set the default wait event if none given" do
33
+ pt = PhantomTransform.new(html, nil, nil, included_scripts)
34
+ expect(pt.instance_variable_get(:@wait_event)).to eq(GhostInThePost.wait_event)
35
+ end
20
36
  it "should set included_scripts" do
21
- pt = PhantomTransform.new(html, included_scripts)
37
+ pt = PhantomTransform.new(html, nil, nil, included_scripts)
22
38
  expect(pt.instance_variable_get(:@included_scripts)).to eq(included_scripts)
23
39
  end
24
40
  it "should default included_scripts to an array" do
25
- pt = PhantomTransform.new(html, nil)
41
+ pt = PhantomTransform.new(html, nil, nil, nil)
26
42
  expect(pt.instance_variable_get(:@included_scripts)).to eq([])
27
43
  end
28
44
  end
29
45
 
30
46
  describe "#transform" do
47
+ let(:html_path) {"/this/is/htmlpath"}
48
+ let(:js_path) {"/this/is/js_path"}
31
49
 
32
50
  before :each do
33
51
  allow(IO).to receive(:popen)
52
+ allow(Rails.application).to receive(:assets){{"application.js": js}}
34
53
  end
35
54
 
36
- context "with included_scripts" do
37
- let(:path) {"/this/is/path"}
38
-
39
- before :each do
40
- allow(IO).to receive(:popen)
41
- allow(Rails.application).to receive(:assets){
42
- {
43
- "application.js": "asset string"
44
- }
45
- }
46
- allow_any_instance_of(Tempfile).to receive(:path){path}
47
- end
48
-
49
- it "should call transform_with_injections" do
50
- expect(subject).to receive(:transform_with_injections)
51
- subject.transform
52
- end
53
-
54
- it "should create a temp file, write to it and unlink it" do
55
- file = Object.new
56
- expect(subject).to receive(:injectable_scripts).twice{included_scripts}
57
- expect(subject).to receive(:find_asset_in_pipeline).once.with(included_scripts.first){""}
58
- expect(Tempfile).to receive(:new).with(['inject', '.js']){file}
59
- allow(file).to receive(:path){path}
60
- expect(file).to receive(:write)
61
- expect(file).to receive(:close)
62
- expect(file).to receive(:unlink)
63
- subject.transform
64
- end
65
-
66
- it "should call IO.popen with arguments" do
67
- expect(IO).to receive(:popen).with([
68
- GhostInThePost.phantomjs_path,
69
- GhostInThePost::PhantomTransform::PHANTOMJS_SCRIPT,
70
- html,
71
- GhostInThePost.remove_js_tags,
72
- path
73
- ])
74
- subject.transform
75
- end
76
-
77
- it "should return the result of IO.popen with arguments" do
78
- allow(IO).to receive(:popen) {"this is the end"}
79
- expect(subject.transform).to eq("this is the end")
80
- end
81
-
82
- it "should return the html if there was an error" do
83
- file = Object.new
84
- allow(Tempfile).to receive(:new).with(['inject', '.js']){file}
85
- allow(file).to receive(:path){path}
86
- allow(file).to receive(:write)
87
- allow(file).to receive(:close)
88
- allow(file).to receive(:unlink)
89
- allow(IO).to receive(:popen) {raise ArgumentError}
90
- expect(subject.transform).to eq(html)
91
- end
92
-
93
- it "should unlink file even if there was an error" do
94
- file = Object.new
95
- allow(Tempfile).to receive(:new).with(['inject', '.js']){file}
96
- allow(file).to receive(:path){path}
97
- allow(file).to receive(:write)
98
- allow(file).to receive(:close)
99
- allow(file).to receive(:unlink)
100
- allow(IO).to receive(:popen) {raise ArgumentError}
101
- subject.transform
102
- end
55
+ it "should create a temp file for the html" do
56
+ file = Object.new
57
+ expect(subject).to receive(:html_file){file}
58
+ allow(file).to receive(:path){html_path}
59
+ expect(file).to receive(:unlink)
60
+ subject.transform
61
+ end
103
62
 
63
+ it "should create a temp file for the js" do
64
+ file = Object.new
65
+ expect(subject).to receive(:js_file){file}
66
+ allow(file).to receive(:path){js_path}
67
+ expect(file).to receive(:unlink)
68
+ subject.transform
104
69
  end
105
70
 
106
- context "without included_scripts" do
107
- let(:pt){PhantomTransform.new(html)}
108
-
109
- it "should call simple_transform" do
110
- expect(pt).to receive(:simple_transform)
111
- pt.transform
112
- end
113
-
114
- it "should call IO.popen with arguments" do
115
- expect(IO).to receive(:popen).with([
116
- GhostInThePost.phantomjs_path,
117
- GhostInThePost::PhantomTransform::PHANTOMJS_SCRIPT,
118
- html,
119
- GhostInThePost.remove_js_tags
120
- ])
121
- pt.transform
122
- end
123
-
124
- it "should return the result of IO.popen with arguments" do
125
- allow(IO).to receive(:popen) {"this is the end"}
126
- expect(pt.transform).to eq("this is the end")
127
- end
71
+ it "should call IO.popen with arguments" do
72
+ html_file = Object.new
73
+ expect(subject).to receive(:html_file){html_file}
74
+ allow(html_file).to receive(:path){html_path}
75
+ allow(html_file).to receive(:unlink)
76
+
77
+ js_file = Object.new
78
+ expect(subject).to receive(:js_file){js_file}
79
+ allow(js_file).to receive(:path){js_path}
80
+ allow(js_file).to receive(:unlink)
81
+
82
+ expect(IO).to receive(:popen).with([
83
+ GhostInThePost.phantomjs_path,
84
+ GhostInThePost::PhantomTransform::PHANTOMJS_SCRIPT,
85
+ html_path,
86
+ GhostInThePost.remove_js_tags.to_s,
87
+ js_path,
88
+ "1000",
89
+ "ghost_in_the_post:done",
90
+ ])
91
+
92
+ subject.transform
93
+ end
128
94
 
95
+ it "should return the result of IO.popen with arguments" do
96
+ allow(IO).to receive(:popen) {"this is the end"}
97
+ expect(subject.transform).to eq("this is the end")
129
98
  end
130
- end
131
99
 
100
+ it "should unlink file even if there was an error" do
101
+ html_file = Object.new
102
+ expect(subject).to receive(:html_file){html_file}
103
+ allow(html_file).to receive(:path){html_path}
104
+ expect(html_file).to receive(:unlink)
105
+
106
+ js_file = Object.new
107
+ expect(subject).to receive(:js_file){js_file}
108
+ allow(js_file).to receive(:path){js_path}
109
+ expect(js_file).to receive(:unlink)
110
+
111
+ allow(IO).to receive(:popen) {raise ArgumentError}
112
+
113
+ expect{subject.transform}.to raise_error ArgumentError
114
+ end
115
+
116
+ end
132
117
  end
133
118
  end
134
119
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghost_in_the_post
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Anema
@@ -118,14 +118,19 @@ files:
118
118
  - spec/dummy/log/development.log
119
119
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/1hVihiFdBkDBsuCvA1I2vuFa9N6p-5zQ-qKvf4vz7jA.cache
120
120
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/23mzeUAO-pIzGJ1n84Dbg25udWeSiBcd6e_QsDihWQc.cache
121
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/4PgfVpd4CZQ0vAsVTl2KDb1z4f6GLl4mXIc3jSrahHM.cache
121
122
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/6544SZAu2zCeDrdro4h3izdKNXVvHzstwz12UxeiJoA.cache
123
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/6wWiAXBcdY6PLKOIhXQ6c8h9UtViuvdLcEO6wXK3mh0.cache
122
124
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/BMI0IB92xLhvUPcr_K0JuSk8zczmrEEbJCd3qwHauhQ.cache
123
125
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/GtqgDsC0JMsKfj0x5uQrbPcSS3QIPIzLKrq2fGJDBf0.cache
124
126
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/IFLV6zTaBXU1ccodbD3QJ4xUIOEix_Fbb7j8wsxrHw8.cache
127
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/J_D4gpddr1KPVysTvEE48iHsNzrL5Pbj8S5ZNt3PhA4.cache
125
128
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Lc8lcXR-AibSZCIbx_imdfIOmD-zbZ_pwSNMs0o0Dos.cache
126
129
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/O9gjtBITAGlfzUwc2DT5N0GW2bo2b2yQ64gnQljLogM.cache
127
130
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/OQXwnC5z5STtd87Tr2dz1QBt4iZ8PoZTH8KBtBlUGnE.cache
128
131
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/OZ04c215C4Euu3scfhmxmte0o_tZOVWTqrv61cpy7H4.cache
132
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/UbKcvOd2xh3MJoKxz4l4RHMy5IupdsiDoSllZDvYCZA.cache
133
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/XuOqk2dVOcltjkihZ8J_u5Pbcm9Of5KFkjyihP6-5tc.cache
129
134
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/_Bn81xMZj4dS_W5s9uSDhtEdpRZtsc21rcKEYAPCsZY.cache
130
135
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/_Cw52w24AWZEbxLmduyWBMA6Y1OmJiEm1VNn7pY4rtk.cache
131
136
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/_HO5Nyj_TzTxVwa4OOf_0UJfBCmjgkv7NsRU29AD5Oo.cache
@@ -138,7 +143,10 @@ files:
138
143
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/oB1njyQ78MOMRf_5TvuYzHleeI8eke5-FDIIVl7qas0.cache
139
144
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache
140
145
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/qxbw0jMkxTNeM5T2QovOD9vTyvjHVjBN5tZdwBf519A.cache
146
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/xstXMnjOlL2Ynn6MaI9bxlRnhTPYdgCIeOWnWphFSlA.cache
141
147
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/y98HqYF9nxOk8t_j3BKv9Nc4LuSAEzhER7rCCvOM6xI.cache
148
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/zRSH1x7PsiRf9MSILPhc4GKDjRo4xaFNd41wHFCtJSo.cache
149
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/zUYxDxkUr_FKBi6fF7kellqyG52AoZbYItHMUq17DJo.cache
142
150
  - spec/lib/ghost_in_the_post/automatic_spec.rb
143
151
  - spec/lib/ghost_in_the_post/ghost_on_command_spec.rb
144
152
  - spec/lib/ghost_in_the_post/mail_ghost_spec.rb
@@ -206,7 +214,9 @@ test_files:
206
214
  - spec/dummy/log/development.log
207
215
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/1hVihiFdBkDBsuCvA1I2vuFa9N6p-5zQ-qKvf4vz7jA.cache
208
216
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/23mzeUAO-pIzGJ1n84Dbg25udWeSiBcd6e_QsDihWQc.cache
217
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/4PgfVpd4CZQ0vAsVTl2KDb1z4f6GLl4mXIc3jSrahHM.cache
209
218
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/6544SZAu2zCeDrdro4h3izdKNXVvHzstwz12UxeiJoA.cache
219
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/6wWiAXBcdY6PLKOIhXQ6c8h9UtViuvdLcEO6wXK3mh0.cache
210
220
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/_Bn81xMZj4dS_W5s9uSDhtEdpRZtsc21rcKEYAPCsZY.cache
211
221
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/_Cw52w24AWZEbxLmduyWBMA6Y1OmJiEm1VNn7pY4rtk.cache
212
222
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/_HO5Nyj_TzTxVwa4OOf_0UJfBCmjgkv7NsRU29AD5Oo.cache
@@ -217,6 +227,7 @@ test_files:
217
227
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/GtqgDsC0JMsKfj0x5uQrbPcSS3QIPIzLKrq2fGJDBf0.cache
218
228
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache
219
229
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/IFLV6zTaBXU1ccodbD3QJ4xUIOEix_Fbb7j8wsxrHw8.cache
230
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/J_D4gpddr1KPVysTvEE48iHsNzrL5Pbj8S5ZNt3PhA4.cache
220
231
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Lc8lcXR-AibSZCIbx_imdfIOmD-zbZ_pwSNMs0o0Dos.cache
221
232
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/n6_6RjvPX2rCv5dytbSnnDrGwAj1ZcPfninuNUeP_iE.cache
222
233
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/nXo-w2o4zQBM_uSUnniuP53t5erBbSZPecMED9YnzQI.cache
@@ -226,7 +237,12 @@ test_files:
226
237
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/OZ04c215C4Euu3scfhmxmte0o_tZOVWTqrv61cpy7H4.cache
227
238
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache
228
239
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/qxbw0jMkxTNeM5T2QovOD9vTyvjHVjBN5tZdwBf519A.cache
240
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/UbKcvOd2xh3MJoKxz4l4RHMy5IupdsiDoSllZDvYCZA.cache
241
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/xstXMnjOlL2Ynn6MaI9bxlRnhTPYdgCIeOWnWphFSlA.cache
242
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/XuOqk2dVOcltjkihZ8J_u5Pbcm9Of5KFkjyihP6-5tc.cache
229
243
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/y98HqYF9nxOk8t_j3BKv9Nc4LuSAEzhER7rCCvOM6xI.cache
244
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/zRSH1x7PsiRf9MSILPhc4GKDjRo4xaFNd41wHFCtJSo.cache
245
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/zUYxDxkUr_FKBi6fF7kellqyG52AoZbYItHMUq17DJo.cache
230
246
  - spec/lib/ghost_in_the_post/automatic_spec.rb
231
247
  - spec/lib/ghost_in_the_post/ghost_on_command_spec.rb
232
248
  - spec/lib/ghost_in_the_post/mail_ghost_spec.rb