netki 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: 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: []