clearbit 0.0.6

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: 5b0cfa609b6d8cb8a20bcfb8341eb972e1413723
4
+ data.tar.gz: 4c1389dca0b4b2e69173395dde00ef620e0afdeb
5
+ SHA512:
6
+ metadata.gz: b2053d03b6e1211e0a801bbfa0b58df2ec52ca6dbe72f71e4f4bb83bad352e45d93698c61b9e2768094d84b2a2f53895b2afdc442f5815fad45fb24e8467079a
7
+ data.tar.gz: e3b24f8fe720f16fc523104f323bef21f60403568427e601d35e3ebdb914df987e010ea45ea3c426d2e537e715354b14c85eac6dd426c5d7d823f0d9e91b458e
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/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in clearbit.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Alex MacCaw
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,71 @@
1
+ # Clearbit
2
+
3
+ A Ruby API client to [https://clearbit.co](https://clearbit.co).
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'clearbit'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install clearbit
18
+
19
+ ## Usage
20
+
21
+ First authorize requests by setting the API key found on your [account's settings page](https://clearbit.co/profile).
22
+
23
+ Clearbit.api_key = ENV['APIHUB_KEY']
24
+
25
+ Then you can lookup people by email address:
26
+
27
+ person = Clearbit::Person[email: 'info@eribium.org']
28
+
29
+ If the person can't be found, then `nil` will be returned.
30
+
31
+ See the [documentation](https://clearbit.co/docs/person) for more information.
32
+
33
+ ## Company lookup
34
+
35
+ You can lookup company data by domain name:
36
+
37
+ company = Clearbit::Company[domain: 'uber.com']
38
+
39
+ If the company can't be found, then `nil` will be returned.
40
+
41
+ See the [documentation](https://clearbit.co/docs/company) for more information.
42
+
43
+ ## CLI
44
+
45
+ The gem also includes a `clearbit` executable, which you can use like this:
46
+
47
+ $ clearbit person --email info@eribium.org
48
+
49
+ {
50
+ "name": {
51
+ "fullName": "Alex MacCaw",
52
+ "givenName": "Alex",
53
+ "familyName": "MacCaw"
54
+ },
55
+ ...
56
+
57
+ Or to look up a company:
58
+
59
+ $ clearbit company --domain uber.com
60
+
61
+ {
62
+ "name": "Uber",
63
+ "legalName": "Uber, Inc.",
64
+ "categories": [
65
+ "Transport"
66
+ ],
67
+ "founders": [
68
+ "Travis Kalanick",
69
+ "Garrett Camp"
70
+ ],
71
+ ...
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/apihub.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'clearbit/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "clearbit"
8
+ spec.version = Clearbit::VERSION
9
+ spec.authors = ["Alex MacCaw"]
10
+ spec.email = ["alex@clearbit.co"]
11
+ spec.description = %q{API client for clearbit.co}
12
+ spec.summary = %q{API client for clearbit.co}
13
+ spec.homepage = "https://github.com/maccman/clearbit-ruby"
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_dependency 'nestful', '~> 1.0.7'
24
+ end
data/bin/clearbit ADDED
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'clearbit'
4
+ require 'json'
5
+ require 'optparse'
6
+
7
+ begin
8
+ require 'awesome_print'
9
+ rescue LoadError
10
+ def ap(value)
11
+ puts JSON.pretty_generate(value)
12
+ end
13
+ end
14
+
15
+ options = {}
16
+ values = {}
17
+
18
+ parser = OptionParser.new do |opts|
19
+ opts.banner = "Usage: clearbit [person|company] [options]"
20
+
21
+ opts.on("--email EMAIL", String, "Email") do |v|
22
+ values[:email] = v
23
+ end
24
+
25
+ opts.on("--domain DOMAIN", String, "Domain") do |v|
26
+ values[:domain] = v
27
+ end
28
+
29
+ opts.on("--api-key KEY", String, "Clearbit") do |v|
30
+ options[:api_key] = v
31
+ end
32
+ end
33
+
34
+ parser.parse!
35
+
36
+ case ARGV[0]
37
+ when 'person'
38
+ entity = Clearbit::Streaming::Person
39
+ when 'company'
40
+ entity = Clearbit::Streaming::Company
41
+ else
42
+ puts parser
43
+ exit
44
+ end
45
+
46
+ if values == {}
47
+ puts parser
48
+ exit
49
+ end
50
+
51
+ if key = ENV['APIHUB_KEY']
52
+ options[:api_key] ||= key
53
+ end
54
+
55
+ if key = options.delete(:api_key)
56
+ Clearbit.api_key = key
57
+ else
58
+ puts 'API Key required'
59
+ puts parser
60
+ exit
61
+ end
62
+
63
+ object = entity.find(values, options)
64
+
65
+ if object
66
+ ap object.to_hash
67
+ else
68
+ puts 'Not found'
69
+ end
data/examples/email.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'clearbit'
2
+ require 'pp'
3
+
4
+ Clearbit.api_key = ENV['CLEARBIT_KEY']
5
+
6
+ pp Clearbit::Person[email: 'info@eribium.org']
data/lib/clearbit.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'nestful'
2
+ require 'clearbit/version'
3
+
4
+ module Clearbit
5
+ def self.api_key=(value)
6
+ Base.options Base.options.merge(
7
+ auth_type: :bearer,
8
+ password: value
9
+ )
10
+ end
11
+
12
+ def self.key=(value)
13
+ self.api_key = value
14
+ end
15
+
16
+ autoload :Base, 'clearbit/base'
17
+ autoload :Company, 'clearbit/company'
18
+ autoload :Mash, 'clearbit/mash'
19
+ autoload :Person, 'clearbit/person'
20
+ autoload :Resource, 'clearbit/resource'
21
+ autoload :Streaming, 'clearbit/streaming'
22
+ autoload :Watchlist, 'clearbit/watchlist'
23
+ end
@@ -0,0 +1,6 @@
1
+ module Clearbit
2
+ class Base < Resource
3
+ endpoint 'https://api.clearbit.co'
4
+ options :format => :json
5
+ end
6
+ end
@@ -0,0 +1,37 @@
1
+ module Clearbit
2
+ class Company < Base
3
+ endpoint 'https://company.clearbit.co'
4
+ path '/v1/companies'
5
+
6
+ def self.find(values, options = {})
7
+ unless values.is_a?(Hash)
8
+ values = {:id => values}
9
+ end
10
+
11
+ options = options.dup
12
+ params = options.delete(:params) || {}
13
+
14
+ if domain = values[:domain]
15
+ response = get(uri(:domain, domain), params, options)
16
+
17
+ elsif id = values[:id]
18
+ response = get(id, params, options)
19
+
20
+ else
21
+ raise ArgumentError, 'Invalid values'
22
+ end
23
+
24
+ if response.status == 202
25
+ self.new(pending: true)
26
+ else
27
+ self.new(response)
28
+ end
29
+
30
+ rescue Nestful::ResourceNotFound
31
+ end
32
+
33
+ class << self
34
+ alias_method :[], :find
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,180 @@
1
+ module Clearbit
2
+ class Mash < Hash
3
+ def self.new(value = nil, *args)
4
+ if value.respond_to?(:each) &&
5
+ !value.respond_to?(:each_pair)
6
+ value.map {|v| super(v) }
7
+ else
8
+ super
9
+ end
10
+ end
11
+
12
+ alias_method :to_s, :inspect
13
+
14
+ def initialize(source_hash = nil, default = nil, &blk)
15
+ deep_update(source_hash.to_hash) if source_hash
16
+ default ? super(default) : super(&blk)
17
+ end
18
+
19
+ class << self; alias [] new; end
20
+
21
+ def id #:nodoc:
22
+ self['id']
23
+ end
24
+
25
+ def type #:nodoc:
26
+ self['type']
27
+ end
28
+
29
+ alias_method :regular_reader, :[]
30
+ alias_method :regular_writer, :[]=
31
+
32
+ # Retrieves an attribute set in the Mash. Will convert
33
+ # any key passed in to a string before retrieving.
34
+ def custom_reader(key)
35
+ value = regular_reader(convert_key(key))
36
+ yield value if block_given?
37
+ value
38
+ end
39
+
40
+ # Sets an attribute in the Mash. Key will be converted to
41
+ # a string before it is set, and Hashes will be converted
42
+ # into Mashes for nesting purposes.
43
+ def custom_writer(key,value) #:nodoc:
44
+ regular_writer(convert_key(key), convert_value(value))
45
+ end
46
+
47
+ alias_method :[], :custom_reader
48
+ alias_method :[]=, :custom_writer
49
+
50
+ # This is the bang method reader, it will return a new Mash
51
+ # if there isn't a value already assigned to the key requested.
52
+ def initializing_reader(key)
53
+ ck = convert_key(key)
54
+ regular_writer(ck, self.class.new) unless key?(ck)
55
+ regular_reader(ck)
56
+ end
57
+
58
+ # This is the under bang method reader, it will return a temporary new Mash
59
+ # if there isn't a value already assigned to the key requested.
60
+ def underbang_reader(key)
61
+ ck = convert_key(key)
62
+ if key?(ck)
63
+ regular_reader(ck)
64
+ else
65
+ self.class.new
66
+ end
67
+ end
68
+
69
+ def fetch(key, *args)
70
+ super(convert_key(key), *args)
71
+ end
72
+
73
+ def delete(key)
74
+ super(convert_key(key))
75
+ end
76
+
77
+ alias_method :regular_dup, :dup
78
+ # Duplicates the current mash as a new mash.
79
+ def dup
80
+ self.class.new(self, self.default)
81
+ end
82
+
83
+ def key?(key)
84
+ super(convert_key(key))
85
+ end
86
+ alias_method :has_key?, :key?
87
+ alias_method :include?, :key?
88
+ alias_method :member?, :key?
89
+
90
+ # Performs a deep_update on a duplicate of the
91
+ # current mash.
92
+ def deep_merge(other_hash, &blk)
93
+ dup.deep_update(other_hash, &blk)
94
+ end
95
+ alias_method :merge, :deep_merge
96
+
97
+ # Recursively merges this mash with the passed
98
+ # in hash, merging each hash in the hierarchy.
99
+ def deep_update(other_hash, &blk)
100
+ other_hash.each_pair do |k,v|
101
+ key = convert_key(k)
102
+ if regular_reader(key).is_a?(Mash) and v.is_a?(::Hash)
103
+ custom_reader(key).deep_update(v, &blk)
104
+ else
105
+ value = convert_value(v, true)
106
+ value = blk.call(key, self[k], value) if blk
107
+ custom_writer(key, value)
108
+ end
109
+ end
110
+ self
111
+ end
112
+ alias_method :deep_merge!, :deep_update
113
+ alias_method :update, :deep_update
114
+ alias_method :merge!, :update
115
+
116
+ # Performs a shallow_update on a duplicate of the current mash
117
+ def shallow_merge(other_hash)
118
+ dup.shallow_update(other_hash)
119
+ end
120
+
121
+ # Merges (non-recursively) the hash from the argument,
122
+ # changing the receiving hash
123
+ def shallow_update(other_hash)
124
+ other_hash.each_pair do |k,v|
125
+ regular_writer(convert_key(k), convert_value(v, true))
126
+ end
127
+ self
128
+ end
129
+
130
+ def replace(other_hash)
131
+ (keys - other_hash.keys).each { |key| delete(key) }
132
+ other_hash.each { |key, value| self[key] = value }
133
+ self
134
+ end
135
+
136
+ # Will return true if the Mash has had a key
137
+ # set in addition to normal respond_to? functionality.
138
+ def respond_to?(method_name, include_private=false)
139
+ return true if key?(method_name) || method_name.to_s.slice(/[=?!_]\Z/)
140
+ super
141
+ end
142
+
143
+ def method_missing(method_name, *args, &blk)
144
+ return self.[](method_name, &blk) if key?(method_name)
145
+ match = method_name.to_s.match(/(.*?)([?=!_]?)$/)
146
+ case match[2]
147
+ when "="
148
+ self[match[1]] = args.first
149
+ when "?"
150
+ !!self[match[1]]
151
+ when "!"
152
+ initializing_reader(match[1])
153
+ when "_"
154
+ underbang_reader(match[1])
155
+ else
156
+ default(method_name, *args, &blk)
157
+ end
158
+ end
159
+
160
+ protected
161
+
162
+ def convert_key(key) #:nodoc:
163
+ key.to_s
164
+ end
165
+
166
+ def convert_value(val, duping=false) #:nodoc:
167
+ case val
168
+ when self.class
169
+ val.dup
170
+ when ::Hash
171
+ val = val.dup if duping
172
+ Mash.new(val)
173
+ when ::Array
174
+ val.map {|e| convert_value(e) }
175
+ else
176
+ val
177
+ end
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,43 @@
1
+ module Clearbit
2
+ class Person < Base
3
+ endpoint 'https://person.clearbit.co'
4
+ path '/v1/people'
5
+
6
+ def self.find(values, options = {})
7
+ unless values.is_a?(Hash)
8
+ values = {:id => values}
9
+ end
10
+
11
+ options = options.dup
12
+ params = options.delete(:params) || {}
13
+
14
+ if email = values[:email]
15
+ response = get(uri(:email, email), params, options)
16
+
17
+ elsif twitter = values[:twitter]
18
+ response = get(uri(:twitter, twitter), params, options)
19
+
20
+ elsif github = values[:github]
21
+ response = get(uri(:github, github), params, options)
22
+
23
+ elsif id = values[:id]
24
+ response = get(id, params, options)
25
+
26
+ else
27
+ raise ArgumentError, 'Invalid values'
28
+ end
29
+
30
+ if response.status == 202
31
+ self.new(pending: true)
32
+ else
33
+ self.new(response)
34
+ end
35
+
36
+ rescue Nestful::ResourceNotFound
37
+ end
38
+
39
+ class << self
40
+ alias_method :[], :find
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,66 @@
1
+ require 'uri'
2
+
3
+ module Clearbit
4
+ class Resource < Mash
5
+ def self.endpoint(value = nil)
6
+ @endpoint = value if value
7
+ return @endpoint if @endpoint
8
+ superclass.respond_to?(:endpoint) ? superclass.endpoint : nil
9
+ end
10
+
11
+ def self.path(value = nil)
12
+ @path = value if value
13
+ return @path if @path
14
+ superclass.respond_to?(:path) ? superclass.path : nil
15
+ end
16
+
17
+ def self.options(value = nil)
18
+ @options = value if value
19
+ return @options if @options
20
+ superclass.respond_to?(:options) ? superclass.options : {}
21
+ end
22
+
23
+ class << self
24
+ alias_method :endpoint=, :endpoint
25
+ alias_method :path=, :path
26
+ alias_method :options=, :options
27
+ end
28
+
29
+ def self.url
30
+ URI.join(endpoint.to_s, path.to_s).to_s
31
+ end
32
+
33
+ def self.uri(*parts)
34
+ # If an absolute URI already
35
+ if (uri = parts.first) && uri.is_a?(URI)
36
+ return uri if uri.host
37
+ end
38
+
39
+ URI.parse(Nestful::Helpers.to_path(url, *parts))
40
+ end
41
+
42
+ def self.get(action = '', params = {}, options = {})
43
+ request(uri(action), options.merge(method: :get, params: params))
44
+ end
45
+
46
+ def self.put(action = '', params = {}, options = {})
47
+ request(uri(action), options.merge(method: :put, params: params))
48
+ end
49
+
50
+ def self.post(action = '', params = {}, options = {})
51
+ request(uri(action), options.merge(method: :post, params: params))
52
+ end
53
+
54
+ def self.delete(action = '', params = {}, options = {})
55
+ request(uri(action), options.merge(method: :delete, params: params))
56
+ end
57
+
58
+ def self.request(url, options = {})
59
+ options = Nestful::Helpers.deep_merge(self.options, options)
60
+
61
+ self.new Nestful::Request.new(
62
+ url, options
63
+ ).execute
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,6 @@
1
+ module Clearbit
2
+ module Streaming
3
+ autoload :Company, 'clearbit/streaming/company'
4
+ autoload :Person, 'clearbit/streaming/person'
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ module Clearbit
2
+ module Streaming
3
+ class Company < Clearbit::Company
4
+ endpoint 'https://company-stream.clearbit.co'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Clearbit
2
+ module Streaming
3
+ class Person < Clearbit::Person
4
+ endpoint 'https://person-stream.clearbit.co'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module Clearbit
2
+ VERSION = "0.0.6"
3
+ end
@@ -0,0 +1,28 @@
1
+ module Clearbit
2
+ class Watchlist < Base
3
+ endpoint 'https://watchlist.clearbit.co'
4
+ path '/v1/search/all'
5
+
6
+ def self.search(name, options = {})
7
+ options = options.dup
8
+ params = options.delete(:params) || {}
9
+
10
+ params = {
11
+ name: name,
12
+ threshold: options.delete(:threshold) || 1.0
13
+ }.merge(params)
14
+
15
+ response = post('', params, options)
16
+
17
+ self.new(response)
18
+ end
19
+
20
+ class Individual < Watchlist
21
+ path '/v1/search/individuals'
22
+ end
23
+
24
+ class Entity < Watchlist
25
+ path '/v1/search/entities'
26
+ end
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: clearbit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - Alex MacCaw
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-25 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: nestful
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.7
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.7
55
+ description: API client for clearbit.co
56
+ email:
57
+ - alex@clearbit.co
58
+ executables:
59
+ - clearbit
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - apihub.gemspec
69
+ - bin/clearbit
70
+ - examples/email.rb
71
+ - lib/clearbit.rb
72
+ - lib/clearbit/base.rb
73
+ - lib/clearbit/company.rb
74
+ - lib/clearbit/mash.rb
75
+ - lib/clearbit/person.rb
76
+ - lib/clearbit/resource.rb
77
+ - lib/clearbit/streaming.rb
78
+ - lib/clearbit/streaming/company.rb
79
+ - lib/clearbit/streaming/person.rb
80
+ - lib/clearbit/version.rb
81
+ - lib/clearbit/watchlist.rb
82
+ homepage: https://github.com/maccman/clearbit-ruby
83
+ licenses:
84
+ - MIT
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 2.2.2
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: API client for clearbit.co
106
+ test_files: []