eventick_api 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a141c013a1e57169601e5b1c607673dad2c2ff28
4
- data.tar.gz: 686802ddf7944effa42e6d85e11cdea9af22b71d
3
+ metadata.gz: 89a835bec6543e9d99d313cc32e0a22ba8398204
4
+ data.tar.gz: e7c5e9165c1aeab99ab40e7930454b39646b7342
5
5
  SHA512:
6
- metadata.gz: f6c30fce7832f64bec007d67c4cca637f5bbd129c40ad598ac02e25b79eb8ffe8cf48e0fe35b54490ab59c1f9d85e77d49b994db93d9703d63595e68ae335ee2
7
- data.tar.gz: c252e4b3d99f5efff112c2b27734de7390a56ecb4c1dd1dadcda1d0a182c23c587dba7af91462ca7d3e73b584781d8c5b7a1579dc153f9146430210a0b09cf31
6
+ metadata.gz: bf11bf5ec09db60a260102d96004eb6dd2daa9a2cce40c4cf6b047f79abcacdba12eaf9db1d6d34ad4d9e25966f7b6895863182a43f7a94bd5d606bc9af2906c
7
+ data.tar.gz: e16ec8af9b615d9b138c1cb5929209abe5a99b0f7c586f441052d92dcfc75a68b754719439b9c693973efc9fc946acd24434eeca1e3f9f70ff44556c16c9f7ca
@@ -1 +1 @@
1
- ruby-2.0.0-p195
1
+ ruby-2.0.0-p247
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.1
4
3
  - 1.9.3
4
+ - 2.0.0
5
+
6
+ git:
7
+ submodules: false
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Eventick
2
2
 
