eventick_api 0.1.0 → 0.1.1

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 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