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 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
@@ -0,0 +1,17 @@
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
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
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in zooppa_api_v3.gemspec
4
+ gemspec
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
@@ -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