ticketinghub 1.0.3 → 1.0.4

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: e97e21b1e188ecea18f1d9a4c5fe01ba83d02485
4
- data.tar.gz: 97e94ae9c677bf65785b40d8c7ad04620f393925
3
+ metadata.gz: 7f21a9e16f1bd59df8cbee7c6e932fc51158548b
4
+ data.tar.gz: 44d6029b5eb3ca276003259a78cb90ff9f1cde07
5
5
  SHA512:
6
- metadata.gz: 257a2d73b1c03a3cc78fb8a3d6fac0b3a9afb94401e294550c0c488ea5722b46b3d4ecd4a8e60dfbac9b8cf73f6b4c4f053339b00a0394d905be90084df1fc35
7
- data.tar.gz: 860b75d4b1a38f8cf167f22da7106e8bf5013c973058d04b8270cad148f9bb770298e30b20e3bac7ffa9ef3d5a2560b9975b55a5c7521d4f2bdf17dd6cc00db7
6
+ metadata.gz: 27abe8ac329b8365d4312088e1751bffbfb1d844310e84dadcee601d38ac9331187187d89ffe1cb529a1b1f1574595b34dfcb6f47fd9e0ca64f5b582c237bbdb
7
+ data.tar.gz: c14c25c3022ca477efd30430dd39aac59d380659a051bd7cecb31707fd1742910c09af00934284214b86f0d2f42cf75fd4b08b82e38952826180684587fe52be
@@ -8,72 +8,63 @@ module TicketingHub
8
8
 
9
9
  attr_accessor *Configuration::VALID_OPTIONS_KEYS
10
10
 
11
- def initialize options={}
11
+ def self.from_oauth_password(email, password)
12
+ token = TicketingHub.post 'oauth/token', { grant_type: 'password', username: email, password: password,
13
+ client_id: TicketingHub.client_id, client_secret: TicketingHub.client_secret }
14
+ new(access_token: token.access_token, refresh_token: token.refresh_token, expires_at: Time.now + token.expires_in)
15
+ end
16
+
17
+ def initialize(options={})
12
18
  options = TicketingHub.options.merge options
13
19
  Configuration::VALID_OPTIONS_KEYS.each do |key|
14
20
  send "#{key}=", options[key]
15
21
  end
16
22
  end
17
23
 
18
- def get_token code
19
- post('token', grant_type: 'code', client_id: client_id,
20
- client_secret: client_secret, code: code, endpoint: oauth_endpoint)['access_token']
21
- end
22
-
23
- def venue id=nil
24
- id ? get("venues/#{id}") : get('venue')
24
+ def venues
25
+ get 'venues'
25
26
  end
26
27
 
27
28
  def user
28
- get 'user'
29
+ get('user').first
29
30
  end
30
31
 
31
- def orders venue_id=nil
32
- venue_id ||= venue(venue_id).id
32
+ def orders(venue_id=nil)
33
33
  get "venues/#{venue_id}/orders"
34
34
  end
35
35
 
36
- def order order_id
37
- get "orders/#{_normalize_object_id order_id}"
36
+ def find_order(venue_id=nil, id)
37
+ get "venues/#{venue_id}/orders/#{id}"
38
38
  end
39
39
 
40
- def tiers date, time, venue_id=nil
41
- venue_id ||= venue(venue_id).id
42
- get "venues/#{venue_id}/tiers", { date: date, time: time }
40
+ def tiers(venue_id, date, time, options = {})
41
+ get "venues/#{venue_id}/tiers", options.merge({ date: date, time: time })
43
42
  end
44
43
 
45
- def seasons venue_id=nil
46
- venue_id ||= venue(venue_id).id
44
+ def seasons(venue_id)
47
45
  get "venues/#{venue_id}/seasons"
48
46
  end
49
47
 
50
- def customer_fields order_id, ticket_id=nil
51
- ticket_id.nil?? get("orders/#{_normalize_object_id order_id}/fields") :
52
- get("tickets/#{_normalize_object_id ticket_id}/fields")
48
+ def customer_fields(venue_id, order_id, ticket_id=nil)
49
+ ticket_id.nil?? get("venues/#{venue_id}/orders/#{order_id}/fields") :
50
+ get("venues/#{venue_id}/tickets/#{ticket_id}/fields")
53
51
  end
54
52
 
55
- def create_order order_attributes, venue_id=nil
56
- venue_id ||= venue(venue_id).id
57
- post "venues/#{venue_id}/orders", order_attributes
53
+ def create_order(venue_id, date, time, order_attributes = {})
54
+ post "venues/#{venue_id}/orders", order_attributes.merge(date: date, time: time)
58
55
  end
59
56
 
60
- def cancel_order order_id
61
- delete "orders/#{_normalize_object_id order_id}"
57
+ def cancel_order(venue_id, order_id)
58
+ delete "venues/#{venue_id}/orders/#{order_id}"
62
59
  end
