percy-client 0.1.1 → 0.1.2

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: d0fe4c59629946c8db83a08b32bcd1f6d284dcb9
4
- data.tar.gz: 1b0788495c7a59eac1d6c7fa0b38c44509ce3760
3
+ metadata.gz: ac390ac562cecfd4bf1d32a46d95e9ec544f7eb3
4
+ data.tar.gz: 14920f3b71e0038f51dd6bb10c30af279e5631e6
5
5
  SHA512:
6
- metadata.gz: 58705c360df0b083edbdf5b4cb63307c06226c08a7648c944cfce7da4a983b2378f22d0e9a684b90f5355e213ef3ab169bd797a063048cb1ec65861955213fe1
7
- data.tar.gz: 66945b217e5b81e4a10d224ac2210466166597d187f4d35c44e9021f02e10f78f50c3935ab34c4e414eb66c9913b63d8985504fc37502adb9e7719031e11bcf4
6
+ metadata.gz: a4c7491bfa30fff592390a09c0d83dc23e621ab523fe71ef82b7b173dd7d4118b59e9aea942b8eb59aaedf45298f84516e13fb2355ce8d197a9d01856696426f
7
+ data.tar.gz: 23ab3e161e502438af1ae6bc4f4661c7fca4e46b6b060d0bf1c2b57d5481d5d0fb415237d8e59f7be05c9db52831d1d93ac9107af1f533ba38f22921088454f7
data/lib/percy.rb CHANGED
@@ -1,21 +1,20 @@
1
1
  require 'percy/client'
2
2
 
3
3
  module Percy
4
- class << self
5
- attr_accessor :access_token
4
+ def self.config
5
+ @config ||= Percy::Config.new
6
6
  end
7
7
 
8
- def self.options
9
- {
10
- access_token: access_token,
11
- }
8
+ def self.reset
9
+ @config = nil
10
+ @client = nil
12
11
  end
13
12
 
14
13
  # API client based on configured options.
15
14
  #
16
15
  # @return [Percy::Client] API client.
17
16
  def self.client
18
- @client = Percy::Client.new(options) unless defined?(@client)
17
+ @client = Percy::Client.new(config: config) if !defined?(@client) || !@client
19
18
  @client
20
19
  end
21
20
 
data/lib/percy/client.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'percy/config'
2
3
  require 'percy/client/connection'
3
4
  require 'percy/client/local_git'
4
5
  require 'percy/client/version'
@@ -23,25 +24,10 @@ module Percy
23
24
  end
24
25
  end
25
26
 
26
- API_BASE_URL = ENV['PERCY_API'] || 'https://percy.io'
27
- API_VERSION = ENV['PERCY_API_VERSION'] || 'v1'
28
-
29
- attr_accessor :access_token
27
+ attr_reader :config
30
28
 
31
29
  def initialize(options = {})
32
- @access_token = options[:access_token] || ENV['PERCY_TOKEN']
33
- end
34
-
35
- def base_url
36
- API_BASE_URL
37
- end
38
-
39
- def base_path
40
- "/api/#{API_VERSION}"
41
- end
42
-
43
- def full_base
44
- "#{base_url}#{base_path}"
30
+ @config = options[:config] || Percy::Config.new
45
31
  end
46
32
  end
47
33
  end
@@ -19,11 +19,11 @@ module Percy
19
19
  },
20
20
  }
21
21
  }
22
- post("#{full_base}/repos/#{repo_slug}/builds/", data)
22
+ post("#{config.api_url}/repos/#{repo_slug}/builds/", data)
23
23
  end
24
24
 
25
25
  def finalize_build(build_id)
26
- post("#{full_base}/builds/#{build_id}/finalize", {})
26
+ post("#{config.api_url}/builds/#{build_id}/finalize", {})
27
27
  end
28
28
  end
29
29
  end
@@ -1,3 +1,4 @@
1
+ require 'uri'
1
2
  require 'faraday'
2
3
 
3
4
  module Percy
@@ -20,8 +21,10 @@ module Percy
20
21
 
