viagogo-client 0.0.1.pre
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 +7 -0
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/viagogo-client.rb +1 -0
- data/lib/viagogo.rb +3 -0
- data/lib/viagogo/category.rb +21 -0
- data/lib/viagogo/client.rb +105 -0
- data/lib/viagogo/connection.rb +43 -0
- data/lib/viagogo/country.rb +16 -0
- data/lib/viagogo/error.rb +25 -0
- data/lib/viagogo/event.rb +31 -0
- data/lib/viagogo/geography.rb +16 -0
- data/lib/viagogo/link.rb +16 -0
- data/lib/viagogo/listing.rb +28 -0
- data/lib/viagogo/metro_area.rb +17 -0
- data/lib/viagogo/page.rb +74 -0
- data/lib/viagogo/public/api/categories.rb +45 -0
- data/lib/viagogo/public/api/countries.rb +29 -0
- data/lib/viagogo/public/api/events.rb +61 -0
- data/lib/viagogo/public/api/geographies.rb +29 -0
- data/lib/viagogo/public/api/listings.rb +29 -0
- data/lib/viagogo/public/api/metro_areas.rb +29 -0
- data/lib/viagogo/public/api/venues.rb +29 -0
- data/lib/viagogo/public/client.rb +27 -0
- data/lib/viagogo/public/oauth.rb +25 -0
- data/lib/viagogo/resource.rb +14 -0
- data/lib/viagogo/response/follow_redirects.rb +17 -0
- data/lib/viagogo/response/raise_error.rb +36 -0
- data/lib/viagogo/site_url.rb +15 -0
- data/lib/viagogo/token.rb +17 -0
- data/lib/viagogo/utils.rb +12 -0
- data/lib/viagogo/venue.rb +24 -0
- data/lib/viagogo/version.rb +3 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/viagogo/client_spec.rb +224 -0
- data/spec/viagogo/public/api/categories_spec.rb +96 -0
- data/spec/viagogo/public/api/countries_spec.rb +54 -0
- data/spec/viagogo/public/api/events_spec.rb +138 -0
- data/spec/viagogo/public/api/geographies_spec.rb +54 -0
- data/spec/viagogo/public/api/listings_spec.rb +54 -0
- data/spec/viagogo/public/api/metro_areas_spec.rb +54 -0
- data/spec/viagogo/public/api/venues_spec.rb +54 -0
- data/spec/viagogo/public/client_spec.rb +5 -0
- data/spec/viagogo/public/oauth_spec.rb +83 -0
- data/spec/viagogo/response/follow_redirects_spec.rb +30 -0
- data/spec/viagogo/response/raise_error_spec.rb +79 -0
- data/spec/viagogo/version_spec.rb +10 -0
- data/viagogo.gemspec +32 -0
- metadata +248 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'viagogo/category'
|
2
|
+
require 'viagogo/page'
|
3
|
+
require 'viagogo/utils'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
module Public
|
7
|
+
module API
|
8
|
+
module Categories
|
9
|
+
include Viagogo::Utils
|
10
|
+
|
11
|
+
def category(id, params={})
|
12
|
+
object_from_response(Viagogo::Category,
|
13
|
+
Viagogo::CategoryRepresenter,
|
14
|
+
:get,
|
15
|
+
"/Public/Category/#{id}",
|
16
|
+
params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def categories_top(country_code, params={})
|
20
|
+
object_from_response(Viagogo::Page,
|
21
|
+
Viagogo::CategoryPageRepresenter,
|
22
|
+
:get,
|
23
|
+
"/Public/Category/#{country_code}/Top",
|
24
|
+
params)
|
25
|
+
end
|
26
|
+
|
27
|
+
def categories_parents(country_code, id, params={})
|
28
|
+
object_from_response(Viagogo::Page,
|
29
|
+
Viagogo::CategoryPageRepresenter,
|
30
|
+
:get,
|
31
|
+
"/Public/Category/#{country_code}/Parents/#{id}",
|
32
|
+
params)
|
33
|
+
end
|
34
|
+
|
35
|
+
def categories_children(country_code, id, params={})
|
36
|
+
object_from_response(Viagogo::Page,
|
37
|
+
Viagogo::CategoryPageRepresenter,
|
38
|
+
:get,
|
39
|
+
"/Public/Category/#{country_code}/Children/#{id}",
|
40
|
+
params)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'viagogo/country'
|
2
|
+
require 'viagogo/page'
|
3
|
+
require 'viagogo/utils'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
module Public
|
7
|
+
module API
|
8
|
+
module Countries
|
9
|
+
include Viagogo::Utils
|
10
|
+
|
11
|
+
def country(code, params={})
|
12
|
+
object_from_response(Viagogo::Country,
|
13
|
+
Viagogo::CountryRepresenter,
|
14
|
+
:get,
|
15
|
+
"/Public/Country/#{code}",
|
16
|
+
params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def countries(params={})
|
20
|
+
object_from_response(Viagogo::Page,
|
21
|
+
Viagogo::CountryPageRepresenter,
|
22
|
+
:get,
|
23
|
+
"/Public/Country/All",
|
24
|
+
params)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'viagogo/event'
|
2
|
+
require 'viagogo/page'
|
3
|
+
require 'viagogo/utils'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
module Public
|
7
|
+
module API
|
8
|
+
module Events
|
9
|
+
include Viagogo::Utils
|
10
|
+
|
11
|
+
def event(id, params={})
|
12
|
+
object_from_response(Viagogo::Event,
|
13
|
+
Viagogo::EventRepresenter,
|
14
|
+
:get,
|
15
|
+
"/Public/Event/#{id}",
|
16
|
+
params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def events_by_category(category_id, params={})
|
20
|
+
object_from_response(Viagogo::Page,
|
21
|
+
Viagogo::EventPageRepresenter,
|
22
|
+
:get,
|
23
|
+
"/Public/Event/ByCategory/#{category_id}",
|
24
|
+
params)
|
25
|
+
end
|
26
|
+
|
27
|
+
def events_by_metro_area(metro_area_id, params={})
|
28
|
+
object_from_response(Viagogo::Page,
|
29
|
+
Viagogo::EventPageRepresenter,
|
30
|
+
:get,
|
31
|
+
"/Public/Event/ByMetroArea/#{metro_area_id}",
|
32
|
+
params)
|
33
|
+
end
|
34
|
+
|
35
|
+
def events_by_venue(venue_id, params={})
|
36
|
+
object_from_response(Viagogo::Page,
|
37
|
+
Viagogo::EventPageRepresenter,
|
38
|
+
:get,
|
39
|
+
"/Public/Event/ByVenue/#{venue_id}",
|
40
|
+
params)
|
41
|
+
end
|
42
|
+
|
43
|
+
def events_by_utc_start_date(year, month, day, params={})
|
44
|
+
object_from_response(Viagogo::Page,
|
45
|
+
Viagogo::EventPageRepresenter,
|
46
|
+
:get,
|
47
|
+
"/Public/Event/ByUtcStartDate/#{year}/#{month}/#{day}",
|
48
|
+
params)
|
49
|
+
end
|
50
|
+
|
51
|
+
def events_search(query, params={})
|
52
|
+
object_from_response(Viagogo::Page,
|
53
|
+
Viagogo::EventPageRepresenter,
|
54
|
+
:get,
|
55
|
+
"/Public/Event/Search",
|
56
|
+
params.merge(:searchText => query))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'viagogo/geography'
|
2
|
+
require 'viagogo/page'
|
3
|
+
require 'viagogo/utils'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
module Public
|
7
|
+
module API
|
8
|
+
module Geographies
|
9
|
+
include Viagogo::Utils
|
10
|
+
|
11
|
+
def geography(id, params={})
|
12
|
+
object_from_response(Viagogo::Geography,
|
13
|
+
Viagogo::GeographyRepresenter,
|
14
|
+
:get,
|
15
|
+
"/Public/Geography/#{id}",
|
16
|
+
params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def geographies(params={})
|
20
|
+
object_from_response(Viagogo::Page,
|
21
|
+
Viagogo::GeographyPageRepresenter,
|
22
|
+
:get,
|
23
|
+
"/Public/Geography/All",
|
24
|
+
params)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'viagogo/listing'
|
2
|
+
require 'viagogo/page'
|
3
|
+
require 'viagogo/utils'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
module Public
|
7
|
+
module API
|
8
|
+
module Listings
|
9
|
+
include Viagogo::Utils
|
10
|
+
|
11
|
+
def listing(id, params={})
|
12
|
+
object_from_response(Viagogo::Listing,
|
13
|
+
Viagogo::ListingRepresenter,
|
14
|
+
:get,
|
15
|
+
"/Public/Listing/#{id}",
|
16
|
+
params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def listings_by_event(event_id, params={})
|
20
|
+
object_from_response(Viagogo::Page,
|
21
|
+
Viagogo::ListingPageRepresenter,
|
22
|
+
:get,
|
23
|
+
"/Public/Listing/ByEvent/#{event_id}",
|
24
|
+
params)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'viagogo/metro_area'
|
2
|
+
require 'viagogo/page'
|
3
|
+
require 'viagogo/utils'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
module Public
|
7
|
+
module API
|
8
|
+
module MetroAreas
|
9
|
+
include Viagogo::Utils
|
10
|
+
|
11
|
+
def metro_area(id, params={})
|
12
|
+
object_from_response(Viagogo::MetroArea,
|
13
|
+
Viagogo::MetroAreaRepresenter,
|
14
|
+
:get,
|
15
|
+
"/Public/MetroArea/#{id}",
|
16
|
+
params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def metro_areas(params={})
|
20
|
+
object_from_response(Viagogo::Page,
|
21
|
+
Viagogo::MetroAreaPageRepresenter,
|
22
|
+
:get,
|
23
|
+
"/Public/MetroArea/All",
|
24
|
+
params)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'viagogo/page'
|
2
|
+
require 'viagogo/utils'
|
3
|
+
require 'viagogo/venue'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
module Public
|
7
|
+
module API
|
8
|
+
module Venues
|
9
|
+
include Viagogo::Utils
|
10
|
+
|
11
|
+
def venue(id, params={})
|
12
|
+
object_from_response(Viagogo::Venue,
|
13
|
+
Viagogo::VenueRepresenter,
|
14
|
+
:get,
|
15
|
+
"/Public/Venue/#{id}",
|
16
|
+
params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def venues_by_metro_area(metro_area_id, params={})
|
20
|
+
object_from_response(Viagogo::Page,
|
21
|
+
Viagogo::VenuePageRepresenter,
|
22
|
+
:get,
|
23
|
+
"/Public/Venue/ByMetroArea/#{metro_area_id}",
|
24
|
+
params)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'viagogo/client'
|
2
|
+
require 'viagogo/public/api/categories'
|
3
|
+
require 'viagogo/public/api/countries'
|
4
|
+
require 'viagogo/public/api/events'
|
5
|
+
require 'viagogo/public/api/geographies'
|
6
|
+
require 'viagogo/public/api/listings'
|
7
|
+
require 'viagogo/public/api/metro_areas'
|
8
|
+
require 'viagogo/public/api/venues'
|
9
|
+
require 'viagogo/public/oauth'
|
10
|
+
|
11
|
+
module Viagogo
|
12
|
+
module Public
|
13
|
+
# Client for the viagogo API public service
|
14
|
+
#
|
15
|
+
# @see http://developer.viagogo.net/documentation/description-of-services/public-services
|
16
|
+
class Client < Viagogo::Client
|
17
|
+
include Viagogo::Public::API::Categories
|
18
|
+
include Viagogo::Public::API::Countries
|
19
|
+
include Viagogo::Public::API::Events
|
20
|
+
include Viagogo::Public::API::Geographies
|
21
|
+
include Viagogo::Public::API::Listings
|
22
|
+
include Viagogo::Public::API::MetroAreas
|
23
|
+
include Viagogo::Public::API::Venues
|
24
|
+
include Viagogo::Public::OAuth
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require 'viagogo/token'
|
3
|
+
|
4
|
+
module Viagogo
|
5
|
+
module Public
|
6
|
+
# OAuth authentication helper methods for [Viagogo::Public::Client]
|
7
|
+
module OAuth
|
8
|
+
def get_access_token(scope="API.Public")
|
9
|
+
response = get("/Public/SimpleOAuthAccessRequest",
|
10
|
+
{:scope => scope, :is_token_request => true})
|
11
|
+
|
12
|
+
utcNowTime = Time.now.utc
|
13
|
+
tokenAndSecret = CGI.parse(response[:body] || "")
|
14
|
+
Token.new do |token|
|
15
|
+
token.expiry_timestamp = utcNowTime + (24 * 60 * 60)
|
16
|
+
token.issue_timestamp = utcNowTime
|
17
|
+
token.oauth_token = tokenAndSecret["oauth_token"][0]
|
18
|
+
token.oauth_token_secret = tokenAndSecret["oauth_token_secret"][0]
|
19
|
+
token.scope = scope
|
20
|
+
token.type = "access token"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'representable/json'
|
3
|
+
require 'viagogo/link'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
class Resource < OpenStruct
|
7
|
+
end
|
8
|
+
|
9
|
+
module ResourceRepresenter
|
10
|
+
include Representable::JSON
|
11
|
+
|
12
|
+
property :link, as: :Link, extend: Viagogo::LinkRepresenter, class: Viagogo::Link
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'faraday_middleware'
|
2
|
+
|
3
|
+
module Viagogo
|
4
|
+
module Response
|
5
|
+
class FollowRedirects < FaradayMiddleware::FollowRedirects
|
6
|
+
AUTH_HEADER = 'Authorization'.freeze
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def update_env(env, request_body, response)
|
11
|
+
env[:request_headers].delete(AUTH_HEADER)
|
12
|
+
|
13
|
+
super(env, request_body, response)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'viagogo/error'
|
3
|
+
|
4
|
+
module Viagogo
|
5
|
+
module Response
|
6
|
+
class RaiseError < Faraday::Middleware
|
7
|
+
def initialize(app, options = {})
|
8
|
+
super(app)
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
@app.call(env).on_complete do |response|
|
14
|
+
case response[:status].to_i
|
15
|
+
when 400
|
16
|
+
raise Viagogo::BadRequestError, error_message_400(response)
|
17
|
+
when 401
|
18
|
+
raise Viagogo::UnauthorizedError, error_message_400(response)
|
19
|
+
when 403
|
20
|
+
raise Viagogo::ForbiddenError, error_message_400(response)
|
21
|
+
when 404
|
22
|
+
raise Viagogo::NotFoundError, error_message_400(response)
|
23
|
+
when 405
|
24
|
+
raise Viagogo::MethodNotAllowedError, error_message_400(response)
|
25
|
+
when 500
|
26
|
+
raise Viagogo::InternalServerError
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def error_message_400(response)
|
32
|
+
"#{response[:method].to_s.upcase} #{response[:url].to_s}: #{response[:status]}}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'representable/json'
|
3
|
+
require 'viagogo/resource'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
class SiteUrl < OpenStruct
|
7
|
+
end
|
8
|
+
|
9
|
+
module SiteUrlRepresenter
|
10
|
+
include Representable::JSON
|
11
|
+
|
12
|
+
property :country_code, as: :CountryCode
|
13
|
+
property :link, extend: Viagogo::ResourceRepresenter, class: Viagogo::Resource
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Viagogo
|
2
|
+
class Token
|
3
|
+
attr_accessor :expiry_timestamp,
|
4
|
+
:issue_timestamp,
|
5
|
+
:oauth_token,
|
6
|
+
:oauth_token_secret,
|
7
|
+
:scope,
|
8
|
+
:type
|
9
|
+
|
10
|
+
def initialize(options={})
|
11
|
+
options.each do |key, value|
|
12
|
+
send(:"#{key}=", value)
|
13
|
+
end
|
14
|
+
yield self if block_given?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Viagogo
|
2
|
+
module Utils
|
3
|
+
def object_from_response(klass,
|
4
|
+
klass_representer,
|
5
|
+
request_method,
|
6
|
+
path,
|
7
|
+
options = {})
|
8
|
+
response = send(request_method.to_sym, path, options)
|
9
|
+
response[:status] == 200 ? klass.new.extend(klass_representer).from_json(response[:body] || "") : nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'representable/json'
|
3
|
+
require 'viagogo/resource'
|
4
|
+
|
5
|
+
module Viagogo
|
6
|
+
class Venue < OpenStruct
|
7
|
+
end
|
8
|
+
|
9
|
+
module VenueRepresenter
|
10
|
+
include Representable::JSON
|
11
|
+
|
12
|
+
property :id, as: :Id
|
13
|
+
property :name, as: :Name
|
14
|
+
property :address_line_1, as: :AddressLine1
|
15
|
+
property :address_line_2, as: :AddressLine2
|
16
|
+
property :city, as: :City
|
17
|
+
property :state_province, as: :StateProvince
|
18
|
+
property :country_code, as: :CountryCode
|
19
|
+
property :postal_code, as: :PostalCode
|
20
|
+
property :metro_area, as: :MetroArea, extend: Viagogo::ResourceRepresenter, class: Viagogo::Resource
|
21
|
+
property :events, as: :Events, extend: Viagogo::ResourceRepresenter, class: Viagogo::Resource
|
22
|
+
property :time_zone_description, as: :TimeZoneDescription
|
23
|
+
end
|
24
|
+
end
|