eventbrite_sdk 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +7 -0
  5. data/Gemfile +12 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +136 -0
  8. data/Rakefile +6 -0
  9. data/bin/console +16 -0
  10. data/bin/setup +6 -0
  11. data/eventbrite_sdk.gemspec +28 -0
  12. data/lib/eventbrite_sdk.rb +135 -0
  13. data/lib/eventbrite_sdk/attendee.rb +26 -0
  14. data/lib/eventbrite_sdk/category.rb +14 -0
  15. data/lib/eventbrite_sdk/event.rb +75 -0
  16. data/lib/eventbrite_sdk/exceptions.rb +42 -0
  17. data/lib/eventbrite_sdk/lists/owned_event_orders_list.rb +27 -0
  18. data/lib/eventbrite_sdk/media.rb +77 -0
  19. data/lib/eventbrite_sdk/order.rb +25 -0
  20. data/lib/eventbrite_sdk/organizer.rb +20 -0
  21. data/lib/eventbrite_sdk/report.rb +49 -0
  22. data/lib/eventbrite_sdk/resource.rb +99 -0
  23. data/lib/eventbrite_sdk/resource/attributes.rb +158 -0
  24. data/lib/eventbrite_sdk/resource/null_schema_definition.rb +13 -0
  25. data/lib/eventbrite_sdk/resource/operations/attribute_schema.rb +57 -0
  26. data/lib/eventbrite_sdk/resource/operations/endpoint.rb +101 -0
  27. data/lib/eventbrite_sdk/resource/operations/list.rb +15 -0
  28. data/lib/eventbrite_sdk/resource/operations/relationships.rb +120 -0
  29. data/lib/eventbrite_sdk/resource/schema_definition.rb +50 -0
  30. data/lib/eventbrite_sdk/resource_list.rb +86 -0
  31. data/lib/eventbrite_sdk/subcategory.rb +12 -0
  32. data/lib/eventbrite_sdk/ticket_class.rb +60 -0
  33. data/lib/eventbrite_sdk/user.rb +28 -0
  34. data/lib/eventbrite_sdk/venue.rb +22 -0
  35. data/lib/eventbrite_sdk/version.rb +5 -0
  36. data/lib/eventbrite_sdk/webhook.rb +11 -0
  37. metadata +167 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: aef4bd7cbff3bc00c26d9ad6a8464a63a32e5f49
