percy-cli 1.2.8 → 1.2.9

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: 6db66b9860cd6126388ee95fb61d4fe3467ed9af
4
- data.tar.gz: ca3ea469e64d7f93f71c5845bfb598e1fd8f20c9
3
+ metadata.gz: 64b4abeaf29cbbe7f5a90c445b034795fa4a3978
4
+ data.tar.gz: d65287197152cbf4d476408895a78b8d62ebcb2f
5
5
  SHA512:
6
- metadata.gz: 811bd7fc706dd7cce1cc5aee82b42fb17f094812210155419553c9998632267227cffb93049a515fc0a02675be9fcf631fbc50ea7efc325bd104810dc203d2e5
7
- data.tar.gz: c148eacd3898e0ab43d9aa9b5703d8b4b3c9336fbe1f48b83120fd1c90880a708dd3dcde04d15474f0b5e618d09c046ef22a006a648459dc6041c2ddbab5ec19
6
+ metadata.gz: c6f264c90ad78f351975f261ab98e68e4257e7277a0e9ea1e4637f5d3e2bfc29d8f3c5ee4ac797434b9c9a4f5f2736aa26df68983ef1e9479d7113649abcb4d9
7
+ data.tar.gz: faeceecd9a612cfeb66a8d88dc1573d4125c322260c54fa9254d809c9d005aa7b20508a5878582b5d72fee1dfd9bd9b88dc35b030f3e74aace1805cd0a74a64b
@@ -8,44 +8,66 @@ AllCops:
8
8
  - 'vendor/**/*'
9
9
  - '*.gemspec'
10
10
 
11
+ Layout/AlignParameters:
12
+ EnforcedStyle: with_fixed_indentation
13
+
14
+ Layout/CaseIndentation:
15
+ EnforcedStyle: end
16
+
17
+ Layout/IndentArray:
18
+ EnforcedStyle: consistent
19
+
20
+ Layout/MultilineMethodCallIndentation:
21
+ EnforcedStyle: indented
22
+
23
+ Layout/MultilineOperationIndentation:
24
+ EnforcedStyle: indented
25
+
26
+ Layout/SpaceInsideHashLiteralBraces:
27
+ EnforcedStyle: no_space
28
+
11
29
  Lint/EndAlignment:
12
30
  EnforcedStyleAlignWith: variable
13
31
 
14
- Metrics/LineLength:
15
- Max: 100
32
+ Lint/RescueException:
33
+ Exclude:
34
+ - 'lib/tasks/*.rake'
16
35
 
17
- Metrics/BlockLength:
18
- Enabled: false
36
+ Metrics/AbcSize:
37
+ Max: 100
19
38
 
20
- Style/AlignParameters:
21
- EnforcedStyle: with_fixed_indentation
39
+ Metrics/LineLength:
40
+ Max: 100
22
41
 
23
- Style/CaseIndentation:
24
- EnforcedStyle: end
42
+ Metrics/MethodLength:
43
+ Max: 80
25
44
 
26
45
  Style/Documentation:
27
46
  Enabled: false
28
47
 
29
- Style/DoubleNegation:
48
+ Metrics/ClassLength:
30
49
  Enabled: false
31
50
 
32
- Style/IndentArray:
33
- EnforcedStyle: consistent
51
+ Metrics/ModuleLength:
52
+ Enabled: false
34
53
 
35
- Style/MultilineMethodCallIndentation:
36
- EnforcedStyle: indented
54
+ Metrics/ParameterLists:
55
+ Enabled: false
37
56
 
38
- Style/MultilineOperationIndentation:
39
- EnforcedStyle: indented
57
+ Metrics/BlockLength:
58
+ Enabled: false
40
59
 
41
- # Disable Style/NumericLiterals so numbers don't need underscores
42
- Style/NumericLiterals:
60
+ Style/DoubleNegation:
43
61
  Enabled: false
44
62
 
45
63
  Style/FileName:
46
- Enabled: false
64
+ Exclude: ['Gemfile', 'Guardfile']
47
65
 
48
- Style/SymbolArray:
66
+ Style/FormatStringToken:
67
+ EnforcedStyle: template
68
+
69
+ # Disable Style/NumericLiterals so numbers don't need underscores
70
+ Style/NumericLiterals:
49
71
  Enabled: false
50
72
 
51
73
  Style/NumericPredicate:
