zooppa_api_v3 0.0.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 +7 -0
- data/.gitignore +17 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +117 -0
- data/Rakefile +1 -0
- data/lib/zooppa_api_v3.rb +209 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/zooppa_api_v3_spec.rb +166 -0
- data/zooppa_api_v3.gemspec +28 -0
- metadata +155 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c7a46c2595a84886dda4ef65348161ed576ddc31
|
4
|
+
data.tar.gz: d7d016f13370f4bcda2e582aaaec144249448624
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c8bba0d8f7c4dc8ac301c39be48c1653895485ba8ae99176be84ca227e4a3cf5e39a935d7a23fb872aac03175297387a768216b33fda8eeb54bd7d5103b15470
|
7
|
+
data.tar.gz: 8e4b3cdc5ea7f35127cf8820cf0567e2770dde5940f27c20a23920c4d7f46f2aff0fc023d1560b966305f502c8f440750c1521ced7f1373d828ebf7487207ede
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
zooppa_api_v3
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0-p451
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Ulrich Soeffing
|
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,117 @@
|
|
1
|
+
# ZooppaApiV3
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'zooppa_api_v3'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install zooppa_api_v3
|
18
|
+
|
19
|
+
## Requirements & Limitations
|
20
|
+
|
21
|
+
Requires ruby 2.0 or greater and works only with API V3.
|
22
|
+
|
23
|
+
|
24
|
+
## Installation & Setup
|
25
|
+
|
26
|
+
1. Add to `Gemfile`: `gem 'zooppa_api_v3'`
|
27
|
+
|
28
|
+
2. Add to `config/initializers/zooppa_api_v3.rb`:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
ZOOPPA_API = ZooppaApiV3.new( app_secret: 'app_secret',
|
32
|
+
app_id: 'app_id'
|
33
|
+
)
|
34
|
+
```
|
35
|
+
|
36
|
+
Possible configuration options:
|
37
|
+
|
38
|
+
1. api_host: specify host of API (default: http://zooppa.com/)
|
39
|
+
2. app_secret: Secret key of the registered Oauth App
|
40
|
+
3. app_id: ID of the registered Oauth App
|
41
|
+
4. encrypt: #authenticate method returns encrypted access token if true (default: true)
|
42
|
+
5. version: specify version of API (default: 'v3')
|
43
|
+
6. iv: the Initialization vector used for encryption (use your Rails secret_key_base here, for instance)
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
## Usage
|
48
|
+
|
49
|
+
###Authentication:
|
50
|
+
|
51
|
+
`ZOOPPA_API.authenticate('email@email.com', 'pass')`
|
52
|
+
|
53
|
+
If authentication was successful, it returns the access token (encrypted if encrypt is set to true) or returns JSON with an error key and message.
|
54
|
+
|
55
|
+
###Find a resource
|
56
|
+
|
57
|
+
`ZOOPPA_API.ads.find(1).execute('token')`
|
58
|
+
|
59
|
+
Find ad with id 1
|
60
|
+
|
61
|
+
`ZOOPPA_API.contests.find(1).execute('token')`
|
62
|
+
|
63
|
+
Find contest with id 1
|
64
|
+
|
65
|
+
###Get collection of a resource
|
66
|
+
|
67
|
+
`ZOOPPA_API.contests.execute('token')`
|
68
|
+
|
69
|
+
Gets the first 10 contests
|
70
|
+
|
71
|
+
###Pagination
|
72
|
+
|
73
|
+
`ZOOPPA_API.contests.page(2).per_page(100).execute('token')`
|
74
|
+
|
75
|
+
Get 100 contests with offset 100
|
76
|
+
|
77
|
+
###Filtering
|
78
|
+
|
79
|
+
`ZOOPPA_API.ads.where('contest_id,=,1').execute('token')`
|
80
|
+
|
81
|
+
Get ads which contest_id attributes equals 1
|
82
|
+
|
83
|
+
`ZOOPPA_API.ads.where('contest_id,=,1', 'resource_type,=,video').execute('token')`
|
84
|
+
|
85
|
+
Get ads which contest_id attributes equals 1 and resource_type equals 'video'
|
86
|
+
|
87
|
+
###Sorting
|
88
|
+
|
89
|
+
`ZOOPPA_API.ads.sort('title ASC').execute('token')`
|
90
|
+
|
91
|
+
Sort ads by title ascending
|
92
|
+
|
93
|
+
###Combine filtering, sorting and pagination
|
94
|
+
|
95
|
+
`ZOOPPA_API.ads.where('contest_id,=,1', 'resource_type,=,video').sort('title DESC').page(2).per_page(9)execute('token')`
|
96
|
+
|
97
|
+
###Delete a resource
|
98
|
+
|
99
|
+
`ZOOPPA_API.users.find(1).delete.execute('token')`
|
100
|
+
|
101
|
+
###Update a resource
|
102
|
+
|
103
|
+
`ZOOPPA_API.users.find(1).update_attributes({user: { name: 'new' }}).execute('token')`
|
104
|
+
|
105
|
+
###Create a resource
|
106
|
+
|
107
|
+
`ZOOPPA_API.users.create({user: { name: 'new' }}).execute('token')`
|
108
|
+
|
109
|
+
|
110
|
+
### General
|
111
|
+
|
112
|
+
If the request you make requires authentication, you need to pass in the token into the `.execute` method. If authentication is not needed, you don't need to pass in any argument.
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,209 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
require 'json'
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_support/core_ext'
|
5
|
+
require 'oauth2'
|
6
|
+
require 'encryptor'
|
7
|
+
|
8
|
+
|
9
|
+
class ZooppaApiV3
|
10
|
+
|
11
|
+
# Initializes the Rest Request
|
12
|
+
# resource: string - resource name - must be plural (i.e. 'invitations', 'companies')
|
13
|
+
# method: sym - HTTP VERB (:post, :put, :delete, :get)
|
14
|
+
# cookies: Rails cookies Object - from controller - is required when 'authenticate' is set to true
|
15
|
+
# params: hash - params from controller
|
16
|
+
# id: integer - resource id - required for show, update & destroy action only
|
17
|
+
# authenticate: boolean - API call requires authentication (true) or not (false)?
|
18
|
+
# api_version: string - specifies version of API - default: v2
|
19
|
+
#
|
20
|
+
# Here we use KEYWORD ARGUMENTS (new in ruby 2.0.0): http://magazine.rubyist.net/?Ruby200SpecialEn-kwarg
|
21
|
+
def initialize(**args)
|
22
|
+
@api_host = args.fetch(:api_host) { 'http://localhost:3000/' }
|
23
|
+
@version = args.fetch(:version) { 'v3' }
|
24
|
+
@app_secret = args.fetch(:app_secret) { 'app_secret' }
|
25
|
+
@app_id = args.fetch(:app_id) { 'app_id' }
|
26
|
+
@encrypt = args.fetch(:encrypt) { true }
|
27
|
+
# needed for encrypting the access token
|
28
|
+
@iv = args.fetch(:iv) { '' }
|
29
|
+
end
|
30
|
+
|
31
|
+
def method_missing(method,*args,&block)
|
32
|
+
eigenclass = class << self; self; end
|
33
|
+
eigenclass.class_eval do
|
34
|
+
define_method(method) do
|
35
|
+
@resource = method.to_s
|
36
|
+
return self
|
37
|
+
end
|
38
|
+
end
|
39
|
+
send(method, *args, &block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def update_attributes(params)
|
43
|
+
@method = :patch
|
44
|
+
@params = params
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def create(params)
|
49
|
+
@method = :post
|
50
|
+
@params = params
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
def where(*args)
|
55
|
+
@method = :get
|
56
|
+
@filter_params = ''
|
57
|
+
args.each_with_index do |filter, index|
|
58
|
+
@filter_params += '&' unless @filter_params == ''
|
59
|
+
@filter_params += "filters[filter_#{index}]=#{filter}"
|
60
|
+
end
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
def sort(sort_by)
|
65
|
+
@method = :get
|
66
|
+
@sort_params = "sort_by#{sort_by.to_query('')}"
|
67
|
+
self
|
68
|
+
end
|
69
|
+
|
70
|
+
def find(id)
|
71
|
+
@method = :get
|
72
|
+
@id = id.to_s
|
73
|
+
self
|
74
|
+
end
|
75
|
+
|
76
|
+
def page(page)
|
77
|
+
@method = :get
|
78
|
+
@page_params = "page=#{page.to_s}"
|
79
|
+
self
|
80
|
+
end
|
81
|
+
|
82
|
+
def per_page(per_page)
|
83
|
+
@method = :get
|
84
|
+
@per_page_params = "per_page=#{per_page.to_s}"
|
85
|
+
self
|
86
|
+
end
|
87
|
+
|
88
|
+
def delete
|
89
|
+
@method = :delete
|
90
|
+
self
|
91
|
+
end
|
92
|
+
|
93
|
+
def execute(token = nil)
|
94
|
+
@url = build_url
|
95
|
+
|
96
|
+
add_auth_token(token) if token
|
97
|
+
if [:post, :put, :patch].include?(@method)
|
98
|
+
JSON.parse(RestClient.send(@method, @url, @params))
|
99
|
+
else
|
100
|
+
JSON.parse(RestClient.send(@method, @url))
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Builds the URL (adds an id of provided)
|
105
|
+
def build_url
|
106
|
+
url = @api_host + 'api/' + @version + '/' + @resource
|
107
|
+
url += '/' + @id if @id
|
108
|
+
url += '.json'
|
109
|
+
if [:delete, :get].include?(@method)
|
110
|
+
@params = complete_parameters(query_params, pagination_params) if [:delete, :get].include?(@method)
|
111
|
+
url += '?' + @params unless @params == ''
|
112
|
+
end
|
113
|
+
url
|
114
|
+
end
|
115
|
+
|
116
|
+
def complete_parameters(query_params, pagination_params)
|
117
|
+
if query_params != '' && pagination_params != ''
|
118
|
+
return [query_params, pagination_params].join('&')
|
119
|
+
elsif query_params == ''
|
120
|
+
return pagination_params
|
121
|
+
elsif pagination_params == ''
|
122
|
+
return query_params
|
123
|
+
else
|
124
|
+
return ''
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def query_params
|
129
|
+
query_params = ''
|
130
|
+
if @filter_params
|
131
|
+
query_params += @filter_params
|
132
|
+
end
|
133
|
+
|
134
|
+
if @sort_params
|
135
|
+
query_params += '&' unless query_params == ''
|
136
|
+
query_params += @sort_params
|
137
|
+
end
|
138
|
+
return query_params
|
139
|
+
end
|
140
|
+
|
141
|
+
def pagination_params
|
142
|
+
pagination_params = ''
|
143
|
+
if @page_params
|
144
|
+
pagination_params += @page_params
|
145
|
+
end
|
146
|
+
|
147
|
+
if @per_page_params
|
148
|
+
pagination_params += '&' unless pagination_params == ''
|
149
|
+
pagination_params += @per_page_params
|
150
|
+
end
|
151
|
+
return pagination_params
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
def prepare_request(resource, **args)
|
156
|
+
@resource = resource
|
157
|
+
@method = args.fetch(:method) { :get }
|
158
|
+
@id = args.fetch(:id) { nil }
|
159
|
+
@params = args.fetch(:params) { {} }
|
160
|
+
@cookies = args.fetch(:cookies) { {} }
|
161
|
+
@authenticate = args.fetch(:authenticate) { false }
|
162
|
+
@url = build_url
|
163
|
+
|
164
|
+
if @authenticate
|
165
|
+
fail Exceptions::MissingAuthToken unless @cookies.key?(:auth_token)
|
166
|
+
add_auth_token
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
# Adds the auth_token to the params hash or url (depending on the HTTP verb)
|
171
|
+
def add_auth_token(token)
|
172
|
+
if @encrypt && @authenticate
|
173
|
+
token = decrypt_token(token)
|
174
|
+
end
|
175
|
+
|
176
|
+
if [:get, :delete].include?(@method) && !@params.empty?
|
177
|
+
@url += '&access_token=' + token
|
178
|
+
elsif [:get, :delete].include?(@method) && @params.empty?
|
179
|
+
@url += '?access_token=' + token
|
180
|
+
else
|
181
|
+
@params.merge!(access_token: token)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def authenticate(email, password)
|
186
|
+
client = OAuth2::Client.new(
|
187
|
+
@app_id,
|
188
|
+
@app_secret,
|
189
|
+
site: @api_host
|
190
|
+
)
|
191
|
+
token = client.password.get_token(email, password).token
|
192
|
+
@encrypt ? encrypt_token(token) : token
|
193
|
+
rescue => e
|
194
|
+
parse_error_message(e)
|
195
|
+
end
|
196
|
+
|
197
|
+
def decrypt_token(encrypted_token)
|
198
|
+
Encryptor.decrypt(encrypted_token, :key => @app_id, :iv => @iv, :salt => @app_secret)
|
199
|
+
end
|
200
|
+
|
201
|
+
def encrypt_token(token)
|
202
|
+
Encryptor.encrypt(token, :key => @app_id, :iv => @iv, :salt => @app_secret)
|
203
|
+
end
|
204
|
+
|
205
|
+
def parse_error_message(e)
|
206
|
+
msg = e.try(:code) == 'invalid_resource_owner' ? 'Invalid email or password.' : 'There seems to be a connection problem'
|
207
|
+
{ error: msg }
|
208
|
+
end
|
209
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'zooppa_api_v3'
|
2
|
+
require 'rest_client'
|
3
|
+
require 'rest_client'
|
4
|
+
|
5
|
+
RSpec.configure do |c|
|
6
|
+
c.mock_with :rspec
|
7
|
+
c.color = true
|
8
|
+
|
9
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true
|
10
|
+
c.filter_run :focus => true
|
11
|
+
c.run_all_when_everything_filtered = true
|
12
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
|
5
|
+
puts ZooppaApiV3
|
6
|
+
|
7
|
+
describe ZooppaApiV3 do
|
8
|
+
|
9
|
+
context '#new' do
|
10
|
+
subject(:zooppa_api) { ZooppaApiV3 }
|
11
|
+
|
12
|
+
it 'sets default @api_host' do
|
13
|
+
expect(zooppa_api.new.instance_variable_get('@api_host')).to eq 'http://localhost:3000/'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'sets default @version' do
|
17
|
+
expect(zooppa_api.new.instance_variable_get('@version')).to eq 'v3'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'sets default @encrypt to true' do
|
21
|
+
expect(zooppa_api.new.instance_variable_get('@encrypt')).to eq true
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'sets @app_secret' do
|
25
|
+
expect(zooppa_api.new(app_secret: 'secret').instance_variable_get('@app_secret')).to eq 'secret'
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'sets @app_id' do
|
29
|
+
expect(zooppa_api.new(app_id: 'id').instance_variable_get('@app_id')).to eq 'id'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
context '#build_url' do
|
35
|
+
subject(:zooppa_api) { ZooppaApiV3.new }
|
36
|
+
|
37
|
+
context 'Given .where is called with one filter argument' do
|
38
|
+
it 'returns correct url' do
|
39
|
+
expect(zooppa_api.ads.where('contest_id,=,1').build_url).to eq 'http://localhost:3000/api/v3/ads.json?filters[filter_0]=contest_id,=,1'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'Given .where is called with two filter argument' do
|
44
|
+
it 'returns correct url' do
|
45
|
+
expect(zooppa_api.ads.where('contest_id,=,1', 'resource_type,=,video').build_url).to eq 'http://localhost:3000/api/v3/ads.json?filters[filter_0]=contest_id,=,1&filters[filter_1]=resource_type,=,video'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'Given .sort is called an argument' do
|
50
|
+
it 'returns correct url' do
|
51
|
+
expect(zooppa_api.ads.sort('title ASC').build_url).to eq 'http://localhost:3000/api/v3/ads.json?sort_by=title+ASC'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'Given .sort is called with an argument and .where with two filter argument' do
|
56
|
+
it 'returns correct url' do
|
57
|
+
expect(zooppa_api.ads.where('contest_id,=,1', 'resource_type,=,video').sort('title ASC').build_url).to eq 'http://localhost:3000/api/v3/ads.json?filters[filter_0]=contest_id,=,1&filters[filter_1]=resource_type,=,video&sort_by=title+ASC'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'Given .find(1) is called' do
|
62
|
+
it 'returns the correct url' do
|
63
|
+
expect(zooppa_api.ads.find(1).build_url).to eq 'http://localhost:3000/api/v3/ads/1.json'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'Given .page(1) is called' do
|
68
|
+
it 'returns the correct url' do
|
69
|
+
expect(zooppa_api.ads.page(1).build_url).to eq 'http://localhost:3000/api/v3/ads.json?page=1'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'Given .per_page(10) is called' do
|
74
|
+
it 'returns the correct url' do
|
75
|
+
expect(zooppa_api.ads.per_page(10).build_url).to eq 'http://localhost:3000/api/v3/ads.json?per_page=10'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'Given .per_page(10) and .page(1) is called' do
|
80
|
+
it 'returns the correct url' do
|
81
|
+
expect(zooppa_api.ads.page(1).per_page(10).build_url).to eq 'http://localhost:3000/api/v3/ads.json?page=1&per_page=10'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'Given .per_page(10), .page(1), .where with two filter argument and .sort() is called' do
|
86
|
+
it 'returns the correct url' do
|
87
|
+
expect(zooppa_api.ads.page(1).per_page(10).where('contest_id,=,1', 'resource_type,=,video').sort('title ASC').build_url).to eq 'http://localhost:3000/api/v3/ads.json?filters[filter_0]=contest_id,=,1&filters[filter_1]=resource_type,=,video&sort_by=title+ASC&page=1&per_page=10'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context '#execute' do
|
93
|
+
subject(:zooppa_api) { ZooppaApiV3.new }
|
94
|
+
|
95
|
+
context 'Given .find(1) is called with .execute(false)' do
|
96
|
+
it 'it calls Restclient.send with :get as method and correct url' do
|
97
|
+
expect(RestClient).to receive(:send).with(:get, 'http://localhost:3000/api/v3/ads/1.json').and_return({}.to_json)
|
98
|
+
zooppa_api.ads.find(1).execute(false)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'Given .find(1) is called with .execute(token)' do
|
103
|
+
it 'it calls Restclient.send with :get as method and correct url with access token' do
|
104
|
+
expect(RestClient).to receive(:send).with(:get, 'http://localhost:3000/api/v3/ads/1.json?access_token=token').and_return({}.to_json)
|
105
|
+
zooppa_api.ads.find(1).execute('token')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
context 'Given .where("contest_id,=,1") is called' do
|
111
|
+
it 'it calls Restclient.send with :get as method and correct url' do
|
112
|
+
expect(RestClient).to receive(:send).with(:get, 'http://localhost:3000/api/v3/ads.json?filters[filter_0]=contest_id,=,1').and_return({}.to_json)
|
113
|
+
zooppa_api.ads.where('contest_id,=,1').execute
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'Given .where("contest_id,=,1") is called with .execute(token)' do
|
118
|
+
it 'it calls Restclient.send with :get as method and correct url with access token' do
|
119
|
+
expect(RestClient).to receive(:send).with(:get, 'http://localhost:3000/api/v3/ads.json?filters[filter_0]=contest_id,=,1&access_token=token').and_return({}.to_json)
|
120
|
+
zooppa_api.ads.where('contest_id,=,1').execute('token')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'Given .delete is called' do
|
125
|
+
it 'it calls Restclient.send with :delete as method and correct url' do
|
126
|
+
expect(RestClient).to receive(:send).with(:delete, 'http://localhost:3000/api/v3/ads/1.json').and_return({}.to_json)
|
127
|
+
zooppa_api.ads.find(1).delete.execute
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context 'Given .delete is called with execute(token)' do
|
132
|
+
it 'it calls Restclient.send with :delete as method and correct url' do
|
133
|
+
expect(RestClient).to receive(:send).with(:delete, 'http://localhost:3000/api/v3/ads/1.json?access_token=token').and_return({}.to_json)
|
134
|
+
zooppa_api.ads.find(1).delete.execute('token')
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'Given .create is called' do
|
139
|
+
it 'it calls Restclient.send with :post method, correct url and parameters' do
|
140
|
+
expect(RestClient).to receive(:send).with(:post, 'http://localhost:3000/api/v3/ads.json', {ad: {title: 'title'}}).and_return({}.to_json)
|
141
|
+
zooppa_api.ads.create({ad: {title: 'title'}}).execute
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
context 'Given .create is called with .execute(token)' do
|
146
|
+
it 'it calls Restclient.send with :post method, correct url and parameters with access token' do
|
147
|
+
expect(RestClient).to receive(:send).with(:post, 'http://localhost:3000/api/v3/ads.json', { ad: { title: 'title'}, access_token: 'token'}).and_return({}.to_json)
|
148
|
+
zooppa_api.ads.create({ad: {title: 'title'}}).execute('token')
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context 'Given .update_attributes is called' do
|
153
|
+
it 'it calls Restclient.send with :patch method, correct url and parameters' do
|
154
|
+
expect(RestClient).to receive(:send).with(:patch, 'http://localhost:3000/api/v3/ads/1.json', {ad: {title: 'title'}}).and_return({}.to_json)
|
155
|
+
zooppa_api.ads.find(1).update_attributes({ad: {title: 'title'}}).execute
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
context 'Given .update_attributes is called with .execute(token)' do
|
160
|
+
it 'it calls Restclient.send with :patch method, correct url and parameters with access token' do
|
161
|
+
expect(RestClient).to receive(:send).with(:patch, 'http://localhost:3000/api/v3/ads/1.json', { ad: { title: 'title' }, access_token: 'token' }).and_return({}.to_json)
|
162
|
+
zooppa_api.ads.find(1).update_attributes({ad: {title: 'title'}}).execute('token')
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
# require 'zooppa_api_v3/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "zooppa_api_v3"
|
8
|
+
spec.version = '0.0.1'
|
9
|
+
spec.authors = ["Ulrich Soeffing"]
|
10
|
+
spec.email = ["ulrich_soeffing@gmx.de"]
|
11
|
+
spec.description = "Wrapper for the Zooppa api v3"
|
12
|
+
spec.summary = "Wrapper for the Zooppa api v3"
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency 'rspec'
|
24
|
+
spec.add_runtime_dependency 'rest-client'
|
25
|
+
spec.add_runtime_dependency 'oauth2'
|
26
|
+
spec.add_runtime_dependency 'encryptor'
|
27
|
+
spec.add_runtime_dependency 'activesupport'
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zooppa_api_v3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ulrich Soeffing
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rest-client
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: oauth2
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: encryptor
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: activesupport
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Wrapper for the Zooppa api v3
|
112
|
+
email:
|
113
|
+
- ulrich_soeffing@gmx.de
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- .gitignore
|
119
|
+
- .ruby-gemset
|
120
|
+
- .ruby-version
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE.txt
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- lib/zooppa_api_v3.rb
|
126
|
+
- spec/spec_helper.rb
|
127
|
+
- spec/zooppa_api_v3_spec.rb
|
128
|
+
- zooppa_api_v3.gemspec
|
129
|
+
homepage: ''
|
130
|
+
licenses:
|
131
|
+
- MIT
|
132
|
+
metadata: {}
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - '>='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
requirements: []
|
148
|
+
rubyforge_project:
|
149
|
+
rubygems_version: 2.2.2
|
150
|
+
signing_key:
|
151
|
+
specification_version: 4
|
152
|
+
summary: Wrapper for the Zooppa api v3
|
153
|
+
test_files:
|
154
|
+
- spec/spec_helper.rb
|
155
|
+
- spec/zooppa_api_v3_spec.rb
|