capy 1.2.0 → 1.3.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.
- data/README.md +13 -0
- data/Rakefile +9 -0
- data/bin/capy +1 -1
- data/capy.gemspec +3 -0
- data/examples/google_search.capy +0 -0
- data/examples/twitter.js +2 -0
- data/examples/wikipedia_search.capy +0 -0
- data/lib/capy.rb +48 -16
- data/lib/capy/version.rb +1 -1
- data/spec/capy_spec.rb +94 -0
- data/spec/fixtures/foo.capy +1 -0
- data/spec/fixtures/foo.js +1 -0
- data/spec/spec_helper.rb +7 -0
- metadata +39 -8
data/README.md
CHANGED
@@ -31,6 +31,19 @@ Change the browser:
|
|
31
31
|
|
32
32
|
$ capy -b firefox example.capy
|
33
33
|
|
34
|
+
### JavaScript Mode
|
35
|
+
|
36
|
+
# example.js
|
37
|
+
|
38
|
+
location 'http://www.wikipedia.org/'
|
39
|
+
...
|
40
|
+
|
41
|
+
run capy with '-j' option
|
42
|
+
|
43
|
+
$ capy -j example.js
|
44
|
+
|
45
|
+
See also the [examples](https://github.com/jugyo/capy/tree/master/examples).
|
46
|
+
|
34
47
|
## Contributing
|
35
48
|
|
36
49
|
1. Fork it
|
data/Rakefile
CHANGED
data/bin/capy
CHANGED
data/capy.gemspec
CHANGED
data/examples/google_search.capy
CHANGED
File without changes
|
data/examples/twitter.js
ADDED
File without changes
|
data/lib/capy.rb
CHANGED
@@ -6,14 +6,17 @@ require 'capybara/dsl'
|
|
6
6
|
|
7
7
|
module Capy
|
8
8
|
class << self
|
9
|
-
attr_reader :opts
|
9
|
+
attr_reader :opts, :mode
|
10
10
|
|
11
11
|
def run(args)
|
12
|
-
@opts = Slop.parse!(args, :help => true) do
|
12
|
+
@opts = Slop.parse!(args, :help => true, :strict => true) do
|
13
13
|
banner "capy [script.capy]\n"
|
14
14
|
on :b, :browser=, 'chrome, firefox', :default => 'chrome'
|
15
|
+
on :j, :js, 'eval script as javascript with -a option'
|
16
|
+
on :a, :'app-host=', 'app host'
|
17
|
+
on :s, :'stop', 'stop after eval script'
|
15
18
|
end
|
16
|
-
|
19
|
+
return 1 if opts.help?
|
17
20
|
|
18
21
|
trap('INT') { exit }
|
19
22
|
|
@@ -21,21 +24,39 @@ module Capy
|
|
21
24
|
Capybara::Selenium::Driver.new(app, :browser => opts[:browser].to_sym)
|
22
25
|
end
|
23
26
|
Capybara.current_driver = :selenium
|
27
|
+
Capybara.app_host = opts[:'app-host']
|
28
|
+
|
29
|
+
@mode = opts.js? ? :javascript : :capybara
|
30
|
+
|
31
|
+
evaluater = Evaluater.new
|
32
|
+
evaluater.visit (Capybara.app_host) if Capybara.app_host
|
24
33
|
|
25
34
|
if args.empty?
|
26
|
-
start_shell
|
35
|
+
start_shell evaluater
|
27
36
|
else
|
28
37
|
args.each do |script_file|
|
29
|
-
|
38
|
+
unless File.exists?(script_file)
|
39
|
+
puts "No such file: #{script_file}".red
|
40
|
+
return 1
|
41
|
+
end
|
30
42
|
puts "Running: #{script_file} ..."
|
31
|
-
eval_script script_file
|
43
|
+
evaluater.eval_script File.read(script_file), mode
|
44
|
+
start_shell evaluater if opts.stop?
|
32
45
|
end
|
33
46
|
end
|
47
|
+
|
48
|
+
0
|
49
|
+
rescue Slop::InvalidOptionError => e
|
50
|
+
puts e.message.red
|
51
|
+
1
|
52
|
+
rescue => e
|
53
|
+
error e
|
54
|
+
1
|
34
55
|
end
|
35
56
|
|
36
57
|
EXIT_COMMANDS = %w(exit quit)
|
37
58
|
|
38
|
-
def start_shell(evaluater
|
59
|
+
def start_shell(evaluater)
|
39
60
|
return if @_start_shell
|
40
61
|
@_start_shell = true
|
41
62
|
|
@@ -65,7 +86,7 @@ module Capy
|
|
65
86
|
return
|
66
87
|
else
|
67
88
|
begin
|
68
|
-
result = evaluater.
|
89
|
+
result = evaluater.eval_script(buf, mode)
|
69
90
|
puts "=> #{result.inspect}".cyan
|
70
91
|
rescue => e
|
71
92
|
error e
|
@@ -76,17 +97,10 @@ module Capy
|
|
76
97
|
@_start_shell = false
|
77
98
|
end
|
78
99
|
|
79
|
-
def eval_script(script_file)
|
80
|
-
evaluater = Evaluater.new
|
81
|
-
evaluater.instance_eval(File.read(script_file), script_file, 1)
|
82
|
-
rescue => e
|
83
|
-
error e
|
84
|
-
end
|
85
|
-
|
86
100
|
private
|
87
101
|
|
88
102
|
def error(e)
|
89
|
-
puts "#{e.backtrace[0]} #{e}".red
|
103
|
+
puts "#{e.backtrace[0]} #{e} (#{e.class})".red
|
90
104
|
puts "\t#{e.backtrace[1..-1].join("\n\t")}".red
|
91
105
|
end
|
92
106
|
end
|
@@ -94,6 +108,24 @@ module Capy
|
|
94
108
|
class Evaluater
|
95
109
|
include Capybara::DSL
|
96
110
|
|
111
|
+
def eval_script(script, mode)
|
112
|
+
case mode
|
113
|
+
when :javascript
|
114
|
+
javascript script
|
115
|
+
else
|
116
|
+
capybara script
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def javascript(script)
|
121
|
+
page.evaluate_script script.sub(/\A#!.*\n/, '')
|
122
|
+
end
|
123
|
+
alias_method :js, :javascript
|
124
|
+
|
125
|
+
def capybara(script)
|
126
|
+
instance_eval script
|
127
|
+
end
|
128
|
+
|
97
129
|
def host(app_host)
|
98
130
|
Capybara.app_host = app_host
|
99
131
|
end
|
data/lib/capy/version.rb
CHANGED
data/spec/capy_spec.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Capy do
|
4
|
+
before do
|
5
|
+
stub(Capy).start_shell.with_any_args
|
6
|
+
end
|
7
|
+
|
8
|
+
context '$ capy' do
|
9
|
+
it 'start shell' do
|
10
|
+
mock(Capy).start_shell.with_any_args
|
11
|
+
Capy.run([]).should == 0
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context '$ capy -h' do
|
16
|
+
it 'show help' do
|
17
|
+
Capy.run(%w(-h)).should == 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context '$ capy -b firefox' do
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
context '$ capy -a http://google.com/' do
|
26
|
+
it 'visit http://google.com/' do
|
27
|
+
any_instance_of(Capy::Evaluater) do |evaluater|
|
28
|
+
mock(evaluater).visit('http://google.com/')
|
29
|
+
end
|
30
|
+
mock(Capy).start_shell.with_any_args
|
31
|
+
Capy.run(%w(-a http://google.com/)).should == 0
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context '$ capy foo.capy' do
|
36
|
+
context 'file is exists' do
|
37
|
+
it 'eval script' do
|
38
|
+
file = File.expand_path('../fixtures/foo.capy', __FILE__)
|
39
|
+
script = File.read(file)
|
40
|
+
any_instance_of(Capy::Evaluater) do |evaluater|
|
41
|
+
mock(evaluater).eval_script(script, :capybara)
|
42
|
+
end
|
43
|
+
Capy.run([file]).should == 0
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'file is not exists' do
|
48
|
+
it 'does not eval script' do
|
49
|
+
any_instance_of(Capy::Evaluater) do |evaluater|
|
50
|
+
mock(evaluater).eval_script.with_any_args.never
|
51
|
+
end
|
52
|
+
Capy.run(%w(bar.capy)).should == 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context '$ capy foo.capy' do
|
58
|
+
it 'eval script and stop' do
|
59
|
+
file = File.expand_path('../fixtures/foo.capy', __FILE__)
|
60
|
+
any_instance_of(Capy::Evaluater) do |evaluater|
|
61
|
+
mock(evaluater).eval_script.with_any_args
|
62
|
+
end
|
63
|
+
mock(Capy).start_shell.with_any_args
|
64
|
+
Capy.run(['-s', file]).should == 0
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context '$ capy -j foo.js' do
|
69
|
+
it 'does not eval script' do
|
70
|
+
mock(Capy).eval_script_file.with_any_args.never
|
71
|
+
Capy.run(%w(-j foo.js)).should == 1
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context '$ capy -j foo.js' do
|
76
|
+
context 'file is exists' do
|
77
|
+
it 'eval script' do
|
78
|
+
file = File.expand_path('../fixtures/foo.js', __FILE__)
|
79
|
+
script = File.read(file)
|
80
|
+
any_instance_of(Capy::Evaluater) do |evaluater|
|
81
|
+
mock(evaluater).eval_script(script, :javascript)
|
82
|
+
end
|
83
|
+
Capy.run(['-j', file]).should == 0
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'file is not exists' do
|
88
|
+
it 'does not eval script' do
|
89
|
+
mock(Capy).eval_script_file.with_any_args.never
|
90
|
+
Capy.run(%w(bar.capy)).should == 1
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
visit 'http://example.com/'
|
@@ -0,0 +1 @@
|
|
1
|
+
alert('foo');
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-04-24 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: slop
|
16
|
-
requirement: &
|
16
|
+
requirement: &70160342289140 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70160342289140
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: capybara
|
27
|
-
requirement: &
|
27
|
+
requirement: &70160342288100 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70160342288100
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: colored
|
38
|
-
requirement: &
|
38
|
+
requirement: &70160342287140 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,29 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70160342287140
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &70160342286280 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70160342286280
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rr
|
60
|
+
requirement: &70160342281840 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70160342281840
|
47
69
|
description: Capybara Script Runner
|
48
70
|
email:
|
49
71
|
- jugyo.org@gmail.com
|
@@ -60,9 +82,14 @@ files:
|
|
60
82
|
- bin/capy
|
61
83
|
- capy.gemspec
|
62
84
|
- examples/google_search.capy
|
85
|
+
- examples/twitter.js
|
63
86
|
- examples/wikipedia_search.capy
|
64
87
|
- lib/capy.rb
|
65
88
|
- lib/capy/version.rb
|
89
|
+
- spec/capy_spec.rb
|
90
|
+
- spec/fixtures/foo.capy
|
91
|
+
- spec/fixtures/foo.js
|
92
|
+
- spec/spec_helper.rb
|
66
93
|
homepage: https://github.com/jugyo
|
67
94
|
licenses: []
|
68
95
|
post_install_message:
|
@@ -87,4 +114,8 @@ rubygems_version: 1.8.10
|
|
87
114
|
signing_key:
|
88
115
|
specification_version: 3
|
89
116
|
summary: The capy command to run the script written in Capybara DSL.
|
90
|
-
test_files:
|
117
|
+
test_files:
|
118
|
+
- spec/capy_spec.rb
|
119
|
+
- spec/fixtures/foo.capy
|
120
|
+
- spec/fixtures/foo.js
|
121
|
+
- spec/spec_helper.rb
|