gogokit 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODI1MWRmMzc2N2UxNDc5MTAxODlkMTA2YmMwNjgwNzFkOWE4OTljNg==
4
+ OTEzMTlkMzNlMjczMTQ3OTgxYmVlNmUzODA1YTkzODEyYTk2MTdhZg==
5
5
  data.tar.gz: !binary |-
6
- ZDQ2MTdkMTFiN2Y2NzkzZThjMjY2NDcyMTNkMTU1YWJjZGVkYzM0Yw==
6
+ YTE1ZWRjOTViOTk5MDkyY2Q5YzAzN2JiNzk1ZTNmNWRlN2RkMjA1OQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NGY4MWI1N2QxOGQ0NDdhMTI4ZmQ0MzFjNGIyOTI3MGYxNGZmZTAxZTVmOTM0
10
- NWFkMGIxN2ZkY2IzNGMwNzViYmRmM2FiMDdkNzQ2Y2RlMzQ0N2YzMDBkNjU1
11
- MWYyMzk3N2ZlMDA2Mzk5ZTBhOTRkN2VkYTUwMDYzYjViMzk5NWQ=
9
+ MzM2ZGVkYzA0ZDRhNTNjYmM5ZjNhM2NiMjY2OGRlOTNlN2ZlZmY2MWMyMTI2
10
+ MzM2ZTQwODE0NTZhOTJiOTJjOTI0ZmM2N2VlMmJlYzg1MDIzM2M5OGQ2ZmJj
11
+ NDIxMDQ5ZjA5ODZmNzA0ZmU4NTFjOTY0YWFlMTllMjI4YmUzOGM=
12
12
  data.tar.gz: !binary |-
13
- MmZmMmE2MzdiMzQ5NzY3YWYxNGI1M2I1MTA3M2FhMzc1YTRkOGMyODRhNmZh
14
- M2JiOTQ2ZmEyY2I5MTk4MmUwMTdlMGI2NTBkYWJjYWU5ZTVjOTljMjY3ZWYx
15
- YzNiMjgyODU3NDkwM2JhYmRmYTEzNDUwODVlNGJmZmQyOWYxNjU=
13
+ ODJhY2NhMDU3MzNjNjVjMDY2ZjkyZWIxOTg4YmE1YmVhNzcyYzIxYjA1ODdl
14
+ OWRiZjAyYjBlNDZjZTMzY2YxZTY0ZmY0NzJkYWZmOTZkY2NiODdhMDc5YjYy
15
+ MDQ2MjM2OTNmZWU2NTliYjAzOTcyMDgzYzgwYzdkZGNmNDI5NWI=
data/README.md CHANGED
@@ -18,6 +18,7 @@
18
18
  [troubleshootwindows]: https://github.com/jnunemaker/httparty/wiki/Troubleshooting-on-Windows
19
19
  [submitanissue]: https://github.com/viagogo/gogokit.rb/issues
20
20
  [apidocsgettingstarted]: http://developer.viagogo.net/#getting-started
21
+ [rubysamples]: https://github.com/viagogo/gogokit.rb/tree/master/samples
21
22
 
22
23
 
23
24
  Ruby toolkit for working with the viagogo API. Our [developer site][apidocs]
@@ -37,7 +38,8 @@ Install via Ruby gems
37
38
 
38
39
  ## Usage
39
40
 
40
- See our [developer site][apidocsgettingstarted] for more examples.
41
+ See our [developer site][apidocsgettingstarted] and
42
+ [samples][rubysamples] for more examples.
41
43
 
42
44
  ```ruby
43
45
  require 'gogokit'
@@ -113,6 +115,15 @@ client.api_root_endpoint
113
115
  # => "http://sandbox.api.viagogo.net"
114
116
  ```
115
117
 
118
+ #### Sandbox Environment
119
+
120
+ ```ruby
121
+ # You can use the GogoKitConfiguration to switch between the sandbox and
122
+ # production environments. See http://developer.viagogo.net/#sandbox-environment
123
+ client = GogoKit::Client.new
124
+ client.api_environment = :sandbox
125
+ ```
126
+
116
127
  ## How to contribute
117
128
 
118
129
  All submissions are welcome. Fork the repository, read the rest of this README
