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.
@@ -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,7 @@
1
+ module TicketNetwork::Catalog
2
+ class Base < TicketNetwork::Base
3
+ service :catalog
4
+ end
5
+
6
+ ParseHelper = TicketNetwork::ParseHelper
7
+ 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,7 @@
1
+ module TicketNetwork::Checkout
2
+ class Base < TicketNetwork::Base
3
+ service :checkout
4
+ end
5
+
6
+ ParseHelper = TicketNetwork::ParseHelper
7
+ 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
+