21
22
  def connection
22
23
  return @connection if defined?(@connection)
24
+ parsed_uri = URI.parse(config.api_url)
25
+ base_url = "#{parsed_uri.scheme}://#{parsed_uri.host}:#{parsed_uri.port}"
23
26
  @connection = Faraday.new(url: base_url) do |faraday|
24
- faraday.request :token_auth, @access_token if @access_token
27
+ faraday.request :token_auth, config.access_token if config.access_token
25
28
 
26
29
  faraday.use Faraday::Adapter::HTTPClient
27
30
  faraday.use Percy::Client::Connection::FaradayNiceErrorMiddleware
@@ -47,7 +47,7 @@ module Percy
47
47
  },
48
48
  }
49
49
  begin
50
- post("#{full_base}/builds/#{build_id}/resources/", data)
50
+ post("#{config.api_url}/builds/#{build_id}/resources/", data)
51
51
  rescue Percy::Client::ClientError => e
52
52
  raise e if e.env.status != 409
53
53
  STDERR.puts "[percy] Warning: unnecessary resource reuploaded with SHA-256: #{sha}"
@@ -15,7 +15,7 @@ module Percy
15
15
  },
16
16
  },
17
17
  }
18
- post("#{full_base}/builds/#{build_id}/snapshots/", data)
18
+ post("#{config.api_url}/builds/#{build_id}/snapshots/", data)
19
19
  end
20
20
  end
21
21
  end
@@ -1,5 +1,5 @@
1
1
  module Percy
2
2
  class Client
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
5
5
  end
@@ -0,0 +1,28 @@
1
+ module Percy
2
+ class Config
3
+ # @!attribute [w] access_token
4
+ # @return [String] Percy repo access token.
5
+ # @!attribute api_url
6
+ # @return [String] Base URL for API requests. Default: https://percy.io/api/v1/
7
+
8
+ attr_accessor :access_token
9
+ attr_accessor :api_url
10
+
11
+ # List of configurable keys for {Percy::Client}
12
+ # @return [Array] Option keys.
13
+ def keys
14
+ @keys ||= [
15
+ :access_token,
16
+ :api_url,
17
+ ]
18
+ end
19
+
20
+ def access_token
21
+ @access_token ||= ENV['PERCY_TOKEN']
22
+ end
23
+
24
+ def api_url
25
+ @api_url ||= ENV['PERCY_API'] || 'https://percy.io/api/v1'
26
+ end
27
+ end
28
+ end
@@ -1,15 +1,15 @@
1
1
  RSpec.describe Percy::Client::Connection do
2
2
  describe '#get' do
3
- it 'performs a GET request to the base_url and parses response' do
4
- stub_request(:get, build_url('/test')).to_return(body: {foo: true}.to_json)
5
- data = Percy.client.get('/test')
3
+ it 'performs a GET request to the api_url and parses response' do
4
+ stub_request(:get, "#{Percy.config.api_url}/test").to_return(body: {foo: true}.to_json)
5
+ data = Percy.client.get("#{Percy.config.api_url}/test")
6
6
  expect(data).to eq({'foo' => true})
7
7
  end
8
8
  end
9
9
  describe '#post' do
10
- it 'performs a POST request to the base_url and parses response' do
11
- stub_request(:post, build_url('/test')).to_return(body: {foo: true}.to_json)
12
- data = Percy.client.post('/test', {})
10
+ it 'performs a POST request to the api_url and parses response' do
11
+ stub_request(:post, "#{Percy.config.api_url}/test").to_return(body: {foo: true}.to_json)
12
+ data = Percy.client.post("#{Percy.config.api_url}/test", {})
13
13
  expect(data).to eq({'foo' => true})
14
14
  end
15
15
  end
@@ -1,17 +1,9 @@
1
1
  RSpec.describe Percy::Client do