@@ -64,6 +64,7 @@ module GogoKit
64
64
  yield self if block_given?
65
65
 
66
66
  validate_configuration_credentials!
67
+ validate_configuration_api_environment!
67
68
  validate_configuration_endpoints!
68
69
  end
69
70
 
@@ -8,6 +8,61 @@ module GogoKit
8
8
  module OAuth
9
9
  include GogoKit::Utils
10
10
 
11
+ # Gets the URL where applications can obtain a users consent to make API
12
+ # calls on their behalf.
13
+ # @see http://developer.viagogo.net/#user-login-authentication-flow
14
+ # @param [String] redirect_uri Application redirect URL where the
15
+ # authorization code is sent. This must match the URL registered for your
16
+ # application.
17
+ # @param [Array] scopes The scopes that specify the type of access that is
18
+ # needed.
19
+ # @param [String] state An opaque value used to maintain state between the
20
+ # authorize request and the callback.
21
+ def get_authorization_url(redirect_uri, scopes, state = nil)
22
+ scope_value = scopes.nil? ? '' : scopes.join('%20')
23
+ "#{authorization_endpoint}?client_id=#{client_id}&response_type=code&" \
24
+ "redirect_uri=#{redirect_uri}&scope=#{scope_value}&state=#{state}"
25
+ end
26
+
27
+ # Requests an access token that will provide access to user-specific data
28
+ # (sales, sellerlistings, webhooks, purchases, etc)
29
+ # @see http://developer.viagogo.net/#user-login-authentication-flow
30
+ # @param [String] code The authorization code that was sent to your
31
+ # applications return URL.
32
+ # @param [String] redirect_uri Application redirect URL where the
33
+ # authorization code is sent. This must match the URL registered for your
34
+ # application.
35
+ # @param [Array] scopes The scopes that specify the type of access that is
36
+ # needed.
37
+ def get_authorization_code_access_token(code,
38
+ redirect_uri,
39
+ scopes,
40
+ options = {})
41
+ scope_value = scopes.nil? ? '' : scopes.join(' ')
42
+ merged_options = options.merge(code: code,
43
+ redirect_uri: redirect_uri,
44
+ scope: scope_value)
45
+ get_access_token('authorization_code', merged_options)
46
+ end
47
+
48
+ # Get an OAuth access token for an application.
49
+ #
50
+ # @see http://developer.viagogo.net/#application-only-authentication-flow
51
+ # @param [Hash] options Token request information
52
+ # @return [GogoKit::OAuthToken] The OAuth token
53
+ def get_client_access_token(options = {})
54
+ get_access_token('client_credentials', options)
55
+ end
56
+
57
+ # Obtain additional access tokens in order to prolong access to a users
58
+ # data
59
+ # @param [GogoKit::OAuthToken] token The token to be refreshed.
60
+ def get_refresh_token(token, options = {})
61
+ merged_options = options.merge(refresh_token: token.refresh_token,
62
+ scope: token.scope)
63
+ get_access_token('refresh_token', merged_options)
64
+ end
65
+
11
66
  # Get an OAuth access token
12
67
  #
13
68
  # @see http://viagogo.github.io/developer.viagogo.net/#authentication
@@ -23,16 +78,6 @@ module GogoKit
23
78
  headers: token_request_headers)
24
79
  end
25
80
 
26
- # Get an OAuth access token for an application.
27
- #
28
- # @see
29
- # http://viagogo.github.io/developer.viagogo.net/#client-credentials-grant
30
- # @param [Hash] options Token request information
31
- # @return [GogoKit::OAuthToken] The OAuth token
32
- def get_client_access_token(options = {})
33
- get_access_token('client_credentials', options)
34
- end
35
-
36
81
  private
37
82
 
38
83
  def token_request_body(grant_type, options)
@@ -43,7 +88,7 @@ module GogoKit
43
88
 
44
89
  def token_request_headers
45
90
  credentials = "#{client_id}:#{client_secret}"
