netki 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 83d574cc62d629d5731a490958428d5e8324b1b4
4
+ data.tar.gz: 0f640e9c4f7d8ddc7faa31861c4cc3f34053f067
5
+ SHA512:
6
+ metadata.gz: 198e72c718bf8f3be1d029e384cb656980fd339ce6e193daa5f5153729a083763f141e952b981b009c66735ed6df563e8d39d915e73f29944102522929bf1f44
7
+ data.tar.gz: b05e88a104f06aa1f173567fc2546439956f6a3be42782921d1dad2fab2f7a8381883a513f07c10122dabe21b8a921a0837ac5ebc58568e9df66e5d6d172a024
data/.gitignore ADDED
Binary file
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ before_install: gem install bundler -v 1.10.3
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in netki.gemspec
4
+ gem 'rake'
5
+ gem 'debugger' unless ENV["RM_INFO"]
6
+ gem 'test-unit'
7
+ gem 'test-unit-mock'
8
+ gem 'httpclient'
9
+ gem 'mocha'
10
+ gem 'webmock'
data/LICENSE.txt ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2015, Netki, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification, are permitted
5
+ provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
8
+ and the following disclaimer.
9
+
10
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11
+ and the following disclaimer in the documentation and/or other materials provided with the distribution.
12
+
13
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse
14
+ or promote products derived from this software without specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
17
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
19
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
20
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
22
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23
+ POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # Ruby Netki Partner API Client
2
+
3
+ This Ruby gem provides a client for [Netki's](https://netki.com) Partner API.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'netki'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install netki
20
+
21
+ ## Usage
22
+
23
+ See rdoc-generated documentation for this Gem in doc/
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake false` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ Bug reports and pull requests are welcome on GitHub at https://github.com/netkicorp/ruby-partner-client.
34
+
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/test*.rb']
7
+ t.verbose = true
8
+ end
9
+
10
+ desc "Run tests"
11
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require_relative "../lib/netki"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,326 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+ require "httpclient"
4
+ require "json"
5
+
6
+ module Netki
7
+
8
+ # Request Utility Functionality
9
+ def self.process_request(api_key, partner_id, uri, method, bodyData=nil)
10
+
11
+ raise "Invalid HTTP Method" unless ['GET','POST','PUT','DELETE'].include? method
12
+
13
+ # Setup Headers
14
+ headers = {}
15
+ headers["Content-Type"] = "application/json"
16
+ headers["Authorization"] = api_key
17
+ headers["X-Partner-ID"] = partner_id
18
+
19
+ # Setup Request Options
20
+ opts = {}
21
+ opts[:header] = headers
22
+ opts[:body] = bodyData if bodyData
23
+
24
+ client = HTTPClient.new
25
+ _uri = URI.parse(uri)
26
+ response = client.request(method, _uri, opts)
27
+
28
+ # Short Circuit Return if 204 Response on DELETE
29
+ return {} if response.code == 204 && method == "DELETE"
30
+
31
+ # We should have response content at this point
32
+ raise "Empty Response Received" if response.content.nil? || response.content.empty?
33
+
34
+ # Verify we have the correct content type
35
+ raise "Non-JSON Content Type" if response.headers['Content-Type'] != 'application/json'
36
+
37
+ # Make Sure We Can Decode JSON Response
38
+ begin
39
+ ret_data = JSON.parse(response.content)
40
+ rescue JSON::ParserError => e
41
+ raise "Invalid JSON Response Received"
42
+ end
43
+
44
+ # Process Error
45
+ if response.code >= 300 || !ret_data['success']
46
+ err = ret_data['message']
47
+ if ret_data.has_key? 'failures'
48
+ fails = []
49
+ ret_data['failures'].each do |f|
50
+ fails.push(f['message'])
51
+ end
52
+ err = err + "[FAILURES: " + fails.join(", ") + "]"
53
+ end
54
+ raise err
55
+ end
56
+
57
+ return ret_data
58
+ end
59
+
60
+ ##
61
+ # The WalletName object represents a Netki Wallet Name object.
62
+ #
63
+ class WalletName
64
+
65
+ ##
66
+ # :args: domain_name, name, wallets, external_id, id
67
+ def initialize(domain_name, name, wallets={}, external_id=nil, id=nil) #:nodoc:
68
+ @id = id
69
+ @domain_name = domain_name
70
+ @name = name
71
+ @wallets = wallets
72
+ @external_id = external_id
73
+ end
74
+
75
+ attr_reader :id
76
+ attr_reader :domain_name
77
+ attr_reader :name
78
+ attr_reader :external_id
79
+
80
+ attr_writer :id
81
+ attr_writer :domain_name
82
+ attr_writer :name
83
+ attr_writer :external_id
84
+
85
+ # :section: Getters
86
+
87
+ # Get Address for Existing Currency
88
+ def get_address(currency)
89
+ @wallets[currency]
90
+ end
91
+
92
+ # Get Wallet Name Array of Used Currencies
93
+ def used_currencies
94
+ @wallets.keys
95
+ end
96
+
97
+ # :section: Currency Address Operations
98
+
99
+ # Set the address or URI for the given currency for this wallet name
100
+ def set_currency_address(currency, address)
101
+ @wallets[currency] = address
102
+ end
103
+
104
+ # Remove a used currency from this wallet name
105
+ def remove_currency(currency)
106
+ @wallets.delete(currency) if @wallets.has_key? currency
107
+ end
108
+
109
+ # :section: Setters
110
+
111
+ def set_api_opts(api_url, partner_id, api_key) # :nodoc:
112
+ @api_url = api_url
113
+ @partner_id = partner_id
114
+ @api_key = api_key
115
+ end
116
+
117
+ # :section: Actions
118
+
119
+ # Save the currency WalletName object to the remote service
120
+ def save
121
+ wallet_data = []
122
+ @wallets.each do |currency, wallet_address|
123
+ wallet_data.push({
124
+ currency: currency,
125
+ wallet_address: wallet_address
126
+ })
127
+ end
128
+
129
+ wn_data = {
130
+ domain_name: @domain_name,
131
+ name: @name,
132
+ wallets: wallet_data,
133
+ external_id: @external_id
134
+ }
135
+
136
+ wn_api_data = {}
137
+ wn_api_data['wallet_names'] = [wn_data,]
138
+
139
+ if @id
140
+ wn_data['id'] = @id
141
+ response = Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/partner/walletname", 'PUT', JSON.dump(wn_api_data))
142
+ else
143
+ response = Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/partner/walletname", 'POST', JSON.dump(wn_api_data))
144
+ end
145
+
146
+ unless @id
147
+ response['wallet_names'].each do |wn|
148
+ if response['success'] && wn['domain_name'] == @domain_name && wn['name'] == @name
149
+ @id = wn['id']
150
+ else
151
+ raise 'Success, but invalid response received!'
152
+ end
153
+ end
154
+ end
155
+
156
+ end
157
+
158
+ # Delete this WalletName object from the remote service
159
+ def delete
160
+ raise 'Unable to Delete Object that Does Not Exist Remotely' unless @id
161
+
162
+ wn_api_data = {
163
+ wallet_names: [{domain_name: @domain_name, id: @id}]
164
+ }
165
+
166
+ Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/partner/walletname", 'DELETE', JSON.dump(wn_api_data))
167
+ end
168
+ end
169
+
170
+ class NetkiPartner
171
+
172
+ ##
173
+ # The Netki object must be initialized with the Partner ID and API Key to be useful
174
+ #
175
+ # * Partner ID -> Netki Partner ID is available on your partner API Key Page
176
+ # * API Key -> Netki API Key is available only upon API Key creation. Be sure to store it somewhere safe!
177
+ #
178
+
179
+ attr_reader :partner_id
180
+ attr_reader :api_key
181
+ attr_reader :api_url
182
+
183
+ attr_writer :partner_id
184
+ attr_writer :api_key
185
+ attr_writer :api_url
186
+
187
+ def initialize(partner_id=nil, api_key=nil, api_url='https://api.netki.com')
188
+ @partner_id = partner_id
189
+ @api_key = api_key
190
+ @api_url = api_url
191
+ end
192
+
193
+ ##
194
+ # Create a new Partner
195
+ # * partner_name -> Name of new sub-partner to create
196
+ #
197
+ def create_new_partner(partner_name)
198
+ encoded_partner_name = URI.encode(partner_name)
199
+ response = Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/admin/partner/#{encoded_partner_name}", method='POST')
200
+ response['partner']['id']
201
+ end
202
+
203
+ ##
204
+ # List current and sub partners
205
+ # Returns a list of partner Hashes, each containing an id and name key
206
+ #
207
+ def get_partners()
208
+ response = Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/admin/partner", method='GET')
209
+ response['partners']
210
+ end
211
+
212
+ ##
213
+ # Delete a Partner
214
+ # * partner_name -> Name of sub-partner to delete
215
+ # NOTE: You cannot delete your own partner resource
216
+ #
217
+ def delete_partner(partner_name)
218
+ encoded_partner_name = URI.encode(partner_name)
219
+ Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/admin/partner/#{encoded_partner_name}", method='DELETE')
220
+ true
221
+ end
222
+
223
+ ##
224
+ # Create a new domain
225
+ # * domain_name -> Name of new domain to create
226
+ # * partner_id -> (optional) Partner that should own the new domain
227
+ #
228
+ def create_new_domain(domain_name, partner_id=nil)
229
+ api_data = {}
230
+ api_data['partner_id'] = partner_id unless partner_id.nil?
231
+ Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/partner/domain/#{domain_name}", method='POST', JSON.dump(api_data))
232
+ true
233
+ end
234
+
235
+ ##
236
+ # List available domain resources
237
+ # Returns a list of domain Hashes, each containing a domain_name and tld_type key
238
+ #
239
+ def get_domains()
240
+ response = Netki.process_request(@api_key, @partner_id, "#{@api_url}/api/domain", method='GET')
241
+ response['domains']
242
+ end
243
+
244
+ ##
245
+ # List status of domain resources
246
+ # * domain_name -> (Optional) Name of domain to return status for
247
+ #
248
+ # If domain_name is omitted status is returned for all available domain resources.
249
+ #
250
+ # Returns a list of Hashes, each containing current status for each domain
251
+ #
252
+ def get_domain_status(domain_name=nil)
253
+
254
+ uri="#{@api_url}/v1/partner/domain"
255
+ uri << "/#{domain_name}" unless domain_name.nil?
256
+
257
+ response = Netki.process_request(@api_key, @partner_id, uri, method='GET')
258
+ response['domains']
259
+ end
260
+
261
+ ##
262
+ # Get DNSSEC Status of Domain
263
+ # * domain_name -> (Required) Name of domain to get DNSSEC status for
264
+ #
265
+ # Returns a hash containing the follow DNSSEC-related keys:
266
+ # - ds_records (list)
267
+ # - public_key_signing_key
268
+ # - nextroll_date
269
+ # - nameservers (list)
270
+
271
+ def get_domain_dnssec(domain_name)
272
+ Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/partner/domain/dnssec/#{domain_name}", method='GET')
273
+ end
274
+
275
+ ##
276
+ # Delete a Domain
277
+ # * domain_name -> Name of delete to delete
278
+ #
279
+ def delete_domain(domain_name)
280
+ Netki.process_request(@api_key, @partner_id, "#{@api_url}/v1/partner/domain/#{domain_name}", method='DELETE')
281
+ true
282
+ end
283
+
284
+
285
+ ##
286
+ # Create a new Wallet Name object using this factory method.
287
+ # * domain_name -> The pre-configured domain name you would like to add this new wallet name to
288
+ # * name -> The DNS name that you would like this new wallet name to have (ie.. name.domain_name)
289
+ # * wallets -> This is a hash where the key is the currency (ie.. btc, ltc, dgc, tusd) and the value is the wallet address or URL of the BIP32 / BIP70 address server
290
+ # * external_id -> Any unique external ID that you may want to use to track this specific wallet name
291
+ #
292
+ def create_new_walletname(domain_name, name, wallets={}, external_id=nil)
293
+ new_wn = WalletName.new(domain_name, name, wallets, external_id)
294
+ new_wn.set_api_opts(@api_url, @partner_id, @api_key)
295
+ new_wn
296
+ end
297
+
298
+ ##
299
+ # Returns an array of WalletName objects based on the given search parameters:
300
+ # * domain_name -> The pre-configured domain that you have already been using for wallet names
301
+ # * external_id -> The external ID previously given to the single wallet name you want to retrieve
302
+ def get_wallet_names(domain_name=nil, external_id=nil)
303
+ args = []
304
+ args.push("domain_name=#{domain_name}") if domain_name
305
+ args.push("external_id=#{external_id}") if external_id
306
+
307
+ uri = "#{@api_url}/v1/partner/walletname"
308
+ uri = (uri + "?" + args.join("&")) unless args.empty?
309
+ response = Netki.process_request(@api_key, @partner_id, uri, method='GET')
310
+
311
+ return [] if !response.has_key? 'wallet_name_count' || response['wallet_name_count'] == 0
312
+
313
+ wn_list = []
314
+ response['wallet_names'].each do |wn|
315
+ wallets = {}
316
+ wn['wallets'].each do |wallet|
317
+ wallets[wallet['currency']] = wallet['wallet_address']
318
+ end
319
+ wn_obj = WalletName.new(wn['domain_name'], wn['name'], wallets, wn['external_id'], wn['id'])
320
+ wn_obj.set_api_opts(@api_url, @partner_id, @api_key)
321
+ wn_list.push(wn_obj)
322
+ end
323
+ wn_list
324
+ end
325
+ end
326
+ end
@@ -0,0 +1,3 @@
1
+ module Netki
2
+ VERSION = "0.0.1"
3
+ end
data/lib/netki.rb ADDED
@@ -0,0 +1,6 @@
1
+ require_relative 'netki/version'
2
+ require_relative 'netki/netki'
3
+
4
+ module Netki
5
+
6
+ end
data/netki.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'netki/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "netki"
8
+ spec.version = Netki::VERSION
9
+ spec.licenses = ['BSD-3-Clause']
10
+ spec.authors = ["Matt David"]
11
+ spec.email = ["opensource@netki.com"]
12
+
13
+ spec.summary = %q{Netki Partner API}
14
+ spec.description = %q{Netki module that provides access to the Netki Wallet Name Partner API}
15
+ spec.homepage = "https://github.com/netkicorp/ruby-partner-client"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_runtime_dependency "httpclient", "~> 2.6"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.10"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "test-unit", "~> 3.1"
27
+ spec.add_development_dependency "test-unit-mock", "~> 0.3"
28
+ spec.add_development_dependency "mocha", "~> 1.1"
29
+ spec.add_development_dependency "webmock", "~> 1.21"
30
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: netki
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Matt David
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-08-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httpclient
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '3.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit-mock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '0.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '0.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '1.21'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '1.21'
111
+ description: Netki module that provides access to the Netki Wallet Name Partner API
112
+ email:
113
+ - opensource@netki.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - .travis.yml
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - bin/console
125
+ - bin/setup
126
+ - lib/netki.rb
127
+ - lib/netki/netki.rb
128
+ - lib/netki/version.rb
129
+ - netki.gemspec
130
+ homepage: https://github.com/netkicorp/ruby-partner-client
131
+ licenses:
132
+ - BSD-3-Clause
133
+ metadata: {}
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.2.2
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: Netki Partner API
154
+ test_files: []