phantomjs 1.6.0.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.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
@@ -0,0 +1 @@
1
+ SimpleCov.start
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in phantomjs.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ Note that this project merely bundles the separate PhantomJS project
2
+ into a Ruby gem. You can find the license information for PhantomJS
3
+ inside phantomjs/LICENSE.BSD and further information at
4
+ http://http://phantomjs.org/
5
+
6
+ Copyright (c) 2012 Christoph Olszowka
7
+
8
+ MIT License
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining
11
+ a copy of this software and associated documentation files (the
12
+ "Software"), to deal in the Software without restriction, including
13
+ without limitation the rights to use, copy, modify, merge, publish,
14
+ distribute, sublicense, and/or sell copies of the Software, and to
15
+ permit persons to whom the Software is furnished to do so, subject to
16
+ the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be
19
+ included in all copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,66 @@
1
+ # Phantomjs as a Rubygem
2
+
3
+ **DISCLAIMER: Alpha status, YMMV!**
4
+
5
+ I am lazy as hell, and wanted to be able to install [PhantomJS](http://phantomjs.org) via Rubygems/Bundler
6
+ when using [poltergeist](https://github.com/jonleighton/poltergeist).
7
+
8
+ It keeps installations of phantomjs in `$HOME/.phantomjs/VERSION/PLATFORM`. When you call `Phantomjs.path`, it
9
+ will return the path to the phantomjs executable in there. If that is not present, it will first fetch and
10
+ install the prebuilt packages suitable for the current plattform (currently Linux 32/64 or OS X supported).
11
+
12
+ You will need `wget` on your system. For extraction, `bunzip2` and `tar` are required on Linux, and `unzip`
13
+ on OS X. They should be installed already.
14
+
15
+ **TL;DR:** Instead of manually installing phantomjs on your machines, use this gem. It will take care of it.
16
+
17
+ ## Example
18
+
19
+ require 'phantomjs'
20
+ Phantomjs.path # => path to a phantom js executable suitable to your current platform. Will install before return when not installed yet.
21
+
22
+ ## Usage with Poltergeist/Capybara
23
+
24
+ Add this to your `Gemfile`:
25
+
26
+ group :test do
27
+ gem 'phantomjs', :require => 'phantomjs/poltergeist'
28
+ end
29
+
30
+ This will automatically require (and install) phantomjs and configure Capybara in the same way as noted below for
31
+ manual setup
32
+
33
+ ### Manual setup
34
+
35
+ Add `gem 'phantomjs', :group => :test` to your `Gemfile` and run `bundle`. In your test/spec helper, re-configure
36
+ the Poltergeist capybara driver to use the phantomjs package from this gem:
37
+
38
+ require 'phantomjs' # <-- Not required if your app does Bundler.require automatically (e.g. when using Rails)
39
+ Capybara.register_driver :poltergeist do |app|
40
+ Capybara::Poltergeist::Driver.new(app, :phantomjs => Phantomjs.path)
41
+ end
42
+
43
+ ## A note about versions.
44
+
45
+ The gem version consists of 4 digits: The first 3 indicate the phantomjs release installed via this gem,
46
+ the last one is the internal version of this gem, in case I screw things up and need to push another release
47
+ before
48
+
49
+ ## Contributing
50
+
51
+ **Warning**: The `spec_helper` calls `Phantomjs.implode` when it is loaded, which purges the `~/.phantomjs`
52
+ directory. This is no bad thing, it just means every time you run the specs you'll download and install all
53
+ three packages over, so tread with caution please :)
54
+
55
+ 1. Fork it
56
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
57
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
58
+ 4. Push to the branch (`git push origin my-new-feature`)
59
+ 5. Create new Pull Request
60
+
61
+ ## Copyright
62
+
63
+ (c) 2012 Christoph Olszowka
64
+
65
+ Note that this project merely simplifies the installation of the entirely separate PhantomJS project
66
+ via a Ruby gem. You can find the license information for PhantomJS at http://http://phantomjs.org/
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,48 @@
1
+ require "phantomjs/version"
2
+ require 'fileutils'
3
+
4
+ module Phantomjs
5
+ class UnknownPlatform < StandardError; end;
6
+
7
+ class << self
8
+ def available_platforms
9
+ @available_platforms ||= []
10
+ end
11
+
12
+ def base_dir
13
+ @base_dir ||= File.join(File.expand_path('~'), '.phantomjs', version)
14
+ end
15
+
16
+ def version
17
+ Phantomjs::VERSION.split('.')[0..-2].join('.')
18
+ end
19
+
20
+ def path
21
+ @path ||= platform.phantomjs_path
22
+ end
23
+
24
+ def platform
25
+ if platform = available_platforms.find {|p| p.useable? }
26
+ platform.ensure_installed!
27
+ platform
28
+ else
29
+ raise UnknownPlatform, "Could not find an appropriate PhantomJS library for your platform (#{RUBY_PLATFORM} :( Please install manually."
30
+ end
31
+ end
32
+
33
+ # Removes the local phantomjs copy
34
+ def implode!
35
+ FileUtils.rm_rf File.join(File.expand_path('~'), '.phantomjs')
36
+ end
37
+
38
+ # Clears cached state. Primarily useful for testing.
39
+ def reset!
40
+ @base_dir = @path = nil
41
+ end
42
+ end
43
+ end
44
+
45
+ require 'phantomjs/platform'
46
+ Phantomjs.available_platforms << Phantomjs::Platform::Linux32
47
+ Phantomjs.available_platforms << Phantomjs::Platform::Linux64
48
+ Phantomjs.available_platforms << Phantomjs::Platform::OsX
@@ -0,0 +1,112 @@
1
+ module Phantomjs
2
+ class Platform
3
+ class << self
4
+ def host_os
5
+ RbConfig::CONFIG['host_os']
6
+ end
7
+
8
+ def architecture
9
+ RbConfig::CONFIG['host_cpu']
10
+ end
11
+
12
+ def phantomjs_path
13
+ File.expand_path File.join(Phantomjs.base_dir, platform, 'bin/phantomjs')
14
+ end
15
+
16
+ def installed?
17
+ File.exist? phantomjs_path
18
+ end
19
+
20
+ # TODO: Clean this up, it looks like a pile of...
21
+ def install!
22
+ STDERR.puts "Phantomjs does not appear to be installed in #{phantomjs_path}, installing!"
23
+ FileUtils.mkdir_p Phantomjs.base_dir
24
+
25
+ # Purge temporary directory if it is still hanging around from previous installs,
26
+ # then re-create it.
27
+ temp_dir = File.join('/tmp', 'phantomjs_install')
28
+ FileUtils.rm_rf temp_dir
29
+ FileUtils.mkdir_p temp_dir
30
+
31
+ Dir.chdir temp_dir do
32
+ unless system "wget #{package_url}"
33
+ raise "Failed to load phantomjs from #{package_url} :("
34
+ end
35
+
36
+ case package_url.split('.').last
37
+ when 'bz2'
38
+ system "bunzip2 #{File.basename(package_url)}"
39
+ system "tar xf #{File.basename(package_url).sub(/\.bz2$/, '')}"
40
+ when 'zip'
41
+ system "unzip #{File.basename(package_url)}"
42
+ else
43
+ raise "Unknown compression format for #{File.basename(package_url)}"
44
+ end
45
+
46
+ # Find the phantomjs build we just extracted
47
+ extracted_dir = Dir['phantomjs*'].find { |path| File.directory?(path) }
48
+
49
+ # Move the extracted phantomjs build to $HOME/.phantomjs/version/platform
50
+ FileUtils.mv extracted_dir, File.join(Phantomjs.base_dir, platform)
51
+
52
+ # Clean up remaining files in tmp
53
+ FileUtils.rm_rf temp_dir
54
+ end
55
+
56
+ raise "Failed to install phantomjs. Sorry :(" unless File.exist?(phantomjs_path)
57
+ end
58
+
59
+ def ensure_installed!
60
+ install! unless installed?
61
+ end
62
+ end
63
+
64
+ class Linux64 < Platform
65
+ class << self
66
+ def useable?
67
+ host_os.include?('linux') and architecture.include?('x86_64')
68
+ end
69
+
70
+ def platform
71
+ 'x86_64-linux'
72
+ end
73
+
74
+ def package_url
75
+ 'http://phantomjs.googlecode.com/files/phantomjs-1.6.0-linux-x86_64-dynamic.tar.bz2'
76
+ end
77
+ end
78
+ end
79
+
80
+ class Linux32 < Platform
81
+ class << self
82
+ def useable?
83
+ host_os.include?('linux') and (architecture.include?('x86_32') or architecture.include?('i686'))
84
+ end
85
+
86
+ def platform
87
+ 'x86_32-linux'
88
+ end
89
+
90
+ def package_url
91
+ 'http://phantomjs.googlecode.com/files/phantomjs-1.6.0-linux-i686-dynamic.tar.bz2'
92
+ end
93
+ end
94
+ end
95
+
96
+ class OsX < Platform
97
+ class << self
98
+ def useable?
99
+ host_os.include?('darwin')
100
+ end
101
+
102
+ def platform
103
+ 'darwin'
104
+ end
105
+
106
+ def package_url
107
+ 'http://phantomjs.googlecode.com/files/phantomjs-1.6.0-macosx-static.zip'
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+ require 'phantomjs'
3
+ require 'capybara/poltergeist'
4
+ Phantomjs.path # Force install on require
5
+ Capybara.register_driver :poltergeist do |app|
6
+ Capybara::Poltergeist::Driver.new(app, :phantomjs => Phantomjs.path)
7
+ end
@@ -0,0 +1,3 @@
1
+ module Phantomjs
2
+ VERSION = "1.6.0.0"
3
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/phantomjs/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Christoph Olszowka"]
6
+ gem.email = ["christoph at olszowka.de"]
7
+ gem.description = %q{Auto-install phantomjs on demand for current platform. Comes with poltergeist integration.}
8
+ gem.summary = %q{Auto-install phantomjs on demand for current platform. Comes with poltergeist integration.}
9
+ gem.homepage = "https://github.com/colszowka/phantomjs-gem"
10
+
11
+ gem.add_development_dependency 'rspec', "~> 2.10.0"
12
+ gem.add_development_dependency 'poltergeist'
13
+ gem.add_development_dependency 'simplecov'
14
+
15
+ gem.files = `git ls-files`.split($\)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.name = "phantomjs"
19
+ gem.require_paths = ["lib"]
20
+ gem.version = Phantomjs::VERSION
21
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'phantomjs/poltergeist'
3
+
4
+ HTML_RESPONSE = <<HTML
5
+ <html>
6
+ <head></head>
7
+ <body>
8
+ <h1>Hello</h1>
9
+ <div id="js">NO JS :(</div>
10
+ <script type="text/javascript">
11
+ document.getElementById('js').innerHTML = 'OMG JS!';
12
+ </script>
13
+ </body>
14
+ </html>
15
+ HTML
16
+ Capybara.app = lambda {|env| [200, {"Content-Type" => "text/html"}, [HTML_RESPONSE]] }
17
+ Capybara.default_driver = :poltergeist
18
+
19
+ describe Phantomjs do
20
+ include Capybara::DSL
21
+
22
+ describe 'A HTTP request using capybara/poltergeist' do
23
+ before { visit '/' }
24
+ it "has displayed static html content" do
25
+ within('h1') { page.should have_content('Hello') }
26
+ end
27
+
28
+ it "has processed javascript" do
29
+ within "#js" do
30
+ page.should_not have_content('NO JS :(')
31
+ page.should have_content('OMG JS!')
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe Phantomjs::Platform do
4
+ before(:each) { Phantomjs.reset! }
5
+ describe "on a 64 bit linux" do
6
+ before do
7
+ Phantomjs::Platform.stub(:host_os).and_return('linux-gnu')
8
+ Phantomjs::Platform.stub(:architecture).and_return('x86_64')
9
+ end
10
+
11
+ it "reports the Linux64 Platform as useable" do
12
+ Phantomjs::Platform::Linux64.should be_useable
13
+ end
14
+
15
+ it "returns the correct phantom js executable path for the platform" do
16
+ Phantomjs.path.should =~ /x86_64-linux\/bin\/phantomjs$/
17
+ end
18
+
19
+ it "reports the Linux32 platform as unuseable" do
20
+ Phantomjs::Platform::Linux32.should_not be_useable
21
+ end
22
+
23
+ it "reports the Darwin platform as unuseable" do
24
+ Phantomjs::Platform::OsX.should_not be_useable
25
+ end
26
+ end
27
+
28
+ describe "on a 32 bit linux" do
29
+ before do
30
+ Phantomjs::Platform.stub(:host_os).and_return('linux-gnu')
31
+ Phantomjs::Platform.stub(:architecture).and_return('x86_32')
32
+ end
33
+
34
+ it "reports the Linux32 Platform as useable" do
35
+ Phantomjs::Platform::Linux32.should be_useable
36
+ end
37
+
38
+ it "reports another Linux32 Platform as useable" do
39
+ Phantomjs::Platform.stub(:host_os).and_return('linux-gnu')
40
+ Phantomjs::Platform.stub(:architecture).and_return('i686')
41
+ Phantomjs::Platform::Linux32.should be_useable
42
+ end
43
+
44
+ it "returns the correct phantom js executable path for the platform" do
45
+ Phantomjs.path.should =~ /x86_32-linux\/bin\/phantomjs$/
46
+ end
47
+
48
+ it "reports the Linux64 platform as unuseable" do
49
+ Phantomjs::Platform::Linux64.should_not be_useable
50
+ end
51
+
52
+ it "reports the Darwin platform as unuseable" do
53
+ Phantomjs::Platform::OsX.should_not be_useable
54
+ end
55
+ end
56
+
57
+ describe "on OS X" do
58
+ before do
59
+ Phantomjs::Platform.stub(:host_os).and_return('darwin')
60
+ Phantomjs::Platform.stub(:architecture).and_return('x86_64')
61
+ end
62
+
63
+ it "reports the Darwin platform as useable" do
64
+ Phantomjs::Platform::OsX.should be_useable
65
+ end
66
+
67
+ it "returns the correct phantom js executable path for the platform" do
68
+ Phantomjs.path.should =~ /darwin\/bin\/phantomjs$/
69
+ end
70
+
71
+ it "reports the Linux32 Platform as unuseable" do
72
+ Phantomjs::Platform::Linux32.should_not be_useable
73
+ end
74
+
75
+ it "reports the Linux64 platform as unuseable" do
76
+ Phantomjs::Platform::Linux64.should_not be_useable
77
+ end
78
+ end
79
+
80
+ describe 'on an unknown platform' do
81
+ before do
82
+ Phantomjs::Platform.stub(:host_os).and_return('foobar')
83
+ end
84
+
85
+ it "raises an UnknownPlatform error" do
86
+ -> { Phantomjs.platform }.should raise_error(Phantomjs::UnknownPlatform)
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'simplecov'
3
+ require 'bundler/setup'
4
+
5
+ require 'phantomjs'
6
+ require 'capybara/rspec'
7
+ require 'capybara/poltergeist'
8
+
9
+ Phantomjs.implode!
10
+
11
+ RSpec.configure do |config|
12
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: phantomjs
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.6.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Christoph Olszowka
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.10.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.10.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: poltergeist
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: simplecov
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Auto-install phantomjs on demand for current platform. Comes with poltergeist
63
+ integration.
64
+ email:
65
+ - christoph at olszowka.de
66
+ executables: []
67
+ extensions: []
68
+ extra_rdoc_files: []
69
+ files:
70
+ - .gitignore
71
+ - .rspec
72
+ - .simplecov
73
+ - Gemfile
74
+ - LICENSE
75
+ - README.md
76
+ - Rakefile
77
+ - lib/phantomjs.rb
78
+ - lib/phantomjs/platform.rb
79
+ - lib/phantomjs/poltergeist.rb
80
+ - lib/phantomjs/version.rb
81
+ - phantomjs.gemspec
82
+ - spec/phantomjs_spec.rb
83
+ - spec/platform_spec.rb
84
+ - spec/spec_helper.rb
85
+ homepage: https://github.com/colszowka/phantomjs-gem
86
+ licenses: []
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 1.8.24
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: Auto-install phantomjs on demand for current platform. Comes with poltergeist
109
+ integration.
110
+ test_files:
111
+ - spec/phantomjs_spec.rb
112
+ - spec/platform_spec.rb
113
+ - spec/spec_helper.rb
114
+ has_rdoc: