eventbrite_sdk 3.1.1 → 3.1.2
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/.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
|