brownpapertickets 0.0.1
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/.document +5 -0
- data/LICENSE +20 -0
- data/README +0 -0
- data/README.rdoc +17 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/brownpapertickets.gemspec +79 -0
- data/examples/create_item.rb +26 -0
- data/examples/fetch_items.rb +34 -0
- data/examples/update_item.rb +39 -0
- data/lib/brownpapertickets.rb +11 -0
- data/lib/brownpapertickets/base.rb +26 -0
- data/lib/brownpapertickets/date.rb +228 -0
- data/lib/brownpapertickets/event.rb +229 -0
- data/lib/brownpapertickets/httpost.rb +215 -0
- data/lib/brownpapertickets/price.rb +225 -0
- data/lib/brownpapertickets/xmlparse.rb +13 -0
- data/spec/brownpapertickets_spec.rb +135 -0
- data/spec/fixtures/all_events.xml +336 -0
- data/spec/fixtures/create_not_ok.xml +5 -0
- data/spec/fixtures/create_ok.xml +6 -0
- data/spec/fixtures/event.xml +72 -0
- data/spec/fixtures/test.json +1 -0
- data/spec/fixtures/update_not_ok.xml +6 -0
- data/spec/fixtures/update_ok.xml +6 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +35 -0
- metadata +149 -0
@@ -0,0 +1,229 @@
|
|
1
|
+
require 'hpricot'
|
2
|
+
module BrownPaperTickets
|
3
|
+
class Event
|
4
|
+
include HTTParty
|
5
|
+
|
6
|
+
base_uri "https://www.brownpapertickets.com/api2"
|
7
|
+
|
8
|
+
attr_reader :attributes, :server_response
|
9
|
+
|
10
|
+
REQUIRED_ATTR=["e_name","e_city","e_state", "e_short_description", "e_description"]
|
11
|
+
|
12
|
+
ATTRS=["e_name","e_city","e_state", "e_short_description", "e_description","e_address1","e_address2","e_zip","e_phone","e_web","end_of_event_message",
|
13
|
+
"end_of_sale_message","date_notes","e_notes","keywords","c_name","c_email","c_phone","c_fax","c_address1","c_address2","c_city","c_state","c_zip",
|
14
|
+
"c_country","public", "title","link", "description", "event_id", "tickets_sold"]
|
15
|
+
|
16
|
+
def initialize(id, account, attributes={})
|
17
|
+
@@id = id
|
18
|
+
@@account = account
|
19
|
+
@attributes = attributes
|
20
|
+
end
|
21
|
+
|
22
|
+
def new(params={})
|
23
|
+
Event.new(@@id,@@account, params)
|
24
|
+
end
|
25
|
+
|
26
|
+
def all
|
27
|
+
events = Event.get("/eventlist", :query =>{"id" => @@id , "account" => @@account })
|
28
|
+
parsed_event = []
|
29
|
+
events.parsed_response["document"]["event"].each do |event|
|
30
|
+
parsed_event << Event.new(@id,@account, event)
|
31
|
+
end
|
32
|
+
return parsed_event
|
33
|
+
end
|
34
|
+
|
35
|
+
def find(event_id)
|
36
|
+
event = Event.get("/eventlist",:query =>{"id" => @@id , "account" => @@account, "event_id" => event_id })
|
37
|
+
@attributes = event.parsed_response["document"]["event"]
|
38
|
+
return self
|
39
|
+
end
|
40
|
+
|
41
|
+
def method_missing(m, *args, &block)
|
42
|
+
if ATTRS.include?(m.to_s.gsub("=",""))
|
43
|
+
if m.to_s.include?("=")
|
44
|
+
self.attributes[m.to_s.gsub("=","")] = *args.to_s
|
45
|
+
else
|
46
|
+
result = self.attributes[m.to_s]
|
47
|
+
end
|
48
|
+
else
|
49
|
+
raise NoMethodError.new("Method missing #{m}")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def validates_required_attr
|
54
|
+
missing_field = []
|
55
|
+
REQUIRED_ATTR.each do |attr|
|
56
|
+
missing_field << attr if self.send(attr,nil,nil).blank?
|
57
|
+
end
|
58
|
+
unless missing_field.blank?
|
59
|
+
@server_response = "The following attributes are missing:"
|
60
|
+
missing_field.each{|att| @server_response = @server_response + " " + att }
|
61
|
+
return false
|
62
|
+
end
|
63
|
+
return true
|
64
|
+
end
|
65
|
+
|
66
|
+
# Response while saving
|
67
|
+
# 300036 - Required variables are missing
|
68
|
+
# 300037 - Unknown error while posting info to DB
|
69
|
+
# 000000 - Success
|
70
|
+
|
71
|
+
def save!
|
72
|
+
if self.event_id.blank?
|
73
|
+
#changeevent
|
74
|
+
return false unless validates_required_attr
|
75
|
+
new_save("createevent")
|
76
|
+
else
|
77
|
+
#createevent
|
78
|
+
new_save("changeevent")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def new_save(param)
|
83
|
+
body = {"id" => @@id, "account" => @@account}
|
84
|
+
query = self.attributes.merge("id" => @@id, "account" => @@account)
|
85
|
+
response = BrownPaperTickets::Httpost.new(Net::HTTP::Post, "https://www.brownpapertickets.com/api2/#{param}",:query => query)
|
86
|
+
response.options[:body] = query
|
87
|
+
st = response.perform
|
88
|
+
xml = Hpricot(st.response.body)
|
89
|
+
|
90
|
+
if param == "createevent"
|
91
|
+
event_id = (xml/:event_id).inner_html if (xml/:resultcode).inner_html == "000000"
|
92
|
+
process_create_response( (xml/:resultcode).inner_html, event_id)
|
93
|
+
p event_id
|
94
|
+
else
|
95
|
+
process_update_response( (xml/:resultcode).inner_html)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def title=(param)
|
100
|
+
self.attributes["e_name"] = param
|
101
|
+
self.attributes["title"] = param
|
102
|
+
end
|
103
|
+
|
104
|
+
def e_name=(param)
|
105
|
+
self.attributes["e_name"] = param
|
106
|
+
self.attributes["title"] = param
|
107
|
+
end
|
108
|
+
|
109
|
+
def create(params={})
|
110
|
+
event = Event.new(@@id,@@account, params)
|
111
|
+
event.save!
|
112
|
+
end
|
113
|
+
|
114
|
+
def live
|
115
|
+
return true if self.attributes["live"] == "y"
|
116
|
+
return false
|
117
|
+
end
|
118
|
+
|
119
|
+
def live=(param)
|
120
|
+
if param
|
121
|
+
self.attributes["live"] = "y"
|
122
|
+
else
|
123
|
+
self.attributes["live"] = "f"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def public
|
128
|
+
return true if self.attributes["public"] == "t"
|
129
|
+
return false
|
130
|
+
end
|
131
|
+
|
132
|
+
def public=(param)
|
133
|
+
if param
|
134
|
+
self.attributes["public"] = "t"
|
135
|
+
else
|
136
|
+
self.attributes["public"] = "n"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# resultcode
|
141
|
+
# 300049 - Required variables are missing
|
142
|
+
# 300050 - Unknown error
|
143
|
+
# 300051 - Unable to find event
|
144
|
+
# 300052 - Event does not belong to account
|
145
|
+
# 300053 - Required variables are missing
|
146
|
+
# 300054 - Unable to update event
|
147
|
+
# 000000 - Success
|
148
|
+
|
149
|
+
def update_attribute(key, value)
|
150
|
+
assign = key.to_s + "="
|
151
|
+
self.send(assign,value)
|
152
|
+
query = {"id" => @@id, "account" => @@account, key.to_s => value, "event_id" => self.event_id}
|
153
|
+
response = BrownPaperTickets::Httpost.new(Net::HTTP::Post, "https://www.brownpapertickets.com/api2/changeevent",:query => query)
|
154
|
+
response.options[:body] = query
|
155
|
+
st = response.perform
|
156
|
+
xml = Hpricot(st.response.body)
|
157
|
+
return process_update_response((xml/:resultcode).inner_html)
|
158
|
+
end
|
159
|
+
|
160
|
+
def update_attributes(params)
|
161
|
+
params.each do |key, value|
|
162
|
+
assign = key.to_s + "="
|
163
|
+
self.send(assign,value)
|
164
|
+
end
|
165
|
+
query = {"id" => @@id, "account" => @@account, "event_id" => self.event_id}.merge(params)
|
166
|
+
response = BrownPaperTickets::Httpost.new(Net::HTTP::Post, "https://www.brownpapertickets.com/api2/changeevent",:query => query)
|
167
|
+
response.options[:body] = query
|
168
|
+
st = response.perform
|
169
|
+
xml = Hpricot(st.response.body)
|
170
|
+
return process_update_response((xml/:resultcode).inner_html)
|
171
|
+
end
|
172
|
+
|
173
|
+
def process_update_response(response)
|
174
|
+
case response
|
175
|
+
when "000000" then
|
176
|
+
@server_response = "success"
|
177
|
+
return true
|
178
|
+
when "300049" then
|
179
|
+
@server_response = "Required variables are missing"
|
180
|
+
return false
|
181
|
+
when "300050" then
|
182
|
+
@server_response = "Unknown error"
|
183
|
+
return false
|
184
|
+
when "300051" then
|
185
|
+
@server_response = "Unable to find event"
|
186
|
+
return false
|
187
|
+
when "300052" then
|
188
|
+
@server_response = "Event does not belong to account"
|
189
|
+
return false
|
190
|
+
when "300053" then
|
191
|
+
@server_response = "Required variables are missing"
|
192
|
+
return false
|
193
|
+
when "300054" then
|
194
|
+
@server_response = "Unable to update event"
|
195
|
+
return false
|
196
|
+
else
|
197
|
+
@server_response = "Unknown error"
|
198
|
+
return false
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
def process_create_response(response, event_id)
|
203
|
+
case response
|
204
|
+
when "000000" then
|
205
|
+
self.event_id = event_id
|
206
|
+
@server_response = "success"
|
207
|
+
return true
|
208
|
+
when "300036" then
|
209
|
+
@server_response = "There are some missing attr"
|
210
|
+
return false
|
211
|
+
when "300037" then
|
212
|
+
@server_response = "Unknown error while posting info to DB"
|
213
|
+
return false
|
214
|
+
else
|
215
|
+
@server_response = "Unknown error"
|
216
|
+
return false
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
def server_response
|
221
|
+
@server_response
|
222
|
+
end
|
223
|
+
|
224
|
+
def attributes
|
225
|
+
@attributes
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
end
|
@@ -0,0 +1,215 @@
|
|
1
|
+
module BrownPaperTickets
|
2
|
+
class Httpost < HTTParty::Request
|
3
|
+
|
4
|
+
SupportedHTTPMethods = [
|
5
|
+
Net::HTTP::Get,
|
6
|
+
Net::HTTP::Post,
|
7
|
+
Net::HTTP::Put,
|
8
|
+
Net::HTTP::Delete,
|
9
|
+
Net::HTTP::Head,
|
10
|
+
Net::HTTP::Options
|
11
|
+
]
|
12
|
+
|
13
|
+
SupportedURISchemes = [URI::HTTP, URI::HTTPS]
|
14
|
+
|
15
|
+
attr_accessor :http_method, :path, :options, :last_response, :redirect
|
16
|
+
|
17
|
+
def initialize(http_method, path, o={})
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def path=(uri)
|
22
|
+
@path = URI.parse(uri)
|
23
|
+
end
|
24
|
+
|
25
|
+
def uri
|
26
|
+
new_uri = path.relative? ? URI.parse("#{options[:base_uri]}#{path}") : path
|
27
|
+
|
28
|
+
# avoid double query string on redirects [#12]
|
29
|
+
unless redirect
|
30
|
+
new_uri.query = query_string(new_uri)
|
31
|
+
end
|
32
|
+
|
33
|
+
unless SupportedURISchemes.include? new_uri.class
|
34
|
+
raise UnsupportedURIScheme, "'#{new_uri}' Must be HTTP or HTTPS"
|
35
|
+
end
|
36
|
+
|
37
|
+
new_uri
|
38
|
+
end
|
39
|
+
|
40
|
+
def format
|
41
|
+
options[:format] || (format_from_mimetype(last_response['content-type']) if last_response)
|
42
|
+
end
|
43
|
+
|
44
|
+
def parser
|
45
|
+
options[:parser]
|
46
|
+
end
|
47
|
+
|
48
|
+
def perform
|
49
|
+
validate
|
50
|
+
setup_raw_request
|
51
|
+
get_response
|
52
|
+
return self.last_response
|
53
|
+
#handle_response
|
54
|
+
end
|
55
|
+
|
56
|
+
#def body
|
57
|
+
# options[:body].is_a?(Hash) ? options[:body].to_params : options[:body]
|
58
|
+
#end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def http
|
63
|
+
http = Net::HTTP.new(uri.host, uri.port, options[:http_proxyaddr], options[:http_proxyport])
|
64
|
+
http.use_ssl = ssl_implied?
|
65
|
+
|
66
|
+
if options[:timeout] && options[:timeout].is_a?(Integer)
|
67
|
+
http.open_timeout = options[:timeout]
|
68
|
+
http.read_timeout = options[:timeout]
|
69
|
+
end
|
70
|
+
|
71
|
+
if options[:pem] && http.use_ssl?
|
72
|
+
http.cert = OpenSSL::X509::Certificate.new(options[:pem])
|
73
|
+
http.key = OpenSSL::PKey::RSA.new(options[:pem])
|
74
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
75
|
+
else
|
76
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
77
|
+
end
|
78
|
+
|
79
|
+
if options[:debug_output]
|
80
|
+
http.set_debug_output(options[:debug_output])
|
81
|
+
end
|
82
|
+
|
83
|
+
http
|
84
|
+
end
|
85
|
+
|
86
|
+
def ssl_implied?
|
87
|
+
uri.port == 443 || uri.instance_of?(URI::HTTPS)
|
88
|
+
end
|
89
|
+
|
90
|
+
def body
|
91
|
+
options[:body].is_a?(Hash) ? options[:body].to_params : options[:body]
|
92
|
+
end
|
93
|
+
|
94
|
+
def credentials
|
95
|
+
options[:basic_auth] || options[:digest_auth]
|
96
|
+
end
|
97
|
+
|
98
|
+
def username
|
99
|
+
credentials[:username]
|
100
|
+
end
|
101
|
+
|
102
|
+
def password
|
103
|
+
credentials[:password]
|
104
|
+
end
|
105
|
+
|
106
|
+
def setup_raw_request
|
107
|
+
@raw_request = http_method.new(uri.request_uri)
|
108
|
+
@raw_request.body = body if body
|
109
|
+
@raw_request.initialize_http_header(options[:headers])
|
110
|
+
@raw_request.basic_auth(username, password) if options[:basic_auth]
|
111
|
+
setup_digest_auth if options[:digest_auth]
|
112
|
+
end
|
113
|
+
|
114
|
+
def setup_digest_auth
|
115
|
+
res = http.head(uri.request_uri, options[:headers])
|
116
|
+
if res['www-authenticate'] != nil && res['www-authenticate'].length > 0
|
117
|
+
@raw_request.digest_auth(username, password, res)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def perform_actual_request
|
122
|
+
http.request(@raw_request)
|
123
|
+
end
|
124
|
+
|
125
|
+
def get_response
|
126
|
+
self.last_response = perform_actual_request
|
127
|
+
end
|
128
|
+
|
129
|
+
def query_string(uri)
|
130
|
+
query_string_parts = []
|
131
|
+
query_string_parts << uri.query unless uri.query.nil?
|
132
|
+
|
133
|
+
if options[:query].is_a?(Hash)
|
134
|
+
query_string_parts << options[:default_params].merge(options[:query]).to_params
|
135
|
+
else
|
136
|
+
query_string_parts << options[:default_params].to_params unless options[:default_params].empty?
|
137
|
+
query_string_parts << options[:query] unless options[:query].nil?
|
138
|
+
end
|
139
|
+
|
140
|
+
query_string_parts.size > 0 ? query_string_parts.join('&') : nil
|
141
|
+
end
|
142
|
+
|
143
|
+
# Raises exception Net::XXX (http error code) if an http error occured
|
144
|
+
def handle_response
|
145
|
+
handle_deflation
|
146
|
+
case last_response
|
147
|
+
when Net::HTTPMultipleChoice, # 300
|
148
|
+
Net::HTTPMovedPermanently, # 301
|
149
|
+
Net::HTTPFound, # 302
|
150
|
+
Net::HTTPSeeOther, # 303
|
151
|
+
Net::HTTPUseProxy, # 305
|
152
|
+
Net::HTTPTemporaryRedirect
|
153
|
+
if last_response.key?('location')
|
154
|
+
options[:limit] -= 1
|
155
|
+
self.path = last_response['location']
|
156
|
+
self.redirect = true
|
157
|
+
self.http_method = Net::HTTP::Get unless options[:maintain_method_across_redirects]
|
158
|
+
capture_cookies(last_response)
|
159
|
+
perform
|
160
|
+
else
|
161
|
+
last_response
|
162
|
+
end
|
163
|
+
else
|
164
|
+
Response.new(last_response, parse_response(last_response.body))
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
# Inspired by Ruby 1.9
|
169
|
+
def handle_deflation
|
170
|
+
case last_response["content-encoding"]
|
171
|
+
when "gzip"
|
172
|
+
body_io = StringIO.new(last_response.body)
|
173
|
+
last_response.body.replace Zlib::GzipReader.new(body_io).read
|
174
|
+
when "deflate"
|
175
|
+
last_response.body.replace Zlib::Inflate.inflate(last_response.body)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def parse_response(body)
|
180
|
+
parser.call(body, format)
|
181
|
+
end
|
182
|
+
|
183
|
+
def capture_cookies(response)
|
184
|
+
return unless response['Set-Cookie']
|
185
|
+
cookies_hash = HTTParty::CookieHash.new()
|
186
|
+
cookies_hash.add_cookies(options[:headers]['Cookie']) if options[:headers] && options[:headers]['Cookie']
|
187
|
+
cookies_hash.add_cookies(response['Set-Cookie'])
|
188
|
+
options[:headers] ||= {}
|
189
|
+
options[:headers]['Cookie'] = cookies_hash.to_cookie_string
|
190
|
+
end
|
191
|
+
|
192
|
+
# Uses the HTTP Content-Type header to determine the format of the
|
193
|
+
# response It compares the MIME type returned to the types stored in the
|
194
|
+
# SupportedFormats hash
|
195
|
+
def format_from_mimetype(mimetype)
|
196
|
+
if mimetype && parser.respond_to?(:format_from_mimetype)
|
197
|
+
parser.format_from_mimetype(mimetype)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def validate
|
202
|
+
raise HTTParty::RedirectionTooDeep.new(last_response), 'HTTP redirects too deep' if options[:limit].to_i <= 0
|
203
|
+
raise ArgumentError, 'only get, post, put, delete, head, and options methods are supported' unless SupportedHTTPMethods.include?(http_method)
|
204
|
+
raise ArgumentError, ':headers must be a hash' if options[:headers] && !options[:headers].is_a?(Hash)
|
205
|
+
raise ArgumentError, 'only one authentication method, :basic_auth or :digest_auth may be used at a time' if options[:basic_auth] && options[:digest_auth]
|
206
|
+
raise ArgumentError, ':basic_auth must be a hash' if options[:basic_auth] && !options[:basic_auth].is_a?(Hash)
|
207
|
+
raise ArgumentError, ':digest_auth must be a hash' if options[:digest_auth] && !options[:digest_auth].is_a?(Hash)
|
208
|
+
raise ArgumentError, ':query must be hash if using HTTP Post' if post? && !options[:query].nil? && !options[:query].is_a?(Hash)
|
209
|
+
end
|
210
|
+
|
211
|
+
def post?
|
212
|
+
Net::HTTP::Post == http_method
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
@@ -0,0 +1,225 @@
|
|
1
|
+
require 'hpricot'
|
2
|
+
module BrownPaperTickets
|
3
|
+
class Price
|
4
|
+
include HTTParty
|
5
|
+
base_uri "https://www.brownpapertickets.com/api2"
|
6
|
+
|
7
|
+
attr_reader :attributes, :server_response
|
8
|
+
|
9
|
+
REQUIRED_ATTR=["price", "price_name"]
|
10
|
+
|
11
|
+
ATTRS=["price", "price_name", "event_id", "date_id", "price_id"]
|
12
|
+
|
13
|
+
def initialize(id, account, attributes={})
|
14
|
+
@@id = id
|
15
|
+
@@account = account
|
16
|
+
@attributes = attributes
|
17
|
+
end
|
18
|
+
|
19
|
+
def new(params={})
|
20
|
+
Event.new(@@id,@@account, params, event_id, date_id)
|
21
|
+
end
|
22
|
+
|
23
|
+
def all
|
24
|
+
prices = Event.get("/pricelist", :query =>{"id" => @@id , "account" => @@account, "event_id" => event_id , "date_id" => date_id})
|
25
|
+
parsed_date = []
|
26
|
+
price.parsed_response["document"]["price"].each do |date|
|
27
|
+
parsed_date << Event.new(@id,@account, price)
|
28
|
+
end
|
29
|
+
return parsed_event
|
30
|
+
end
|
31
|
+
|
32
|
+
def find(event_id)
|
33
|
+
price = Event.get("/pricelist",:query =>{"id" => @@id , "account" => @@account, "event_id" => event_id, "date_id"=>date_id})
|
34
|
+
@attributes = event.parsed_response["document"]["event"]
|
35
|
+
return self
|
36
|
+
end
|
37
|
+
|
38
|
+
def method_missing(m, *args, &block)
|
39
|
+
if ATTRS.include?(m.to_s.gsub("=",""))
|
40
|
+
if m.to_s.include?("=")
|
41
|
+
self.attributes[m.to_s.gsub("=","")] = *args.to_s
|
42
|
+
else
|
43
|
+
result = self.attributes[m.to_s]
|
44
|
+
end
|
45
|
+
else
|
46
|
+
raise NoMethodError.new("Method missing #{m}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def validates_required_attr
|
51
|
+
missing_field = []
|
52
|
+
REQUIRED_ATTR.each do |attr|
|
53
|
+
missing_field << attr if self.send(attr,nil,nil).blank?
|
54
|
+
end
|
55
|
+
unless missing_field.blank?
|
56
|
+
@server_response = "The following attributes are missing:"
|
57
|
+
missing_field.each{|att| @server_response = @server_response + " " + att }
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
return true
|
61
|
+
end
|
62
|
+
|
63
|
+
# Response while saving
|
64
|
+
# 300036 - Required variables are missing
|
65
|
+
# 300037 - Unknown error while posting info to DB
|
66
|
+
# 000000 - Success
|
67
|
+
|
68
|
+
def save!
|
69
|
+
new_save("addprice")
|
70
|
+
p "save1"*12
|
71
|
+
end
|
72
|
+
|
73
|
+
def new_save(param)
|
74
|
+
body = {"id" => @@id, "account" => @@account, "event_id" => event_id, "date_id"=> date_id}
|
75
|
+
query = self.attributes.merge("id" => @@id, "account" => @@account)
|
76
|
+
response = BrownPaperTickets::Httpost.new(Net::HTTP::Post, "https://www.brownpapertickets.com/api2/#{param}",:query => query)
|
77
|
+
response.options[:body] = query
|
78
|
+
st = response.perform
|
79
|
+
xml = Hpricot(st.response.body)
|
80
|
+
|
81
|
+
if param == "addprice"
|
82
|
+
p "algo"*12
|
83
|
+
self.price_id = (xml/:price_id).inner_html if (xml/:resultcode).inner_html == "000000"
|
84
|
+
process_create_response( (xml/:resultcode).inner_html, price_id)
|
85
|
+
p (xml/:resultcode).inner_html
|
86
|
+
else
|
87
|
+
process_update_response( (xml/:resultcode).inner_html)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def create(params={})
|
92
|
+
price = Event.new(@@id,@@account, params)
|
93
|
+
price.save!
|
94
|
+
end
|
95
|
+
|
96
|
+
def live
|
97
|
+
return true if self.attributes["live"] == "y"
|
98
|
+
return false
|
99
|
+
end
|
100
|
+
|
101
|
+
def live=(param)
|
102
|
+
if param
|
103
|
+
self.attributes["live"] = "y"
|
104
|
+
else
|
105
|
+
self.attributes["live"] = "f"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def public
|
110
|
+
return true if self.attributes["public"] == "t"
|
111
|
+
return false
|
112
|
+
end
|
113
|
+
|
114
|
+
def public=(param)
|
115
|
+
if param
|
116
|
+
self.attributes["public"] = "t"
|
117
|
+
else
|
118
|
+
self.attributes["public"] = "n"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# resultcode
|
123
|
+
# 300049 - Required variables are missing
|
124
|
+
# 300050 - Unknown error
|
125
|
+
# 300051 - Unable to find event
|
126
|
+
# 300052 - Event does not belong to account
|
127
|
+
# 300053 - Required variables are missing
|
128
|
+
# 300054 - Unable to update event
|
129
|
+
# 000000 - Success
|
130
|
+
|
131
|
+
def update_attribute(key, value)
|
132
|
+
assign = key.to_s + "="
|
133
|
+
self.send(assign,value)
|
134
|
+
query = {"id" => @@id, "account" => @@account, key.to_s => value, "event_id" => self.event_id}
|
135
|
+
response = BrownPaperTickets::Httpost.new(Net::HTTP::Post, "https://www.brownpapertickets.com/api2/changeprice",:query => query)
|
136
|
+
response.options[:body] = query
|
137
|
+
st = response.perform
|
138
|
+
xml = Hpricot(st.response.body)
|
139
|
+
return process_update_response((xml/:resultcode).inner_html)
|
140
|
+
end
|
141
|
+
|
142
|
+
def update_attributes(params)
|
143
|
+
params.each do |key, value|
|
144
|
+
assign = key.to_s + "="
|
145
|
+
self.send(assign,value)
|
146
|
+
end
|
147
|
+
query = {"id" => @@id, "account" => @@account, "event_id" => self.event_id}.merge(params)
|
148
|
+
response = BrownPaperTickets::Httpost.new(Net::HTTP::Post, "https://www.brownpapertickets.com/api2/changeprice",:query => query)
|
149
|
+
response.options[:body] = query
|
150
|
+
st = response.perform
|
151
|
+
xml = Hpricot(st.response.body)
|
152
|
+
return process_update_response((xml/:resultcode).inner_html)
|
153
|
+
end
|
154
|
+
|
155
|
+
def process_update_response(response)
|
156
|
+
case response
|
157
|
+
when "000000" then
|
158
|
+
@server_response = "Success"
|
159
|
+
return true
|
160
|
+
when "300063" then
|
161
|
+
@server_response = "Required variables are missing"
|
162
|
+
return false
|
163
|
+
when "300064" then
|
164
|
+
@server_response = "Unable to find event"
|
165
|
+
return false
|
166
|
+
when "300065" then
|
167
|
+
@server_response = "Event does not belong to account"
|
168
|
+
return false
|
169
|
+
when "300066" then
|
170
|
+
@server_response = "Unknown error"
|
171
|
+
return false
|
172
|
+
when "300067" then
|
173
|
+
@server_response = "No such price for this event"
|
174
|
+
return false
|
175
|
+
when "300068" then
|
176
|
+
@server_response = "Required variables are missing"
|
177
|
+
return false
|
178
|
+
when "300069" then
|
179
|
+
@server_response = "Unable to change price"
|
180
|
+
return false
|
181
|
+
else
|
182
|
+
@server_response = "Unknown error"
|
183
|
+
return false
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def process_create_response(response, event_id)
|
188
|
+
case response
|
189
|
+
when "0000" then
|
190
|
+
self.event_id = event_id
|
191
|
+
@server_response = "success"
|
192
|
+
return true
|
193
|
+
when "300042" then
|
194
|
+
@server_response = "Required variables are missing"
|
195
|
+
return false
|
196
|
+
when "300043" then
|
197
|
+
@server_response = "Unknown error while posting info to DB"
|
198
|
+
return false
|
199
|
+
when "300044" then
|
200
|
+
@server_response = "Event does not belong to account"
|
201
|
+
return false
|
202
|
+
when "300045" then
|
203
|
+
@server_response = "Unknown error while fetching date info from DB"
|
204
|
+
return false
|
205
|
+
when "300046" then
|
206
|
+
@server_response = "Unable to find date"
|
207
|
+
return false
|
208
|
+
when "300047" then
|
209
|
+
@server_response = "Unable to add price"
|
210
|
+
return false
|
211
|
+
else
|
212
|
+
@server_response = "Unknown error"
|
213
|
+
return false
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
def server_response
|
218
|
+
@server_response
|
219
|
+
end
|
220
|
+
|
221
|
+
def attributes
|
222
|
+
@attributes
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|