63
60
 
64
- def update_order order_id, order_attributes
65
- patch "orders/#{_normalize_object_id order_id}", order_attributes
61
+ def update_order(venue_id, order_id, order_attributes)
62
+ patch "venues/#{venue_id}/orders/#{order_id}", order_attributes
66
63
  end
67
64
 
68
- def confirm_order order_id, order_attributes=nil
69
- update_order order_id, order_attributes if order_attributes
70
- post "orders/#{_normalize_object_id order_id}/confirm"
65
+ def confirm_order(venue_id, order_id, order_attributes = {})
66
+ update_order venue_id, order_id, order_attributes if order_attributes.any?
67
+ post "venues/#{venue_id}/orders/#{order_id}/confirm"
71
68
  end
72
-
73
- private
74
-
75
- def _normalize_object_id object_id
76
- (object_id.is_a?(Hash) ? object_id['id'] : object_id).to_i
77
- end
78
69
  end
79
70
  end
@@ -0,0 +1,37 @@
1
+ module TicketingHub
2
+ class Collection < Enumerator::Generator
3
+
4
+ attr_accessor :client, :path, :options
5
+
6
+ def initialize(client, path, options = {})
7
+ self.client = client
8
+ self.path = path
9
+ self.options = options
10
+
11
+ super() do |yielder|
12
+ response = client.request(:get, path, options)
13
+ if response.body.is_a?(Array)
14
+ response.body.each { |value| yielder << value }
15
+ else yielder << response.body end
16
+ while next_url = links(response)['next']
17
+ client.request(:get, next_url, options).body.each do |value|
18
+ yielder << value
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ def find(id, options = {})
25
+ client.request(:get, "#{path}/#{id}", options).body
26
+ end
27
+
28
+ def links(response)
29
+ links = ( response.headers["Link"] || "" ).split(', ').map do |link|
30
+ url, type = link.match(/<(.*?)>; rel="(\w+)"/).captures
31
+ [ type, url ]
32
+ end
33
+
34
+ Hash[*links.flatten]
35
+ end
36
+ end
37
+ end
@@ -7,23 +7,19 @@ module TicketingHub
7
7
  VALID_OPTIONS_KEYS = [
8
8
  :adapter,
9
9
  :faraday_config_block,
10
- :api_version,
11
10
  :api_endpoint,
12
- :oauth_endpoint,
13
11
  :client_id,
14
12
  :client_secret,
15
- :oauth_token,
13
+ :access_token,
14
+ :refresh_token,
15
+ :expires_at,
16
16
  :proxy,
17
17
  :user_agent,
18
- :request_host,
19
- :auto_traversal].freeze
18
+ :request_host].freeze
20
19
 
21
20
  DEFAULT_ADAPTER = Faraday.default_adapter
22
- DEFAULT_API_VERSION = 1
23
21
  DEFAULT_API_ENDPOINT = ENV['TH_API_ENDPOINT'] || 'https://api.ticketinghub.com/'
24
- DEFAULT_OAUTH_ENDPOINT = ENV['TH_OAUTH_ENDPOINT'] || 'https://www.ticketinghub.com/oauth/'
25
22
  DEFAULT_USER_AGENT = "TicketingHub Ruby Gem #{TicketingHub::VERSION}".freeze
26
- DEFAULT_AUTO_TRAVERSAL = false
27
23
 
28
24
  attr_accessor *VALID_OPTIONS_KEYS
29
25
 
@@ -51,16 +47,14 @@ module TicketingHub
51
47
 
52
48
  def reset
53
49
  self.adapter = DEFAULT_ADAPTER
54
- self.api_version = DEFAULT_API_VERSION
55
50
  self.api_endpoint = DEFAULT_API_ENDPOINT
56
- self.oauth_endpoint = DEFAULT_OAUTH_ENDPOINT
57
51
  self.client_id = nil
58
52
  self.client_secret = nil
59
- self.oauth_token = nil
53
+ self.access_token = nil
54
+ self.refresh_token = nil
60
55
  self.proxy = nil
61
56
  self.request_host = nil
62
57
  self.user_agent = DEFAULT_USER_AGENT
63
- self.auto_traversal = DEFAULT_AUTO_TRAVERSAL
64
58
  end
65
59
  end
66
60
  end
@@ -27,7 +27,7 @@ module TicketingHub
27
27
  private
28
28
 
29
29
  def connection options={}
30
- token = options.delete(:access_token) || options.delete(:oauth_token) || oauth_token
30
+ token = options.delete(:access_token) || access_token
31
31
 
