golden_silk 0.0.1 → 0.0.2.pumpkin
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 +4 -4
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/bin/golden_silk +6 -0
- data/golden_silk.gemspec +5 -1
- data/lib/golden_silk.rb +5 -4
- data/lib/golden_silk/result/diff.rb +27 -0
- data/lib/golden_silk/result/no_effect.rb +15 -0
- data/lib/golden_silk/spinner.rb +95 -0
- data/lib/golden_silk/step/click.rb +20 -0
- data/lib/golden_silk/step/visit.rb +19 -0
- data/lib/golden_silk/version.rb +1 -1
- metadata +65 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 837c3ae481ed052bf24042cdcf26a3bdfd77663e
|
4
|
+
data.tar.gz: b713946e8d511a9dd69c260d98f90b54e6f05515
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 208a5e692b053e186b3fbb2a6449a61d654cc2eb7c47a6152a39a1b7f9093ffa3d2e922caf5eec89c09bfbec6029e16c4728c058c5797ca29ebfae70a2d72786
|
7
|
+
data.tar.gz: fdda1169f15bf9cdc75ae3daafc74274cc2fc5c4b0148de1aa7b702273e3f9953c757a65026d759148b0e5130b2bd16e83f8f78709ba8b3df3f23f281231d460
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
golden_silk
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.1.5
|
data/bin/golden_silk
ADDED
data/golden_silk.gemspec
CHANGED
@@ -17,6 +17,10 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
+
spec.add_dependency "capybara", "~> 2.4.4"
|
21
|
+
spec.add_dependency "capybara-webkit", "~> 1.4.1"
|
22
|
+
spec.add_dependency "diffy"
|
23
|
+
|
20
24
|
spec.add_development_dependency "bundler", "~> 1.6"
|
21
|
-
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.4.2"
|
22
26
|
end
|
data/lib/golden_silk.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "golden_silk/version"
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
require "golden_silk/spinner"
|
3
|
+
require "golden_silk/result/diff"
|
4
|
+
require "golden_silk/result/no_effect"
|
5
|
+
require "golden_silk/step/click"
|
6
|
+
require "golden_silk/step/visit"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module GoldenSilk
|
2
|
+
module Result
|
3
|
+
class Diff
|
4
|
+
def initialize(options = {})
|
5
|
+
@steps = options[:steps]
|
6
|
+
@diff = options[:diff]
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_s
|
10
|
+
s = "Steps:\n"
|
11
|
+
s << @steps.join("\n") + "\n"
|
12
|
+
s << "Diff:\n"
|
13
|
+
in_diff = true
|
14
|
+
@diff.split("\n").each do |line|
|
15
|
+
if line.match(/^ /) && in_diff
|
16
|
+
in_diff = false
|
17
|
+
s << " ...\n"
|
18
|
+
elsif !line.match(/^ /)
|
19
|
+
in_diff = true
|
20
|
+
s << " " + line + "\n"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
s
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'capybara/dsl'
|
2
|
+
require 'capybara/webkit'
|
3
|
+
require 'diffy'
|
4
|
+
|
5
|
+
module GoldenSilk
|
6
|
+
class Spinner
|
7
|
+
include Capybara::DSL
|
8
|
+
|
9
|
+
# TODO: configurable depth
|
10
|
+
MAX_DEPTH = 3
|
11
|
+
|
12
|
+
# TODO: configurable capybara driver
|
13
|
+
Capybara.default_driver = :webkit
|
14
|
+
|
15
|
+
Diffy::Diff.default_format = :text
|
16
|
+
|
17
|
+
def initialize(root_url)
|
18
|
+
@root_url = root_url
|
19
|
+
# TODO: configurable click selector, take into account disabled states
|
20
|
+
@click_selector = 'button, .store-accessory'
|
21
|
+
@results = []
|
22
|
+
@queue = []
|
23
|
+
end
|
24
|
+
|
25
|
+
def run
|
26
|
+
# TODO: get host from root_url
|
27
|
+
page.driver.allow_url("0.0.0.0")
|
28
|
+
page.driver.block_unknown_urls
|
29
|
+
|
30
|
+
visit @root_url
|
31
|
+
# TODO: configurable wait time
|
32
|
+
sleep 2
|
33
|
+
all(@click_selector).each { |node|
|
34
|
+
@queue << [
|
35
|
+
Step::Visit.new(url: @root_url, on: self),
|
36
|
+
Step::Click.new(xpath: node.path, text: node.text, on: self)
|
37
|
+
]
|
38
|
+
}
|
39
|
+
stuff(@queue, @results)
|
40
|
+
|
41
|
+
@results.each do |result|
|
42
|
+
# TODO: quiet mode (or quiet by default and verbose mode)
|
43
|
+
puts "==============="
|
44
|
+
puts result
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
# TODO: better name, don't take queue/results as arguments
|
51
|
+
def stuff(queue, results)
|
52
|
+
if queue.empty?
|
53
|
+
puts "Queue is empty, we're done!"
|
54
|
+
return
|
55
|
+
end
|
56
|
+
|
57
|
+
current_action_set = queue.shift
|
58
|
+
depth = current_action_set.length
|
59
|
+
|
60
|
+
last_action = current_action_set.pop
|
61
|
+
|
62
|
+
current_action_set.each { |a| a.execute }
|
63
|
+
sleep 2
|
64
|
+
before_snapshot = html
|
65
|
+
last_action.execute
|
66
|
+
sleep 2
|
67
|
+
after_snapshot = html
|
68
|
+
diff = Diffy::Diff.new(before_snapshot, after_snapshot).to_s
|
69
|
+
|
70
|
+
if diff.empty?
|
71
|
+
puts "No change, adding to results but not queue."
|
72
|
+
results << Result::NoEffect.new(steps: current_action_set + [last_action])
|
73
|
+
else
|
74
|
+
puts "Change, adding to results."
|
75
|
+
results << Result::Diff.new(diff: diff, steps: current_action_set + [last_action])
|
76
|
+
|
77
|
+
if depth == MAX_DEPTH
|
78
|
+
puts "Hit max depth."
|
79
|
+
else
|
80
|
+
puts "Looking for more steps to take."
|
81
|
+
|
82
|
+
all(@click_selector).map { |node|
|
83
|
+
queue << current_action_set + [
|
84
|
+
last_action,
|
85
|
+
Step::Click.new(xpath: node.path, text: node.text, on: self)
|
86
|
+
]
|
87
|
+
}
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
puts "Recursing. Queue length: #{queue.length}, Results length: #{results.length}"
|
92
|
+
stuff(queue, results)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module GoldenSilk
|
2
|
+
module Step
|
3
|
+
class Click
|
4
|
+
def initialize(options = {})
|
5
|
+
@xpath = options[:xpath]
|
6
|
+
@text = options[:text]
|
7
|
+
@object = options[:on]
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute
|
11
|
+
puts "Following instructions to click #{@text}"
|
12
|
+
@object.find(:xpath, @xpath).click
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
"Click #{@text}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module GoldenSilk
|
2
|
+
module Step
|
3
|
+
class Visit
|
4
|
+
def initialize(options = {})
|
5
|
+
@url = options[:url]
|
6
|
+
@object = options[:on]
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute
|
10
|
+
puts "Visiting #{@url}"
|
11
|
+
@object.visit @url
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"visit '#{@url}'"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/golden_silk/version.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,108 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: golden_silk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2.pumpkin
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carol (Nichols || Goulding)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: capybara
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.4.4
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.4.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: capybara-webkit
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.4.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.4.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: diffy
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
13
55
|
- !ruby/object:Gem::Dependency
|
14
56
|
name: bundler
|
15
57
|
requirement: !ruby/object:Gem::Requirement
|
16
58
|
requirements:
|
17
|
-
- - ~>
|
59
|
+
- - "~>"
|
18
60
|
- !ruby/object:Gem::Version
|
19
61
|
version: '1.6'
|
20
62
|
type: :development
|
21
63
|
prerelease: false
|
22
64
|
version_requirements: !ruby/object:Gem::Requirement
|
23
65
|
requirements:
|
24
|
-
- - ~>
|
66
|
+
- - "~>"
|
25
67
|
- !ruby/object:Gem::Version
|
26
68
|
version: '1.6'
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: rake
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
30
72
|
requirements:
|
31
|
-
- -
|
73
|
+
- - "~>"
|
32
74
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
75
|
+
version: 10.4.2
|
34
76
|
type: :development
|
35
77
|
prerelease: false
|
36
78
|
version_requirements: !ruby/object:Gem::Requirement
|
37
79
|
requirements:
|
38
|
-
- -
|
80
|
+
- - "~>"
|
39
81
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
82
|
+
version: 10.4.2
|
41
83
|
description:
|
42
84
|
email:
|
43
85
|
- carol.nichols@gmail.com
|
44
|
-
executables:
|
86
|
+
executables:
|
87
|
+
- golden_silk
|
45
88
|
extensions: []
|
46
89
|
extra_rdoc_files: []
|
47
90
|
files:
|
48
|
-
- .gitignore
|
91
|
+
- ".gitignore"
|
92
|
+
- ".ruby-gemset"
|
93
|
+
- ".ruby-version"
|
49
94
|
- Gemfile
|
50
95
|
- LICENSE.txt
|
51
96
|
- README.md
|
52
97
|
- Rakefile
|
98
|
+
- bin/golden_silk
|
53
99
|
- golden_silk.gemspec
|
54
100
|
- lib/golden_silk.rb
|
101
|
+
- lib/golden_silk/result/diff.rb
|
102
|
+
- lib/golden_silk/result/no_effect.rb
|
103
|
+
- lib/golden_silk/spinner.rb
|
104
|
+
- lib/golden_silk/step/click.rb
|
105
|
+
- lib/golden_silk/step/visit.rb
|
55
106
|
- lib/golden_silk/version.rb
|
56
107
|
homepage: https://github.com/carols10cents/golden_silk
|
57
108
|
licenses:
|
@@ -63,17 +114,17 @@ require_paths:
|
|
63
114
|
- lib
|
64
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
65
116
|
requirements:
|
66
|
-
- -
|
117
|
+
- - ">="
|
67
118
|
- !ruby/object:Gem::Version
|
68
119
|
version: '0'
|
69
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
121
|
requirements:
|
71
|
-
- -
|
122
|
+
- - ">"
|
72
123
|
- !ruby/object:Gem::Version
|
73
|
-
version:
|
124
|
+
version: 1.3.1
|
74
125
|
requirements: []
|
75
126
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
127
|
+
rubygems_version: 2.4.3
|
77
128
|
signing_key:
|
78
129
|
specification_version: 4
|
79
130
|
summary: Crawl your site to generate golden master tests.
|