eventick_api 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a141c013a1e57169601e5b1c607673dad2c2ff28
4
+ data.tar.gz: 686802ddf7944effa42e6d85e11cdea9af22b71d
5
+ SHA512:
6
+ metadata.gz: f6c30fce7832f64bec007d67c4cca637f5bbd129c40ad598ac02e25b79eb8ffe8cf48e0fe35b54490ab59c1f9d85e77d49b994db93d9703d63595e68ae335ee2
7
+ data.tar.gz: c252e4b3d99f5efff112c2b27734de7390a56ecb4c1dd1dadcda1d0a182c23c587dba7af91462ca7d3e73b584781d8c5b7a1579dc153f9146430210a0b09cf31
data/.gitignore ADDED
@@ -0,0 +1,42 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .rvmrc
19
+
20
+ # OS generated files #
21
+ ######################
22
+ .DS_Store
23
+ .DS_Store?
24
+ ehthumbs.db
25
+ Icon?
26
+ Thumbs.db
27
+ .com.apple.*
28
+
29
+ # IDE generated files #
30
+ #######################
31
+ *.esproj
32
+ *.esproj?
33
+ .project
34
+ .project?
35
+ .loadpath
36
+ .settings?
37
+ .*.sw[a-z]
38
+ nb*
39
+ .classpath
40
+ .settings/
41
+ *.NavData
42
+
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "eventick.github.com"]
2
+ path = eventick.github.com
3
+ url = git@github.com:eventick/eventick.github.com.git
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ eventick
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p195
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.1
4
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in eventick.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,8 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'minitest' do
5
+ watch(%r|^test/(.*)\/?(.*)_test\.rb|)
6
+ watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}#{m[2]}_test.rb" }
7
+ watch(%r|^test/test_helper\.rb|) { "test" }
8
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Lukas Alexandre
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # Eventick
2
+
3
+ Eventick is a simple API wrapper public Eventick API.
4
+
5
+ TODO: Write a gem description
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'eventick'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install eventick
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs.push "lib"
7
+ t.test_files = FileList['test/eventick/*_test.rb']
8
+ t.verbose = true
9
+ end
10
+
11
+ desc "Run tests"
12
+ task default: :test
data/eventick.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'eventick/version'
6
+
7
+ Gem::Specification.new do |gem|
8
+ gem.name = "eventick_api"
9
+ gem.version = Eventick::VERSION
10
+ gem.authors = ["Lukas Alexandre", "Thiago Diniz"]
11
+ gem.email = ["lukasalexandre@me.com", "thiago@eventick.com.br"]
12
+ gem.description = %q{Eventick is a simple API wrapper for Eventick's public API.}
13
+ gem.summary = %q{Eventick is a simple API wrapper for Eventick's public API.}
14
+ gem.homepage = ""
15
+ gem.license = 'MIT'
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.require_paths = ["lib"]
20
+
21
+ gem.add_dependency 'json'
22
+
23
+ gem.add_development_dependency 'rake'
24
+ gem.add_development_dependency 'turn'
25
+ gem.add_development_dependency 'guard-minitest'
26
+ gem.add_development_dependency 'rb-fsevent'
27
+ gem.add_development_dependency 'minitest'
28
+ gem.add_development_dependency 'fakeweb'
29
+ end
data/lib/eventick.rb ADDED
@@ -0,0 +1,75 @@
1
+ require 'net/http'
2
+ require 'json'
3
+ require 'cgi'
4
+ require 'openssl'
5
+
6
+ require_relative './eventick/version'
7
+ require_relative './eventick/auth'
8
+ require_relative './eventick/event'
9
+ require_relative './eventick/attendee'
10
+ require_relative './eventick/ticket'
11
+ require_relative './eventick/checkin'
12
+
13
+ module Eventick
14
+ BASE_URL = 'www.eventick.com.br'
15
+ BASE_PATH = '/api/v1/'
16
+
17
+ def self.config(&block)
18
+ @auth = Eventick::Auth.new &block
19
+ end
20
+
21
+ def self.get(resource, params={})
22
+ path = api_path resource
23
+ path = with_params path, params
24
+ method = Net::HTTP::Get.new(path)
25
+
26
+ request(method)
27
+ end
28
+
29
+ def self.put(resource, params={})
30
+ path = api_path resource
31
+ method = Net::HTTP::Put.new(path)
32
+ method.set_form_data(params)
33
+ method.content_type = 'application/json' if params.is_a? String
34
+
35
+ request(method, params)
36
+ end
37
+
38
+ def self.request(method, params={})
39
+ uri = URI("https://#{ BASE_URL }")
40
+ http = Net::HTTP.new(uri.host, uri.port)
41
+ http.use_ssl = true
42
+
43
+ if auth && auth.authenticated?
44
+ method.basic_auth auth_token, ""
45
+ end
46
+
47
+ response = http.start do |http|
48
+ http.request method
49
+ end
50
+
51
+ return { } unless response.is_a? Net::HTTPSuccess
52
+ # return response.body unless block_given?
53
+ # yield JSON.parse(response.body)
54
+ JSON.parse(response.body) unless response.body.nil?
55
+ end
56
+
57
+ def self.api_path(resource)
58
+ BASE_PATH + resource
59
+ end
60
+
61
+ def self.auth_token
62
+ @auth.token if @auth
63
+ end
64
+
65
+ def self.auth
66
+ @auth
67
+ end
68
+
69
+ private
70
+ def self.with_params(url, params )
71
+ escape_pair = Proc.new {|k,v| CGI.escape(k.to_s)+'='+CGI.escape(v.to_s) }
72
+ to_query = "?" + params.map(&escape_pair).join("&") unless params.empty?
73
+ "#{ url }#{ to_query }"
74
+ end
75
+ end
@@ -0,0 +1,56 @@
1
+ module Eventick
2
+ class Attendee < Base
3
+ resource "events/:event_id/attendees/:id"
4
+
5
+ attr_accessor :id, :name
6
+ attr_accessor :code, :ticket_type, :checked_at, :event_id
7
+
8
+ def initialize(args={})
9
+ args.each do |key, value|
10
+ self.public_send("#{key}=", value)
11
+ end
12
+ end
13
+
14
+ # class methods
15
+ def self.all(event)
16
+ params = params(event)
17
+ attendees_response = Eventick.get path(params)
18
+ attendees = attendees_response['attendees'].map { |attendee_json| self.new attendee_json }
19
+ attendees.each { |a| a.event_id = params[:event_id] }
20
+ end
21
+
22
+ def self.find_by_id(event, attendee_id)
23
+ data = params(event, attendee_id)
24
+ attendees_response = Eventick.get path(data)
25
+ params = attendees_response['attendees'].first
26
+ attendee = self.new params unless params.empty?
27
+ attendee.event_id = data[:event_id]
28
+ attendee
29
+ end
30
+
31
+ def search_index
32
+ self.name
33
+ end
34
+
35
+ def checkin
36
+ Checkin.create self
37
+ end
38
+
39
+ def to_param
40
+ { event_id: self.event_id, code: self.code }
41
+ end
42
+
43
+ def to_json
44
+ "{ 'id': #{ self.id }, 'checked_at': '#{ self.checkin_at }' }"
45
+ end
46
+
47
+ private
48
+ def self.params(event, attendee_id = nil)
49
+ event_id = event
50
+ event_id = event.id if event.is_a? Event
51
+ params = { :event_id => event_id }
52
+ params.merge!({ id: attendee_id }) if attendee_id
53
+ params
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,32 @@
1
+ require_relative 'base'
2
+
3
+ module Eventick
4
+ class Auth < Base
5
+ resource "tokens"
6
+
7
+ attr_accessor :email
8
+ attr_writer :password
9
+
10
+ def initialize(&block)
11
+ block.call self if block_given?
12
+ end
13
+
14
+ def token
15
+ @token ||= (get)['token']
16
+ end
17
+
18
+ def authenticated?
19
+ !!@token
20
+ end
21
+
22
+ private
23
+ def get
24
+ @token = nil
25
+ path = Eventick.api_path self.class.path
26
+ method = Net::HTTP::Get.new(path)
27
+ method.basic_auth @email, @password
28
+
29
+ Eventick.request(method)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,43 @@
1
+ module Eventick
2
+ class Base
3
+ def self.resource(res)
4
+ @resource = res
5
+ end
6
+
7
+ def self.path(args={})
8
+ if @resource
9
+ path = translate(args)
10
+ "#{ path }.json"
11
+ else
12
+ warn "The #{ self.name } class has not defined any resource path."
13
+ raise
14
+ end
15
+ end
16
+
17
+ def self.translate(args)
18
+ last_resource_rexp = /\/:(.\w+)$/
19
+ resource_keys = /(?<=:)(.\w+)/
20
+
21
+ one = @resource.gsub(last_resource_rexp).count == 0
22
+
23
+ if args.empty?
24
+ matched = @resource.gsub(last_resource_rexp, "")
25
+ else
26
+ s_args = Hash[args.map{ |k, v| [k.to_s, v] }]
27
+ matched = @resource.gsub(resource_keys, s_args)
28
+ matched.gsub!(/:/ , "")
29
+ matched.gsub!(/\/$/ , "")
30
+ end
31
+
32
+ remaining = matched.gsub(resource_keys).count
33
+
34
+ if remaining != 0
35
+ warn "Missing arguments for #{ self.name } class resource path: #{ matched }."
36
+ raise
37
+ end
38
+
39
+ matched
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,42 @@
1
+ module Eventick
2
+ class Checkin < Base
3
+ resource 'events/:event_id/attendees/:code'
4
+
5
+ attr_accessor :attendee, :checkin_time
6
+
7
+ def initialize(args={})
8
+ self.attendee = args[:attendee]
9
+ self.checkin_time = Time.now
10
+ end
11
+
12
+ def self.create(attendee)
13
+ (self.new :attendee => attendee).save
14
+ end
15
+
16
+ def self.all(event,attendees)
17
+ params = params(event)
18
+ checkin_time = Time.now
19
+ attendees.each{ |a| a.checkin_at = checkin_time }
20
+ atts = attendees.map{ |a| a.to_json }.join(",")
21
+ data = "{ 'attendees': [#{ atts }] }"
22
+ checkin_response = Eventick.put path(params), data
23
+ true
24
+ end
25
+
26
+ def save
27
+ params = self.attendee.to_param
28
+ checkin_response = Eventick.put self.class.path(params), { checked_at: checkin_time}
29
+ self.attendee.checked_at = checkin_time
30
+ true
31
+ end
32
+
33
+ private
34
+ def self.params(event, attendee_code = nil)
35
+ event_id = event
36
+ event_id = event.id if event.is_a? Event
37
+ params = { event_id: event_id, code: "check_all"}
38
+ params[:code] = attendee_code if attendee_code
39
+ params
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,47 @@
1
+ require_relative 'base'
2
+
3
+ module Eventick
4
+ class Event < Base
5
+ resource "events/:id"
6
+
7
+ attr_accessor :id, :start_at, :title, :tickets, :venue, :slug
8
+ attr_reader :attendees, :all
9
+
10
+ # constructors
11
+ def initialize(args={})
12
+ links = args.delete('links')
13
+ args.each do |key, value|
14
+ self.public_send("#{key}=", value)
15
+ end
16
+
17
+ self.tickets = links['tickets'].map { |o| Ticket.new(o) } if links
18
+ end
19
+
20
+ # class methods
21
+ def self.all
22
+ events_response = Eventick.get path
23
+ events_response['events'].map { |event_response| self.new event_response }
24
+ end
25
+
26
+ # class methods
27
+ def self.find_by_id(id)
28
+ events_response = Eventick.get path({ id: id })
29
+ params = events_response['events'].first
30
+ self.new params unless params.empty?
31
+ end
32
+
33
+ # instance methods
34
+ def attendees(reload = false)
35
+ if reload || @attendees.nil?
36
+ @attendees = Attendee.all self
37
+ end
38
+
39
+ @attendees
40
+ end
41
+
42
+ private
43
+ def self.auth_token
44
+ { :auth_token => Eventick.auth_token }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,9 @@
1
+ class Eventick::Ticket
2
+ attr_accessor :id, :name
3
+
4
+ def initialize(args={})
5
+ args.each do |key, value|
6
+ self.public_send("#{key}=", value)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Eventick
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,45 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Eventick
4
+ describe Attendee do
5
+ let (:attendee) { Attendee.new }
6
+
7
+ describe 'checking method initialization' do
8
+ fields = [:id, :name, :search_index, :code, :ticket_type, :checked_at]
9
+
10
+ it 'checking instance variables' do
11
+ fields.each do |field|
12
+ attendee.must_respond_to field
13
+ end
14
+ end
15
+ end
16
+
17
+ describe 'retrieving attendees' do
18
+ let(:events) { { id: 24 }}
19
+ let(:attendees) { { event_id: 24 } }
20
+ let(:attendee) { { event_id: 24, id: 145 } }
21
+
22
+ before do
23
+ fake_get_url Event.path(events), find_event_response, auth_params
24
+ fake_get_url Attendee.path(attendees), attendees_response, auth_params
25
+ fake_get_url Attendee.path(attendee), find_attendee_response, auth_params
26
+ end
27
+
28
+ it 'all from event' do
29
+ event = Event.find_by_id(events[:id])
30
+ event.attendees.size.must_equal 10
31
+ end
32
+
33
+ it 'all' do
34
+ attendees = Attendee.all(events[:id])
35
+ attendees.size.must_equal 10
36
+ end
37
+
38
+ it 'find one' do
39
+ event_id, attendee_id = attendee[:event_id], attendee[:id]
40
+ attendee = Attendee.find_by_id(event_id, attendee_id)
41
+ attendee.must_be_kind_of Attendee
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Eventick
4
+ describe Auth do
5
+ let (:auth) { Eventick.auth }
6
+
7
+ describe 'checking method initialization' do
8
+ it ('email') { auth.must_respond_to :email }
9
+ it ('password=') { auth.must_respond_to :password= }
10
+ it ('password') { auth.wont_respond_to :password }
11
+ it ('token') { auth.must_respond_to :token }
12
+ it ('token=') { auth.wont_respond_to :token= }
13
+ end
14
+
15
+ it 'initializing the object' do
16
+ new_auth = Auth.new do |eventick|
17
+ eventick.email = 'testing@eventick.com.br'
18
+ eventick.password = '123456'
19
+ end
20
+ new_auth.email.must_equal 'testing@eventick.com.br'
21
+ end
22
+
23
+ describe 'getting the api token' do
24
+ it 'with valid credentials' do
25
+ puts auth_response
26
+ auth.token.must_equal auth_params[:user]
27
+ end
28
+
29
+ it 'with invalid credentials' do
30
+ Eventick.config {}
31
+ auth.token.must_be_nil
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Eventick
4
+ describe Checkin do
5
+ let (:checkin) { Checkin.new }
6
+
7
+ describe 'checking method initialization' do
8
+ it ('checking instance variables') do
9
+ checkin.must_respond_to :attendee
10
+ end
11
+ end
12
+
13
+ describe 'checkin attendees' do
14
+ let(:attendee) { Attendee.find_by_id(24, 145 ) }
15
+
16
+ before do
17
+ fake_get_url Attendee.path({ event_id: 24, id: 145 } ), find_attendee_response, auth_params
18
+ fake_put_url Checkin.path({ event_id: 24, code: "AD54E" } ), "{\"boo\": 1 }", auth_params
19
+ end
20
+
21
+ it 'just one' do
22
+ checkin_obj = attendee.checkin
23
+ checkin_obj.must_equal true
24
+ attendee.checked_at.wont_be_nil
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Eventick
4
+ describe Event do
5
+ let (:fields) { [:id, :start_at, :title, :tickets, :venue, :slug] }
6
+
7
+ describe 'checking method initialization' do
8
+ let (:event) { Event.new }
9
+
10
+ it ('cheking instance variables') do
11
+ fields.each do |field|
12
+ event.must_respond_to field
13
+ end
14
+ end
15
+ end
16
+
17
+ describe 'retrieving events' do
18
+ before do
19
+ fake_get_url Event.path, events_response, auth_params
20
+ end
21
+
22
+ it 'all' do
23
+ events = Event.all
24
+ events.size.must_equal 11
25
+ end
26
+ end
27
+
28
+ describe 'retrieving one event' do
29
+ let(:params) { { id: 24 }}
30
+ let(:event) { Event.find_by_id params[:id] }
31
+
32
+ before do
33
+ fake_get_url Event.path(params), find_event_response, auth_params
34
+ end
35
+
36
+ it 'should be an Event object' do
37
+ event.must_be_kind_of Event
38
+ end
39
+
40
+ it 'checking for required fields' do
41
+ fields.each do |field|
42
+ event.public_send(field).wont_be_nil
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,12 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe Eventick do
4
+ describe 'checking method initialization' do
5
+ it ('config') { Eventick.must_respond_to :config }
6
+ it ('auth_token') { Eventick.must_respond_to :auth_token }
7
+
8
+ it 'should have a version' do
9
+ Eventick::VERSION.wont_be_nil
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe Eventick::Ticket do
4
+ let(:args) { { id: 30, name: "name" } }
5
+ let(:ticket) { Eventick::Ticket.new args }
6
+
7
+ describe 'initialization with argument' do
8
+ it "should assing the values" do
9
+ args.keys.each do |field|
10
+ ticket.send(field).must_equal args[field]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ {
2
+ "attendees": [
3
+ {
4
+ "id":145,
5
+ "name":"Cirdes Henrique",
6
+ "code":"AD54E",
7
+ "ticket_type":"Gratuito",
8
+ "checked_at":null
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1,74 @@
1
+ {
2
+ "attendees": [
3
+ {
4
+ "id":143,
5
+ "name":"Adones Cunha",
6
+ "code":null,
7
+ "ticket_type":"Gratuito",
8
+ "checked_at":null
9
+ },
10
+ {
11
+ "id":140,
12
+ "name":"Bruno Coelho",
13
+ "code":null,
14
+ "ticket_type":"Gratuito",
15
+ "checked_at":null
16
+ },
17
+ {
18
+ "id":148,
19
+ "name":"Bruno Luigi",
20
+ "code":"w4KKO5MZ2Um9Igzz",
21
+ "ticket_type":"Gratuito",
22
+ "checked_at":null
23
+ },
24
+ {
25
+ "id":145,
26
+ "name":"Cirdes Henrique",
27
+ "code":null,
28
+ "ticket_type":"Gratuito",
29
+ "checked_at":null
30
+ },
31
+ {
32
+ "id":142,
33
+ "name":"Clélia",
34
+ "code":null,
35
+ "ticket_type":"Gratuito",
36
+ "checked_at":null
37
+ },
38
+ {
39
+ "id":146,
40
+ "name":"Felipe Gabardo",
41
+ "code":null,
42
+ "ticket_type":"Gratuito",
43
+ "checked_at":null
44
+ },
45
+ {
46
+ "id":144,
47
+ "name":"Guilherme Barreto",
48
+ "code":null,
49
+ "ticket_type":"Gratuito",
50
+ "checked_at":"2013-05-17T15:41:07-03:00"
51
+ },
52
+ {
53
+ "id":141,
54
+ "name":"Klayton De Oliveira",
55
+ "code":null,
56
+ "ticket_type":"Gratuito",
57
+ "checked_at":null
58
+ },
59
+ {
60
+ "id":139,
61
+ "name":"Lailson Bandeira",
62
+ "code":null,
63
+ "ticket_type":"Gratuito",
64
+ "checked_at":null
65
+ },
66
+ {
67
+ "id":147,
68
+ "name":"Pedro Aranha",
69
+ "code":null,
70
+ "ticket_type":"Gratuito",
71
+ "checked_at":null
72
+ }
73
+ ]
74
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "token":"dpoi2154wijdsk4fo65ow4o2pkd"
3
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "attendees": [
3
+ {
4
+ "id": 10,
5
+ "checked_at": "2012-10-17T16:54:35-03:00"
6
+ },
7
+ {
8
+ "id": 11,
9
+ "checked_at": "2012-10-17T16:54:35-03:00"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "events":[
3
+ {
4
+ "id":24,
5
+ "title":"Eventick Meeting",
6
+ "venue":"Eventick HQ",
7
+ "slug":"ceventick",
8
+ "start_at":"2011-11-17T18:00:00-03:00",
9
+ "links": {
10
+ "tickets":[{"id":30,"name":"Gratuito"}]
11
+ }
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "events":[
3
+ {
4
+ "id":24,
5
+ "title":"Cervejada do Eventick",
6
+ "start_at":"2011-11-17T18:00:00-03:00"
7
+ },
8
+ {
9
+ "id":22,
10
+ "title":"Conversa de Negócios",
11
+ "start_at":"2011-11-10T09:00:00-03:00"
12
+ },
13
+ {
14
+ "id":17,
15
+ "title":"Empreededorismo e advocacia",
16
+ "start_at":"2011-10-27T14:50:00-03:00"
17
+ },
18
+ {
19
+ "id":26,
20
+ "title":"Encontro #14 FrevoOnRails",
21
+ "start_at":"2011-11-21T17:30:00-03:00"
22
+ },
23
+ {
24
+ "id":8,
25
+ "title":"exemplo de evento",
26
+ "start_at":"2013-12-01T18:00:00-03:00"
27
+ },
28
+ {
29
+ "id":547,
30
+ "title":"Manguezal Meetup",
31
+ "start_at":"2012-07-26T16:00:00-03:00"
32
+ },
33
+ {
34
+ "id":192,
35
+ "title":"Manguezal Meetup",
36
+ "start_at":"2012-03-02T16:30:00-03:00"
37
+ },
38
+ {
39
+ "id":2495,
40
+ "title":"Manguezal Meetup - Demo Edition",
41
+ "start_at":"2013-07-05T18:00:00-03:00"
42
+ },
43
+ {
44
+ "id":11,
45
+ "title":"PE Nova Musica",
46
+ "start_at":"2011-10-11T23:00:00-03:00"
47
+ },
48
+ {
49
+ "id":1218,
50
+ "title":"Sunset Conecta.la: Edição especial do Maguez.al",
51
+ "start_at":"2012-12-27T18:00:00-03:00"
52
+ },
53
+ {
54
+ "id":108,
55
+ "title":"Testing",
56
+ "start_at":"2012-01-07T20:51:00-03:00"
57
+ }
58
+ ]
59
+ }
@@ -0,0 +1,87 @@
1
+ require 'minitest/spec'
2
+ require 'minitest/autorun'
3
+ require 'turn'
4
+ require 'fakeweb'
5
+ require File.expand_path('../../lib/eventick.rb', __FILE__)
6
+
7
+ module TestHelpers
8
+ BASE_PATH = File.expand_path('../fixtures', __FILE__)
9
+
10
+ def fetch_fixture_path(path)
11
+ File.join(BASE_PATH, path)
12
+ end
13
+
14
+ def auth_url(path, auth)
15
+ if !auth.empty? && auth[:user]
16
+ pass = ":#{ escape(auth[:password]) }" if auth[:password]
17
+ auth_str = "#{ escape(auth[:user]) }#{ pass }@"
18
+ end
19
+
20
+ "https://#{ auth_str }www.eventick.com.br/api/v1/#{ path }"
21
+ end
22
+
23
+ def fake_get_url(path, response, auth={}, params={})
24
+ url = compose_url path, auth, params
25
+ FakeWeb.register_uri(:get, url, :body => response)
26
+ end
27
+
28
+ def fake_put_url(path, response, auth={})
29
+ url = auth_url(path, auth)
30
+ FakeWeb.register_uri(:put, url, :body => response)
31
+ end
32
+
33
+ def with_params(url, params )
34
+ escape_pair = Proc.new { |k,v| escape(k) + '=' + escape(v) }
35
+ to_query = '?' + params.map(&escape_pair).join('&') unless params.empty?
36
+ "#{ url }#{ to_query }"
37
+ end
38
+
39
+ def escape(params)
40
+ CGI.escape params.to_s
41
+ end
42
+
43
+ def compose_url(path, auth, params)
44
+ with_params auth_url(path, auth), params
45
+ end
46
+ end
47
+
48
+ class MiniTest::Spec
49
+ include TestHelpers
50
+ let (:auth_params) { { :user => 'dpoi2154wijdsk4fo65ow4o2pkd' } }
51
+
52
+ let (:auth_response) { fetch_fixture_path('auth.json') }
53
+ let (:events_response) { fetch_fixture_path('events.json') }
54
+ let (:find_event_response) { fetch_fixture_path('event.json') }
55
+ let (:attendees_response) { fetch_fixture_path('attendees.json') }
56
+ let (:find_attendee_response) { fetch_fixture_path('attendee.json') }
57
+ let (:checkin_response) { fetch_fixture_path('checkin.json') }
58
+
59
+ before do
60
+ FakeWeb.allow_net_connect = false
61
+
62
+ register_malformed_token_request
63
+ register_token_request
64
+
65
+ Eventick.config do |eventick|
66
+ eventick.email = 'testing@eventick.com.br'
67
+ eventick.password = '12345678'
68
+ end
69
+
70
+ Eventick.auth_token
71
+ end
72
+
73
+ private
74
+ def register_malformed_token_request
75
+ FakeWeb.register_uri(
76
+ :get,
77
+ 'https://www.eventick.com.br/api/v1/tokens.json',
78
+ :body => 'The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.',
79
+ :status => ['401', 'Not Authorized']
80
+ )
81
+ end
82
+
83
+ def register_token_request
84
+ fake_get_url Eventick::Auth.path, auth_response, { :user => 'testing@eventick.com.br', :password => 12345678 }
85
+ end
86
+
87
+ end
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eventick_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Lukas Alexandre
8
+ - Thiago Diniz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: turn
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: guard-minitest
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rb-fsevent
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: minitest
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: fakeweb
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ description: Eventick is a simple API wrapper for Eventick's public API.
113
+ email:
114
+ - lukasalexandre@me.com
115
+ - thiago@eventick.com.br
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - .gitignore
121
+ - .gitmodules
122
+ - .ruby-gemset
123
+ - .ruby-version
124
+ - .travis.yml
125
+ - Gemfile
126
+ - Guardfile
127
+ - LICENSE.txt
128
+ - README.md
129
+ - Rakefile
130
+ - eventick.gemspec
131
+ - lib/eventick.rb
132
+ - lib/eventick/attendee.rb
133
+ - lib/eventick/auth.rb
134
+ - lib/eventick/base.rb
135
+ - lib/eventick/checkin.rb
136
+ - lib/eventick/event.rb
137
+ - lib/eventick/ticket.rb
138
+ - lib/eventick/version.rb
139
+ - test/eventick/attendee_test.rb
140
+ - test/eventick/auth_test.rb
141
+ - test/eventick/checkin_test.rb
142
+ - test/eventick/event_test.rb
143
+ - test/eventick/eventick_test.rb
144
+ - test/eventick/ticket_test.rb
145
+ - test/fixtures/attendee.json
146
+ - test/fixtures/attendees.json
147
+ - test/fixtures/auth.json
148
+ - test/fixtures/checkin.json
149
+ - test/fixtures/event.json
150
+ - test/fixtures/events.json
151
+ - test/test_helper.rb
152
+ homepage: ''
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.0.5
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Eventick is a simple API wrapper for Eventick's public API.
176
+ test_files:
177
+ - test/eventick/attendee_test.rb
178
+ - test/eventick/auth_test.rb
179
+ - test/eventick/checkin_test.rb
180
+ - test/eventick/event_test.rb
181
+ - test/eventick/eventick_test.rb
182
+ - test/eventick/ticket_test.rb
183
+ - test/fixtures/attendee.json
184
+ - test/fixtures/attendees.json
185
+ - test/fixtures/auth.json
186
+ - test/fixtures/checkin.json
187
+ - test/fixtures/event.json
188
+ - test/fixtures/events.json
189
+ - test/test_helper.rb