percy-cli 1.2.8 → 1.2.9

Sign up to get free protection for your applications and to get access to all the features.
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