tickethub 0.1.4 → 0.2.0
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.
- checksums.yaml +4 -4
- data/lib/tickethub.rb +3 -3
- data/lib/tickethub/app.rb +2 -2
- data/lib/tickethub/collection.rb +39 -37
- data/lib/tickethub/endpoint.rb +16 -16
- data/lib/tickethub/helpers.rb +0 -8
- data/lib/tickethub/resource.rb +20 -29
- data/lib/tickethub/supplier.rb +4 -4
- data/lib/tickethub/supplier/option.rb +1 -1
- data/lib/tickethub/token.rb +1 -1
- data/lib/tickethub/user.rb +2 -2
- data/lib/tickethub/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75b7f07212e2ad1e522dbd7aad6d12f182a741dd
|
4
|
+
data.tar.gz: 801f6f6e85e89700f476424154fd922fd6948e94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84b02aa3524c5bc2d21a344179a9719a70c88436b6567eb82cea112708af6984b3f8a9d375c8e04cc122d3ce52e9f9bb901608214d531bb10863952164d64758
|
7
|
+
data.tar.gz: 108ddb446e8a39ce8513ebbf63c359a82ae34ca59c92c65db8e3811b574797313fe82ee500b53475a4382e65c0f104a5f19187ab5042f163690cd0c1205c6791
|
data/lib/tickethub.rb
CHANGED
@@ -4,9 +4,9 @@ module Tickethub
|
|
4
4
|
@path = path
|
5
5
|
end
|
6
6
|
|
7
|
-
def self.endpoint
|
8
|
-
Endpoint.new @path || 'https://api.tickethub.io', format: :json,
|
9
|
-
headers: { 'Accept-Version' => 'v1', 'Accept' => 'application/json' }
|
7
|
+
def self.endpoint(options = {})
|
8
|
+
Endpoint.new @path || 'https://api.tickethub.io', options.merge(format: :json,
|
9
|
+
headers: { 'Accept-Version' => 'v1', 'Accept' => 'application/json' })
|
10
10
|
end
|
11
11
|
|
12
12
|
require_relative 'tickethub/helpers'
|
data/lib/tickethub/app.rb
CHANGED
@@ -24,8 +24,8 @@ module Tickethub
|
|
24
24
|
attributes ||= endpoint.get
|
25
25
|
|
26
26
|
if attributes['token']
|
27
|
-
endpoint = Tickethub.endpoint
|
28
|
-
|
27
|
+
endpoint = Tickethub.endpoint(auth_type: :bearer,
|
28
|
+
password: attributes['token']['access_token'])[self.class.path]
|
29
29
|
end
|
30
30
|
|
31
31
|
super(endpoint, attributes)
|
data/lib/tickethub/collection.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
require 'cgi'
|
1
2
|
require_relative 'helpers'
|
2
3
|
|
3
4
|
module Tickethub
|
4
5
|
class Collection < Enumerator
|
5
6
|
attr_accessor :cache
|
6
|
-
attr_reader :count, :endpoint
|
7
|
+
attr_reader :count, :endpoint, :params
|
7
8
|
|
8
9
|
def initialize(endpoint, klass, params = {})
|
9
10
|
@params = params.dup
|
@@ -13,7 +14,7 @@ module Tickethub
|
|
13
14
|
klass.registered_types.each do |type, options|
|
14
15
|
define_singleton_method type do
|
15
16
|
instance_variable_defined?("@#{type}") ? instance_variable_get("@#{type}") :
|
16
|
-
instance_variable_set("@#{type}", Tickethub::Collection.new(
|
17
|
+
instance_variable_set("@#{type}", Tickethub::Collection.new(endpoint[type], options[:klass]))
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
@@ -22,27 +23,28 @@ module Tickethub
|
|
22
23
|
end
|
23
24
|
|
24
25
|
super() do |yielder|
|
25
|
-
self.reload! if
|
26
|
+
self.reload! if cache.nil?
|
26
27
|
|
27
|
-
|
28
|
-
yielder << @klass.load(
|
28
|
+
cache.each do |row|
|
29
|
+
yielder << @klass.load(endpoint, row)
|
29
30
|
end
|
30
31
|
|
31
|
-
while (
|
32
|
-
response =
|
33
|
-
response.decoded.each do |row|
|
34
|
-
yielder << @klass.load(
|
32
|
+
while (offset + cache.length) < count
|
33
|
+
response = endpoint.get params.merge(offset: cache.length)
|
34
|
+
response.decoded.each do |row| cache << row
|
35
|
+
yielder << @klass.load(endpoint, row)
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
40
41
|
def reload!
|
41
|
-
@cache = (response =
|
42
|
+
@cache = (response = endpoint.get params).decoded
|
42
43
|
@count, @offset, @limit =
|
43
44
|
response.status == 206 ?
|
44
45
|
response.headers.values_at(*%w(x-total-count x-offset x-limit))
|
45
46
|
.collect { |value| value[0].to_i } : [@cache.length, 0, @cache.length]
|
47
|
+
return self
|
46
48
|
end
|
47
49
|
|
48
50
|
def last
|
@@ -54,8 +56,8 @@ module Tickethub
|
|
54
56
|
reload! if @limit.nil?
|
55
57
|
return @limit
|
56
58
|
else
|
57
|
-
self.class.new
|
58
|
-
|
59
|
+
self.class.new endpoint, @klass,
|
60
|
+
params.merge(limit: value)
|
59
61
|
end
|
60
62
|
end
|
61
63
|
|
@@ -64,23 +66,23 @@ module Tickethub
|
|
64
66
|
reload! if @offset.nil?
|
65
67
|
return @offset
|
66
68
|
else
|
67
|
-
self.class.new
|
68
|
-
|
69
|
+
self.class.new endpoint, @klass,
|
70
|
+
params.merge(offset: value)
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
72
74
|
def filter(value)
|
73
|
-
self.class.new
|
74
|
-
|
75
|
+
self.class.new endpoint, @klass,
|
76
|
+
params.merge(filters: filters.merge(value))
|
75
77
|
end
|
76
78
|
|
77
79
|
def filters
|
78
|
-
|
80
|
+
(params[:filters] || {}).dup
|
79
81
|
end
|
80
82
|
|
81
83
|
def order(value = nil)
|
82
|
-
return
|
83
|
-
order = (
|
84
|
+
return params[:order].dup if value.nil?
|
85
|
+
order = (params[:order] || []) + (case value
|
84
86
|
when Symbol, String then [value.to_s]
|
85
87
|
when Hash
|
86
88
|
value.collect do |key, direction|
|
@@ -88,18 +90,23 @@ module Tickethub
|
|
88
90
|
end
|
89
91
|
end)
|
90
92
|
|
91
|
-
self.class.new
|
92
|
-
|
93
|
+
self.class.new endpoint, @klass,
|
94
|
+
params.merge(order: order)
|
95
|
+
end
|
96
|
+
|
97
|
+
def scope(path, params = {})
|
98
|
+
self.class.new endpoint[path], @klass,
|
99
|
+
self.params.merge(params)
|
93
100
|
end
|
94
101
|
|
95
102
|
[:get, :post, :patch, :delete].each do |key|
|
96
|
-
define_method key do |path, params = {}
|
103
|
+
define_method key do |path, params = {}|
|
97
104
|
endpoint = (if path.is_a? Hash
|
98
105
|
params, options = [path, params]
|
99
106
|
self.endpoint
|
100
107
|
else self.endpoint[path] end)
|
101
108
|
|
102
|
-
if (response = endpoint.send(key,
|
109
|
+
if (response = endpoint.send(key, self.params.merge(params))).body.length > 2
|
103
110
|
return response.decoded
|
104
111
|
end
|
105
112
|
end
|
@@ -123,31 +130,26 @@ module Tickethub
|
|
123
130
|
return @count
|
124
131
|
end
|
125
132
|
|
126
|
-
def [](
|
127
|
-
case
|
133
|
+
def [](search)
|
134
|
+
case search
|
128
135
|
when Fixnum
|
129
|
-
self.offset(
|
136
|
+
self.offset(search).first
|
130
137
|
when Hash
|
131
|
-
self.filter(
|
138
|
+
self.filter(search).first
|
132
139
|
when Range
|
133
|
-
self.offset(
|
140
|
+
self.offset(search.min).first(search.max)
|
134
141
|
when String
|
135
|
-
|
136
|
-
@klass.load
|
142
|
+
endpoint = self.endpoint[@klass.path, CGI::escape(search)]
|
143
|
+
@klass.load endpoint, endpoint.get(params)
|
137
144
|
else
|
138
145
|
raise ArgumentError, 'invalid search value type'
|
139
146
|
end
|
140
147
|
end
|
141
148
|
|
142
149
|
def create(attributes = {})
|
143
|
-
@klass.load
|
150
|
+
@klass.load endpoint, post(attributes)
|
144
151
|
rescue Tickethub::ResourceInvalid => err
|
145
|
-
@klass.load
|
146
|
-
end
|
147
|
-
|
148
|
-
def scope(key, params = {}, options = {})
|
149
|
-
Tickethub::Collection.new @endpoint[key, options.merge(params: params)], @klass,
|
150
|
-
filters: @filters, order: @order
|
152
|
+
@klass.load endpoint, Tickethub::Response.new(err.response).decoded
|
151
153
|
end
|
152
154
|
end
|
153
155
|
end
|
data/lib/tickethub/endpoint.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
1
3
|
require_relative 'request'
|
2
4
|
require_relative 'response'
|
3
5
|
require_relative 'helpers'
|
@@ -6,31 +8,29 @@ module Tickethub
|
|
6
8
|
class Endpoint
|
7
9
|
attr_reader :options, :url
|
8
10
|
|
9
|
-
def initialize(url, options
|
10
|
-
@url = url
|
11
|
+
def initialize(url, options)
|
12
|
+
@url = _normalize_path url
|
11
13
|
@options = options
|
12
14
|
end
|
13
15
|
|
14
|
-
def [](
|
15
|
-
|
16
|
-
|
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)
|
16
|
+
def [](*parts)
|
17
|
+
parts = parts.compact.map { |part| _normalize_path part.to_s }
|
18
|
+
self.class.new URI.join(url, *parts).to_s, @options
|
24
19
|
end
|
25
20
|
|
26
21
|
[:get, :post, :delete, :patch].each do |method|
|
27
|
-
define_method method do |params = {}
|
28
|
-
request options.merge(method: method
|
22
|
+
define_method method do |params = {}|
|
23
|
+
request params, options.merge(method: method)
|
29
24
|
end
|
30
25
|
end
|
31
26
|
|
32
|
-
def request(options
|
33
|
-
|
27
|
+
def request(params, options)
|
28
|
+
raise 'this endpoint is readonly' if frozen?
|
29
|
+
Tickethub::Request.new(url, options.merge(params: params)).execute
|
30
|
+
end
|
31
|
+
|
32
|
+
def _normalize_path(str)
|
33
|
+
str.match(/\/$/) ? str : "#{str}/"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
data/lib/tickethub/helpers.rb
CHANGED
@@ -10,14 +10,6 @@ module Tickethub
|
|
10
10
|
value.to_s.split('_').map {|w| w.capitalize }.join
|
11
11
|
end
|
12
12
|
|
13
|
-
def deep_merge(hash, other_hash)
|
14
|
-
hash.merge(other_hash) do |key, oldval, newval|
|
15
|
-
oldval = oldval.to_hash if oldval.respond_to?(:to_hash)
|
16
|
-
newval = newval.to_hash if newval.respond_to?(:to_hash)
|
17
|
-
oldval.class.to_s == 'Hash' && newval.class.to_s == 'Hash' ? deep_merge(oldval, newval) : newval
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
13
|
# Stolen from Rack:
|
22
14
|
|
23
15
|
DEFAULT_SEP = /[&;] */n
|
data/lib/tickethub/resource.rb
CHANGED
@@ -10,14 +10,14 @@ module Tickethub
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
|
13
|
-
def
|
14
|
-
@
|
15
|
-
@options = options
|
13
|
+
def singleton?
|
14
|
+
!! @singleton
|
16
15
|
end
|
17
16
|
|
18
|
-
def
|
19
|
-
return
|
20
|
-
|
17
|
+
def path(value = nil, singleton: false)
|
18
|
+
return @path || (superclass.respond_to?(:path) ? superclass.path : nil) if value.nil?
|
19
|
+
@singleton = singleton
|
20
|
+
@path = value
|
21
21
|
end
|
22
22
|
|
23
23
|
def registered_types
|
@@ -151,9 +151,12 @@ module Tickethub
|
|
151
151
|
end
|
152
152
|
|
153
153
|
klass = klass ? klass[1][:klass] : self
|
154
|
-
|
155
|
-
|
156
|
-
|
154
|
+
endpoint = if klass.singleton?
|
155
|
+
endpoint[klass.path]
|
156
|
+
elsif id = attributes['id']
|
157
|
+
endpoint[klass.path, id]
|
158
|
+
else # readonly
|
159
|
+
endpoint[klass.path].freeze
|
157
160
|
end
|
158
161
|
|
159
162
|
klass.new endpoint, attributes
|
@@ -161,30 +164,18 @@ module Tickethub
|
|
161
164
|
|
162
165
|
def self.association(key, klass, path: key)
|
163
166
|
define_method key do
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
define_method "#{key}=" do |value|
|
169
|
-
instance_variable_set "@#{key}", ((value.nil? || value.is_a?(klass)) ? value :
|
170
|
-
klass.load(@endpoint[path], value))
|
167
|
+
@attributes.key?(key.to_sym) ?
|
168
|
+
(attrs = @attributes[key.to_sym]) &&
|
169
|
+
klass.load(@endpoint[path], attrs) :
|
170
|
+
klass.load(@endpoint[path])
|
171
171
|
end
|
172
172
|
end
|
173
173
|
|
174
174
|
def self.collection(key, klass, path: key, &block)
|
175
175
|
define_method key do |params = {}|
|
176
|
-
(
|
177
|
-
|
178
|
-
|
179
|
-
collection.instance_eval &block if block
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
define_method "#{key}=" do |values|
|
184
|
-
instance_variable_set "@#{key}", id??
|
185
|
-
(Tickethub::Collection.new(@endpoint[path], klass).tap do |collection|
|
186
|
-
collection.cache = values
|
187
|
-
end) : values.collect { |value| klass.load @endpoint, value }
|
176
|
+
Tickethub::Collection.new(@endpoint[path], klass, params).tap do |collection|
|
177
|
+
collection.instance_eval &block if block
|
178
|
+
end
|
188
179
|
end
|
189
180
|
end
|
190
181
|
|
@@ -246,7 +237,7 @@ module Tickethub
|
|
246
237
|
end
|
247
238
|
|
248
239
|
def hash
|
249
|
-
id?? id.hash : super
|
240
|
+
id?? [self.class, id].hash : super
|
250
241
|
end
|
251
242
|
|
252
243
|
def to_param
|
data/lib/tickethub/supplier.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Tickethub
|
2
2
|
class Supplier < Resource
|
3
|
-
path '/supplier'
|
3
|
+
path '/supplier', singleton: true
|
4
4
|
|
5
5
|
require_relative 'supplier/bill'
|
6
6
|
require_relative 'supplier/customer'
|
@@ -66,15 +66,15 @@ module Tickethub
|
|
66
66
|
def self.[](attributes)
|
67
67
|
token = attributes[:token].is_a?(String) ? attributes[:token]
|
68
68
|
: attributes[:token][:access_token]
|
69
|
-
self.
|
69
|
+
self.load Tickethub.endpoint(auth_type: :bearer, password: token)[path]
|
70
70
|
end
|
71
71
|
|
72
72
|
def initialize(endpoint, attributes = nil)
|
73
73
|
attributes ||= endpoint.get
|
74
74
|
|
75
75
|
if attributes['token']
|
76
|
-
endpoint = Tickethub.endpoint
|
77
|
-
|
76
|
+
endpoint = Tickethub.endpoint(auth_type: :bearer,
|
77
|
+
password: attributes['token']['access_token'])[self.class.path]
|
78
78
|
end
|
79
79
|
|
80
80
|
super(endpoint, attributes)
|
@@ -4,7 +4,7 @@ module Tickethub
|
|
4
4
|
class Supplier::Option < Resource
|
5
5
|
path '/supplier/options'
|
6
6
|
|
7
|
-
scope :dates, -> (params) { @endpoint[:dates
|
7
|
+
scope :dates, -> (params) { @endpoint[:dates].get(params).decoded }
|
8
8
|
scope :active
|
9
9
|
|
10
10
|
require_relative 'season'
|
data/lib/tickethub/token.rb
CHANGED
data/lib/tickethub/user.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Tickethub
|
2
2
|
class User < Resource
|
3
|
-
path '/user'
|
3
|
+
path '/user', singleton: true
|
4
4
|
|
5
5
|
require_relative 'user/app'
|
6
6
|
require_relative 'user/supplier'
|
@@ -27,7 +27,7 @@ module Tickethub
|
|
27
27
|
: attributes[:token][:access_token]
|
28
28
|
end
|
29
29
|
|
30
|
-
endpoint = Tickethub.endpoint
|
30
|
+
endpoint = Tickethub.endpoint(auth_type: :bearer, password: token)['/user']
|
31
31
|
self.new endpoint
|
32
32
|
end
|
33
33
|
|
data/lib/tickethub/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tickethub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oliver Morgan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|