4
+ data.tar.gz: 07698a50a146d4064efaa277d8751b6b304874da
5
+ SHA512:
6
+ metadata.gz: 8208735f81b9f03f58f19758b278427ffd733aad34af65e6ed3c3d9711ecbe56d1f4eb4732ce031c017047e043ce5bcab842088718ec9a8cf881d371f93d07a4
7
+ data.tar.gz: 3751f3956c63b5de6850d959d6314ac59ce2485cbcdebd3601a155328083e0cfd867dbf4c025813e7ce85138f55eea3aa0c05a57a77b42e4f23aac5675b79480
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ coverage/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.0
5
+ before_install: gem install bundler -v 1.12.5
6
+ after_success:
7
+ - bundle exec codeclimate-test-reporter
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in eventbrite_sdk.gemspec
4
+ gemspec
5
+
6
+ gem 'rest-client', '~> 2.0.0'
7
+
8
+ group :development do
9
+ gem 'rspec', '~> 3.5.0'
10
+ gem 'byebug', '~> 9.0.6'
11
+ gem 'webmock', '~> 2.3.2'
12
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Vinnie Franco
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,136 @@
1
+ # EventbriteSdk
2
+
3
+ [![Code Climate](https://codeclimate.com/github/eventbrite/eventbrite-sdk-ruby/badges/gpa.svg)](https://codeclimate.com/github/eventbrite/eventbrite-sdk-ruby) [![Issue Count](https://codeclimate.com/github/eventbrite/eventbrite-sdk-ruby/badges/issue_count.svg)](https://codeclimate.com/github/eventbrite/eventbrite-sdk-ruby) [![Build Status](https://travis-ci.org/eventbrite/eventbrite-sdk-ruby.svg?branch=master)](https://travis-ci.org/eventbrite/eventbrite-sdk-ruby) [![Test Coverage](https://codeclimate.com/github/eventbrite/eventbrite-sdk-ruby/badges/coverage.svg)](https://codeclimate.com/github/eventbrite/eventbrite-sdk-ruby/coverage) [![Dependency Status](https://gemnasium.com/badges/github.com/eventbrite/eventbrite-sdk-ruby.svg)](https://gemnasium.com/github.com/eventbrite/eventbrite-sdk-ruby) [![Gem Version](https://badge.fury.io/rb/eventbrite_sdk.svg)](https://badge.fury.io/rb/eventbrite_sdk)
4
+
5
+
6
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/eventbrite_sdk`. To experiment with that code, run `bin/console` for an interactive prompt.
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'eventbrite_sdk'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install eventbrite_sdk
23
+
24
+ ## Usage
25
+
26
+ The library needs to be configured with your account's personal OAuth token which is available in your [App Management][app management] page. Assign it's value to `EventbriteSDK.token` and the library will send it along automatically with every request.
27
+
28
+ # Basic usage for creating/retrieving/updating/publishing an event:
29
+
30
+ ``` ruby
31
+
32
+ EventbriteSDK.token = "TOKEN"
33
+
34
+ # create an event draft
35
+ your_event = EventbriteSDK::Event.build('name.html' => 'Event Name', 'start.utc' => '2018-01-31T13:00:00Z', 'start.timezone' => 'America/Los_Angeles', 'end.utc' => '2018-02-01T13:00:00Z', 'end.timezone' => 'America/Los_Angeles', 'currency' => 'USD')
36
+
37
+ your_event.save
38
+ # => true
39
+
40
+ # retrieve your event
41
+ your_event
42
+
43
+ # retrieve one field on the object
44
+ your_event.id
45
+
46
+ # retrieve any event by id
47
+ EventbriteSDK::Event.retrieve(id: 20955468370)
48
+
49
+ # update the event
50
+ your_event.assign_attributes('name.html' => 'A new name', 'description.html' => 'A new description')
51
+
52
+ your_event.save
53
+ # =>true
54
+
55
+ # add ticket classes to the event
56
+ event_ticket = EventbriteSDK::TicketClass.new(event_id: your_event.id)
57
+ event_ticket.assign_attributes('name'=>'Ticket Name', 'cost'=>'USD,3400', 'quantity_total'=>'378')
58
+
59
+ event_ticket.save
60
+
61
+ # to see if the event is 'dirty' (i.e. has unsaved changes)
62
+ your_event.changed?
63
+ # =>true
64
+
65
+ # save the changes
66
+ your_event.save
67
+
68
+ # publish the event
69
+ your_event.publish
70
+
71
+ ```
72
+ # Navigating paginated responses:
73
+
74
+ ``` ruby
75
+
76
+ EventbriteSDK.token = "TOKEN"
77
+
78
+ # one feature of the Eventbrite API is that you can pass in the string 'me' in place of a
79
+ # user id and it will evaluate to the id of the user associated with the oauth token.
80
+
81
+ # fetch a new user record using the Eventbrite user id
82
+ user = EventbriteSDK::User.retrieve(id: 163054428874)
83
+
84
+ # get one page of your events
85
+ events = user.owned_events.page(2)
86
+
87
+ # not providing a page number will default to page one
88
+ events = user.owned_events.page(1) => events = user.owned_events
89
+
90
+ # events is now an enumerable object that you can access using bracket notation or first/last
91
+ events.first => events[0]
92
+ events.last => events[-1]
93
+
94
+ ```
95
+ # Construct endpoint paths:
96
+
97
+ ``` ruby
98
+
99
+ EventbriteSDK.token = "TOKEN"
100
+
101
+ # access this endpoint www.eventbriteapi.com/v3/events/:id/ticket_classes/:id/
102
+ ticket = EventbriteSDK::TicketClass.retrieve(event_id: 20928651159, id: 43892783)
103
+
104
+ ```
105
+ # Use expansions
106
+
107
+ ``` ruby
108
+
109
+ EventbriteSDK.token = "TOKEN"
110
+
111
+ # get an order with attendees expanded
112
+
113
+ order = EventbriteSDK::Order.retrieve(id: id, expand: [:attendees])
114
+
115
+ # include multiple expansions in one request
116
+
117
+ order = EventbriteSDK::Order.retrieve(id: id, expand: [:attendees, :event])
118
+
119
+ ```
120
+
121
+ ## Development
122
+
123
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
124
+
125
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
126
+
127
+
128
+ ## Contributing
129
+
130
+ Bug reports and pull requests are welcome on GitHub at https://github.com/eventbrite/eventbrite-sdk-ruby.
131
+
132
+
133
+ ## License
134
+
135
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
136
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
data/bin/console ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'eventbrite_sdk'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ require 'irb/completion'
15
+
16
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
@@ -0,0 +1,28 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'eventbrite_sdk/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'eventbrite_sdk'
7
+ spec.version = EventbriteSDK::VERSION
8
+ spec.authors = ['Vinnie Franco', 'Jeff McKenzie', 'Emilio Tagua']
9
+ spec.email = ['vinnie@eventbrite.com', 'jeffm@eventbrite.com', 'emilio@eventbrite.com']
10
+ spec.required_ruby_version = '>= 2.3.0'
11
+
12
+ spec.summary = %{Official Eventbrite SDK for the v3 API}
13
+ spec.description = %{Official Eventbrite SDK for the v3 API}
14
+ spec.homepage = "https://github.com/eventbrite"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
18
+ spec.bindir = 'bin'
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.add_dependency 'rest-client'
23
+ spec.add_development_dependency 'bundler', '~> 1.12'
24
+ spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rspec', '~> 3.0'
26
+ spec.add_development_dependency 'simplecov', '~> 0.11'
27
+ spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
28
+ end
@@ -0,0 +1,135 @@
1
+ require 'json'
2
+ require 'set'
3
+ require 'rest_client'
4
+
5
+ require 'eventbrite_sdk/version'
6
+ require 'eventbrite_sdk/exceptions'
7
+ require 'eventbrite_sdk/resource/operations/attribute_schema'
8
+ require 'eventbrite_sdk/resource/operations/list'
9
+ require 'eventbrite_sdk/resource/operations/endpoint'
10
+ require 'eventbrite_sdk/resource/operations/relationships'
11
+ require 'eventbrite_sdk/resource/attributes'
12
+ require 'eventbrite_sdk/resource/null_schema_definition'
13
+ require 'eventbrite_sdk/resource/schema_definition'
14
+ require 'eventbrite_sdk/resource_list'
15
+ require 'eventbrite_sdk/resource'
16
+
17
+ require 'eventbrite_sdk/lists/owned_event_orders_list'
18
+
19
+ require 'eventbrite_sdk/attendee'
20
+ require 'eventbrite_sdk/category'
21
+ require 'eventbrite_sdk/event'
22
+ require 'eventbrite_sdk/media'
23
+ require 'eventbrite_sdk/order'
24
+ require 'eventbrite_sdk/organizer'
25
+ require 'eventbrite_sdk/report'
26
+ require 'eventbrite_sdk/subcategory'
27
+ require 'eventbrite_sdk/ticket_class'
28
+ require 'eventbrite_sdk/user'
29
+ require 'eventbrite_sdk/venue'
30
+ require 'eventbrite_sdk/webhook'
31
+
32
+ module EventbriteSDK
33
+ BASE = "https://www.eventbriteapi.com/v#{VERSION.split('.').first}".freeze
34
+ EXCEPTION_MAP = {
35
+ RestClient::ResourceNotFound => {
36
+ class: ResourceNotFound,
37
+ message: 'requested object was not found',
38
+ },
39
+ RestClient::BadRequest => {
40
+ class: BadRequest,
41
+ message: 'invalid request',
42
+ },
43
+ RestClient::Forbidden => {
44
+ class: Forbidden,
45
+ message: 'not authorized',
46
+ },
47
+ RestClient::InternalServerError => {
48
+ class: InternalServerError,
49
+ message: 'internal server error',
50
+ },
51
+ RestClient::Unauthorized => {
52
+ class: Unauthorized,
53
+ message: 'unauthorized request',
54
+ }
55
+ }.freeze
56
+ THREAD_EB_API_TOKEN_KEY = :eb_api_token
57
+ VERIFY_SSL = true
58
+
59
+ def self.token
60
+ Thread.current[THREAD_EB_API_TOKEN_KEY]
61
+ end
62
+
63
+ def self.token=(api_token)
64
+ Thread.current[THREAD_EB_API_TOKEN_KEY] = api_token
65
+ end
66
+
67
+ def self.base_url
68
+ @base_url || BASE
69
+ end
70
+
71
+ def self.base_url=(url)
72
+ @base_url = url
73
+ end
74
+
75
+ def self.verify_ssl?
76
+ if @verify_ssl.nil?
77
+ VERIFY_SSL
78
+ else
79
+ @verify_ssl
80
+ end
81
+ end
82
+
83
+ def self.verify_ssl=(verifies)
84
+ @verify_ssl = verifies
85
+ end
86
+
87
+ def self.get(params)
88
+ params[:headers] = { 'Accept' => 'application/json' }
89
+ params[:method] = :get
90
+
91
+ request(params)
92
+ end
93
+
94
+ def self.post(params)
95
+ params[:headers] = { 'Content-Type' => 'application/json' }
96
+ params[:method] = :post
97
+
98
+ # Don't convert nil to json.
99
+ #
100
+ # BadRequest is raised when you publish an event because the body sent is
101
+ # "null" (invalid json) and the API rejects it.
102
+ if params[:payload]
103
+ params[:payload] = params[:payload].to_json
104
+ end
105
+
106
+ request(params)
107
+ end
108
+
109
+ def self.delete(params)
110
+ params[:headers] = { 'Accept' => 'application/json' }
111
+ params[:method] = :delete
112
+
113
+ request(params)
114
+ end
115
+
116
+ def self.request(params)
117
+ query = params.delete(:query)
118
+
119
+ params[:url] = url(params[:url].gsub(/\/$/, ''))
120
+ params[:headers]['Authorization'] = "Bearer #{token}" if token
121
+ params[:headers][:params] = query if query
122
+ params[:verify_ssl] = verify_ssl?
123
+
124
+ response = RestClient::Request.execute(params)
125
+
126
+ JSON.parse(response.body) unless response.body == ''
127
+ rescue *EXCEPTION_MAP.keys => err
128
+ handler = EXCEPTION_MAP[err.class]
129
+ raise handler[:class].new(handler[:message], err.response)
130
+ end
131
+
132
+ def self.url(path)
133
+ "#{base_url}/#{path}/"
134
+ end
135
+ end
@@ -0,0 +1,26 @@
1
+ module EventbriteSDK
2
+ class Attendee < Resource
3
+ resource_path 'orders/:order_id/attendees/:id'
4
+
5
+ belongs_to :order, object_class: 'Order'
6
+
7
+ has_many :attendees, object_class: 'Attendee'
8
+
9
+ schema_definition do
10
+ string 'event_id'
11
+ string 'order_id'
12
+ string 'ticket_class_id'
13
+ string 'ticket_class_name'
14
+ string 'status'
15
+ boolean 'refunded'
16
+ boolean 'cancelled'
17
+ boolean 'checked_in'
18
+ integer 'quantity'
19
+ string 'profile'
20
+ string 'costs'
21
+ datetime 'created', read_only: true
22
+ datetime 'changed', read_only: true
23
+ string 'resource_uri', read_only: true
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ module EventbriteSDK
2
+ class Category < Resource
3
+ extend Operations::List
4
+
5
+ resource_path 'categories/:id'
6
+
7
+ schema_definition do
8
+ string 'name', read_only: true
9
+ string 'name_localized', read_only: true
10
+ string 'short_name', read_only: true
11
+ string 'subcategories', read_only: true
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,75 @@
1
+ module EventbriteSDK
2
+ class Event < Resource
3
+ ERROR_CANNOT_PUBLISH = 'CANNOT_UNPUBLISH'.freeze
4
+ ERROR_ALREADY_PUBLISHED_OR_DELETED = 'ALREADY_PUBLISHED_OR_DELETED'.freeze
5
+
6
+ # Defines event#cancel, event#publish, and event#unpublish
7
+ #
8
+ # When an event has an id the POST is made, otherwise we return false
9
+ # POSTS to event/:id/(cancel|publish|unpublish)
10
+ define_api_actions :cancel, :publish, :unpublish
11
+
12
+ resource_path 'events/:id'
13
+
14
+ attributes_prefix 'event'
15
+
16
+ belongs_to :organizer, object_class: 'Organizer'
17
+ belongs_to :venue, object_class: 'Venue'
18
+
19
+ has_many :orders, object_class: 'Order'
20
+ has_many :ticket_classes, object_class: 'TicketClass'
21
+
22
+ schema_definition do
23
+ string 'name.html'
24
+ string 'description.html'
25
+ string 'organizer_id'
26
+ datetime 'start.utc'
27
+ datetime 'start.timezone'
28
+ datetime 'end.utc'
29
+ datetime 'end.timezone'
30
+ boolean 'hide_start_date'
31
+ boolean 'hide_end_date'
32
+ string 'currency'
33
+ string 'venue_id'
34
+ boolean 'online_event'
35
+ boolean 'listed'
36
+ string 'logo_id'
37
+ string 'category_id'
38
+ string 'subcategory_id'
39
+ string 'format_id'
40
+ boolean 'shareable'
41
+ boolean 'invite_only'
42
+ string 'password'
43
+ integer 'capacity'
44
+ boolean 'show_remaining'
45
+ string 'source'
46
+ string 'status', read_only: true
47
+ string 'created', read_only: true
48
+ string 'changed', read_only: true
49
+ string 'resource_uri', read_only: true
50
+ end
51
+
52
+ def self.search(params)
53
+ ResourceList.new(
54
+ url_base: 'events/search',
55
+ object_class: self,
56
+ key: 'events',
57
+ query: params
58
+ )
59
+ end
60
+
61
+ def list!
62
+ unless listed
63
+ assign_attributes('listed' => true)
64
+ save
65
+ end
66
+ end
67
+
68
+ def unlist!
69
+ if listed
70
+ assign_attributes('listed' => false)
71
+ save
72
+ end
73
+ end
74
+ end
75
+ end