@@ -57,9 +79,11 @@ Style/RedundantBegin:
57
79
  Style/RegexpLiteral:
58
80
  EnforcedStyle: slashes
59
81
  AllowInnerSlashes: true
82
+ Exclude:
83
+ - 'Guardfile'
60
84
 
61
- Style/SpaceInsideHashLiteralBraces:
62
- EnforcedStyle: no_space
85
+ Style/SymbolArray:
86
+ EnforcedStyle: brackets
63
87
 
64
88
  Style/TrailingCommaInArguments:
65
89
  EnforcedStyleForMultiline: consistent_comma
@@ -67,13 +91,23 @@ Style/TrailingCommaInArguments:
67
91
  Style/TrailingCommaInLiteral:
68
92
  EnforcedStyleForMultiline: consistent_comma
69
93
 
94
+ RSpec/DescribedClass:
95
+ EnforcedStyle: explicit
96
+
97
+ RSpec/ExampleLength:
98
+ Max: 15
99
+
100
+ RSpec/HookArgument:
101
+ EnforcedStyle: each
102
+
103
+ RSpec/ImplicitExpect:
104
+ EnforcedStyle: should
105
+
70
106
  RSpec/MessageSpies:
71
107
  EnforcedStyle: receive
72
108
 
73
109
  RSpec/NotToNot:
74
- Enabled: false
75
-
110
+ EnforcedStyle: to_not
76
111
 
77
- # Will be able to do this in >= v1.11
78
- # RSpec/DescribedClass:
79
- # EnforcedStyle: explicit
112
+ RSpec/VerifiedDoubles:
113
+ Enabled: false
data/Gemfile CHANGED
@@ -7,3 +7,7 @@ group :test do
7
7
  gem 'rubocop'
8
8
  gem 'rubocop-rspec'
9
9
  end