2
- describe '#base_url' do
3
- it 'returns the base API URL' do
4
- expect(Percy.client.base_url).to eq('http://localhost:3000')
5
- end
6
- end
7
- describe '#base_path' do
8
- it 'returns the base API URL path' do
9
- expect(Percy.client.base_path).to eq('/api/v1')
10
- end
11
- end
12
- describe '#full_base' do
13
- it 'returns the full base API URL path' do
14
- expect(Percy.client.full_base).to eq('http://localhost:3000/api/v1')
2
+ describe '#config' do
3
+ it 'returns the config object given when initialized' do
4
+ config = Percy::Config.new
5
+ client = Percy::Client.new(config: config)
6
+ expect(client.config).to eq(config)
15
7
  end
16
8
  end
17
9
  end
@@ -0,0 +1,21 @@
1
+ RSpec.describe Percy do
2
+ before(:each) { Percy.reset }
3
+ describe '#config' do
4
+ it 'returns a config object' do
5
+ expect(Percy.config.api_url).to eq('http://localhost:3000/api/v1')
6
+ end
7
+ end
8
+ describe '#client' do
9
+ it 'returns a Percy::Client that is passed the global config object by default' do
10
+ config = Percy.config
11
+ expect(Percy.client.config).to eq(config)
12
+ end
13
+ end
14
+ describe '#reset' do
15
+ it 'clears the main global config object' do
16
+ old_config = Percy.client.config
17
+ Percy.reset
18
+ expect(old_config).to_not eq(Percy.config)
19
+ end
20
+ end
21
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,10 @@
1
- ENV['PERCY_API'] = 'http://localhost:3000'
1
+ ENV['PERCY_API'] = 'http://localhost:3000/api/v1'
2
2
 
3
- require 'support/test_helpers'
4
3
  require 'support/vcr_setup'
5
4
  require 'webmock/rspec'
6
5
  require 'percy'
7
6
 
8
7
  RSpec.configure do |config|
9
- config.include TestHelpers
10
-
11
8
  config.expect_with :rspec do |expectations|
12
9
  # This option will default to `true` in RSpec 4.
13
10
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
@@ -18,7 +15,7 @@ RSpec.configure do |config|
18
15
  end
19
16
 
20
17
  config.disable_monkey_patching!
21
- config.warnings = true
18
+ # config.warnings = true
22
19
 
23
20
  # Run specs in random order to surface order dependencies. If you find an
24
21
  # order dependency and want to debug it, you can fix the order by providing
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-17 00:00:00.000000000 Z
11
+ date: 2015-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -131,6 +131,7 @@ files:
131
131
  - lib/percy/client/resources.rb
132
132
  - lib/percy/client/snapshots.rb
133
133
  - lib/percy/client/version.rb
134
+ - lib/percy/config.rb
134
135
  - percy-client.gemspec
135
136
  - spec/cassettes/Percy_Client_Builds/_create_build/creates_a_build.yml
136
137
  - spec/cassettes/Percy_Client_Builds/_finalize_build/finalizes_a_build.yml
@@ -143,8 +144,8 @@ files:
143
144
  - spec/lib/percy/client/resources_spec.rb
144
145
  - spec/lib/percy/client/snapshots_spec.rb
145
146
  - spec/lib/percy/client_spec.rb
147
+ - spec/lib/percy_spec.rb
146
148
  - spec/spec_helper.rb
147
- - spec/support/test_helpers.rb
148
149
  - spec/support/vcr_setup.rb
149
150
  homepage: ''
150
151
  licenses:
@@ -182,6 +183,6 @@ test_files:
182
183
  - spec/lib/percy/client/resources_spec.rb
183
184
  - spec/lib/percy/client/snapshots_spec.rb
184
185
  - spec/lib/percy/client_spec.rb
186
+ - spec/lib/percy_spec.rb
185
187
  - spec/spec_helper.rb
186
- - spec/support/test_helpers.rb
187
188
  - spec/support/vcr_setup.rb
@@ -1,7 +0,0 @@
1
- require 'percy'
2
-
3
- module TestHelpers
4
- def build_url(path)
5
- "#{Percy.client.base_url}#{path}"
6
- end
7
- end