eventbrite_sdk 3.1.1 → 3.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/lib/eventbrite_sdk.rb +8 -8
- data/lib/eventbrite_sdk/attendee.rb +2 -2
- data/lib/eventbrite_sdk/blank_resource_list.rb +9 -0
- data/lib/eventbrite_sdk/event.rb +6 -8
- data/lib/eventbrite_sdk/media.rb +3 -6
- data/lib/eventbrite_sdk/order.rb +3 -3
- data/lib/eventbrite_sdk/organizer.rb +2 -2
- data/lib/eventbrite_sdk/report.rb +3 -4
- data/lib/eventbrite_sdk/resource.rb +11 -11
- data/lib/eventbrite_sdk/resource/attributes.rb +11 -73
- data/lib/eventbrite_sdk/resource/field.rb +90 -0
- data/lib/eventbrite_sdk/resource/field_comparable.rb +13 -0
- data/lib/eventbrite_sdk/resource/null_schema_definition.rb +4 -0
- data/lib/eventbrite_sdk/resource/schema_definition.rb +51 -8
- data/lib/eventbrite_sdk/resource_list.rb +9 -9
- data/lib/eventbrite_sdk/ticket_class.rb +3 -3
- data/lib/eventbrite_sdk/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6c4ed26197ecfa0bb499f4c5f35669dcfeb8559
|
4
|
+
data.tar.gz: 101b6680b4e1d1d3c4be36cb49117def4e71ac5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2987dfccde3bbb93dcac5d4222eed4c8fb65354b0463a98c5d6d32f3d4652c3c4cffe60ec2b1a216647144545b206c74bb10258ba1f576f32cdbe1dbeedc16d
|
7
|
+
data.tar.gz: d1f4cf26821103f143e91fede4e3b3854132c38cac55470d69e0b081937a82bcaac3c03eb357e0da07de3846310f7839b7cf22436c31866f0900aa20bf2e165d
|
data/.gitignore
CHANGED
data/lib/eventbrite_sdk.rb
CHANGED
@@ -14,6 +14,8 @@ require 'eventbrite_sdk/resource/null_schema_definition'
|
|
14
14
|
require 'eventbrite_sdk/resource/schema_definition'
|
15
15
|
require 'eventbrite_sdk/blank_resource_list'
|
16
16
|
require 'eventbrite_sdk/resource'
|
17
|
+
require 'eventbrite_sdk/resource/field'
|
18
|
+
require 'eventbrite_sdk/resource/field_comparable'
|
17
19
|
require 'eventbrite_sdk/resource_list'
|
18
20
|
|
19
21
|
require 'eventbrite_sdk/lists/owned_event_orders_list'
|
@@ -36,23 +38,23 @@ module EventbriteSDK
|
|
36
38
|
EXCEPTION_MAP = {
|
37
39
|
RestClient::ResourceNotFound => {
|
38
40
|
class: ResourceNotFound,
|
39
|
-
message: 'requested object was not found'
|
41
|
+
message: 'requested object was not found'
|
40
42
|
},
|
41
43
|
RestClient::BadRequest => {
|
42
44
|
class: BadRequest,
|
43
|
-
message: 'invalid request'
|
45
|
+
message: 'invalid request'
|
44
46
|
},
|
45
47
|
RestClient::Forbidden => {
|
46
48
|
class: Forbidden,
|
47
|
-
message: 'not authorized'
|
49
|
+
message: 'not authorized'
|
48
50
|
},
|
49
51
|
RestClient::InternalServerError => {
|
50
52
|
class: InternalServerError,
|
51
|
-
message: 'internal server error'
|
53
|
+
message: 'internal server error'
|
52
54
|
},
|
53
55
|
RestClient::Unauthorized => {
|
54
56
|
class: Unauthorized,
|
55
|
-
message: 'unauthorized request'
|
57
|
+
message: 'unauthorized request'
|
56
58
|
}
|
57
59
|
}.freeze
|
58
60
|
THREAD_EB_API_TOKEN_KEY = :eb_api_token
|
@@ -101,9 +103,7 @@ module EventbriteSDK
|
|
101
103
|
#
|
102
104
|
# BadRequest is raised when you publish an event because the body sent is
|
103
105
|
# "null" (invalid json) and the API rejects it.
|
104
|
-
if params[:payload]
|
105
|
-
params[:payload] = params[:payload].to_json
|
106
|
-
end
|
106
|
+
params[:payload] = params[:payload].to_json if params[:payload]
|
107
107
|
|
108
108
|
request(params)
|
109
109
|
end
|
@@ -18,8 +18,8 @@ module EventbriteSDK
|
|
18
18
|
integer 'quantity'
|
19
19
|
string 'profile'
|
20
20
|
string 'costs'
|
21
|
-
|
22
|
-
|
21
|
+
utc 'created', read_only: true
|
22
|
+
utc 'changed', read_only: true
|
23
23
|
string 'resource_uri', read_only: true
|
24
24
|
end
|
25
25
|
end
|
@@ -34,5 +34,14 @@ module EventbriteSDK
|
|
34
34
|
def to_json(opts = {})
|
35
35
|
{ @key => [] }.to_json(opts)
|
36
36
|
end
|
37
|
+
|
38
|
+
# Blank lists need to respond to the pagination helpers.
|
39
|
+
def object_count
|
40
|
+
0
|
41
|
+
end
|
42
|
+
|
43
|
+
%i(page_count page_number page_size).each do |name|
|
44
|
+
define_method(name) { 1 }
|
45
|
+
end
|
37
46
|
end
|
38
47
|
end
|
data/lib/eventbrite_sdk/event.rb
CHANGED
@@ -21,13 +21,11 @@ module EventbriteSDK
|
|
21
21
|
has_many :ticket_classes, object_class: 'TicketClass'
|
22
22
|
|
23
23
|
schema_definition do
|
24
|
-
|
25
|
-
|
24
|
+
multipart 'name'
|
25
|
+
multipart 'description'
|
26
26
|
string 'organizer_id'
|
27
|
-
datetime 'start
|
28
|
-
datetime '
|
29
|
-
datetime 'end.utc'
|
30
|
-
datetime 'end.timezone'
|
27
|
+
datetime 'start'
|
28
|
+
datetime 'end'
|
31
29
|
boolean 'hide_start_date'
|
32
30
|
boolean 'hide_end_date'
|
33
31
|
string 'currency'
|
@@ -45,8 +43,8 @@ module EventbriteSDK
|
|
45
43
|
boolean 'show_remaining'
|
46
44
|
string 'source'
|
47
45
|
string 'status', read_only: true
|
48
|
-
|
49
|
-
|
46
|
+
utc 'created', read_only: true
|
47
|
+
utc 'changed', read_only: true
|
50
48
|
string 'resource_uri', read_only: true
|
51
49
|
end
|
52
50
|
|
data/lib/eventbrite_sdk/media.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module EventbriteSDK
|
2
2
|
# This module implements media upload to Eventbrite based on:
|
3
3
|
# https://docs.evbhome.com/apidocs/reference/uploads/?highlight=logo
|
4
|
-
|
5
4
|
class Media < Resource
|
6
5
|
resource_path 'media/:id'
|
7
6
|
|
@@ -11,7 +10,7 @@ module EventbriteSDK
|
|
11
10
|
event_logo: 'image-event-logo',
|
12
11
|
organizer_logo: 'image-organizer-logo',
|
13
12
|
user_photo: 'image-user-photo',
|
14
|
-
event_view_from_seat: 'image-event-view-from-seat'
|
13
|
+
event_view_from_seat: 'image-event-view-from-seat'
|
15
14
|
}.freeze
|
16
15
|
|
17
16
|
schema_definition do
|
@@ -46,9 +45,7 @@ module EventbriteSDK
|
|
46
45
|
type = VALID_TYPES[image_type]
|
47
46
|
|
48
47
|
unless type
|
49
|
-
raise ArgumentError.
|
50
|
-
"image_type needs to be one of #{VALID_TYPES.keys}"
|
51
|
-
)
|
48
|
+
raise ArgumentError, "image_type needs to be one of #{VALID_TYPES.keys}"
|
52
49
|
end
|
53
50
|
|
54
51
|
request.get(url: path('upload'), query: { type: type })
|
@@ -58,7 +55,7 @@ module EventbriteSDK
|
|
58
55
|
RestClient.post(
|
59
56
|
instructions['upload_url'],
|
60
57
|
instructions['upload_data'].merge(file: file),
|
61
|
-
multipart: true
|
58
|
+
multipart: true
|
62
59
|
)
|
63
60
|
end
|
64
61
|
|
data/lib/eventbrite_sdk/order.rb
CHANGED
@@ -6,7 +6,7 @@ module EventbriteSDK
|
|
6
6
|
#
|
7
7
|
# When an event has an id the POST is made, otherwise we return false
|
8
8
|
# POSTS to order/:id/(resend_confirmation_email|refunds)
|
9
|
-
define_api_actions :resend_confirmation_email,
|
9
|
+
define_api_actions :resend_confirmation_email, refund: :refunds
|
10
10
|
|
11
11
|
has_many :attendees, object_class: 'Attendee'
|
12
12
|
belongs_to :event, object_class: 'Event'
|
@@ -17,8 +17,8 @@ module EventbriteSDK
|
|
17
17
|
string 'last_name'
|
18
18
|
string 'email'
|
19
19
|
string 'costs'
|
20
|
-
|
21
|
-
|
20
|
+
utc 'created', read_only: true
|
21
|
+
utc 'changed', read_only: true
|
22
22
|
string 'resource_uri', read_only: true
|
23
23
|
end
|
24
24
|
end
|
@@ -1,15 +1,14 @@
|
|
1
1
|
module EventbriteSDK
|
2
2
|
class Report
|
3
|
-
STRING_KEYS = %i
|
3
|
+
STRING_KEYS = %i[
|
4
4
|
start_date
|
5
5
|
end_date
|
6
6
|
date_facet
|
7
7
|
event_status
|
8
8
|
timezone
|
9
9
|
group_by
|
10
|
-
|
11
|
-
|
12
|
-
VALID_REPORTS = %i(attendees sales).freeze
|
10
|
+
].freeze
|
11
|
+
VALID_REPORTS = %i[attendees sales].freeze
|
13
12
|
|
14
13
|
def initialize
|
15
14
|
@query = {}
|
@@ -27,7 +27,7 @@ module EventbriteSDK
|
|
27
27
|
# !new? && EventbriteSDK.post(url: path('unpublish'))
|
28
28
|
# end
|
29
29
|
def self.define_api_actions(*actions)
|
30
|
-
req =
|
30
|
+
req = lambda do |inst, postfix|
|
31
31
|
inst.instance_eval { !new? && EventbriteSDK.post(url: path(postfix)) }
|
32
32
|
end
|
33
33
|
|
@@ -51,10 +51,10 @@ module EventbriteSDK
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def refresh!(request: EventbriteSDK, api_token: nil)
|
54
|
-
|
55
|
-
reload request.get(url: path, api_token: api_token)
|
56
|
-
else
|
54
|
+
if new?
|
57
55
|
false
|
56
|
+
else
|
57
|
+
reload request.get(url: path, api_token: api_token)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -63,15 +63,15 @@ module EventbriteSDK
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def save(postfixed_path = '', api_token: nil, request: EventbriteSDK)
|
66
|
-
|
67
|
-
response = request.post(url: path(postfixed_path),
|
68
|
-
payload: attrs.payload(self.class.prefix),
|
69
|
-
api_token: api_token)
|
66
|
+
return unless changed? || !postfixed_path.empty?
|
70
67
|
|
71
|
-
|
68
|
+
response = request.post(url: path(postfixed_path),
|
69
|
+
payload: attrs.payload(self.class.prefix),
|
70
|
+
api_token: api_token)
|
72
71
|
|
73
|
-
|
74
|
-
|
72
|
+
reload(response)
|
73
|
+
|
74
|
+
true
|
75
75
|
end
|
76
76
|
|
77
77
|
def to_json(opts = {})
|
@@ -1,11 +1,6 @@
|
|
1
1
|
module EventbriteSDK
|
2
2
|
class Resource
|
3
3
|
class Attributes
|
4
|
-
SISTER_FIELDS = {
|
5
|
-
'timezone' => 'utc',
|
6
|
-
'utc' => 'timezone'
|
7
|
-
}.freeze
|
8
|
-
|
9
4
|
attr_reader :attrs, :changes
|
10
5
|
|
11
6
|
def self.build(attrs, schema)
|
@@ -15,14 +10,13 @@ module EventbriteSDK
|
|
15
10
|
end
|
16
11
|
|
17
12
|
def initialize(hydrated_attrs = {}, schema = NullSchemaDefinition.new)
|
18
|
-
@attrs = {}
|
19
13
|
@changes = {}
|
20
14
|
@schema = schema
|
21
15
|
|
22
16
|
# Build out initial hash based on schema's defined keys
|
23
|
-
schema.defined_keys.
|
24
|
-
|
25
|
-
|
17
|
+
@attrs = schema.defined_keys.each_with_object({}) do |key, attrs|
|
18
|
+
Field.new(key, nil).bury(attrs)
|
19
|
+
end.merge(stringify_keys(hydrated_attrs))
|
26
20
|
end
|
27
21
|
|
28
22
|
def [](key)
|
@@ -31,7 +25,8 @@ module EventbriteSDK
|
|
31
25
|
|
32
26
|
def assign_attributes(new_attrs)
|
33
27
|
stringify_keys(new_attrs).each do |attribute_key, value|
|
34
|
-
|
28
|
+
value = Field.new(attribute_key, value, schema: schema)
|
29
|
+
changes.merge! value.apply(attrs, changes)
|
35
30
|
end
|
36
31
|
|
37
32
|
nil
|
@@ -55,7 +50,7 @@ module EventbriteSDK
|
|
55
50
|
|
56
51
|
def reset!
|
57
52
|
changes.each do |attribute_key, (old_value, _current_value)|
|
58
|
-
|
53
|
+
Field.new(attribute_key, old_value).bury(attrs)
|
59
54
|
end
|
60
55
|
|
61
56
|
@changes = {}
|
@@ -68,18 +63,12 @@ module EventbriteSDK
|
|
68
63
|
# prefix: This is needed due to inconsistencies in the EB API
|
69
64
|
# Sometimes there's a prefix, sometimes there's not,
|
70
65
|
# sometimes it's singular, sometimes it's plural.
|
71
|
-
# Once the API gets a bit more
|
72
|
-
#
|
66
|
+
# Once the API gets a bit more normalized we can remove this
|
67
|
+
# altogether and infer a prefix based
|
73
68
|
# on the class name of the resource
|
74
69
|
def payload(prefix = nil)
|
75
70
|
changes.each_with_object({}) do |(attribute_key, (_, value)), payload|
|
76
|
-
|
77
|
-
"#{prefix}.#{attribute_key}"
|
78
|
-
else
|
79
|
-
attribute_key
|
80
|
-
end
|
81
|
-
|
82
|
-
bury(key, value, payload)
|
71
|
+
Field.new(attribute_key, value, prefix: prefix).bury(payload)
|
83
72
|
end
|
84
73
|
end
|
85
74
|
|
@@ -91,52 +80,10 @@ module EventbriteSDK
|
|
91
80
|
|
92
81
|
attr_reader :schema
|
93
82
|
|
94
|
-
def assign_value(attribute_key, value)
|
95
|
-
dirty_check(attribute_key, value)
|
96
|
-
add_rich_value(attribute_key)
|
97
|
-
bury_attribute(attribute_key, value)
|
98
|
-
end
|
99
|
-
|
100
|
-
def dirty_check(attribute_key, value)
|
101
|
-
initial_value = attrs.dig(*attribute_key.split('.'))
|
102
|
-
|
103
|
-
if initial_value != value
|
104
|
-
changes[attribute_key] = [initial_value, value]
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
def bury_attribute(attribute_key, value)
|
109
|
-
bury(attribute_key, value, attrs)
|
110
|
-
end
|
111
|
-
|
112
|
-
# Since we use dirty checking to determine what the payload is
|
113
|
-
# you can run into a case where a "rich media" field needs other attrs
|
114
|
-
# Namely timezone, so if a rich date changed, add the tz with it.
|
115
|
-
def add_rich_value(attribute_key)
|
116
|
-
if changes[attribute_key] && attribute_key =~ /\A(.+)\.(utc|timezone)\z/
|
117
|
-
field = Regexp.last_match(2)
|
118
|
-
key_prefix = Regexp.last_match(1)
|
119
|
-
|
120
|
-
handle_sister_field(key_prefix, field)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def bury(attribute_key, value, hash = {})
|
125
|
-
keys = attribute_key.split '.'
|
126
|
-
|
127
|
-
# Hand rolling #bury
|
128
|
-
# hopefully we get it in the next release of Ruby
|
129
|
-
keys.each_cons(2).reduce(hash) do |prev_attrs, (key, _)|
|
130
|
-
prev_attrs[key] ||= {}
|
131
|
-
end[keys.last] = value
|
132
|
-
|
133
|
-
hash
|
134
|
-
end
|
135
|
-
|
136
83
|
def method_missing(method_name, *_args, &_block)
|
137
84
|
requested_key = method_name.to_s
|
138
85
|
|
139
|
-
if attrs.
|
86
|
+
if attrs.key?(requested_key)
|
140
87
|
handle_requested_attr(attrs[requested_key])
|
141
88
|
else
|
142
89
|
super
|
@@ -144,16 +91,7 @@ module EventbriteSDK
|
|
144
91
|
end
|
145
92
|
|
146
93
|
def respond_to_missing?(method_name, _include_private = false)
|
147
|
-
attrs.
|
148
|
-
end
|
149
|
-
|
150
|
-
def handle_sister_field(key_prefix, field)
|
151
|
-
sister_field = SISTER_FIELDS[field]
|
152
|
-
stale_value = attrs.dig(key_prefix, sister_field)
|
153
|
-
|
154
|
-
unless changes["#{key_prefix}.#{sister_field}"]
|
155
|
-
changes["#{key_prefix}.#{sister_field}"] = [stale_value, stale_value]
|
156
|
-
end
|
94
|
+
attrs.key?(method_name.to_s) || super
|
157
95
|
end
|
158
96
|
|
159
97
|
def handle_requested_attr(value)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module EventbriteSDK
|
2
|
+
class Resource
|
3
|
+
class Field
|
4
|
+
SIBLING_KEYMAP = { 'timezone' => 'utc', 'utc' => 'timezone' }.freeze
|
5
|
+
SIBLING_REGEX = /\A(.+)\.(utc|timezone)\z/
|
6
|
+
|
7
|
+
attr_reader :key, :value, :initial_value
|
8
|
+
|
9
|
+
def initialize(key, value, prefix: nil, schema: NullSchemaDefinition.new)
|
10
|
+
@key = (prefix && "#{prefix}.#{key}") || key
|
11
|
+
@schema = schema
|
12
|
+
@value = value
|
13
|
+
@datetime = false
|
14
|
+
end
|
15
|
+
|
16
|
+
def changes(attrs, changes)
|
17
|
+
%i[basic_changes rich_changes].reduce({}) do |diff, method|
|
18
|
+
diff.merge send(method, attrs, changes)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def keys
|
23
|
+
key.split('.')
|
24
|
+
end
|
25
|
+
|
26
|
+
def writeable?
|
27
|
+
schema.writeable?(key)
|
28
|
+
end
|
29
|
+
|
30
|
+
def apply(attrs, existing_changes)
|
31
|
+
if writeable?
|
32
|
+
changes(attrs, existing_changes).tap { bury(attrs) }
|
33
|
+
else
|
34
|
+
{}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def bury(hash = {})
|
39
|
+
nested_keys = keys
|
40
|
+
# Hand rolling #bury, hopefully we get it in the next release of Ruby.
|
41
|
+
# UPDATE: we won't https://bugs.ruby-lang.org/issues/11747
|
42
|
+
nested_keys.each_cons(2).reduce(hash) do |prev_attrs, (nkey, _)|
|
43
|
+
prev_attrs[nkey] ||= {}
|
44
|
+
end[nested_keys.last] = value
|
45
|
+
|
46
|
+
hash
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
attr_reader :datetime, :schema
|
52
|
+
|
53
|
+
def basic_changes(attrs, _changes)
|
54
|
+
@initial_value = attrs.dig(*keys)
|
55
|
+
comp_value = schema.dirty_comparable(self)
|
56
|
+
|
57
|
+
(comp_value != value && { key => [initial_value, value] }) || {}
|
58
|
+
end
|
59
|
+
|
60
|
+
def rich_changes(attrs, changes)
|
61
|
+
if key =~ SIBLING_REGEX && !changes[sister_field]
|
62
|
+
@datetime = true
|
63
|
+
{ sister_field => sister_change(attrs) }
|
64
|
+
else
|
65
|
+
{}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def sister
|
70
|
+
if key =~ SIBLING_REGEX
|
71
|
+
key_prefix = Regexp.last_match(1)
|
72
|
+
sister_field = SIBLING_KEYMAP[Regexp.last_match(2)]
|
73
|
+
|
74
|
+
[key_prefix, sister_field]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def sister_field
|
79
|
+
sister.join('.')
|
80
|
+
end
|
81
|
+
|
82
|
+
# Since we use dirty checking to determine what the payload is
|
83
|
+
# you can run into a case where a "rich media" field needs other attrs
|
84
|
+
# Namely timezone, so if a rich date changed, add the tz with it.
|
85
|
+
def sister_change(attrs)
|
86
|
+
Array.new(2) { attrs.dig(*sister) }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module EventbriteSDK
|
2
|
+
class Resource
|
3
|
+
class FieldComparable
|
4
|
+
def value_for(type, field)
|
5
|
+
if type == :currency && field.initial_value
|
6
|
+
field.initial_value.values_at(:currency, :value).join(',')
|
7
|
+
else
|
8
|
+
field.initial_value
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,18 +1,26 @@
|
|
1
|
+
require 'byebug'
|
1
2
|
module EventbriteSDK
|
2
3
|
class Resource
|
3
4
|
class SchemaDefinition
|
4
5
|
def initialize(resource_name)
|
5
|
-
@resource_name = resource_name
|
6
|
-
@read_only_keys = Set.new
|
7
6
|
@attrs = {}
|
7
|
+
@read_only_keys = Set.new
|
8
|
+
@comparable = FieldComparable.new
|
9
|
+
@resource_name = resource_name
|
8
10
|
end
|
9
11
|
|
10
|
-
%i
|
12
|
+
%i[
|
13
|
+
boolean
|
14
|
+
currency
|
15
|
+
datetime
|
16
|
+
integer
|
17
|
+
multipart
|
18
|
+
string
|
19
|
+
utc
|
20
|
+
].each do |method|
|
11
21
|
define_method(method) do |value, *opts|
|
12
|
-
|
13
|
-
|
14
|
-
@read_only_keys << value if options && options[:read_only]
|
15
|
-
@attrs[value] = method
|
22
|
+
add_field_options(opts, value, method)
|
23
|
+
add_field(opts, value, method)
|
16
24
|
end
|
17
25
|
end
|
18
26
|
|
@@ -28,9 +36,44 @@ module EventbriteSDK
|
|
28
36
|
attrs.keys
|
29
37
|
end
|
30
38
|
|
39
|
+
def dirty_comparable(field)
|
40
|
+
comparable.value_for(attrs[field.key], field)
|
41
|
+
end
|
42
|
+
|
31
43
|
private
|
32
44
|
|
33
|
-
attr_reader :read_only_keys, :resource_name, :attrs
|
45
|
+
attr_reader :comparable ,:read_only_keys, :resource_name, :attrs
|
46
|
+
|
47
|
+
def add_field_options(opts, value, _method)
|
48
|
+
options = opts.first
|
49
|
+
@read_only_keys << value if options && options[:read_only]
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_field(_options, value, method)
|
53
|
+
@attrs[value] = method
|
54
|
+
send(:"#{method}_expansion", value)
|
55
|
+
end
|
56
|
+
|
57
|
+
# The following fields are NO-OP expansions
|
58
|
+
%i[boolean integer multipart string utc].each do |type|
|
59
|
+
define_method("#{type}_expansion") { |val| }
|
60
|
+
end
|
61
|
+
|
62
|
+
def currency_expansion(value)
|
63
|
+
generic_expansion(%w[currency display value], value)
|
64
|
+
end
|
65
|
+
|
66
|
+
def datetime_expansion(value)
|
67
|
+
generic_expansion(%w[local utc timezone], value)
|
68
|
+
end
|
69
|
+
|
70
|
+
def multipart_expansion(value)
|
71
|
+
generic_expansion(%i[html text], value)
|
72
|
+
end
|
73
|
+
|
74
|
+
def generic_expansion(types, value)
|
75
|
+
types.map { |exp| @attrs["#{value}.#{exp}"] = :string }
|
76
|
+
end
|
34
77
|
|
35
78
|
def read_only?(key)
|
36
79
|
read_only_keys.member?(key)
|
@@ -49,7 +49,7 @@ module EventbriteSDK
|
|
49
49
|
page(pagination['page_number'] - 1, api_token: api_token)
|
50
50
|
end
|
51
51
|
|
52
|
-
%w
|
52
|
+
%w[object_count page_number page_size page_count].each do |method|
|
53
53
|
define_method(method) { pagination[method] }
|
54
54
|
end
|
55
55
|
|
@@ -73,6 +73,14 @@ module EventbriteSDK
|
|
73
73
|
|
74
74
|
private
|
75
75
|
|
76
|
+
attr_reader :expansion,
|
77
|
+
:key,
|
78
|
+
:object_class,
|
79
|
+
:objects,
|
80
|
+
:query,
|
81
|
+
:request,
|
82
|
+
:url_base
|
83
|
+
|
76
84
|
def pagination
|
77
85
|
@pagination ||= { 'page_count' => 1, 'page_number' => 1 }
|
78
86
|
end
|
@@ -87,13 +95,5 @@ module EventbriteSDK
|
|
87
95
|
@objects = (response[key.to_s] || []).map { |raw| object_class.new(raw) }
|
88
96
|
@pagination = response['pagination']
|
89
97
|
end
|
90
|
-
|
91
|
-
attr_reader :expansion,
|
92
|
-
:key,
|
93
|
-
:object_class,
|
94
|
-
:objects,
|
95
|
-
:query,
|
96
|
-
:request,
|
97
|
-
:url_base
|
98
98
|
end
|
99
99
|
end
|
@@ -26,8 +26,8 @@ module EventbriteSDK
|
|
26
26
|
boolean 'include_fee'
|
27
27
|
boolean 'split_fee'
|
28
28
|
string 'sales_channels'
|
29
|
-
|
30
|
-
|
29
|
+
utc 'sales_start'
|
30
|
+
utc 'sales_end'
|
31
31
|
string 'sales_start_after'
|
32
32
|
integer 'minimum_quantity'
|
33
33
|
integer 'maximum_quantity'
|
@@ -50,7 +50,7 @@ module EventbriteSDK
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def unhide!
|
53
|
-
!
|
53
|
+
!hidden || change('hidden' => false)
|
54
54
|
end
|
55
55
|
|
56
56
|
def change(attrs)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventbrite_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vinnie Franco
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-08-
|
13
|
+
date: 2017-08-30 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rest-client
|
@@ -129,6 +129,8 @@ files:
|
|
129
129
|
- lib/eventbrite_sdk/report.rb
|
130
130
|
- lib/eventbrite_sdk/resource.rb
|
131
131
|
- lib/eventbrite_sdk/resource/attributes.rb
|
132
|
+
- lib/eventbrite_sdk/resource/field.rb
|
133
|
+
- lib/eventbrite_sdk/resource/field_comparable.rb
|
132
134
|
- lib/eventbrite_sdk/resource/null_schema_definition.rb
|
133
135
|
- lib/eventbrite_sdk/resource/operations/attribute_schema.rb
|
134
136
|
- lib/eventbrite_sdk/resource/operations/endpoint.rb
|
@@ -162,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
164
|
version: '0'
|
163
165
|
requirements: []
|
164
166
|
rubyforge_project:
|
165
|
-
rubygems_version: 2.
|
167
|
+
rubygems_version: 2.6.13
|
166
168
|
signing_key:
|
167
169
|
specification_version: 4
|
168
170
|
summary: Official Eventbrite SDK for the v3 API
|