46
- basic_header_value = Base64.encode64(credentials).gsub("\n", '')
91
+ basic_header_value = Base64.encode64(credentials).delete("\n")
47
92
  {
48
93
  content_type: 'application/x-www-form-urlencoded',
49
94
  accept: 'application/json',
@@ -9,7 +9,8 @@ module GogoKit
9
9
  :client_secret,
10
10
  :access_token,
11
11
  :api_root_endpoint,
12
- :oauth_token_endpoint
12
+ :oauth_token_endpoint,
13
+ :authorization_endpoint
13
14
 
14
15
  # Reset configuration options to default values
15
16
  def reset!
@@ -19,6 +20,32 @@ module GogoKit
19
20
  self
20
21
  end
21
22
 
23
+ # Gets the current API environment in use
24
+ #
25
+ # @return [Symbol]
26
+ # @raise [GogoKit::Error::ConfigurationError] Error is raised when supplied
27
+ # environment is not :production or :sandbox.
28
+ def api_environment
29
+ @api_environment
30
+ end
31
+
32
+ # Sets the API environment to be used. Setting this value will configure the
33
+ # values for {GogoKit::Configuration#api_root_endpoint},
34
+ # {GogoKit::Configuration#oauth_token_endpoint} and
35
+ # {GogoKit::Configuration#authorization_endpoint}.
36
+ # See http://developer.viagogo.net/#sandbox-environment
37
+ def api_environment=(api_environment)
38
+ @api_environment = api_environment.to_sym
39
+ validate_configuration_api_environment!
40
+
41
+ self.api_root_endpoint =
42
+ GogoKit::Default::API_ROOT_ENDPOINTS[@api_environment]
43
+ self.oauth_token_endpoint =
44
+ GogoKit::Default::OAUTH_TOKEN_ENDPOINTS[@api_environment]
45
+ self.authorization_endpoint =
46
+ GogoKit::Default::AUTHORIZATION_ENDPOINTS[@api_environment]
47
+ end
48
+
22
49
  private
23
50
 
24
51
  def keys
@@ -26,8 +53,10 @@ module GogoKit
26
53
  :client_id,
27
54
  :client_secret,
28
55
  :access_token,
56
+ :api_environment,
29
57
  :api_root_endpoint,
30
- :oauth_token_endpoint
58
+ :oauth_token_endpoint,
59
+ :authorization_endpoint
31
60
  ]
32
61
  end
33
62
 
@@ -43,7 +72,8 @@ module GogoKit
43
72
  def endpoints
44
73
  {
45
74
  api_root_endpoint: api_root_endpoint,
46
- oauth_token_endpoint: oauth_token_endpoint
75
+ oauth_token_endpoint: oauth_token_endpoint,
76
+ authorization_endpoint: authorization_endpoint
47
77
  }
48
78
  end
49
79
 
@@ -55,9 +85,9 @@ module GogoKit
55
85
  def validate_configuration_credentials!
56
86
  credentials.each do |credential, value|
57
87
  next if value.nil? || value.is_a?(String) || value.is_a?(Symbol)
58
- fail(ConfigurationError,
59
- "Invalid #{credential} specified: #{value.inspect} must be a" \
60
- ' string or symbol.')
88
+ raise(ConfigurationError,
89
+ "Invalid #{credential} specified: #{value.inspect} must be a" \
90
+ ' string or symbol.')
61
91
  end
62
92
  end
63
93
 
@@ -65,10 +95,20 @@ module GogoKit
65
95
  endpoints.each do |endpoint, value|
66
96
  next if !value.nil? && value =~ /\A#{URI.regexp}\z/
67
97
 
68
- fail(ConfigurationError,
69
- "Invalid #{endpoint} specified: " \
70
- "#{value.inspect} must be a valid URL")
98
+ raise(ConfigurationError,
99
+ "Invalid #{endpoint} specified: " \
100
+ "#{value.inspect} must be a valid URL")
71
101
  end
72
102
  end
103
+
104
+ def validate_configuration_api_environment!
105
+ return if api_environment.nil? ||
106
+ api_environment == :production ||
107
+ api_environment == :sandbox
108
+
109
+ raise(ConfigurationError,
110
+ 'Invalid api_environment specified: ' \
111
+ "#{api_environment.inspect} must be :production or :sandbox")
112
+ end
73
113
  end
74
114
  end
