ticket_network 0.0.3
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.
- data/lib/ticket_network.rb +43 -0
- data/lib/ticket_network/base.rb +158 -0
- data/lib/ticket_network/catalog/base.rb +7 -0
- data/lib/ticket_network/catalog/category.rb +38 -0
- data/lib/ticket_network/catalog/configuration.rb +45 -0
- data/lib/ticket_network/catalog/event.rb +63 -0
- data/lib/ticket_network/catalog/performance.rb +25 -0
- data/lib/ticket_network/catalog/performer.rb +30 -0
- data/lib/ticket_network/catalog/performer_rank.rb +29 -0
- data/lib/ticket_network/catalog/ticket.rb +97 -0
- data/lib/ticket_network/catalog/venue.rb +43 -0
- data/lib/ticket_network/checkout/address.rb +53 -0
- data/lib/ticket_network/checkout/address_type.rb +24 -0
- data/lib/ticket_network/checkout/base.rb +7 -0
- data/lib/ticket_network/checkout/credit_card.rb +46 -0
- data/lib/ticket_network/checkout/customer.rb +37 -0
- data/lib/ticket_network/checkout/order.rb +33 -0
- data/lib/ticket_network/checkout/phone_number.rb +41 -0
- data/lib/ticket_network/checkout/phone_number_type.rb +25 -0
- data/lib/ticket_network/format_helper.rb +30 -0
- data/lib/ticket_network/parse_helper.rb +27 -0
- metadata +129 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'active_support/core_ext'
|
2
|
+
require 'patron'
|
3
|
+
require 'sax-machine'
|
4
|
+
|
5
|
+
module TicketNetwork
|
6
|
+
ROOT = 'tnwebservices.ticketnetwork.com/TNWebService/v3.1'.freeze
|
7
|
+
CATALOG = "http://#{ROOT}/TNWebServiceStringInputs.asmx".freeze
|
8
|
+
CHECKOUT = "https://#{ROOT}/TNCheckoutWebServiceStringInputs.asmx".freeze
|
9
|
+
|
10
|
+
Error = Class.new(StandardError)
|
11
|
+
AuthorizationError = Class.new(Error)
|
12
|
+
ParameterError = Class.new(Error)
|
13
|
+
NetworkError = Class.new(Error)
|
14
|
+
|
15
|
+
mattr_accessor :client_id
|
16
|
+
|
17
|
+
autoload :Base, 'ticket_network/base'
|
18
|
+
autoload :FormatHelper, 'ticket_network/format_helper'
|
19
|
+
autoload :ParseHelper, 'ticket_network/parse_helper'
|
20
|
+
|
21
|
+
module Catalog
|
22
|
+
autoload :Base, 'ticket_network/catalog/base'
|
23
|
+
autoload :Category, 'ticket_network/catalog/category'
|
24
|
+
autoload :Configuration, 'ticket_network/catalog/configuration'
|
25
|
+
autoload :Event, 'ticket_network/catalog/event'
|
26
|
+
autoload :Performance, 'ticket_network/catalog/performance'
|
27
|
+
autoload :Performer, 'ticket_network/catalog/performer'
|
28
|
+
autoload :PerformerRank, 'ticket_network/catalog/performer_rank'
|
29
|
+
autoload :Ticket, 'ticket_network/catalog/ticket'
|
30
|
+
autoload :Venue, 'ticket_network/catalog/venue'
|
31
|
+
end
|
32
|
+
|
33
|
+
module Checkout
|
34
|
+
autoload :Address, 'ticket_network/checkout/address'
|
35
|
+
autoload :AddressType, 'ticket_network/checkout/address_type'
|
36
|
+
autoload :Base, 'ticket_network/checkout/base'
|
37
|
+
autoload :CreditCard, 'ticket_network/checkout/credit_card'
|
38
|
+
autoload :Customer, 'ticket_network/checkout/customer'
|
39
|
+
autoload :Order, 'ticket_network/checkout/order'
|
40
|
+
autoload :PhoneNumber, 'ticket_network/checkout/phone_number'
|
41
|
+
autoload :PhoneNumberType, 'ticket_network/checkout/phone_number_type'
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
module TicketNetwork
|
2
|
+
class Base
|
3
|
+
class Action
|
4
|
+
attr_reader :name, :operation, :method, :service, :parser, :parameters
|
5
|
+
|
6
|
+
def initialize(operation, options={}, &block)
|
7
|
+
@name = options[:as] || operation
|
8
|
+
@operation = (operation || options[:as]).to_s.camelcase.sub(/Id/, 'ID')
|
9
|
+
@method = options[:method]
|
10
|
+
@service = options[:service]
|
11
|
+
@parser = options[:parser]
|
12
|
+
@parameters = {}
|
13
|
+
|
14
|
+
options[:defaults].each { |defaults| instance_eval(&defaults) }
|
15
|
+
instance_eval(&block) if block_given?
|
16
|
+
end
|
17
|
+
|
18
|
+
# Adds a parameter that the web service accepts.
|
19
|
+
def parameter(name, options={})
|
20
|
+
@parameters[name] = options
|
21
|
+
end
|
22
|
+
|
23
|
+
def execute(*args)
|
24
|
+
parameters = args.first || {}
|
25
|
+
Request.new(self, parameters).perform
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Request
|
30
|
+
include TicketNetwork::FormatHelper
|
31
|
+
|
32
|
+
def initialize(action, parameters)
|
33
|
+
@action = action
|
34
|
+
@parameters = HashWithIndifferentAccess.new(parameters)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Executes the call to the web service.
|
38
|
+
def perform
|
39
|
+
uri = URI.parse(url)
|
40
|
+
|
41
|
+
session = Patron::Session.new
|
42
|
+
session.timeout = 60
|
43
|
+
session.base_url = "#{uri.scheme}://#{uri.host}:#{uri.port}/"
|
44
|
+
|
45
|
+
retries = 5
|
46
|
+
|
47
|
+
begin
|
48
|
+
response = case @action.method
|
49
|
+
when :get
|
50
|
+
session.get([uri.path, uri.query].compact.join('?'))
|
51
|
+
when :post
|
52
|
+
session.post(uri.path, uri.query)
|
53
|
+
end
|
54
|
+
rescue Patron::PartialFileError, Patron::ConnectionFailed, Patron::HostResolutionError, Patron::TimeoutError
|
55
|
+
if (retries -= 1) > 0
|
56
|
+
retry
|
57
|
+
else
|
58
|
+
puts $!.inspect
|
59
|
+
raise #NetworkError.new($!.to_s)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
case body = response.body
|
64
|
+
when /^Authorization error: IP ([\d\.]+)/
|
65
|
+
raise AuthorizationError, "Unauthorized IP (#{$1})"
|
66
|
+
when /must be SSL/
|
67
|
+
raise AuthorizationError, 'SSL Required'
|
68
|
+
when /^Missing parameter: (.*)\./
|
69
|
+
raise ParameterError, "Missing #{$1}"
|
70
|
+
when /^Parameter error: (.*): (.*)\./
|
71
|
+
raise ParameterError, "Invalid #{$1} (#{$2})"
|
72
|
+
when /\A(?!<\?xml)/
|
73
|
+
raise Error, body.split(/\./).first
|
74
|
+
else
|
75
|
+
@action.parser.parse(body) if body
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def endpoint(service)
|
80
|
+
case service
|
81
|
+
when :checkout then CHECKOUT
|
82
|
+
when :catalog then CATALOG
|
83
|
+
else raise Error.new("Unknown endpoint for service #{service}")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
private :endpoint
|
87
|
+
|
88
|
+
# Builds the base URL from the endpoint and operation. If the method is
|
89
|
+
# GET, the query values are appended.
|
90
|
+
def url
|
91
|
+
base_url = "#{endpoint(@action.service)}/#{@action.operation}"
|
92
|
+
base_url << "?#{query}" if @action.method == :get
|
93
|
+
base_url
|
94
|
+
end
|
95
|
+
private :url
|
96
|
+
|
97
|
+
# Builds the query string from the specified parameter values.
|
98
|
+
def query
|
99
|
+
@action.parameters.collect do |key, options|
|
100
|
+
value = @parameters[options[:as] || key]
|
101
|
+
value ||= options[:default] if options.include?(:default)
|
102
|
+
|
103
|
+
"#{format_query_key(key)}=#{format_query_value(value)}"
|
104
|
+
end.join('&')
|
105
|
+
end
|
106
|
+
private :query
|
107
|
+
end
|
108
|
+
|
109
|
+
class << self
|
110
|
+
# Sets or returns the service.
|
111
|
+
def service(service=nil)
|
112
|
+
unless service
|
113
|
+
read_inheritable_attribute(:service)
|
114
|
+
else
|
115
|
+
write_inheritable_attribute(:service, service)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# Sets or returns action defaults.
|
120
|
+
def defaults(&block)
|
121
|
+
unless block
|
122
|
+
read_inheritable_attribute(:defaults)
|
123
|
+
else
|
124
|
+
write_inheritable_array(:defaults, [block])
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Creates a new GET operation.
|
129
|
+
def get(operation, options={}, &block)
|
130
|
+
action(operation, options.merge(:method => :get), &block)
|
131
|
+
end
|
132
|
+
|
133
|
+
# Creates a new POST operation.
|
134
|
+
def post(operation, options={}, &block)
|
135
|
+
action(operation, options.merge(:method => :post), &block)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Creates a new operation.
|
139
|
+
def action(operation, options={}, &block)
|
140
|
+
options[:service] ||= service
|
141
|
+
options[:defaults] ||= defaults
|
142
|
+
options[:parser] ||= self::Parser
|
143
|
+
action = Action.new(operation, options, &block)
|
144
|
+
|
145
|
+
self.singleton_class.class_eval do
|
146
|
+
define_method(action.name) do |*args|
|
147
|
+
action.execute(*args)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
private :action
|
152
|
+
end
|
153
|
+
|
154
|
+
defaults do
|
155
|
+
parameter :website_config_id, :default => TicketNetwork.client_id
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module TicketNetwork::Catalog
|
2
|
+
class Category < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class Category
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :child_category_description, :as => :child_name
|
10
|
+
element :child_category_id, :as => :child_id
|
11
|
+
element :grandchild_category_description, :as => :grandchild_name
|
12
|
+
element :grandchild_category_id, :as => :grandchild_id
|
13
|
+
element :parent_category_description, :as => :parent_name
|
14
|
+
element :parent_category_id, :as => :parent_id
|
15
|
+
end
|
16
|
+
|
17
|
+
elements :category, :as => :categories, :class => Category
|
18
|
+
end
|
19
|
+
|
20
|
+
get :get_categories_master_list, :as => :fetch
|
21
|
+
|
22
|
+
class << self
|
23
|
+
def all(parameters={})
|
24
|
+
fetch(parameters).categories
|
25
|
+
end
|
26
|
+
|
27
|
+
def sanitize_name(name)
|
28
|
+
name = name.titleize
|
29
|
+
name.strip!
|
30
|
+
name.gsub!(/Div I A/, 'Div I-A')
|
31
|
+
name.gsub!(/Div I-Aa/, 'Div I-AA')
|
32
|
+
name.gsub!(/ And /, ' and ')
|
33
|
+
name
|
34
|
+
end
|
35
|
+
private :sanitize_name
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module TicketNetwork::Catalog
|
2
|
+
class Configuration < Base
|
3
|
+
MAP_ROOT = 'http://maps.seatics.com/'.freeze
|
4
|
+
|
5
|
+
class Parser
|
6
|
+
include ParseHelper
|
7
|
+
|
8
|
+
class Configuration
|
9
|
+
include ParseHelper
|
10
|
+
|
11
|
+
element :capacity
|
12
|
+
element :id
|
13
|
+
element :map_site
|
14
|
+
element :map_url
|
15
|
+
element :type_description, :as => :name
|
16
|
+
element :type_id, :as => :id
|
17
|
+
element :venue_id
|
18
|
+
end
|
19
|
+
|
20
|
+
elements :venue_configuration, :as => :venue_configurations, :class => Configuration
|
21
|
+
end
|
22
|
+
|
23
|
+
get :get_venue_configurations, :as => :fetch do
|
24
|
+
parameter :venue_id
|
25
|
+
end
|
26
|
+
|
27
|
+
class << self
|
28
|
+
def all(parameters={})
|
29
|
+
fetch(parameters).venue_configurations
|
30
|
+
end
|
31
|
+
|
32
|
+
def map_url(venue_configuration)
|
33
|
+
unless venue_configuration.map_url.blank?
|
34
|
+
map_site = venue_configuration.map_site || MAP_ROOT
|
35
|
+
map_url = "#{map_site}/#{URI.escape(venue_configuration.map_url)}"
|
36
|
+
map_url.gsub!('[', '%5B')
|
37
|
+
map_url.gsub!(']', '%5D')
|
38
|
+
uri = URI.parse(map_url)
|
39
|
+
uri.path.gsub!(/\/\//, '/')
|
40
|
+
uri.to_s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module TicketNetwork::Catalog
|
2
|
+
class Event < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class Event
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :child_category_id
|
10
|
+
element :city
|
11
|
+
element :clicks
|
12
|
+
element :date
|
13
|
+
element :display_date
|
14
|
+
element :grandchild_category_id
|
15
|
+
element :id
|
16
|
+
element :is_womens_event
|
17
|
+
element :map_url
|
18
|
+
element :name
|
19
|
+
element :parent_category_id
|
20
|
+
element :state_province
|
21
|
+
element :state_province_id
|
22
|
+
element :venue
|
23
|
+
element :venue_configuration_id
|
24
|
+
element :venue_id
|
25
|
+
end
|
26
|
+
|
27
|
+
elements :event, :as => :events, :class => Event
|
28
|
+
end
|
29
|
+
|
30
|
+
get :get_events, :as => :fetch do
|
31
|
+
parameter :begin_date
|
32
|
+
parameter :child_category_id
|
33
|
+
parameter :city_zip, :as => :locality_postal_code
|
34
|
+
parameter :end_date
|
35
|
+
parameter :event_date
|
36
|
+
parameter :event_id
|
37
|
+
parameter :event_name
|
38
|
+
parameter :grandchild_category_id
|
39
|
+
parameter :high_price
|
40
|
+
parameter :low_price
|
41
|
+
parameter :modification_date
|
42
|
+
parameter :near_zip, :as => :near_postal_code
|
43
|
+
parameter :no_performers
|
44
|
+
parameter :number_of_events, :as => :limit, :default => 100_000
|
45
|
+
parameter :only_mine
|
46
|
+
parameter :order_by_clause, :as => :order
|
47
|
+
parameter :parent_category_id
|
48
|
+
parameter :performer_id
|
49
|
+
parameter :performer_name
|
50
|
+
parameter :state_id
|
51
|
+
parameter :state_prov_desc, :as => :region
|
52
|
+
parameter :venue_id
|
53
|
+
parameter :venue_name
|
54
|
+
parameter :where_clause, :as => :where
|
55
|
+
end
|
56
|
+
|
57
|
+
class << self
|
58
|
+
def all(parameters={})
|
59
|
+
fetch(parameters).events
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module TicketNetwork::Catalog
|
2
|
+
class Performance < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class Performer
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :event_id
|
10
|
+
element :performer_id, :as => :id
|
11
|
+
element :performer_name, :as => :name
|
12
|
+
end
|
13
|
+
|
14
|
+
elements :event_performer, :as => :performers, :class => Performer
|
15
|
+
end
|
16
|
+
|
17
|
+
get :get_event_performers, :as => :fetch
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def all(parameters={})
|
21
|
+
fetch(parameters).performers
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module TicketNetwork::Catalog
|
2
|
+
class Performer < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class Performer
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :id
|
10
|
+
element :description, :as => :name
|
11
|
+
element :home_venue_id, :as => :venue_id
|
12
|
+
end
|
13
|
+
|
14
|
+
elements :performer, :as => :performers, :class => Performer
|
15
|
+
end
|
16
|
+
|
17
|
+
get :get_performer_by_category, :as => :fetch do
|
18
|
+
parameter :parent_category_id
|
19
|
+
parameter :child_category_id
|
20
|
+
parameter :grandchild_category_id
|
21
|
+
parameter :has_event, :default => false
|
22
|
+
end
|
23
|
+
|
24
|
+
class << self
|
25
|
+
def all(parameters={})
|
26
|
+
fetch(parameters).performers
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module TicketNetwork::Catalog
|
2
|
+
class PerformerRank < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class PerformerRank
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :id, :as => :performer_id
|
10
|
+
element :percent
|
11
|
+
end
|
12
|
+
|
13
|
+
elements :performer_percent, :as => :ranks, :class => PerformerRank
|
14
|
+
end
|
15
|
+
|
16
|
+
get :get_high_sales_performers, :as => :fetch do
|
17
|
+
parameter :child_category_id
|
18
|
+
parameter :grandchild_category_id
|
19
|
+
parameter :num_returned, :default => 50_000
|
20
|
+
parameter :parent_category_id
|
21
|
+
end
|
22
|
+
|
23
|
+
class << self
|
24
|
+
def all(parameters={})
|
25
|
+
fetch(parameters).ranks
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module TicketNetwork::Catalog
|
2
|
+
class Ticket < Base
|
3
|
+
PARKING_REGEX = /park/i.freeze
|
4
|
+
|
5
|
+
class Parser
|
6
|
+
include ParseHelper
|
7
|
+
|
8
|
+
class Ticket
|
9
|
+
class Split
|
10
|
+
include ParseHelper
|
11
|
+
|
12
|
+
elements :int, :as => :ints
|
13
|
+
end
|
14
|
+
|
15
|
+
include ParseHelper
|
16
|
+
|
17
|
+
element :actual_price
|
18
|
+
element :event_id
|
19
|
+
element :face_price
|
20
|
+
element :high_seat
|
21
|
+
element :id
|
22
|
+
element :is_mine
|
23
|
+
element :low_seat
|
24
|
+
element :marked
|
25
|
+
element :notes
|
26
|
+
element :parent_category_id
|
27
|
+
element :rating
|
28
|
+
element :rating_description
|
29
|
+
element :retail_price
|
30
|
+
element :row
|
31
|
+
element :section
|
32
|
+
element :ticket_quantity
|
33
|
+
element :wholesale_price
|
34
|
+
|
35
|
+
elements :valid_splits, :as => :splits, :class => Split
|
36
|
+
end
|
37
|
+
|
38
|
+
elements :ticket_group, :as => :tickets, :class => Ticket
|
39
|
+
end
|
40
|
+
|
41
|
+
get :get_tickets, :as => :fetch do
|
42
|
+
parameter :event_id
|
43
|
+
parameter :high_price
|
44
|
+
parameter :low_price
|
45
|
+
parameter :number_of_records, :as => :limit
|
46
|
+
parameter :order_by_clause, :as => :order
|
47
|
+
parameter :requested_tix_split, :as => :requested_split
|
48
|
+
parameter :ticket_group_id, :as => :ticket_id
|
49
|
+
parameter :where_clause, :as => :where
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
def all(parameters={})
|
54
|
+
fetch(parameters).tickets
|
55
|
+
end
|
56
|
+
|
57
|
+
def raw(parameters={})
|
58
|
+
all(parameters).collect do |ticket|
|
59
|
+
parking = parking?(ticket)
|
60
|
+
|
61
|
+
{
|
62
|
+
:ticket_network_id => ticket.id.to_i,
|
63
|
+
:price => ticket.actual_price.to_f,
|
64
|
+
:quantity => ticket.ticket_quantity.to_i,
|
65
|
+
:section => ticket.section.to_s.gsub(/\//, ' / '),
|
66
|
+
:row => ticket.row,
|
67
|
+
:notes => ticket.notes,
|
68
|
+
:splits => find_splits(ticket),
|
69
|
+
:general_admission => false,
|
70
|
+
:is_mine => ticket.is_mine == 'true',
|
71
|
+
:parking_pass => !!parking,
|
72
|
+
:lot => parking ? find_lot(ticket) : nil
|
73
|
+
}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def parking?(ticket)
|
78
|
+
ticket.section =~ PARKING_REGEX || ticket.row =~ PARKING_REGEX
|
79
|
+
end
|
80
|
+
private :parking?
|
81
|
+
|
82
|
+
def find_splits(ticket)
|
83
|
+
ticket.splits.first.ints.collect(&:to_i).sort
|
84
|
+
end
|
85
|
+
private :find_splits
|
86
|
+
|
87
|
+
def find_lot(parking_pass)
|
88
|
+
if !parking_pass.section.blank? && parking_pass.section !~ PARKING_REGEX
|
89
|
+
parking_pass.section
|
90
|
+
elsif !parking_pass.row.blank? && parking_pass.row !~ PARKING_REGEX
|
91
|
+
parking_pass.row
|
92
|
+
end
|
93
|
+
end
|
94
|
+
private :find_lot
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module TicketNetwork::Catalog
|
2
|
+
class Venue < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class Venue
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :box_office_phone
|
10
|
+
element :capacity
|
11
|
+
element :child_rules
|
12
|
+
element :city, :as => :locality
|
13
|
+
element :country, :as => :country_name
|
14
|
+
element :directions
|
15
|
+
element :id
|
16
|
+
element :name
|
17
|
+
element :notes
|
18
|
+
element :number_of_configurations
|
19
|
+
element :parking
|
20
|
+
element :public_transportation
|
21
|
+
element :rules
|
22
|
+
element :state_province, :as => :region
|
23
|
+
element :street1, :as => :street_address
|
24
|
+
element :street2, :as => :extended_address
|
25
|
+
element :url
|
26
|
+
element :will_call
|
27
|
+
element :zip_code, :as => :postal_code
|
28
|
+
end
|
29
|
+
|
30
|
+
elements :venue, :as => :venues, :class => Venue
|
31
|
+
end
|
32
|
+
|
33
|
+
get :get_venue, :as => :fetch do
|
34
|
+
parameter :venue_id
|
35
|
+
end
|
36
|
+
|
37
|
+
class << self
|
38
|
+
def all(parameters={})
|
39
|
+
fetch(parameters).venues
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module TicketNetwork::Checkout
|
2
|
+
class Address < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class Address
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :city, :as => :locality
|
10
|
+
element :contact_name, :as => :name
|
11
|
+
element :country_description, :as => :country
|
12
|
+
element :country_id
|
13
|
+
element :id
|
14
|
+
element :state_province, :as => :region
|
15
|
+
element :street1, :as => :street_address
|
16
|
+
element :street2, :as => :extended_address
|
17
|
+
element :type_description, :as => :type
|
18
|
+
element :type_id
|
19
|
+
element :zip_code, :as => :postal_code
|
20
|
+
end
|
21
|
+
|
22
|
+
elements :address, :as => :addresses, :class => Address
|
23
|
+
end
|
24
|
+
|
25
|
+
get :get_address, :as => :fetch do
|
26
|
+
parameter :address_id, :as => :id
|
27
|
+
parameter :customer_id
|
28
|
+
parameter :address_type_id, :as => :type_id
|
29
|
+
end
|
30
|
+
|
31
|
+
post :write_address, :as => :store, :parser => Parser::Address do
|
32
|
+
parameter :address_type_id, :as => :type_id
|
33
|
+
parameter :city, :as => :locality
|
34
|
+
parameter :contact_name, :as => :name
|
35
|
+
parameter :country
|
36
|
+
parameter :country_id
|
37
|
+
parameter :customer_id
|
38
|
+
parameter :state_prov_abbr, :as => :region
|
39
|
+
parameter :street1, :as => :street_address
|
40
|
+
parameter :street2, :as => :extended_address
|
41
|
+
parameter :zip_code, :as => :postal_code
|
42
|
+
end
|
43
|
+
|
44
|
+
class << self
|
45
|
+
def all(parameters={})
|
46
|
+
fetch(parameters).addresses
|
47
|
+
end
|
48
|
+
|
49
|
+
alias_method :create, :store
|
50
|
+
alias_method :update, :store
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module TicketNetwork::Checkout
|
2
|
+
class AddressType < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class AddressType
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :id
|
10
|
+
element :description, :as => :name
|
11
|
+
end
|
12
|
+
|
13
|
+
elements :address_type, :as => :address_types, :class => AddressType
|
14
|
+
end
|
15
|
+
|
16
|
+
get :get_address_types, :as => :fetch
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def all(parameters={})
|
20
|
+
fetch(parameters).address_types
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module TicketNetwork::Checkout
|
2
|
+
class CreditCard < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class CreditCard
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :expires_month, :as => :expiration_month
|
10
|
+
element :expires_year, :as => :expiration_year
|
11
|
+
element :id
|
12
|
+
element :masked_number
|
13
|
+
element :name_displayed, :as => :name
|
14
|
+
element :type_description
|
15
|
+
element :type_id
|
16
|
+
end
|
17
|
+
|
18
|
+
elements :credit_card, :as => :credit_cards
|
19
|
+
end
|
20
|
+
|
21
|
+
get :get_credit_card, :as => :fetch do
|
22
|
+
parameter :credit_card_id
|
23
|
+
parameter :credit_card_type_id
|
24
|
+
parameter :customer_id
|
25
|
+
end
|
26
|
+
|
27
|
+
post :write_credit_card, :as => :store, :parser => Parser::CreditCard do
|
28
|
+
parameter :billing_address_id, :as => :address_id
|
29
|
+
parameter :billing_phone_id, :as => :phone_number_id
|
30
|
+
parameter :customer_id
|
31
|
+
parameter :expires_month, :as => :expiration_month
|
32
|
+
parameter :expires_year, :as => :expiration_year
|
33
|
+
parameter :name_displayed, :as => :name
|
34
|
+
parameter :number
|
35
|
+
end
|
36
|
+
|
37
|
+
class << self
|
38
|
+
def all(parameters={})
|
39
|
+
fetch(parameters).credit_cards
|
40
|
+
end
|
41
|
+
|
42
|
+
alias_method :create, :store
|
43
|
+
alias_method :update, :store
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module TicketNetwork::Checkout
|
2
|
+
class Customer < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
element :email
|
7
|
+
element :first_name, :as => :given_name
|
8
|
+
element :id
|
9
|
+
element :last_name, :as => :family_name
|
10
|
+
element :notes
|
11
|
+
element :password
|
12
|
+
element :pin
|
13
|
+
end
|
14
|
+
|
15
|
+
get :get_customer_by_id, :as => :fetch do
|
16
|
+
parameter :customer_id
|
17
|
+
end
|
18
|
+
|
19
|
+
post :write_customer, :as => :store do
|
20
|
+
parameter :customer_id, :as => :ticket_network_id
|
21
|
+
parameter :first_name, :as => :given_name
|
22
|
+
parameter :last_name, :as => :family_name
|
23
|
+
parameter :email
|
24
|
+
parameter :password
|
25
|
+
parameter :notes
|
26
|
+
end
|
27
|
+
|
28
|
+
class << self
|
29
|
+
def find(customer_id)
|
30
|
+
fetch(:customer_id => :customer_id)
|
31
|
+
end
|
32
|
+
|
33
|
+
alias_method :create, :store
|
34
|
+
alias_method :update, :store
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module TicketNetwork::Checkout
|
2
|
+
class Order < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
element :confirmation_email_text
|
7
|
+
element :request_id, :as => :id
|
8
|
+
element :sale_total, :as => :total
|
9
|
+
end
|
10
|
+
|
11
|
+
post :create_request, :as => :store do
|
12
|
+
parameter :customer_id
|
13
|
+
parameter :credit_card_id
|
14
|
+
parameter :billing_address_id
|
15
|
+
parameter :credit_card_security_code, :as => :security_code
|
16
|
+
parameter :ticket_group_id, :as => :ticket_id
|
17
|
+
parameter :ticket_quantity, :as => :quantity
|
18
|
+
parameter :shipping_method_id
|
19
|
+
parameter :special_instructions, :as => :notes
|
20
|
+
parameter :promo_code
|
21
|
+
parameter :accept_alternate, :as => :alternate_acceptable
|
22
|
+
parameter :referral_source_id
|
23
|
+
parameter :referral_source_details
|
24
|
+
parameter :ppcsrc
|
25
|
+
parameter :override_price
|
26
|
+
parameter :customer_ip_address
|
27
|
+
end
|
28
|
+
|
29
|
+
class << self
|
30
|
+
alias_method :create, :store
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module TicketNetwork::Checkout
|
2
|
+
class PhoneNumber < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class PhoneNumber
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :display_order, :as => :order
|
10
|
+
element :id
|
11
|
+
element :number
|
12
|
+
element :type_description
|
13
|
+
element :type_id
|
14
|
+
end
|
15
|
+
|
16
|
+
elements :phone, :as => :phone_numbers, :class => PhoneNumber
|
17
|
+
end
|
18
|
+
|
19
|
+
get :get_phone, :as => :fetch do
|
20
|
+
parameter :customer_id
|
21
|
+
parameter :phone_id, :as => :id
|
22
|
+
parameter :phone_type_id, :as => :type_id
|
23
|
+
end
|
24
|
+
|
25
|
+
post :write_phone, :as => :store, :parser => Parser::PhoneNumber do
|
26
|
+
parameter :customer_id
|
27
|
+
parameter :display_order, :as => :order, :default => 0
|
28
|
+
parameter :phone_number, :as => :number
|
29
|
+
parameter :phone_type_id, :as => :type_id
|
30
|
+
end
|
31
|
+
|
32
|
+
class << self
|
33
|
+
def all(parameters={})
|
34
|
+
fetch(parameters).phone_numbers
|
35
|
+
end
|
36
|
+
|
37
|
+
alias_method :create, :store
|
38
|
+
alias_method :update, :store
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module TicketNetwork::Checkout
|
2
|
+
class PhoneNumberType < Base
|
3
|
+
class Parser
|
4
|
+
include ParseHelper
|
5
|
+
|
6
|
+
class PhoneNumberType
|
7
|
+
include ParseHelper
|
8
|
+
|
9
|
+
element :id
|
10
|
+
element :description, :as => :name
|
11
|
+
end
|
12
|
+
|
13
|
+
elements :phone_type, :as => :phone_number_types,
|
14
|
+
:class => PhoneNumberType
|
15
|
+
end
|
16
|
+
|
17
|
+
get :get_phone_types, :as => :fetch
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def all(parameters={})
|
21
|
+
fetch(parameters).phone_number_types
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module TicketNetwork
|
2
|
+
module FormatHelper
|
3
|
+
# Formats keys for use in parsing responses and building query strings.
|
4
|
+
def format_key(key, query=false)
|
5
|
+
key = key.to_s
|
6
|
+
key.upcase! if key == 'id'
|
7
|
+
key.gsub!(/_id$/, '_ID')
|
8
|
+
key.gsub!(/_url$/, '_URL')
|
9
|
+
key = key.camelize(!query ? :upper : :lower) unless key == 'int'
|
10
|
+
key
|
11
|
+
end
|
12
|
+
|
13
|
+
# Formats query keys for use in a query string.
|
14
|
+
def format_query_key(key)
|
15
|
+
format_key(key, true)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Formats and escapes query values for use in a query string.
|
19
|
+
def format_query_value(value)
|
20
|
+
value = case value
|
21
|
+
when Time, Date
|
22
|
+
value.to_s(:db)
|
23
|
+
else
|
24
|
+
value.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
CGI.escape(value)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module TicketNetwork
|
2
|
+
module ParseHelper
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
include SAXMachine
|
6
|
+
end
|
7
|
+
|
8
|
+
base.extend(ClassMethods)
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
include FormatHelper
|
13
|
+
|
14
|
+
def element(name, options={})
|
15
|
+
options.reverse_merge!(:as => name)
|
16
|
+
name = format_key(name)
|
17
|
+
super(name, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def elements(name, options={})
|
21
|
+
options.reverse_merge!(:as => name)
|
22
|
+
name = format_key(name)
|
23
|
+
super(name, options)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ticket_network
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Tyler Hunt
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-09-24 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activesupport
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 3
|
30
|
+
- 0
|
31
|
+
- 0
|
32
|
+
- beta4
|
33
|
+
version: 3.0.0.beta4
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: patron
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - "="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
- 4
|
47
|
+
- 6
|
48
|
+
version: 0.4.6
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: sax-machine
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - "="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
- 0
|
62
|
+
- 15
|
63
|
+
version: 0.0.15
|
64
|
+
type: :runtime
|
65
|
+
version_requirements: *id003
|
66
|
+
description:
|
67
|
+
email:
|
68
|
+
executables: []
|
69
|
+
|
70
|
+
extensions: []
|
71
|
+
|
72
|
+
extra_rdoc_files: []
|
73
|
+
|
74
|
+
files:
|
75
|
+
- lib/ticket_network/base.rb
|
76
|
+
- lib/ticket_network/catalog/base.rb
|
77
|
+
- lib/ticket_network/catalog/category.rb
|
78
|
+
- lib/ticket_network/catalog/configuration.rb
|
79
|
+
- lib/ticket_network/catalog/event.rb
|
80
|
+
- lib/ticket_network/catalog/performance.rb
|
81
|
+
- lib/ticket_network/catalog/performer.rb
|
82
|
+
- lib/ticket_network/catalog/performer_rank.rb
|
83
|
+
- lib/ticket_network/catalog/ticket.rb
|
84
|
+
- lib/ticket_network/catalog/venue.rb
|
85
|
+
- lib/ticket_network/checkout/address.rb
|
86
|
+
- lib/ticket_network/checkout/address_type.rb
|
87
|
+
- lib/ticket_network/checkout/base.rb
|
88
|
+
- lib/ticket_network/checkout/credit_card.rb
|
89
|
+
- lib/ticket_network/checkout/customer.rb
|
90
|
+
- lib/ticket_network/checkout/order.rb
|
91
|
+
- lib/ticket_network/checkout/phone_number.rb
|
92
|
+
- lib/ticket_network/checkout/phone_number_type.rb
|
93
|
+
- lib/ticket_network/format_helper.rb
|
94
|
+
- lib/ticket_network/parse_helper.rb
|
95
|
+
- lib/ticket_network.rb
|
96
|
+
has_rdoc: true
|
97
|
+
homepage: http://github.com/tylerhunt/ticket_network
|
98
|
+
licenses: []
|
99
|
+
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
version: "0"
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
segments:
|
119
|
+
- 0
|
120
|
+
version: "0"
|
121
|
+
requirements: []
|
122
|
+
|
123
|
+
rubyforge_project:
|
124
|
+
rubygems_version: 1.3.7
|
125
|
+
signing_key:
|
126
|
+
specification_version: 3
|
127
|
+
summary: An interface library for the Ticket Network web service.
|
128
|
+
test_files: []
|
129
|
+
|