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.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +1 -0
  7. data/lib/viagogo-client.rb +1 -0
  8. data/lib/viagogo.rb +3 -0
  9. data/lib/viagogo/category.rb +21 -0
  10. data/lib/viagogo/client.rb +105 -0
  11. data/lib/viagogo/connection.rb +43 -0
  12. data/lib/viagogo/country.rb +16 -0
  13. data/lib/viagogo/error.rb +25 -0
  14. data/lib/viagogo/event.rb +31 -0
  15. data/lib/viagogo/geography.rb +16 -0
  16. data/lib/viagogo/link.rb +16 -0
  17. data/lib/viagogo/listing.rb +28 -0
  18. data/lib/viagogo/metro_area.rb +17 -0
  19. data/lib/viagogo/page.rb +74 -0
  20. data/lib/viagogo/public/api/categories.rb +45 -0
  21. data/lib/viagogo/public/api/countries.rb +29 -0
  22. data/lib/viagogo/public/api/events.rb +61 -0
  23. data/lib/viagogo/public/api/geographies.rb +29 -0
  24. data/lib/viagogo/public/api/listings.rb +29 -0
  25. data/lib/viagogo/public/api/metro_areas.rb +29 -0
  26. data/lib/viagogo/public/api/venues.rb +29 -0
  27. data/lib/viagogo/public/client.rb +27 -0
  28. data/lib/viagogo/public/oauth.rb +25 -0
  29. data/lib/viagogo/resource.rb +14 -0
  30. data/lib/viagogo/response/follow_redirects.rb +17 -0
  31. data/lib/viagogo/response/raise_error.rb +36 -0
  32. data/lib/viagogo/site_url.rb +15 -0
  33. data/lib/viagogo/token.rb +17 -0
  34. data/lib/viagogo/utils.rb +12 -0
  35. data/lib/viagogo/venue.rb +24 -0
  36. data/lib/viagogo/version.rb +3 -0
  37. data/spec/spec_helper.rb +42 -0
  38. data/spec/viagogo/client_spec.rb +224 -0
  39. data/spec/viagogo/public/api/categories_spec.rb +96 -0
  40. data/spec/viagogo/public/api/countries_spec.rb +54 -0
  41. data/spec/viagogo/public/api/events_spec.rb +138 -0
  42. data/spec/viagogo/public/api/geographies_spec.rb +54 -0
  43. data/spec/viagogo/public/api/listings_spec.rb +54 -0
  44. data/spec/viagogo/public/api/metro_areas_spec.rb +54 -0
  45. data/spec/viagogo/public/api/venues_spec.rb +54 -0
  46. data/spec/viagogo/public/client_spec.rb +5 -0
  47. data/spec/viagogo/public/oauth_spec.rb +83 -0
  48. data/spec/viagogo/response/follow_redirects_spec.rb +30 -0
  49. data/spec/viagogo/response/raise_error_spec.rb +79 -0
  50. data/spec/viagogo/version_spec.rb +10 -0
  51. data/viagogo.gemspec +32 -0
  52. 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