ghost_in_the_post 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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