32
32
  options = {
33
33
  authenticate: !token.nil?,
@@ -9,6 +9,21 @@ module TicketingHub
9
9
  def response_body
10
10
  @response[:body]
11
11
  end
12
+
13
+ private
14
+ def build_error_message
15
+ return nil if @response.nil?
16
+
17
+ message = if response_body
18
+ ": #{response_body[:error] || response_body[:error_message] || ''}"
19
+ else
20
+ ''
21
+ end
22
+ errors = unless message.empty?
23
+ response_body[:errors] ? ": #{response_body[:errors].map{|e|e[:error_message]}.join(', ')}" : ''
24
+ end
25
+ "#{@response[:method].to_s.upcase} #{@response[:url].to_s}: #{@response[:status]}#{message}#{errors}"
26
+ end
12
27
  end
13
28
 
14
29
  # Raised when TicketingHub returns a 400 HTTP status code
@@ -1,78 +1,53 @@
1
1
  require 'multi_json'
2
+ require_relative 'collection'
2
3
 
3
4
  module TicketingHub
4
5
  module Request
5
6
 
6
- def delete path, options={}
7
+ def delete(path, options={})
7
8
  request(:delete, path, options).body
8
9
  end
9
10
 
10
- def get path, options={}
11
- response = request(:get, path, options)
12
- body = response.body
13
-
14
- if auto_traversal && body.is_a?(Array)
15
- while next_url = links(response)['next']
16
- response = request(:get, next_url, options)
17
- body += response.body
18
- end
19
- end
20
-
21
- body
11
+ def get(path, options={})
12
+ TicketingHub::Collection.new self, path, options
22
13
  end
23
14
 
24
- def patch path, options={}
15
+ def patch(path, options={})
25
16
  request(:patch, path, options).body
26
17
  end
27
18
 
28
- def post path, options={}
19
+ def post(path, options={})
29
20
  request(:post, path, options).body
30
21
  end
31
22
 
32
- def put path, options={}
23
+ def put(path, options={})
33
24
  request(:put, path, options).body
34
25
  end
35
26
 
36
- private
37
-
38
- # Executes the request, checking if it was successful
39
- #
40
- # @return [Boolean] True on success, false otherwise
41
- def boolean_from_response(method, path, options={})
42
- request(method, path, options).status == 204
43
- rescue TicketingHub::NotFound
44
- false
45
- end
46
-
47
- def request(method, path, options={})
48
- force_urlencoded = options.delete(:force_urlencoded) || false
49
- url = options.delete(:endpoint) || api_endpoint
50
- conn_options = { force_urlencoded: force_urlencoded, url: url }
27
+ def request(method, path, options={})
28
+ force_urlencoded = options.delete(:force_urlencoded) || false
29
+ url = options.delete(:endpoint) || api_endpoint
30
+ conn_options = { force_urlencoded: force_urlencoded, url: url }
51
31
 
52
- connection(conn_options).send(method) do |request|
53
- case method
32
+ connection(conn_options).send(method) do |request|
33
+ case method
54
34
  when :get, :delete, :head
55
35
  request.url(path, options)
56
36
  when :patch, :post, :put
57
37
  request.path = path
58
- unless options.empty?
59
- request.body = force_urlencoded ? options : MultiJson.dump(options)
60
- end
61
- end
62
-
63
- if TicketingHub.request_host
64
- request.headers['Host'] = TicketingHub.request_host
65
- end
66
- end
67
- end
68
-
69
- def links(response)
70
- links = ( response.headers["Link"] || "" ).split(', ').map do |link|
71
- url, type = link.match(/<(.*?)>; rel="(\w+)"/).captures
72
- [ type, url ]
38
+ request.body = force_urlencoded ? options : MultiJson.dump(options) unless options.empty?
73
39
  end
74
-
75
- Hash[ *links.flatten ]
40
+ request.headers['Host'] = TicketingHub.request_host if TicketingHub.request_host
76
41
  end
42
+ rescue TicketingHub::Unauthorized => e
43
+ if refresh_token.present? && e.response_body == ' '
44
+ body = post '/oauth/token', { grant_type: 'refresh_token',
45
+ refresh_token: refresh_token, client_id: client_id, client_secret: client_secret }
46
+ self.refresh_token = body.refresh_token
47
+ self.access_token = body.access_token
48
+ self.expires_at = Time.now + body.expires_in.to_i
49
+ request(method, path, options)
50
+ else throw e end
77
51
  end
52
+ end
78
53
  end
@@ -1,3 +1,3 @@
1
1
  module TicketingHub
2
- VERSION = '1.0.3' unless defined?(TicketingHub::VERSION)
2
+ VERSION = '1.0.4' unless defined?(TicketingHub::VERSION)
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ticketinghub
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oliver Morgan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-07 00:00:00.000000000 Z
11
+ date: 2013-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -107,6 +107,7 @@ files:
107
107
  - Rakefile
108
108
  - ticketinghub.gemspec
109
109
  - lib/ticketing_hub/client.rb
110
+ - lib/ticketing_hub/collection.rb
110
111
  - lib/ticketing_hub/configuration.rb
111
112
  - lib/ticketing_hub/connection.rb
112
113
  - lib/ticketing_hub/error.rb