@@ -6,7 +6,7 @@ module GogoKit
6
6
  module Connection
7
7
  private
8
8
 
9
- def connection_options # rubocop:disable Metrics/MethodLength
9
+ def connection_options # rubocop:disable Metrics/MethodLength
10
10
  @connection_options ||= {
11
11
  headers: {
12
12
  accept: 'application/hal+json',
@@ -1,11 +1,23 @@
1
1
  module GogoKit
2
2
  # Default configuration options for {GogoKit::Client}
3
3
  module Default
4
- # Default API root endpoint
5
- API_ROOT_ENDPOINT = 'https://api.viagogo.net/v2'.freeze
4
+ # Default API root endpoints
5
+ API_ROOT_ENDPOINTS = {
6
+ production: 'https://api.viagogo.net/v2'.freeze,
7
+ sandbox: 'https://sandbox.api.viagogo.net/v2'.freeze
8
+ }.freeze
6
9
 
7
- # Default OAuth token endpoint
8
- OAUTH_TOKEN_ENDPOINT = 'https://www.viagogo.com/secure/oauth2/token'.freeze
10
+ # Default OAuth token endpoints
11
+ OAUTH_TOKEN_ENDPOINTS = {
12
+ production: 'https://account.viagogo.com/oauth2/token'.freeze,
13
+ sandbox: 'https://sandbox.account.viagogo.com/oauth2/token'.freeze
14
+ }.freeze
15
+
16
+ # Default Authorize endpoints
17
+ AUTHORIZATION_ENDPOINTS = {
18
+ production: 'https://account.viagogo.com/authorize'.freeze,
19
+ sandbox: 'https://sandbox.account.viagogo.com/authorize'.freeze
20
+ }.freeze
9
21
 
10
22
  class << self
11
23
  def client_id
@@ -20,13 +32,24 @@ module GogoKit
20
32
  ENV['GOGOKIT_ACCESS_TOKEN']
21
33
  end
22
34
 
35
+ def api_environment
36
+ env_api_environment = ENV['GOGOKIT_API_ENVIRONMENT']
37
+ env_api_environment.nil? ? :production : env_api_environment.to_sym
38
+ end
39
+
23
40
  def api_root_endpoint
24
- ENV['GOGOKIT_API_ROOT_ENDPOINT'] || GogoKit::Default::API_ROOT_ENDPOINT
41
+ ENV['GOGOKIT_API_ROOT_ENDPOINT'] ||
42
+ GogoKit::Default::API_ROOT_ENDPOINTS[api_environment]
25
43
  end
26
44
 
27
45
  def oauth_token_endpoint
28
46
  ENV['GOGOKIT_OAUTH_TOKEN_ENDPOINT'] ||
29
- GogoKit::Default::OAUTH_TOKEN_ENDPOINT
47
+ GogoKit::Default::OAUTH_TOKEN_ENDPOINTS[api_environment]
48
+ end
49
+
50
+ def authorization_endpoint
51
+ ENV['GOGOKIT_AUTHORIZATION_ENDPOINT'] ||
52
+ GogoKit::Default::AUTHORIZATION_ENDPOINTS[api_environment]
30
53
  end
31
54
  end
32
55
  end
@@ -13,7 +13,7 @@ module GogoKit
13
13
  if response_env[:status].to_i >= 400
14
14
  api_error = GogoKit::ApiError.new
15
15
  api_error.response = response_env
16
- fail api_error, error_message(response_env)
16
+ raise api_error, error_message(response_env)
17
17
  end
18
18
  end
19
19
  end
@@ -5,13 +5,13 @@ module GogoKit
5
5
 
6
6
  # Current minor release.
7
7
  # @return [Integer]
8
- MINOR = 4
8
+ MINOR = 5
9
9
 
10
10
  # Current patch level.
11
11
  # @return [Integer]
12
- PATCH = 1
12
+ PATCH = 0
13
13
 
14
14
  # Full release version.
15
15
  # @return [String]
16
- VERSION = [MAJOR, MINOR, PATCH].join('.').freeze
16
+ VERSION = [MAJOR, MINOR, PATCH].join('.')
17
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gogokit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - viagogo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-09 00:00:00.000000000 Z
11
+ date: 2016-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday