tickethub 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/lib/tickethub/address.rb +5 -0
- data/lib/tickethub/app/package.rb +9 -0
- data/lib/tickethub/app/subscription.rb +11 -0
- data/lib/tickethub/app.rb +36 -0
- data/lib/tickethub/category.rb +7 -0
- data/lib/tickethub/collection.rb +150 -0
- data/lib/tickethub/connection.rb +140 -0
- data/lib/tickethub/contact.rb +5 -0
- data/lib/tickethub/endpoint.rb +36 -0
- data/lib/tickethub/errors.rb +34 -0
- data/lib/tickethub/exceptions.rb +73 -0
- data/lib/tickethub/formats/form_format.rb +17 -0
- data/lib/tickethub/formats/json_format.rb +25 -0
- data/lib/tickethub/formats.rb +35 -0
- data/lib/tickethub/helpers.rb +108 -0
- data/lib/tickethub/request.rb +130 -0
- data/lib/tickethub/resource.rb +279 -0
- data/lib/tickethub/response/headers.rb +31 -0
- data/lib/tickethub/response.rb +49 -0
- data/lib/tickethub/supplier/answer.rb +11 -0
- data/lib/tickethub/supplier/app.rb +9 -0
- data/lib/tickethub/supplier/bill.rb +11 -0
- data/lib/tickethub/supplier/booking.rb +39 -0
- data/lib/tickethub/supplier/card.rb +11 -0
- data/lib/tickethub/supplier/coupon.rb +14 -0
- data/lib/tickethub/supplier/customer.rb +15 -0
- data/lib/tickethub/supplier/element.rb +11 -0
- data/lib/tickethub/supplier/fee.rb +15 -0
- data/lib/tickethub/supplier/gateway/handpoint.rb +8 -0
- data/lib/tickethub/supplier/gateway/ideal.rb +8 -0
- data/lib/tickethub/supplier/gateway/paypal.rb +8 -0
- data/lib/tickethub/supplier/gateway/stripe.rb +8 -0
- data/lib/tickethub/supplier/gateway.rb +16 -0
- data/lib/tickethub/supplier/invoice.rb +7 -0
- data/lib/tickethub/supplier/message/email.rb +8 -0
- data/lib/tickethub/supplier/message/sms.rb +8 -0
- data/lib/tickethub/supplier/message.rb +20 -0
- data/lib/tickethub/supplier/option.rb +18 -0
- data/lib/tickethub/supplier/order.rb +51 -0
- data/lib/tickethub/supplier/package.rb +9 -0
- data/lib/tickethub/supplier/payment/card.rb +18 -0
- data/lib/tickethub/supplier/payment/cash.rb +8 -0
- data/lib/tickethub/supplier/payment/credit.rb +8 -0
- data/lib/tickethub/supplier/payment/direct.rb +8 -0
- data/lib/tickethub/supplier/payment/gratuity.rb +8 -0
- data/lib/tickethub/supplier/payment.rb +34 -0
- data/lib/tickethub/supplier/product.rb +54 -0
- data/lib/tickethub/supplier/question.rb +11 -0
- data/lib/tickethub/supplier/rate.rb +16 -0
- data/lib/tickethub/supplier/receipt.rb +11 -0
- data/lib/tickethub/supplier/reseller.rb +36 -0
- data/lib/tickethub/supplier/scan.rb +17 -0
- data/lib/tickethub/supplier/season.rb +16 -0
- data/lib/tickethub/supplier/subscription.rb +11 -0
- data/lib/tickethub/supplier/tax.rb +16 -0
- data/lib/tickethub/supplier/template.rb +11 -0
- data/lib/tickethub/supplier/ticket.rb +25 -0
- data/lib/tickethub/supplier/tier.rb +20 -0
- data/lib/tickethub/supplier/user.rb +9 -0
- data/lib/tickethub/supplier/variant.rb +10 -0
- data/lib/tickethub/supplier/voucher.rb +23 -0
- data/lib/tickethub/supplier.rb +86 -0
- data/lib/tickethub/token.rb +9 -0
- data/lib/tickethub/user/app.rb +5 -0
- data/lib/tickethub/user/supplier.rb +5 -0
- data/lib/tickethub/user.rb +38 -0
- data/lib/tickethub/version.rb +3 -0
- data/lib/tickethub.rb +26 -0
- data/tickethub.gemspec +25 -0
- metadata +209 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8d3318c8a3beae9788a9da8e2b31ef7f013f70ec
|
4
|
+
data.tar.gz: 566e852760436eea922e39ed659e71f91597da50
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4fa2a0d645c5d6c8d167387289ca4d2294c38facd25d7a67c090a1c44cd1615ae8c5a2ae1d732b4b8826a9063085d406d5fc20886c1f04f308a2795e48fe1e2a
|
7
|
+
data.tar.gz: 2284002231679ecee50ae1a29ded39dfb589796d60d7f68f330589d75310ed7bf55f69a91e4e2c4ba843e4f91421ed6602763d3a7397a27983ec152c6a929504
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Tickethub
|
2
|
+
class App < Resource
|
3
|
+
path '/apps'
|
4
|
+
|
5
|
+
require_relative 'contact'
|
6
|
+
require_relative 'category'
|
7
|
+
require_relative 'app/package'
|
8
|
+
require_relative 'app/subscription'
|
9
|
+
|
10
|
+
association :contact, Tickethub::Contact
|
11
|
+
association :token, Tickethub::Token
|
12
|
+
association :category, Tickethub::Category
|
13
|
+
|
14
|
+
collection :packages, App::Package
|
15
|
+
collection :subscriptions, App::Subscription
|
16
|
+
|
17
|
+
attribute :currency, type: :currency
|
18
|
+
|
19
|
+
def self.[](attributes)
|
20
|
+
token = attributes[:token].is_a?(String) ? attributes[:token]
|
21
|
+
: attributes[:token][:access_token]
|
22
|
+
self.new Tickethub.endpoint['/app', auth_type: :bearer, password: token]
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(endpoint, attributes = nil)
|
26
|
+
attributes ||= endpoint.get
|
27
|
+
|
28
|
+
if attributes['token']
|
29
|
+
endpoint = Tickethub.endpoint['/app', {
|
30
|
+
auth_type: :bearer, password: attributes['token']['access_token'] }]
|
31
|
+
end
|
32
|
+
|
33
|
+
super(endpoint, attributes)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
|
3
|
+
module Tickethub
|
4
|
+
class Collection < Enumerator
|
5
|
+
attr_accessor :cache
|
6
|
+
attr_reader :count, :endpoint
|
7
|
+
|
8
|
+
def initialize(endpoint, klass, params = {})
|
9
|
+
@params = params.dup
|
10
|
+
@endpoint = endpoint
|
11
|
+
@klass = klass
|
12
|
+
|
13
|
+
klass.registered_types.each do |type, options|
|
14
|
+
define_singleton_method type do
|
15
|
+
instance_variable_defined?("@#{type}") ? instance_variable_get("@#{type}") :
|
16
|
+
instance_variable_set("@#{type}", Tickethub::Collection.new(@endpoint[type], options[:klass]))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
klass.scopes.each do |key, block|
|
21
|
+
define_singleton_method key, &block
|
22
|
+
end
|
23
|
+
|
24
|
+
super() do |yielder|
|
25
|
+
self.reload! if @cache.nil?
|
26
|
+
|
27
|
+
@cache.each do |row|
|
28
|
+
yielder << @klass.load(@endpoint, row)
|
29
|
+
end
|
30
|
+
|
31
|
+
while @cache.length < @count
|
32
|
+
offset = @offset + @cache.length
|
33
|
+
response = @endpoint.get @params.merge(offset: @cache.length)
|
34
|
+
response.decoded.each do |row| @cache << row
|
35
|
+
yielder << @klass.load(@endpoint, row)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def reload!
|
42
|
+
@cache = (response = @endpoint.get @params).decoded
|
43
|
+
@count, @offset, @limit =
|
44
|
+
response.status == 206 ?
|
45
|
+
response.headers.values_at(*%w(x-total-count x-offset x-limit))
|
46
|
+
.collect { |value| value[0].to_i } : [@cache.length, 0, @cache.length]
|
47
|
+
end
|
48
|
+
|
49
|
+
def limit(value = nil)
|
50
|
+
if value.nil?
|
51
|
+
reload! if @limit.nil?
|
52
|
+
return @limit
|
53
|
+
else
|
54
|
+
self.class.new @endpoint, @klass,
|
55
|
+
@params.merge(limit: value)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def offset(value = nil)
|
60
|
+
if value.nil?
|
61
|
+
reload! if @offset.nil?
|
62
|
+
return @offset
|
63
|
+
else
|
64
|
+
self.class.new @endpoint, @klass,
|
65
|
+
@params.merge(offset: value)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def filter(value)
|
70
|
+
self.class.new @endpoint, @klass,
|
71
|
+
@params.merge(filters: (@params[:filters] || {}).merge(value))
|
72
|
+
end
|
73
|
+
|
74
|
+
def filters
|
75
|
+
@params[:filters].dup
|
76
|
+
end
|
77
|
+
|
78
|
+
def order(value = nil)
|
79
|
+
return @params[:order].dup if value.nil?
|
80
|
+
order = (@params[:order] || []) + (case value
|
81
|
+
when Symbol, String then [value.to_s]
|
82
|
+
when Hash
|
83
|
+
value.collect do |key, direction|
|
84
|
+
direction.to_s == 'desc' ? "-#{key}" : key
|
85
|
+
end
|
86
|
+
end)
|
87
|
+
|
88
|
+
self.class.new @endpoint, @klass,
|
89
|
+
@params.merge(order: order)
|
90
|
+
end
|
91
|
+
|
92
|
+
[:get, :post, :patch, :delete].each do |key|
|
93
|
+
define_method key do |path, params = {}, options = {}|
|
94
|
+
endpoint = (if path.is_a? Hash
|
95
|
+
params, options = [path, params]
|
96
|
+
self.endpoint
|
97
|
+
else self.endpoint[path] end)
|
98
|
+
|
99
|
+
if (response = endpoint.send(key, @params.merge(params), options)).body.length > 2
|
100
|
+
return response.decoded
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def empty?
|
106
|
+
count.zero?
|
107
|
+
end
|
108
|
+
|
109
|
+
def any?(&block)
|
110
|
+
block_given?? super : ! empty?
|
111
|
+
end
|
112
|
+
|
113
|
+
def limit
|
114
|
+
self.reload! if @limit.nil?
|
115
|
+
return @limit
|
116
|
+
end
|
117
|
+
|
118
|
+
def count
|
119
|
+
self.reload! if @count.nil?
|
120
|
+
return @count
|
121
|
+
end
|
122
|
+
|
123
|
+
def [](*args)
|
124
|
+
case (key = args[0])
|
125
|
+
when Fixnum
|
126
|
+
self.offset(key).first
|
127
|
+
when Hash
|
128
|
+
self.filter(key).first
|
129
|
+
when Range
|
130
|
+
self.offset(key.min).first(key.max)
|
131
|
+
when String
|
132
|
+
options = { params: args[1] || {} }.merge args[2] || {}
|
133
|
+
@klass.load(@endpoint[nil, options], 'id' => key).reload!
|
134
|
+
else
|
135
|
+
raise ArgumentError, 'invalid search value type'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def create(attributes = {})
|
140
|
+
@klass.new @endpoint, @endpoint.post(attributes).decoded
|
141
|
+
rescue Tickethub::ResourceInvalid => err
|
142
|
+
@klass.new @endpoint, Tickethub::Response.new(err.response).decoded
|
143
|
+
end
|
144
|
+
|
145
|
+
def scope(key, params = {}, options = {})
|
146
|
+
Tickethub::Collection.new @endpoint[key, options.merge(params: params)], @klass,
|
147
|
+
filters: @filters, order: @order
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/https'
|
3
|
+
|
4
|
+
module Tickethub
|
5
|
+
class Connection
|
6
|
+
UriParser = URI.const_defined?(:Parser) ? URI::Parser.new : URI
|
7
|
+
|
8
|
+
attr_accessor :timeout, :ssl_options
|
9
|
+
attr_reader :endpoint, :timeout, :proxy, :ssl_options
|
10
|
+
|
11
|
+
# The +endpoint+ parameter is required and will set the +endpoint+
|
12
|
+
# attribute to the URI for the remote resource service.
|
13
|
+
def initialize(endpoint, options = {})
|
14
|
+
self.endpoint = endpoint
|
15
|
+
|
16
|
+
options.each do |key, value|
|
17
|
+
self.send("#{key}=", value) unless value.nil?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Set URI for remote service.
|
22
|
+
def endpoint=(endpoint)
|
23
|
+
@endpoint = endpoint.is_a?(URI) ? endpoint : UriParser.parse(endpoint)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Set the proxy for remote service.
|
27
|
+
def proxy=(proxy)
|
28
|
+
@proxy = proxy.is_a?(URI) ? proxy : UriParser.parse(proxy)
|
29
|
+
end
|
30
|
+
|
31
|
+
def get(path, headers = {}, &block)
|
32
|
+
request(:get, path, headers, &block)
|
33
|
+
end
|
34
|
+
|
35
|
+
def delete(path, headers = {}, &block)
|
36
|
+
request(:delete, path, headers, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
def head(path, headers = {}, &block)
|
40
|
+
request(:head, path, headers, &block)
|
41
|
+
end
|
42
|
+
|
43
|
+
def patch(path, body = '', headers = {}, &block)
|
44
|
+
request(:patch, path, body, headers, &block)
|
45
|
+
end
|
46
|
+
|
47
|
+
def post(path, body = '', headers = {}, &block)
|
48
|
+
request(:post, path, body, headers, &block)
|
49
|
+
end
|
50
|
+
|
51
|
+
protected
|
52
|
+
|
53
|
+
# Makes a request to the remote service.
|
54
|
+
def request(method, path, *arguments)
|
55
|
+
response = http.send(method, path, *arguments)
|
56
|
+
handle_response(response)
|
57
|
+
|
58
|
+
rescue Timeout::Error => e
|
59
|
+
raise TimeoutError.new(e.message)
|
60
|
+
rescue OpenSSL::SSL::SSLError => e
|
61
|
+
raise SSLError.new(e.message)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Handles response and error codes from the remote service.
|
65
|
+
def handle_response(response)
|
66
|
+
case response.code.to_i
|
67
|
+
when 301,302
|
68
|
+
raise Redirection.new(response)
|
69
|
+
when 200...400
|
70
|
+
response
|
71
|
+
when 400
|
72
|
+
raise BadRequest.new(response)
|
73
|
+
when 401
|
74
|
+
raise UnauthorizedAccess.new(response)
|
75
|
+
when 403
|
76
|
+
raise ForbiddenAccess.new(response)
|
77
|
+
when 404
|
78
|
+
raise ResourceNotFound.new(response)
|
79
|
+
when 405
|
80
|
+
raise MethodNotAllowed.new(response)
|
81
|
+
when 409
|
82
|
+
raise ResourceConflict.new(response)
|
83
|
+
when 410
|
84
|
+
raise ResourceGone.new(response)
|
85
|
+
when 422
|
86
|
+
raise ResourceInvalid.new(response)
|
87
|
+
when 401...500
|
88
|
+
raise ClientError.new(response)
|
89
|
+
when 500...600
|
90
|
+
raise ServerError.new(response)
|
91
|
+
else
|
92
|
+
raise ConnectionError.new(
|
93
|
+
response, "Unknown response code: #{response.code}"
|
94
|
+
)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Creates new Net::HTTP instance for communication with the
|
99
|
+
# remote service and resources.
|
100
|
+
def http
|
101
|
+
configure_http(new_http)
|
102
|
+
end
|
103
|
+
|
104
|
+
def new_http
|
105
|
+
if proxy
|
106
|
+
Net::HTTP.new(endpoint.host, endpoint.port,
|
107
|
+
proxy.host, proxy.port,
|
108
|
+
proxy.user, proxy.password)
|
109
|
+
else
|
110
|
+
Net::HTTP.new(endpoint.host, endpoint.port)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def configure_http(http)
|
115
|
+
http = apply_ssl_options(http)
|
116
|
+
|
117
|
+
# Net::HTTP timeouts default to 60 seconds.
|
118
|
+
if timeout
|
119
|
+
http.open_timeout = timeout
|
120
|
+
http.read_timeout = timeout
|
121
|
+
end
|
122
|
+
|
123
|
+
http
|
124
|
+
end
|
125
|
+
|
126
|
+
def apply_ssl_options(http)
|
127
|
+
return http unless endpoint.is_a?(URI::HTTPS)
|
128
|
+
|
129
|
+
http.use_ssl = true
|
130
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
131
|
+
return http unless ssl_options
|
132
|
+
|
133
|
+
ssl_options.each do |key, value|
|
134
|
+
http.send("#{key}=", value)
|
135
|
+
end
|
136
|
+
|
137
|
+
http
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'request'
|
2
|
+
require_relative 'response'
|
3
|
+
require_relative 'helpers'
|
4
|
+
|
5
|
+
module Tickethub
|
6
|
+
class Endpoint
|
7
|
+
attr_reader :options, :url
|
8
|
+
|
9
|
+
def initialize(url, options = {})
|
10
|
+
@url = url
|
11
|
+
@options = options
|
12
|
+
end
|
13
|
+
|
14
|
+
def [](suburl, options = {})
|
15
|
+
url = (if suburl.nil? then self.url
|
16
|
+
else
|
17
|
+
suburl = suburl.to_s
|
18
|
+
base = self.url
|
19
|
+
base += "/" unless base =~ /\/$/
|
20
|
+
URI.join(base, suburl).to_s
|
21
|
+
end)
|
22
|
+
|
23
|
+
self.class.new url, Tickethub::Helpers.deep_merge(@options, options)
|
24
|
+
end
|
25
|
+
|
26
|
+
[:get, :post, :delete, :patch].each do |method|
|
27
|
+
define_method method do |params = {}, options = {}|
|
28
|
+
request options.merge(method: method, params: params)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def request(options = {})
|
33
|
+
Tickethub::Request.new(url, Tickethub::Helpers.deep_merge(@options, options)).execute
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Tickethub
|
2
|
+
class Errors
|
3
|
+
|
4
|
+
def initialize(errors)
|
5
|
+
@errors = errors || {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def full_messages_for(attribute)
|
9
|
+
send attribute
|
10
|
+
end
|
11
|
+
|
12
|
+
def on(attribute)
|
13
|
+
@errors[attribute.to_s]
|
14
|
+
end
|
15
|
+
|
16
|
+
def valid?(attribute)
|
17
|
+
send(attribute).empty?
|
18
|
+
end
|
19
|
+
|
20
|
+
def invalid?(attribute)
|
21
|
+
send(attribute).any?
|
22
|
+
end
|
23
|
+
|
24
|
+
def [](key)
|
25
|
+
send key
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
def method_missing(method, *arguments)
|
31
|
+
on(method) || []
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Tickethub
|
2
|
+
class ConnectionError < StandardError # :nodoc:
|
3
|
+
attr_reader :response
|
4
|
+
|
5
|
+
def initialize(response, message = nil)
|
6
|
+
@response = response
|
7
|
+
@message = message
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
message = "Failed."
|
12
|
+
message << " Response code = #{response.code}." if response.respond_to?(:code)
|
13
|
+
message << " Response message = #{response.message}." if response.respond_to?(:message)
|
14
|
+
message << " Response Body = #{response.body}." if response.respond_to?(:body)
|
15
|
+
message
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Raised when a Timeout::Error occurs.
|
20
|
+
class TimeoutError < ConnectionError
|
21
|
+
def initialize(message)
|
22
|
+
@message = message
|
23
|
+
end
|
24
|
+
def to_s; @message ;end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Raised when a OpenSSL::SSL::SSLError occurs.
|
28
|
+
class SSLError < ConnectionError
|
29
|
+
def initialize(message)
|
30
|
+
@message = message
|
31
|
+
end
|
32
|
+
def to_s; @message ;end
|
33
|
+
end
|
34
|
+
|
35
|
+
# 3xx Redirection
|
36
|
+
class Redirection < ConnectionError # :nodoc:
|
37
|
+
def to_s; response['Location'] ? "#{super} => #{response['Location']}" : super; end
|
38
|
+
end
|
39
|
+
|
40
|
+
# 4xx Client Error
|
41
|
+
class ClientError < ConnectionError; end # :nodoc:
|
42
|
+
|
43
|
+
# 400 Bad Request
|
44
|
+
class BadRequest < ClientError; end # :nodoc
|
45
|
+
|
46
|
+
# 401 Unauthorized
|
47
|
+
class UnauthorizedAccess < ClientError; end # :nodoc
|
48
|
+
|
49
|
+
# 403 Forbidden
|
50
|
+
class ForbiddenAccess < ClientError; end # :nodoc
|
51
|
+
|
52
|
+
# 404 Not Found
|
53
|
+
class ResourceNotFound < ClientError; end # :nodoc:
|
54
|
+
|
55
|
+
# 409 Conflict
|
56
|
+
class ResourceConflict < ClientError; end # :nodoc:
|
57
|
+
|
58
|
+
# 410 Gone
|
59
|
+
class ResourceGone < ClientError; end # :nodoc:
|
60
|
+
|
61
|
+
# 422 Invalid
|
62
|
+
class ResourceInvalid < ClientError; end # :nodoc:
|
63
|
+
|
64
|
+
# 5xx Server Error
|
65
|
+
class ServerError < ConnectionError; end # :nodoc:
|
66
|
+
|
67
|
+
# 405 Method Not Allowed
|
68
|
+
class MethodNotAllowed < ClientError # :nodoc:
|
69
|
+
def allowed_methods
|
70
|
+
@response['Allow'].split(',').map { |verb| verb.strip.downcase.to_sym }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Tickethub
|
2
|
+
module Formats
|
3
|
+
class FormFormat < Format
|
4
|
+
def mime_type
|
5
|
+
'application/x-www-form-urlencoded'
|
6
|
+
end
|
7
|
+
|
8
|
+
def encode(params, options = nil)
|
9
|
+
Helpers.to_param(params)
|
10
|
+
end
|
11
|
+
|
12
|
+
def decode(body)
|
13
|
+
body
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
begin
|
2
|
+
require 'json'
|
3
|
+
rescue LoadError => e
|
4
|
+
require 'json/pure'
|
5
|
+
end
|
6
|
+
|
7
|
+
module Tickethub
|
8
|
+
module Formats
|
9
|
+
class JSONFormat < Format
|
10
|
+
def mime_type
|
11
|
+
'application/json'
|
12
|
+
end
|
13
|
+
|
14
|
+
def encode(hash, options = nil)
|
15
|
+
hash.to_json(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def decode(json)
|
19
|
+
JSON.parse(json)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
JsonFormat = JSONFormat
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Tickethub
|
2
|
+
module Formats
|
3
|
+
class Format
|
4
|
+
def mime_type
|
5
|
+
end
|
6
|
+
|
7
|
+
def encode(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def decode(*args)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
MAPPING = {
|
15
|
+
'application/json' => :json
|
16
|
+
}
|
17
|
+
|
18
|
+
def self.for(type)
|
19
|
+
format = MAPPING[type]
|
20
|
+
format && self[format]
|
21
|
+
end
|
22
|
+
|
23
|
+
# Lookup the format class from a mime type reference symbol. Example:
|
24
|
+
#
|
25
|
+
# Tickethub::Formats[:json] # => Tickethub::Formats::JsonFormat
|
26
|
+
def self.[](mime_type_reference)
|
27
|
+
Tickethub::Formats.const_get(Helpers.camelize(mime_type_reference.to_s) + 'Format')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Dir[File.dirname(__FILE__) + '/formats/*.rb'].sort.each do |path|
|
33
|
+
filename = File.basename(path)
|
34
|
+
require_relative "formats/#{filename}"
|
35
|
+
end
|