3
+ [![Build Status](https://travis-ci.org/lukelex/eventick_api.png?branch=master)](https://travis-ci.org/lukelex/eventick_api)
4
+
3
5
  Eventick is a simple API wrapper public Eventick API.
4
6
 
5
7
  TODO: Write a gem description
@@ -8,7 +10,7 @@ TODO: Write a gem description
8
10
 
9
11
  Add this line to your application's Gemfile:
10
12
 
11
- gem 'eventick'
13
+ gem 'eventick_api'
12
14
 
13
15
  And then execute:
14
16
 
@@ -16,7 +18,7 @@ And then execute:
16
18
 
17
19
  Or install it yourself as:
18
20
 
19
- $ gem install eventick
21
+ $ gem install eventick_api
20
22
 
21
23
  ## Usage
22
24
 
@@ -21,7 +21,6 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency 'json'
22
22
 
23
23
  gem.add_development_dependency 'rake'
24
- gem.add_development_dependency 'turn'
25
24
  gem.add_development_dependency 'guard-minitest'
26
25
  gem.add_development_dependency 'rb-fsevent'
27
26
  gem.add_development_dependency 'minitest'
@@ -4,11 +4,14 @@ require 'cgi'
4
4
  require 'openssl'
5
5
 
6
6
  require_relative './eventick/version'
7
+ require_relative './eventick/base'
7
8
  require_relative './eventick/auth'
8
9
  require_relative './eventick/event'
9
10
  require_relative './eventick/attendee'
10
11
  require_relative './eventick/ticket'
11
12
  require_relative './eventick/checkin'
13
+ require_relative './eventick/exceptions'
14
+ require_relative './eventick/params_parser'
12
15
 
13
16
  module Eventick
14
17
  BASE_URL = 'www.eventick.com.br'
@@ -1,23 +1,21 @@
1
- require_relative 'base'
2
-
3
1
  module Eventick
4
2
  class Auth < Base
5
- resource "tokens"
3
+ resource 'tokens'
6
4
 
7
- attr_accessor :email
8
- attr_writer :password
5
+ attr_accessor :email
6
+ attr_writer :password
9
7
 
10
- def initialize(&block)
11
- block.call self if block_given?
12
- end
8
+ def initialize(&block)
9
+ block.call self if block_given?
10
+ end
13
11
 
14
- def token
15
- @token ||= (get)['token']
16
- end
12
+ def token
13
+ @token ||= (get)['token']
14
+ end
17
15
 
18
- def authenticated?
19
- !!@token
20
- end
16
+ def authenticated?
17
+ !!@token
18
+ end
21
19
 
22
20
  private
23
21
  def get
@@ -1,43 +1,18 @@
1
1
  module Eventick
2
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
3
+ def self.resource(resource)
4
+ if not resource
5
+ raise InvalidResource, "The #{ self.name } class has not defined any resource path."
6
+ elsif resource.include? ' '
7
+ raise InvalidResource, 'No spaces allowed on a resource'
14
8
  end
15
- end
16
9
 
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
10
+ @resource = resource
40
11
  end
41
12
 
13
+ def self.path(params={})
14
+ path = (ParamsParser.new @resource, params).perform
15
+ "#{ path }.json"
16
+ end
42
17
  end
43
18
  end
@@ -0,0 +1,6 @@
1
+ module Eventick
2
+ class EventickError < StandardError ; end
3
+
4
+ class InvalidResource < EventickError ; end
5
+ class UnmatchableParams < EventickError ; end
6
+ end
@@ -0,0 +1,48 @@
1
+ module Eventick
2
+ class ParamsParser
3
+ RESOURCE_KEYS = /(?<=:)(.\w+)/
4
+ LAST_RESOURCE_REGEX = /\/:(.\w+)$/
5
+
6
+ def initialize(resource, params={})
7
+ @resource = resource
8
+ @params = params
9
+
10
+ def @params.with_stringified_keys
11
+ Hash[self.map{ |k, v| [k.to_s, v] }]
12
+ end
13
+ end
14
+
15
+ def perform
16
+ if missing_arguments
17
+ raise UnmatchableParams, "Missing arguments: #{missing_arguments}."
18
+ end
19
+
20
+ if @params.empty?
21
+ @resource.gsub(LAST_RESOURCE_REGEX, "")
22
+ else
23
+ stringified_hash = @params.with_stringified_keys
24
+ replace_resource_fields stringified_hash
25
+ end
26
+ end
27
+
28
+ private
29
+ def missing_arguments
30
+ if (missing = (params_needed - available_params)).length > 1
31
+ @missing_arguments = missing
32
+ end
33
+ end
34
+
35
+ def params_needed
36
+ @params_needed ||= @resource.scan(RESOURCE_KEYS).flatten
37
+ end
38
+
39
+ def available_params
40
+ @params.with_stringified_keys.keys.flatten
41
+ end
42
+
43
+ def replace_resource_fields(stringified_hash)
44
+ result = @resource.gsub(RESOURCE_KEYS, stringified_hash)
45
+ result.gsub(/:/ , '').gsub(/\/$/ , '')
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,6 @@
1
1
  module Eventick
2
- VERSION = "0.1.0"
2
+ MAJOR = 0
3
+ MINOR = 1
4
+ PATCH = 1
5
+ VERSION = "#{MAJOR}.#{MINOR}.#{PATCH}"
3
6
  end
@@ -15,7 +15,7 @@ module Eventick
15
15
  end
16
16
 
17
17
  describe 'retrieving attendees' do
18
- let(:events) { { id: 24 }}
18
+ let(:events) { { id: 24 } }
19
19
  let(:attendees) { { event_id: 24 } }
20
20
  let(:attendee) { { event_id: 24, id: 145 } }
21
21
 
@@ -22,7 +22,6 @@ module Eventick
22
22
 
23
23
  describe 'getting the api token' do
24
24
  it 'with valid credentials' do
25
- puts auth_response
26
25
  auth.token.must_equal auth_params[:user]
27
26
  end
28
27
 
@@ -0,0 +1,32 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Eventick
4
+ describe Base do
5
+ describe '.resource' do
6
+ it 'should not allow an empty resource' do
7
+ lambda {Base.resource nil}.must_raise InvalidResource
8
+ end
9
+
10
+ it 'should not allow a resource with white spaces' do
11
+ lambda {Base.resource 'with spaces'}.must_raise InvalidResource
12
+ end
13
+ end
14
+
15
+ describe '.path' do
16
+ it 'with blank args' do
17
+ Base.resource 'some_resource_page'
18
+ Base.path.must_equal 'some_resource_page.json'
19
+ end
20
+
21
+ it 'single resource path without param' do
22
+ Base.resource 'some_route/:id'
23
+ Base.path.must_equal 'some_route.json'
24
+ end
25
+
26
+ it 'single resource path with param' do
27
+ Base.resource 'some_route/:id'
28
+ (Base.path id: 13).must_equal 'some_route/13.json'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -26,7 +26,7 @@ module Eventick
26
26
  end
27
27
 
28
28
  describe 'retrieving one event' do
29
- let(:params) { { id: 24 }}
29
+ let(:params) { { id: 24 } }
30
30
  let(:event) { Event.find_by_id params[:id] }
31
31
 
32
32
  before do
@@ -0,0 +1,30 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Eventick
4
+ describe ParamsParser do
5
+ describe '#perform' do
6
+ it 'simple route' do
7
+ parser = ParamsParser.new 'some_resource'
8
+ parser.perform.must_equal 'some_resource'
9
+ end
10
+
11
+ it 'single param route' do
12
+ parser = ParamsParser.new 'some_resource/:id', id: 50
13
+ parser.perform.must_equal 'some_resource/50'
14
+ end
15
+
16
+ it 'double params route' do
17
+ parser = ParamsParser.new(
18
+ 'some_resource/:id/something/:another_id',
19
+ id: 50, another_id: 9
20
+ )
21
+ parser.perform.must_equal 'some_resource/50/something/9'
22
+ end
23
+
24
+ it 'double params route without params' do
25
+ parser = ParamsParser.new 'some_resource/:id/something/:another_id'
26
+ lambda {parser.perform}.must_raise UnmatchableParams
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,6 +1,6 @@
1
1
  require 'minitest/spec'
2
2
  require 'minitest/autorun'
3
- require 'turn'
3
+ require 'minitest/pride'
4
4
  require 'fakeweb'
5
5
  require File.expand_path('../../lib/eventick.rb', __FILE__)
6
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventick_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Alexandre
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-12 00:00:00.000000000 Z
12
+ date: 2013-08-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -39,20 +39,6 @@ dependencies:
39
39
  - - '>='
40
40
  - !ruby/object:Gem::Version
41
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
42
  - !ruby/object:Gem::Dependency
57
43
  name: guard-minitest
58
44
  requirement: !ruby/object:Gem::Requirement
@@ -134,13 +120,17 @@ files:
134
120
  - lib/eventick/base.rb
135
121
  - lib/eventick/checkin.rb
136
122
  - lib/eventick/event.rb
123
+ - lib/eventick/exceptions.rb
124
+ - lib/eventick/params_parser.rb
137
125
  - lib/eventick/ticket.rb
138
126
  - lib/eventick/version.rb
139
127
  - test/eventick/attendee_test.rb
140
128
  - test/eventick/auth_test.rb
129
+ - test/eventick/base_test.rb
141
130
  - test/eventick/checkin_test.rb
142
131
  - test/eventick/event_test.rb
143
132
  - test/eventick/eventick_test.rb
133
+ - test/eventick/params_parser_test.rb
144
134
  - test/eventick/ticket_test.rb
145
135
  - test/fixtures/attendee.json
146
136
  - test/fixtures/attendees.json
@@ -169,16 +159,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
159
  version: '0'
170
160
  requirements: []
171
161
  rubyforge_project:
172
- rubygems_version: 2.0.5
162
+ rubygems_version: 2.0.3
173
163
  signing_key:
174
164
  specification_version: 4
175
165
  summary: Eventick is a simple API wrapper for Eventick's public API.
176
166
  test_files:
177
167
  - test/eventick/attendee_test.rb
178
168
  - test/eventick/auth_test.rb
169
+ - test/eventick/base_test.rb
179
170
  - test/eventick/checkin_test.rb
180
171
  - test/eventick/event_test.rb
181
172
  - test/eventick/eventick_test.rb
173
+ - test/eventick/params_parser_test.rb
182
174
  - test/eventick/ticket_test.rb
183
175
  - test/fixtures/attendee.json
184
176
  - test/fixtures/attendees.json