10
+
11
+ group :test, :development do
12
+ gem 'pry'
13
+ end
@@ -0,0 +1,17 @@
1
+ # Releasing
2
+
3
+ 1. Update version.rb file accordingly.
4
+ 1. Tag the release: `git tag vVERSION`
5
+ 1. Push changes: `git push --tags`
6
+ 1. Ensure tests have passed on that tag
7
+ 1. [Update the release notes](https://github.com/percy/percy-cli/releases) on GitHub
8
+ 1. Build and publish:
9
+
10
+ ```bash
11
+ bundle exec rake build
12
+ gem push pkg/percy-cli-X.XX.XX.gem
13
+ ```
14
+
15
+ * Announce the new release,
16
+ making sure to say "thank you" to the contributors
17
+ who helped shape this version!
@@ -1,12 +1,11 @@
1
1
  require 'commander'
2
2
  require 'percy'
3
3
  require 'percy/cli/version'
4
- require 'percy/cli/snapshot'
4
+ require 'percy/cli/snapshot_runner'
5
5
 
6
6
  module Percy
7
7
  class Cli
8
8
  include Commander::Methods
9
- include Percy::Cli::Snapshot
10
9
 
11
10
  DEFAULT_NUM_THREADS = 3
12
11
  MAX_NUM_THREADS = 10
@@ -76,12 +75,15 @@ module Percy
76
75
  options.widths = (options.widths || '').split(',')
77
76
 
78
77
  raise OptionParser::MissingArgument, 'root folder path is required' if args.empty?
78
+
79
79
  if args.length > 1
80
80
  raise OptionParser::MissingArgument, 'only a single root folder path can be given'
81
81
  end
82
+
82
83
  root_dir = args.first
83
84
 
84
- run_snapshot(root_dir, options.__hash__)
85
+ snapshot_runner = Percy::Cli::SnapshotRunner.new
86
+ snapshot_runner.run(root_dir, options.__hash__)
85
87
  end
86
88
  end
87
89
 
@@ -8,7 +8,9 @@ Thread::Pool.abort_on_exception = true
8
8
 
9
9
  module Percy
10
10
  class Cli
11
- module Snapshot
11
+ class SnapshotRunner
12
+ attr_reader :client
13
+
12
14
  # Static resource types that an HTML file might load and that we want to upload for rendering.
13
15
  STATIC_RESOURCE_EXTENSIONS = [
14
16
  '.css', '.js', '.jpg', '.jpeg', '.gif', '.ico', '.png', '.bmp', '.pict', '.tif', '.tiff',
@@ -18,7 +20,11 @@ module Percy
18
20
  DEFAULT_SNAPSHOTS_REGEX = /\.(html|htm)$/
19
21
  MAX_FILESIZE_BYTES = 15 * 1024**2 # 15 MB.
20
22
 
21
- def run_snapshot(root_dir, options = {})
23
+ def initialize
24
+ @client = Percy::Client.new(client_info: "percy-cli/#{VERSION}", environment_info: '')
25
+ end
26
+
27
+ def run(root_dir, options = {})
22
28
  repo = options[:repo] || Percy.config.repo
23
29
  root_dir = File.expand_path(File.absolute_path(root_dir))
24
30
  strip_prefix = File.expand_path(File.absolute_path(options[:strip_prefix] || root_dir))
@@ -33,10 +39,10 @@ module Percy
33
39
  base_resource_options = {strip_prefix: strip_prefix, baseurl: baseurl}
34
40
 
35
41
  # Find all the static files in the given root directory.
36
- root_paths = find_root_paths(root_dir, snapshots_regex: options[:snapshots_regex])
37
- resource_paths = find_resource_paths(root_dir, include_all: include_all)
38
- root_resources = list_resources(root_paths, base_resource_options.merge(is_root: true))
39
- build_resources = list_resources(resource_paths, base_resource_options)
42
+ root_paths = _find_root_paths(root_dir, snapshots_regex: options[:snapshots_regex])
43
+ resource_paths = _find_resource_paths(root_dir, include_all: include_all)
44
+ root_resources = _list_resources(root_paths, base_resource_options.merge(is_root: true))
45
+ build_resources = _list_resources(resource_paths, base_resource_options)
40
46
  all_resources = root_resources + build_resources
41
47
 
42
48
  if root_resources.empty?
@@ -48,57 +54,62 @@ module Percy
48
54
  Percy.logger.debug { "Found build resource: #{resource.resource_url}" }
49
55
  end
50
56
 
51
- build = rescue_connection_failures do
57
+ build = _rescue_connection_failures do
52
58
  say 'Creating build...'
53
- build = Percy.create_build(repo, resources: build_resources)
59
+
60
+ build = client.create_build(repo, resources: build_resources)
54
61
 
55
62
  say 'Uploading build resources...'
56
- upload_missing_resources(build, build, all_resources, num_threads: num_threads)
63
+ _upload_missing_resources(build, build, all_resources, num_threads: num_threads)
57
64
 
58
65
  build
59
66
  end
60
- return if failed?
67
+ return if _failed?
61
68
 
62
69
  # Upload a snapshot for every root resource, and associate the build_resources.
63
70
  output_lock = Mutex.new
64
71
  snapshot_thread_pool = Thread.pool(num_threads)
65
72
  total = snapshot_limit ? [root_resources.length, snapshot_limit].min : root_resources.length
73
+
66
74
  root_resources.each_with_index do |root_resource, i|
67
75
  break if snapshot_limit && i + 1 > snapshot_limit
76
+
68
77
  snapshot_thread_pool.process do
69
78
  output_lock.synchronize do
70
79
  say "Uploading snapshot (#{i + 1}/#{total}): #{root_resource.resource_url}"
71
80
  end
72
- rescue_connection_failures do
73
- snapshot = Percy.create_snapshot(
81
+
82
+ _rescue_connection_failures do
83
+ snapshot = client.create_snapshot(
74
84
  build['data']['id'],
75
85
  [root_resource],
76
86
  enable_javascript: enable_javascript,
77
87
  widths: widths,
78
88
  )
79
- upload_missing_resources(build, snapshot, all_resources, num_threads: num_threads)
80
- Percy.finalize_snapshot(snapshot['data']['id'])
89
+ _upload_missing_resources(build, snapshot, all_resources, num_threads: num_threads)
90
+ client.finalize_snapshot(snapshot['data']['id'])
81
91
  end
82
92
  end
83
93
  end
94
+
84
95
  snapshot_thread_pool.wait
85
96
  snapshot_thread_pool.shutdown
86
97
 
87
98
  # Finalize the build.
88
99
  say 'Finalizing build...'
89
- rescue_connection_failures { Percy.finalize_build(build['data']['id']) }
90
- return if failed?
100
+ _rescue_connection_failures { client.finalize_build(build['data']['id']) }
101
+
102
+ return if _failed?
103
+
91
104
  say 'Done! Percy is now processing, you can view the visual diffs here:'
92
105
  say build['data']['attributes']['web-url']
93
106
  end
94
107
 
95
- private
96
-
97
- def failed?
108
+ def _failed?
98
109
  !!@failed
99
110
  end
100
111
 
101
- def rescue_connection_failures
112
+ def _rescue_connection_failures
102
113
  raise ArgumentError, 'block is requried' unless block_given?
103
114
  begin
104
115
  yield
@@ -108,25 +119,22 @@ module Percy
108
119
  Percy::Client::ConflictError, # Rescue project disabled errors and others.
109
120
  Percy::Client::ConnectionFailed, # Rescue some networking errors.
110
121
  Percy::Client::TimeoutError => e
122
+
111
123
  Percy.logger.error(e)
112
124
  @failed = true
113
125
  nil
114
126
  end
115
127
  end
116
128
 
117
- def find_root_paths(dir_path, options = {})
118
- find_files(dir_path).select { |path| include_root_path?(path, options) }
129
+ def _find_root_paths(dir_path, options = {})
130
+ _find_files(dir_path).select { |path| _include_root_path?(path, options) }
119
131
  end
120
132
 
121
- def find_resource_paths(dir_path, options = {})
122
- find_files(dir_path).select { |path| include_resource_path?(path, options) }
133
+ def _find_resource_paths(dir_path, options = {})
134
+ _find_files(dir_path).select { |path| _include_resource_path?(path, options) }
123
135
  end
124
136
 
125
- def maybe_add_protocol(url)
126
- url[0..1] == '//' ? "http:#{url}" : url
127
- end
128
-
129
- def list_resources(paths, options = {})
137
+ def _list_resources(paths, options = {})
130
138
  strip_prefix = File.expand_path(options[:strip_prefix])
131
139
  baseurl = options[:baseurl]
132
140
  resources = []
@@ -147,9 +155,10 @@ module Percy
147
155
  end
148
156
 
149
157
  # Uploads missing resources either for a build or snapshot.
150
- def upload_missing_resources(build, obj, potential_resources, options = {})
158
+ def _upload_missing_resources(build, obj, potential_resources, options = {})
151
159
  # Upload the content for any missing resources.
152
160
  missing_resources = obj['data']['relationships']['missing-resources']['data']
161
+
153
162
  bar = Commander::UI::ProgressBar.new(
154
163
  missing_resources.length,
155
164
  title: 'Uploading resources...',
@@ -157,12 +166,15 @@ module Percy
157
166
  width: 20,
158
167
  complete_message: nil,
159
168
  )
169
+
160
170
  output_lock = Mutex.new
161
171
  uploader_thread_pool = Thread.pool(options[:num_threads] || 10)
172
+
162
173
  missing_resources.each do |missing_resource|
163
174
  uploader_thread_pool.process do
164
175
  missing_resource_sha = missing_resource['id']
165
176
  resource = potential_resources.find { |r| r.sha == missing_resource_sha }
177
+
166
178
  output_lock.synchronize do
167
179
  bar.increment resource_url: resource.resource_url
168
180
  end
@@ -171,34 +183,39 @@ module Percy
171
183
  # read from the filesystem.
172
184
  content = resource.content || File.read(resource.path.to_s)
173
185
 
174
- Percy.upload_resource(build['data']['id'], content)
186
+ client.upload_resource(build['data']['id'], content)
175
187
  end
176
188
  end
189
+
177
190
  uploader_thread_pool.wait
178
191
  uploader_thread_pool.shutdown
179
192
  end
180
193
 
181
194
  # A file find method that follows directory and file symlinks.
182
- def find_files(*paths)
195
+ def _find_files(*paths)
183
196
  paths.flatten!
184
197
  paths.map! { |p| Pathname.new(p) }
185
198
  files = paths.select(&:file?)
199
+
186
200
  (paths - files).each do |dir|
187
- files << find_files(dir.children)
201
+ files << _find_files(dir.children)
188
202
  end
203
+
189
204
  files.flatten.map(&:to_s)
190
205
  end
191
206
 
192
- def include_resource_path?(path, options)
207
+ def _include_resource_path?(path, options)
193
208
  # Skip git files.
194
209
  return false if path =~ /\/\.git\//
195
210
  return true if options[:include_all]
196
- Percy::Cli::STATIC_RESOURCE_EXTENSIONS.include?(File.extname(path))
211
+
212
+ STATIC_RESOURCE_EXTENSIONS.include?(File.extname(path))
197
213
  end
198
214
 
199
- def include_root_path?(path, options)
215
+ def _include_root_path?(path, options)
200
216
  # Skip git files.
201
217
  return false if path =~ /\/\.git\//
218
+
202
219
  # Skip files that don't match the snapshots_regex.
203
220
  snapshots_regex = options[:snapshots_regex] || DEFAULT_SNAPSHOTS_REGEX
204
221
  path.match(snapshots_regex)
@@ -1,5 +1,5 @@
1
1
  module Percy
2
2
  class Cli
3
- VERSION = '1.2.8'.freeze
3
+ VERSION = '1.2.9'.freeze
4
4
  end
5
5
  end
@@ -1,68 +1,83 @@
1
1
  require 'digest'
2
2
 
3
- RSpec.describe Percy::Cli::Snapshot do
3
+ RSpec.describe Percy::Cli::SnapshotRunner do
4
+ subject(:runner) { Percy::Cli::SnapshotRunner.new }
5
+
4
6
  let(:root_dir) { File.expand_path('../testdata/', __FILE__) }
5
7
 
6
8
  # Used for testing that paths are collapsed before use.r
7
9
  let(:root_dir_relative) { root_dir + '/../testdata' }
8
10
 
9
- describe '#run_snapshot' do
11
+ describe '#initialize' do
12
+ it 'passes client info down to the lower level Percy client' do
13
+ expect(runner.client.client_info).to eq("percy-cli/#{Percy::Cli::VERSION}")
14
+ end
15
+ end
16
+
17
+ describe '#run' do
10
18
  xit 'snapshots a root directory of static files' do
11
19
  # TODO(fotinakis): tests for the full flow.
12
20
  end
13
21
  end
14
- describe '#rescue_connection_failures' do
15
- let(:cli) { Percy::Cli.new }
16
22
 
23
+ describe '#rescue_connection_failures' do
17
24
  it 'returns block result on success' do
18
- result = cli.send(:rescue_connection_failures) do
19
- true
20
- end
21
- expect(result).to eq(true)
22
- expect(cli.send(:failed?)).to eq(false)
25
+ result = runner._rescue_connection_failures { true }
26
+
27
+ expect(result).to be true
28
+ expect(runner._failed?).to be false
23
29
  end
30
+
24
31
  it 'makes block safe from quota exceeded errors' do
25
- result = cli.send(:rescue_connection_failures) do
32
+ result = runner._rescue_connection_failures do
26
33
  raise Percy::Client::PaymentRequiredError.new(409, 'POST', '', '')
27
34
  end
28
- expect(result).to eq(nil)
29
- expect(cli.send(:failed?)).to eq(true)
35
+
36
+ expect(result).to be_nil
37
+ expect(runner._failed?).to be true
30
38
  end
39
+
31
40
  it 'makes block safe from server errors' do
32
- result = cli.send(:rescue_connection_failures) do
41
+ result = runner._rescue_connection_failures do
33
42
  raise Percy::Client::ServerError.new(502, 'POST', '', '')
34
43
  end
35
- expect(result).to eq(nil)
36
- expect(cli.send(:failed?)).to eq(true)
44
+
45
+ expect(result).to be_nil
46
+ expect(runner._failed?).to be true
37
47
  end
48
+
38
49
  it 'makes block safe from ConnectionFailed' do
39
- result = cli.send(:rescue_connection_failures) do
40
- raise Percy::Client::ConnectionFailed
41
- end
42
- expect(result).to eq(nil)
43
- expect(cli.send(:failed?)).to eq(true)
50
+ result = runner._rescue_connection_failures { raise Percy::Client::ConnectionFailed }
51
+
52
+ expect(result).to be_nil
53
+ expect(runner._failed?).to be true
44
54
  end
55
+
45
56
  it 'makes block safe from UnauthorizedError' do
46
- result = cli.send(:rescue_connection_failures) do
57
+ result = runner._rescue_connection_failures do
47
58
  raise Percy::Client::UnauthorizedError.new(401, 'GET', '', '')
48
59
  end
49
- expect(result).to eq(nil)
50
- expect(cli.send(:failed?)).to eq(true)
60
+
61
+ expect(result).to be_nil
62
+ expect(runner._failed?).to be true
51
63
  end
64
+
52
65
  it 'makes block safe from TimeoutError' do
53
- result = cli.send(:rescue_connection_failures) do
54
- raise Percy::Client::TimeoutError
55
- end
56
- expect(result).to eq(nil)
57
- expect(cli.send(:failed?)).to eq(true)
66
+ result = runner._rescue_connection_failures { raise Percy::Client::TimeoutError }
67
+
68
+ expect(result).to be_nil
69
+ expect(runner._failed?).to be true
58
70
  end
71
+
59
72
  it 'requires a block' do
60
- expect { cli.send(:rescue_connection_failures) }.to raise_error(ArgumentError)
73
+ expect { runner._rescue_connection_failures }.to raise_error(ArgumentError)
61
74
  end
62
75
  end
63
- describe '#find_root_paths' do
76
+
77
+ describe '#_find_root_paths' do
64
78
  it 'returns only the HTML files in the directory' do
65
- paths = Percy::Cli.new.send(:find_root_paths, root_dir)
79
+ paths = runner._find_root_paths root_dir
80
+
66
81
  expect(paths).to match_array(
67
82
  [
68
83
  File.join(root_dir, 'index.html'),
@@ -76,9 +91,11 @@ RSpec.describe Percy::Cli::Snapshot do
76
91
  )
77
92
  end
78
93
  end
79
- describe '#find_resource_paths' do
94
+
95
+ describe '#_find_resource_paths' do
80
96
  it 'returns only the related static files in the directory' do
81
- paths = Percy::Cli.new.send(:find_resource_paths, root_dir)
97
+ paths = runner._find_resource_paths root_dir
98
+
82
99
  expect(paths).to match_array(
83
100
  [
84
101
  File.join(root_dir, 'css/base.css'),
@@ -95,11 +112,12 @@ RSpec.describe Percy::Cli::Snapshot do
95
112
  )
96
113
  end
97
114
  end
98
- describe '#list_resources' do
115
+
116
+ describe '#_list_resources' do
99
117
  it 'returns resource objects' do
100
118
  paths = [File.join(root_dir, 'css/base.css')]
101
119
  options = {baseurl: '/', strip_prefix: root_dir}
102
- resources = Percy::Cli.new.send(:list_resources, paths, options)
120
+ resources = runner._list_resources paths, options
103
121
 
104
122
  expect(resources.length).to eq(1)
105
123
  expect(resources.first.sha).to eq(Digest::SHA256.hexdigest(File.read(paths.first)))
@@ -107,18 +125,20 @@ RSpec.describe Percy::Cli::Snapshot do
107
125
  expect(resources.first.content).to be_nil
108
126
  expect(resources.first.path).to eq(paths.first)
109
127
  end
128
+
110
129
  it 'correctly strips the prefix from resource_url' do
111
130
  paths = [File.join(root_dir, 'index.html')]
112
131
  options = {baseurl: '/', strip_prefix: root_dir_relative, is_root: true}
113
- resources = Percy::Cli.new.send(:list_resources, paths, options)
132
+ resources = runner._list_resources paths, options
114
133
 
115
134
  expect(resources.length).to eq(1)
116
135
  expect(resources.first.resource_url).to eq('/index.html')
117
136
  end
137
+
118
138
  it 'returns resource objects with is_root set if given' do
119
139
  paths = [File.join(root_dir, 'index.html')]
120
140
  options = {baseurl: '/', strip_prefix: root_dir, is_root: true}
121
- resources = Percy::Cli.new.send(:list_resources, paths, options)
141
+ resources = runner._list_resources paths, options
122
142
 
123
143
  expect(resources.length).to eq(1)
124
144
  expect(resources.first.resource_url).to eq('/index.html')
@@ -127,10 +147,11 @@ RSpec.describe Percy::Cli::Snapshot do
127
147
  expect(resources.first.content).to be_nil
128
148
  expect(resources.first.path).to eq(paths.first)
129
149
  end
150
+
130
151
  it 'encodes the resource_url' do
131
152
  paths = [File.join(root_dir, 'css/test with spaces.css')]
132
153
  options = {baseurl: '/', strip_prefix: root_dir}
133
- resources = Percy::Cli.new.send(:list_resources, paths, options)
154
+ resources = runner._list_resources paths, options
134
155
 
135
156
  expect(resources.length).to eq(1)
136
157
  expect(resources.first.resource_url).to eq('/css/test%20with%20spaces.css')
@@ -139,10 +160,11 @@ RSpec.describe Percy::Cli::Snapshot do
139
160
  expect(resources.first.content).to be_nil
140
161
  expect(resources.first.path).to eq(paths.first)
141
162
  end
163
+
142
164
  it 'prepends the baseurl if given' do
143
165
  paths = [File.join(root_dir, 'index.html')]
144
166
  options = {strip_prefix: root_dir, is_root: true, baseurl: '/test baseurl/'}
145
- resources = Percy::Cli.new.send(:list_resources, paths, options)
167
+ resources = runner._list_resources paths, options
146
168
 
147
169
  expect(resources.length).to eq(1)
148
170
  expect(resources.first.resource_url).to eq('/test%20baseurl/index.html')
@@ -152,6 +174,7 @@ RSpec.describe Percy::Cli::Snapshot do
152
174
  expect(resources.first.path).to eq(paths.first)
153
175
  end
154
176
  end
177
+
155
178
  describe '#upload_snapshot' do
156
179
  xit 'uploads the given resources to the build' do
157
180
  # TODO(fotinakis): tests for this.
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><html>Hello World!</html>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.8
4
+ version: 1.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-21 00:00:00.000000000 Z
11
+ date: 2017-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -124,24 +124,23 @@ files:
124
124
  - Gemfile
125
125
  - LICENSE
126
126
  - README.md
127
+ - RELEASING.md
127
128
  - Rakefile
128
129
  - bin/percy
129
130
  - lib/percy/cli.rb
130
- - lib/percy/cli/snapshot.rb
131
+ - lib/percy/cli/snapshot_runner.rb
131
132
  - lib/percy/cli/version.rb
132
133
  - percy-cli.gemspec
133
- - spec/percy/cli/snapshot_spec.rb
134
+ - spec/percy/cli/snapshot_runner_spec.rb
134
135
  - spec/percy/cli/testdata/css/base.css
135
136
  - spec/percy/cli/testdata/css/test with spaces.css
136
137
  - spec/percy/cli/testdata/css/unrelated-no-extension
137
138
  - spec/percy/cli/testdata/images/jellybeans-symlink.png
138
139
  - spec/percy/cli/testdata/images/jellybeans.png
139
140
  - spec/percy/cli/testdata/images/large-file-skipped.png
140
- - spec/percy/cli/testdata/images_symlink
141
141
  - spec/percy/cli/testdata/index.html
142
142
  - spec/percy/cli/testdata/subdir/test.html
143
143
  - spec/percy/cli/testdata/subdir/test_symlink.html
144
- - spec/percy/cli/testdata/subdir_symlink
145
144
  - spec/spec_helper.rb
146
145
  homepage: ''
147
146
  licenses:
@@ -163,21 +162,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
162
  version: '0'
164
163
  requirements: []
165
164
  rubyforge_project:
166
- rubygems_version: 2.6.12
165
+ rubygems_version: 2.4.5.2
167
166
  signing_key:
168
167
  specification_version: 4
169
168
  summary: Percy command-line interface
170
169
  test_files:
171
- - spec/percy/cli/snapshot_spec.rb
170
+ - spec/percy/cli/snapshot_runner_spec.rb
172
171
  - spec/percy/cli/testdata/css/base.css
173
172
  - spec/percy/cli/testdata/css/test with spaces.css
174
173
  - spec/percy/cli/testdata/css/unrelated-no-extension
175
174
  - spec/percy/cli/testdata/images/jellybeans-symlink.png
176
175
  - spec/percy/cli/testdata/images/jellybeans.png
177
176
  - spec/percy/cli/testdata/images/large-file-skipped.png
178
- - spec/percy/cli/testdata/images_symlink
179
177
  - spec/percy/cli/testdata/index.html
180
178
  - spec/percy/cli/testdata/subdir/test.html
181
179
  - spec/percy/cli/testdata/subdir/test_symlink.html
182
- - spec/percy/cli/testdata/subdir_symlink
183
180
  - spec/spec_helper.rb
@@ -1 +0,0 @@
1
- spec/percy/cli/testdata/images/jellybeans.png
@@ -1 +0,0 @@
1
- spec/percy/cli/testdata/images/
@@ -1 +0,0 @@
1
- spec/percy/cli/testdata/subdir/test.html
@@ -1 +0,0 @@
1
- spec/percy/cli/testdata/subdir