phantomjs.rb 2.0.0 → 2.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b301765a3009c343d855a4a7fc373dbeaf1fdb1d
4
- data.tar.gz: d9a337020722eb4f3d228253502668e4cc4b1f40
3
+ metadata.gz: 000928d55d632a0b8d414a17586f3ef38b351038
4
+ data.tar.gz: 8a6432fb658fe94b1488ded6e8a7d8462189a653
5
5
  SHA512:
6
- metadata.gz: 765641c2ac1344df5808265990d192a25910d28240a6c8188a1cf50ab0cc1497003f27cd8cd8801f20f7dfbb43d7a70ca2da92fbc75889fcf6dbb910861ba8a6
7
- data.tar.gz: 1c4d8c39817a207f91714b1039bc9db17a7b92fac2a5f30588886b313670f7e3489d29a5c896177d2ac3832c7df943f09aa7083b779eb7c39ca6c3fea29ca876
6
+ metadata.gz: 41f56b5d74730c4a62db1189330415a75ef2335d3dbec7ad63af30ab7c4fe6b216a0502296043f7a313f41626f8971d38a03278f255567b59281dbf547ec28bf
7
+ data.tar.gz: 55fad899048c39893f0a02f2e5d85e4e834a828192415ed7720b7a5dbd65937a94ab2885c2a87f957396cc375a2948fc46502baaebac81ec22bf7732c3497bf1
data/.gitignore CHANGED
@@ -1,5 +1,5 @@
1
1
  .DS_Store
2
2
  *.gem
3
3
  .bundle
4
- Gemfile.lock
5
4
  pkg/*
5
+ *.un~
@@ -0,0 +1,31 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ phantomjs.rb (2.1.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.2.5)
10
+ rake (10.4.2)
11
+ rspec (3.3.0)
12
+ rspec-core (~> 3.3.0)
13
+ rspec-expectations (~> 3.3.0)
14
+ rspec-mocks (~> 3.3.0)
15
+ rspec-core (3.3.1)
16
+ rspec-support (~> 3.3.0)
17
+ rspec-expectations (3.3.0)
18
+ diff-lcs (>= 1.2.0, < 2.0)
19
+ rspec-support (~> 3.3.0)
20
+ rspec-mocks (3.3.1)
21
+ diff-lcs (>= 1.2.0, < 2.0)
22
+ rspec-support (~> 3.3.0)
23
+ rspec-support (3.3.0)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ phantomjs.rb!
30
+ rake
31
+ rspec
data/README.md CHANGED
@@ -18,6 +18,8 @@ gem install phantomjs.rb
18
18
 
19
19
  ### Pass a file
20
20
 
21
+ Use `Phantomjs.run` to run the passed script file.
22
+
21
23
  ```js
22
24
  // my_runner.js
23
25
  var arg1 = phantom.args[0];
@@ -34,8 +36,9 @@ Phantomjs.run('my_runner.js', 'hello', 'world')
34
36
 
35
37
  ### Pass a script
36
38
 
37
- You can also pass a javascript string as an argument and the gem
38
- will create a temporary file for it and run the script.
39
+ You can also pass a javascript string as an argument and call
40
+ `Phantomjs.inline`. This will create a temporary file for it
41
+ and run the script.
39
42
 
40
43
  NOTE: Just don't forget to call `phantom.exit`.
41
44
 
@@ -45,13 +48,14 @@ js = <<JS
45
48
  phantom.exit();
46
49
  JS
47
50
 
48
- Phantomjs.run(js, 'hello', 'world')
51
+ Phantomjs.inline(js, 'hello', 'world')
49
52
  #=> 'hello world'
50
53
  ```
51
54
 
52
55
  ### But what about async scripts?
53
56
 
54
- Well it works for that too!
57
+ Well it works for that too! Just pass a `block` to the method call and the
58
+ argument will be whatever your script puts out on `stdout`.
55
59
 
56
60
  ```rb
57
61
  js = <<JS
@@ -74,6 +78,20 @@ end
74
78
  ctr is: 2
75
79
  ```
76
80
 
81
+ ## Configuring the path to phantomjs
82
+
83
+ If you are using phantomjs in a non-typical installation path or are including the
84
+ binary inside your application, you can configure phantomjs.rb to use a custom path.
85
+
86
+ The following example is a good starting point to follow.
87
+
88
+ ```rb
89
+ osx = Rails.env.development? || Rails.env.test?
90
+ Phantomjs.configure do |config|
91
+ config.phantomjs_path = "#{Rails.root}/bin/phantomjs-#{osx ? 'osx' : 'x86'}"
92
+ end
93
+ ```
94
+
77
95
  ## Running the tests
78
96
 
79
97
  ```
@@ -1,18 +1,26 @@
1
- require 'tempfile'
1
+ require "tempfile"
2
+ require "phantomjs/configuration"
2
3
  require "phantomjs/version"
3
- require 'phantomjs/errors'
4
+ require "phantomjs/errors"
4
5
 
5
6
  class Phantomjs
6
- EXEC = 'phantomjs'
7
7
 
8
- def self.run(path, *args)
8
+ def self.run(path, *args, &block)
9
+ Phantomjs.new.run(path, *args, &block)
10
+ end
11
+
12
+ def run(path, *args)
9
13
  epath = File.expand_path(path)
10
14
  raise NoSuchPathError.new(epath) unless File.exist?(epath)
11
15
  block = block_given? ? Proc.new : nil
12
16
  execute(epath, args, block)
13
17
  end
14
18
 
15
- def self.inline(script, *args)
19
+ def self.inline(script, *args, &block)
20
+ Phantomjs.new.inline(script, *args, &block)
21
+ end
22
+
23
+ def inline(script, *args)
16
24
  file = Tempfile.new('script.js')
17
25
  file.write(script)
18
26
  file.close
@@ -20,19 +28,31 @@ class Phantomjs
20
28
  execute(file.path, args, block)
21
29
  end
22
30
 
23
- private
31
+ def self.configure(&block)
32
+ Configuration.configure(&block)
33
+ end
24
34
 
25
- def self.execute(path, arguments, block)
35
+ private
36
+
37
+ # Credit to github.com/alex88 for fixing the zombie process issue
38
+ def execute(path, arguments, block)
26
39
  begin
40
+ f = IO.popen([exec, path, arguments].flatten)
27
41
  if block
28
- IO.popen([EXEC, path, arguments].flatten).each_line do |line|
42
+ result = f.each_line do |line|
29
43
  block.call(line)
30
44
  end
31
45
  else
32
- IO.popen([EXEC, path, arguments].flatten).read
46
+ result = f.read
33
47
  end
48
+ f.close
49
+ result
34
50
  rescue Errno::ENOENT
35
51
  raise CommandNotFoundError.new('Phantomjs is not installed')
36
52
  end
37
53
  end
54
+
55
+ def exec
56
+ Phantomjs::Configuration.phantomjs_path
57
+ end
38
58
  end
@@ -0,0 +1,14 @@
1
+ class Phantomjs
2
+ module Configuration
3
+ extend self
4
+
5
+ attr_accessor :phantomjs_path
6
+
7
+ Phantomjs::Configuration.phantomjs_path ||= 'phantomjs'
8
+
9
+ def configure
10
+ yield self
11
+ end
12
+
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  class Phantomjs
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Phantomjs::Configuration do
4
+ describe ".configure" do
5
+ context "defaults" do
6
+ it "default path" do
7
+ expect(Phantomjs::Configuration.phantomjs_path).to eq('phantomjs')
8
+ end
9
+
10
+ context "with custom settings" do
11
+ before { Phantomjs.configure { |config| config.phantomjs_path = '/bin/phantomjs' } }
12
+
13
+ it "custom path" do
14
+ expect(Phantomjs::Configuration.phantomjs_path).to eq('/bin/phantomjs')
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,10 +1,10 @@
1
- require 'phantomjs'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Phantomjs do
4
4
  describe ".run" do
5
5
  describe 'when phantomjs is non installed' do
6
- before { Phantomjs::EXEC = 'not_existing_phantomjs' }
7
- after { Phantomjs::EXEC = 'phantomjs' }
6
+ before { Phantomjs.configure { |config| config.phantomjs_path = 'not_existing_phantomjs' } }
7
+ after { Phantomjs.configure { |config| config.phantomjs_path = 'phantomjs' } }
8
8
 
9
9
  it "raises an error" do
10
10
  script = File.expand_path('./spec/runner.js')
@@ -24,16 +24,16 @@ describe Phantomjs do
24
24
  it "runs phantomjs binary with the correct arguments" do
25
25
  script = File.expand_path('./spec/runner.js')
26
26
  result = Phantomjs.run(script, 'foo1', 'foo2')
27
- result.should eq("bar\nfoo1\nfoo2\n")
27
+ expect(result).to eq("bar\nfoo1\nfoo2\n")
28
28
  end
29
-
29
+
30
30
  it "accepts a block that will get called for each line of output" do
31
31
  line = ''
32
32
  script = File.expand_path('./spec/runner.js')
33
33
  Phantomjs.run(script, 'foo1', 'foo2') do |l|
34
34
  line << l
35
35
  end
36
- line.should eq("bar\nfoo1\nfoo2\n")
36
+ expect(line).to eq("bar\nfoo1\nfoo2\n")
37
37
  end
38
38
 
39
39
  it "accepts empty parameters" do
@@ -42,7 +42,7 @@ describe Phantomjs do
42
42
  Phantomjs.run(script, 'foo1', 'foo2', '') do |l|
43
43
  line << l
44
44
  end
45
- line.should eq("bar\nfoo1\nfoo2\n\n")
45
+ expect(line).to eq("bar\nfoo1\nfoo2\n\n")
46
46
  end
47
47
 
48
48
  it "accepts parameters with spaces" do
@@ -51,33 +51,33 @@ describe Phantomjs do
51
51
  Phantomjs.run(script, 'foo bar', 'foo2') do |l|
52
52
  line << l
53
53
  end
54
- line.should eq("bar\nfoo bar\nfoo2\n")
54
+ expect(line).to eq("bar\nfoo bar\nfoo2\n")
55
55
  end
56
56
 
57
57
  it "accepts empty parameters without block" do
58
58
  script = File.expand_path('./spec/runner.js')
59
59
  output = Phantomjs.run(script, 'foo1', 'foo2', '')
60
- output.should eq("bar\nfoo1\nfoo2\n\n")
60
+ expect(output).to eq("bar\nfoo1\nfoo2\n\n")
61
61
  end
62
62
 
63
63
  it "accepts parameters with spaces without block" do
64
64
  script = File.expand_path('./spec/runner.js')
65
65
  output = Phantomjs.run(script, 'foo bar', 'foo2')
66
- output.should eq("bar\nfoo bar\nfoo2\n")
66
+ expect(output).to eq("bar\nfoo bar\nfoo2\n")
67
67
  end
68
68
  end
69
69
 
70
- describe '.inline' do
71
- it 'accepts and runs a script as an argument' do
70
+ describe ".inline" do
71
+ it "accepts and runs a script as an argument" do
72
72
  js = %q(
73
73
  console.log(phantom.args[0]);
74
74
  phantom.exit();
75
75
  )
76
76
  result = Phantomjs.inline(js, 'works!')
77
- result.should eq("works!\n")
77
+ expect(result).to eq("works!\n")
78
78
  end
79
79
 
80
- it 'accepts a block as an argument' do
80
+ it "accepts a block as an argument" do
81
81
  js = %q(
82
82
  ctr = 0;
83
83
  setInterval(function() {
@@ -90,11 +90,11 @@ describe Phantomjs do
90
90
  console.log('running interval')
91
91
  )
92
92
  expected = "running interval\nctr is 0\nctr is 1\nctr is 2\n"
93
- str = '';
94
- result = Phantomjs.inline(js) do |line|
93
+ str = "";
94
+ Phantomjs.inline(js) do |line|
95
95
  str << line
96
96
  end
97
- str.should eq(expected)
97
+ expect(str).to match(expected)
98
98
  end
99
99
  end
100
100
  end
@@ -0,0 +1,7 @@
1
+ require 'phantomjs'
2
+
3
+ RSpec.configure do |config|
4
+ config.after(:each) do
5
+ Phantomjs.configure { |cfg| cfg.phantomjs_path = 'phantomjs' }
6
+ end
7
+ end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phantomjs.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Estoque
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-06 00:00:00.000000000 Z
11
+ date: 2015-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Ruby wrapper for phantomjs
@@ -45,20 +45,24 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - .autotest
49
- - .gitignore
50
- - .travis.yml
48
+ - ".autotest"
49
+ - ".gitignore"
50
+ - ".travis.yml"
51
51
  - CHANGELOG
52
52
  - Gemfile
53
+ - Gemfile.lock
53
54
  - MIT-LICENSE
54
55
  - README.md
55
56
  - Rakefile
56
57
  - lib/phantomjs.rb
58
+ - lib/phantomjs/configuration.rb
57
59
  - lib/phantomjs/errors.rb
58
60
  - lib/phantomjs/version.rb
59
61
  - phantomjs.rb.gemspec
62
+ - spec/configuration_spec.rb
60
63
  - spec/phantomjs_spec.rb
61
64
  - spec/runner.js
65
+ - spec/spec_helper.rb
62
66
  homepage: http://westoque.com
63
67
  licenses: []
64
68
  metadata: {}
@@ -68,20 +72,22 @@ require_paths:
68
72
  - lib
69
73
  required_ruby_version: !ruby/object:Gem::Requirement
70
74
  requirements:
71
- - - '>='
75
+ - - ">="
72
76
  - !ruby/object:Gem::Version
73
77
  version: '0'
74
78
  required_rubygems_version: !ruby/object:Gem::Requirement
75
79
  requirements:
76
- - - '>='
80
+ - - ">="
77
81
  - !ruby/object:Gem::Version
78
82
  version: '0'
79
83
  requirements: []
80
84
  rubyforge_project: phantomjs.rb
81
- rubygems_version: 2.0.3
85
+ rubygems_version: 2.4.6
82
86
  signing_key:
83
87
  specification_version: 4
84
88
  summary: Ruby wrapper for phantomjs
85
89
  test_files:
90
+ - spec/configuration_spec.rb
86
91
  - spec/phantomjs_spec.rb
87
92
  - spec/runner.js
93
+ - spec/spec_helper.rb