crunchbase 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +9 -84
- data/lib/crunchbase.rb +3 -22
- metadata +7 -26
- data/lib/crunchbase/api.rb +0 -107
- data/lib/crunchbase/array_from_list.rb +0 -9
- data/lib/crunchbase/cb_object.rb +0 -52
- data/lib/crunchbase/company.rb +0 -104
- data/lib/crunchbase/crunch_exception.rb +0 -4
- data/lib/crunchbase/date_methods.rb +0 -15
- data/lib/crunchbase/entity_list_item.rb +0 -59
- data/lib/crunchbase/financial_organization.rb +0 -73
- data/lib/crunchbase/image.rb +0 -36
- data/lib/crunchbase/investment.rb +0 -43
- data/lib/crunchbase/milestone.rb +0 -33
- data/lib/crunchbase/person.rb +0 -71
- data/lib/crunchbase/product.rb +0 -77
- data/lib/crunchbase/relationship.rb +0 -40
- data/lib/crunchbase/relationships/firm_relationship.rb +0 -33
- data/lib/crunchbase/relationships/person_relationship.rb +0 -25
- data/lib/crunchbase/relationships/provider_relationship.rb +0 -24
- data/lib/crunchbase/search.rb +0 -124
- data/lib/crunchbase/search_result.rb +0 -16
- data/lib/crunchbase/service_provider.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffd5ba31ec023633cda2812127ef906f79caaf4e
|
4
|
+
data.tar.gz: 3b79782a2f7727bb8640f3d24c8f2457e6549dc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2db47155effd5af3bfcaf98ffe7e59a27ec0fd71159fcc25bfc18974a6e24f9c8b965defbf35aad88b594ec097b06ecfd5f95e1e0a910fc901ba8e6507881db4
|
7
|
+
data.tar.gz: aac48f0e8ddc2ec226e76676ec13762ce6f2fae9667263192845ff788c36380b92923d80c685798b0abd6feeaa3ecd6ba6b6b7f9b818f81ff854618ae4a75d4e
|
data/README.rdoc
CHANGED
@@ -1,89 +1,14 @@
|
|
1
1
|
= crunchbase
|
2
2
|
|
3
|
-
|
3
|
+
== EOL
|
4
4
|
|
5
|
-
|
5
|
+
Crunchbase has retired the v1 api and I unfortunately do not have the time to
|
6
|
+
bring this gem up to date with v2. This project and gem are therefore retired
|
7
|
+
as well.
|
6
8
|
|
7
|
-
|
8
|
-
use
|
9
|
-
|
10
|
-
of the two is installed.
|
9
|
+
A number of folks have created gems for v2. I have not personally used any of
|
10
|
+
them as I don't use Crunchbase for any current projects, but links can be found
|
11
|
+
in the Crunchbase developer documentation: https://developer.crunchbase.com/docs
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
== Usage
|
15
|
-
|
16
|
-
If you already know the permalink for a given entity, you can grab the entry
|
17
|
-
with the +get+ method.
|
18
|
-
|
19
|
-
require 'crunchbase'
|
20
|
-
Crunchbase::API.key = 'your crunchbase api key'
|
21
|
-
steve = Crunchbase::Person.get("steve-jobs")
|
22
|
-
facebook = Crunchbase::Company.get("facebook")
|
23
|
-
|
24
|
-
If you know the name of the entity but not the permalink, you can use the
|
25
|
-
+find+ method.
|
26
|
-
|
27
|
-
steve = Crunchbase::Person.find("Steve", "Jobs")
|
28
|
-
github = Crunchbase::Company.find("Github")
|
29
|
-
|
30
|
-
Note that finding using a name performs two HTTP requests internally, the first
|
31
|
-
returning the permalink associated with the name, and the second which returns
|
32
|
-
the actual data.
|
33
|
-
|
34
|
-
=== Search
|
35
|
-
|
36
|
-
Searching the Crunchbase is possible with the Search class.
|
37
|
-
|
38
|
-
s = Crunchbase::Search.find("widgets")
|
39
|
-
|
40
|
-
You can also search by location using the Location class. Searches can be by city,
|
41
|
-
state, zip, country-code, etc.
|
42
|
-
|
43
|
-
l = Crunchbase::Location.geo("San Francisco")
|
44
|
-
|
45
|
-
You can access the search results by treating the returned Search instance as
|
46
|
-
an array.
|
47
|
-
|
48
|
-
first_result = s[0]
|
49
|
-
s.each { |result| puts result.name }
|
50
|
-
|
51
|
-
The Search will return a list consisting of objects of the SearchResult type. To
|
52
|
-
access the full entity object, call the +entity+ method of the SearchResult.
|
53
|
-
|
54
|
-
While Search does include the Enumerable module, it does not implement all of
|
55
|
-
the methods of Array. If you need to treat the results as an array in a way not
|
56
|
-
supported, you can call +to_ary+; this prefetches all result pages (if they have
|
57
|
-
not already been loaded), so it may entail a slight delay, depending on the
|
58
|
-
number of results.
|
59
|
-
|
60
|
-
all_results = s.to_ary
|
61
|
-
|
62
|
-
=== List all Items
|
63
|
-
|
64
|
-
If you've gone insane and want a list of every single item for a given entity
|
65
|
-
type, you can do so with the +all+ method.
|
66
|
-
|
67
|
-
all_companies = Company.all
|
68
|
-
company = all_companies[105]
|
69
|
-
|
70
|
-
This returns an array containing objects representing each entity. Just like
|
71
|
-
Search, the full item can be grabbed with the +entity+ method. Unlike Search,
|
72
|
-
however, all of the result objects are fetched at once, so iterating through the
|
73
|
-
list does not entail a delay every ten items. Of course, the list is enormous
|
74
|
-
(the list of all companies returns over 84,500 entries as of this writing), so
|
75
|
-
it's little consolation.
|
76
|
-
|
77
|
-
== Contributing
|
78
|
-
|
79
|
-
Contributions are welcome. Note that in order to run the test suite, you need to
|
80
|
-
include an API key in +spec/apikey.yml+. This file is ignored by git. An example
|
81
|
-
file is provided for convenience.
|
82
|
-
|
83
|
-
== Copyright
|
84
|
-
|
85
|
-
Copyright (c) 2011-12 Tyler Cunnion. This software is made available under the
|
86
|
-
MIT/X11 license. See LICENSE.txt for further details.
|
87
|
-
|
88
|
-
I am not affiliated in any way with AOL, TechCrunch, Crunchbase, or anyone
|
89
|
-
really.
|
13
|
+
Thanks to all who contributed code and apologies for not being able to
|
14
|
+
maintain the project further.
|
data/lib/crunchbase.rb
CHANGED
@@ -1,24 +1,5 @@
|
|
1
|
-
require 'crunchbase/api'
|
2
|
-
require 'crunchbase/cb_object'
|
3
|
-
require 'crunchbase/date_methods'
|
4
|
-
require 'crunchbase/array_from_list'
|
5
|
-
require 'crunchbase/image'
|
6
|
-
require 'crunchbase/milestone'
|
7
|
-
require 'crunchbase/company'
|
8
|
-
require 'crunchbase/financial_organization'
|
9
|
-
require 'crunchbase/investment'
|
10
|
-
require 'crunchbase/person'
|
11
|
-
require 'crunchbase/product'
|
12
|
-
require 'crunchbase/service_provider'
|
13
|
-
require 'crunchbase/relationship'
|
14
|
-
require 'crunchbase/relationships/firm_relationship'
|
15
|
-
require 'crunchbase/relationships/person_relationship'
|
16
|
-
require 'crunchbase/relationships/provider_relationship'
|
17
|
-
require 'crunchbase/entity_list_item'
|
18
|
-
require 'crunchbase/search'
|
19
|
-
require 'crunchbase/search_result'
|
20
|
-
require 'crunchbase/crunch_exception'
|
21
|
-
|
22
1
|
module Crunchbase
|
23
|
-
VERSION = "0.
|
2
|
+
VERSION = "0.5.0"
|
24
3
|
end
|
4
|
+
|
5
|
+
raise ScriptError.new("crunchbase gem not compatible with current api, please change to a new gem with api v2 support")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crunchbase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Cunnion
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: tyler.cunnion@gmail.com
|
@@ -18,29 +18,9 @@ extra_rdoc_files:
|
|
18
18
|
- LICENSE.txt
|
19
19
|
- README.rdoc
|
20
20
|
files:
|
21
|
-
- lib/crunchbase/api.rb
|
22
|
-
- lib/crunchbase/array_from_list.rb
|
23
|
-
- lib/crunchbase/cb_object.rb
|
24
|
-
- lib/crunchbase/company.rb
|
25
|
-
- lib/crunchbase/crunch_exception.rb
|
26
|
-
- lib/crunchbase/date_methods.rb
|
27
|
-
- lib/crunchbase/entity_list_item.rb
|
28
|
-
- lib/crunchbase/financial_organization.rb
|
29
|
-
- lib/crunchbase/image.rb
|
30
|
-
- lib/crunchbase/investment.rb
|
31
|
-
- lib/crunchbase/milestone.rb
|
32
|
-
- lib/crunchbase/person.rb
|
33
|
-
- lib/crunchbase/product.rb
|
34
|
-
- lib/crunchbase/relationship.rb
|
35
|
-
- lib/crunchbase/relationships/firm_relationship.rb
|
36
|
-
- lib/crunchbase/relationships/person_relationship.rb
|
37
|
-
- lib/crunchbase/relationships/provider_relationship.rb
|
38
|
-
- lib/crunchbase/search.rb
|
39
|
-
- lib/crunchbase/search_result.rb
|
40
|
-
- lib/crunchbase/service_provider.rb
|
41
|
-
- lib/crunchbase.rb
|
42
21
|
- LICENSE.txt
|
43
22
|
- README.rdoc
|
23
|
+
- lib/crunchbase.rb
|
44
24
|
homepage: http://github.com/tylercunnion/crunchbase
|
45
25
|
licenses:
|
46
26
|
- MIT
|
@@ -51,18 +31,19 @@ require_paths:
|
|
51
31
|
- lib
|
52
32
|
required_ruby_version: !ruby/object:Gem::Requirement
|
53
33
|
requirements:
|
54
|
-
- -
|
34
|
+
- - ">="
|
55
35
|
- !ruby/object:Gem::Version
|
56
36
|
version: '0'
|
57
37
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
38
|
requirements:
|
59
|
-
- -
|
39
|
+
- - ">="
|
60
40
|
- !ruby/object:Gem::Version
|
61
41
|
version: '0'
|
62
42
|
requirements: []
|
63
43
|
rubyforge_project:
|
64
|
-
rubygems_version: 2.
|
44
|
+
rubygems_version: 2.4.2
|
65
45
|
signing_key:
|
66
46
|
specification_version: 4
|
67
47
|
summary: Ruby wrapper for CrunchBase API
|
68
48
|
test_files: []
|
49
|
+
has_rdoc:
|
data/lib/crunchbase/api.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'net/http'
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'yajl'
|
6
|
-
rescue LoadError
|
7
|
-
require 'json'
|
8
|
-
end
|
9
|
-
|
10
|
-
require 'timeout'
|
11
|
-
|
12
|
-
module Crunchbase
|
13
|
-
|
14
|
-
# Handles the actual calls to the Crunchbase API through a series of class
|
15
|
-
# methods, each referring to a CB entity type. Each method returns the raw
|
16
|
-
# JSON returned from the API. You should probably be using the factory
|
17
|
-
# methods provided on each entity class instead of calling these directly.
|
18
|
-
class API
|
19
|
-
CB_URL = 'http://api.crunchbase.com/v/1/'
|
20
|
-
SUPPORTED_ENTITIES = ['person', 'company', 'financial-organization', 'product', 'service-provider']
|
21
|
-
@timeout_limit = 60
|
22
|
-
@redirect_limit = 2
|
23
|
-
class << self; attr_accessor :timeout_limit, :redirect_limit, :key end
|
24
|
-
|
25
|
-
def self.single_entity(permalink, entity_name)
|
26
|
-
raise CrunchException, "Unsupported Entity Type" unless SUPPORTED_ENTITIES.include?(entity_name)
|
27
|
-
fetch(permalink, entity_name)
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.all(entity)
|
31
|
-
uri = CB_URL + entity + ".js"
|
32
|
-
get_json_response(uri)
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
# Returns the JSON parser, whether that's an instance of Yajl or JSON
|
38
|
-
def self.parser
|
39
|
-
if defined?(Yajl)
|
40
|
-
Yajl::Parser
|
41
|
-
else
|
42
|
-
JSON
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Fetches URI for the permalink interface.
|
47
|
-
def self.fetch(permalink, object_name)
|
48
|
-
uri = CB_URL + "#{object_name}/#{permalink}.js"
|
49
|
-
get_json_response(uri)
|
50
|
-
end
|
51
|
-
|
52
|
-
# Fetches URI for the search interface.
|
53
|
-
def self.search(query, page=1)
|
54
|
-
require "cgi"
|
55
|
-
uri = CB_URL + "search.js?query=#{CGI.escape(query)}&page=#{page}"
|
56
|
-
get_json_response(uri)
|
57
|
-
end
|
58
|
-
|
59
|
-
# Fetches URI for geographic search interface
|
60
|
-
def self.geo(query, page=1)
|
61
|
-
require "cgi"
|
62
|
-
uri = CB_URL + "search.js?geo=#{CGI.escape(query)}&page=#{page}"
|
63
|
-
get_json_response(uri)
|
64
|
-
end
|
65
|
-
|
66
|
-
# Searches for a permalink in a particular category.
|
67
|
-
def self.permalink(parameters, category)
|
68
|
-
require "cgi"
|
69
|
-
qs = parameters.map{|k,v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v)}"}.join('&')
|
70
|
-
uri = CB_URL + "#{category}/permalink?#{qs}"
|
71
|
-
get_json_response(uri)
|
72
|
-
end
|
73
|
-
|
74
|
-
# Gets specified URI, then parses the returned JSON. Raises Timeout error
|
75
|
-
# if request time exceeds set limit. Raises CrunchException if returned
|
76
|
-
# JSON contains an error.
|
77
|
-
def self.get_json_response(uri)
|
78
|
-
raise CrunchException, "API key required, visit http://developer.crunchbase.com" unless @key
|
79
|
-
uri = uri + "#{uri.match('\?') ? "&" : "?"}api_key=#{@key}"
|
80
|
-
resp = Timeout::timeout(@timeout_limit) {
|
81
|
-
get_url_following_redirects(uri, @redirect_limit)
|
82
|
-
}
|
83
|
-
resp = resp.gsub(/[[:cntrl:]]/, '')
|
84
|
-
j = parser.parse(resp)
|
85
|
-
raise CrunchException, j["error"] if j.class == Hash && j["error"]
|
86
|
-
j
|
87
|
-
end
|
88
|
-
|
89
|
-
# Performs actual HTTP requests, recursively if a redirect response is
|
90
|
-
# encountered. Will raise HTTP error if response is not 200, 404, or 3xx.
|
91
|
-
def self.get_url_following_redirects(uri_str, limit = 10)
|
92
|
-
raise CrunchException, 'HTTP redirect too deep' if limit == 0
|
93
|
-
|
94
|
-
url = URI.parse(uri_str)
|
95
|
-
response = Net::HTTP.start(url.host, url.port) { |http| http.get(url.request_uri) }
|
96
|
-
case response
|
97
|
-
when Net::HTTPSuccess, Net::HTTPNotFound
|
98
|
-
response.body
|
99
|
-
when Net::HTTPRedirection
|
100
|
-
get_url_following_redirects(response['location'], limit - 1)
|
101
|
-
else
|
102
|
-
response.error!
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
end
|
data/lib/crunchbase/cb_object.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
|
3
|
-
# Represents any object which can be pulled directly from the CB API.
|
4
|
-
class CB_Object
|
5
|
-
|
6
|
-
# Must be overridden in subclasses
|
7
|
-
ENT_NAME = "undefined"
|
8
|
-
ENT_PLURAL = "undefineds"
|
9
|
-
|
10
|
-
# Returns an array of tags
|
11
|
-
def tags
|
12
|
-
@tag_list.respond_to?('split') ? @tag_list.split(/,\s*/) : []
|
13
|
-
end
|
14
|
-
|
15
|
-
# Returns an array of aliases
|
16
|
-
def aliases
|
17
|
-
@alias_list.respond_to?('split') ? @alias_list.split(/,\s*/) : []
|
18
|
-
end
|
19
|
-
|
20
|
-
# Factory method to return an instance from a permalink
|
21
|
-
def self.get(permalink)
|
22
|
-
j = API.single_entity(permalink, self::ENT_NAME)
|
23
|
-
e = self.new(j)
|
24
|
-
return e
|
25
|
-
end
|
26
|
-
|
27
|
-
# Finds an entity by its name. Uses two HTTP requests; one to find the
|
28
|
-
# permalink, and another to request the actual entity.
|
29
|
-
def self.find(name)
|
30
|
-
get(API.permalink({name: name}, self::ENT_PLURAL)["permalink"])
|
31
|
-
end
|
32
|
-
|
33
|
-
# Requests a list of all entities of a given type. Returns the list as an
|
34
|
-
# array of EntityListItems.
|
35
|
-
def self.all
|
36
|
-
all = API.all(self::ENT_PLURAL).map do |ent|
|
37
|
-
ent["namespace"] = self::ENT_NAME
|
38
|
-
EntityListItem.new(ent)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
# Compares two objects, returning true if they have the same permalink
|
44
|
-
# (ie, represent the same entity). If you must ensure that the two objects
|
45
|
-
# also contain the same data, you should also compare the updated_at
|
46
|
-
# attributes.
|
47
|
-
def ===(other)
|
48
|
-
@permalink == other.permalink
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
data/lib/crunchbase/company.rb
DELETED
@@ -1,104 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
module Crunchbase
|
3
|
-
# Represents a Company listed in the Crunchbase.
|
4
|
-
class Company < CB_Object
|
5
|
-
|
6
|
-
ENT_NAME = "company"
|
7
|
-
ENT_PLURAL = "companies"
|
8
|
-
|
9
|
-
include Crunchbase::DateMethods
|
10
|
-
|
11
|
-
attr_reader :name, :permalink, :crunchbase_url, :homepage_url, :blog_url,
|
12
|
-
:blog_feed_url, :twitter_username, :category_code, :number_of_employees,
|
13
|
-
:deadpooled_url, :email_address, :phone_number, :description,
|
14
|
-
:created_at, :updated_at, :overview, :image, :competitions,
|
15
|
-
:total_money_raised, :funding_rounds, :acquisition, :acquisitions,
|
16
|
-
:offices, :ipo, :video_embeds, :screenshots, :external_links,
|
17
|
-
:deadpooled_year, :deadpooled_month, :deadpooled_day,
|
18
|
-
:founded_year, :founded_month, :founded_day
|
19
|
-
|
20
|
-
def initialize(json)
|
21
|
-
@name = json["name"]
|
22
|
-
@permalink = json["permalink"]
|
23
|
-
@crunchbase_url = json["crunchbase_url"]
|
24
|
-
@homepage_url = json["homepage_url"]
|
25
|
-
@blog_url = json["blog_url"]
|
26
|
-
@blog_feed_url = json["blog_feed_url"]
|
27
|
-
@twitter_username = json["twitter_username"]
|
28
|
-
@category_code = json["category_code"]
|
29
|
-
@number_of_employees = json["number_of_employees"]
|
30
|
-
@founded_year = json["founded_year"]
|
31
|
-
@founded_month = json["founded_month"]
|
32
|
-
@founded_day = json["founded_day"]
|
33
|
-
@deadpooled_year = json["deadpooled_year"]
|
34
|
-
@deadpooled_month = json["deadpooled_month"]
|
35
|
-
@deadpooled_day = json["deadpooled_day"]
|
36
|
-
@deadpooled_url = json["deadpooled_url"]
|
37
|
-
@tag_list = json["tag_list"]
|
38
|
-
@alias_list = json["alias_list"]
|
39
|
-
@email_address = json["email_address"]
|
40
|
-
@phone_number = json["phone_number"]
|
41
|
-
@description = json["description"]
|
42
|
-
@created_at = DateTime.parse(json["created_at"])
|
43
|
-
@updated_at = DateTime.parse(json["updated_at"])
|
44
|
-
@overview = json["overview"]
|
45
|
-
@image = Image.create(json["image"])
|
46
|
-
@products_list = json["products"]
|
47
|
-
@relationships_list = json["relationships"]
|
48
|
-
@competitions = json["competitions"]
|
49
|
-
@providerships_list = json["providerships"]
|
50
|
-
@total_money_raised = json["total_money_raised"]
|
51
|
-
@funding_rounds = json["funding_rounds"]
|
52
|
-
@investments_list = json['investments']
|
53
|
-
@acquisition = json["acquisition"]
|
54
|
-
@acquisitions = json["acquisitions"]
|
55
|
-
@offices = json["offices"]
|
56
|
-
@milestones_list = json["milestones"]
|
57
|
-
@ipo = json["ipo"]
|
58
|
-
@video_embeds = json["video_embeds"]
|
59
|
-
@screenshots = json["screenshots"]
|
60
|
-
@external_links = json["external_links"]
|
61
|
-
end
|
62
|
-
|
63
|
-
def relationships
|
64
|
-
@relationships ||= Relationship.array_from_list(@relationships_list)
|
65
|
-
end
|
66
|
-
|
67
|
-
def providerships
|
68
|
-
@providerships ||= Relationship.array_from_list(@providerships_list)
|
69
|
-
end
|
70
|
-
|
71
|
-
def investments
|
72
|
-
@investments ||= Investment.array_from_list(@investments_list)
|
73
|
-
end
|
74
|
-
|
75
|
-
def milestones
|
76
|
-
@milestones ||= Milestone.array_from_list(@milestones_list)
|
77
|
-
end
|
78
|
-
|
79
|
-
def founded?
|
80
|
-
!!(@founded_year || @founded_month || @founded_day)
|
81
|
-
end
|
82
|
-
|
83
|
-
# Returns the date the company was founded, or nil if not provided.
|
84
|
-
def founded
|
85
|
-
@founded ||= date_from_components(@founded_year, @founded_month, @founded_day)
|
86
|
-
end
|
87
|
-
|
88
|
-
# Returns whether the company has a deadpooled date component
|
89
|
-
def deadpooled?
|
90
|
-
!!(@deadpooled_year || @deadpooled_month || @deadpooled_day)
|
91
|
-
end
|
92
|
-
|
93
|
-
# Returns the date the company was deadpooled, or nil if not provided.
|
94
|
-
def deadpooled
|
95
|
-
@deadpooled ||= date_from_components(@deadpooled_year, @deadpooled_month, @deadpooled_day)
|
96
|
-
end
|
97
|
-
|
98
|
-
# Returns an array of Product objects, representing this Company's products.
|
99
|
-
def products
|
100
|
-
@products ||= @products_list.map {|p| Product.get(p['permalink']) }
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
104
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
module DateMethods
|
3
|
-
|
4
|
-
# Constructs a Date object from year, month, day, returns nil if it fails
|
5
|
-
def date_from_components(year, month, day)
|
6
|
-
begin
|
7
|
-
date = Date.new(year, month, day)
|
8
|
-
rescue
|
9
|
-
date = nil
|
10
|
-
end
|
11
|
-
date
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
class EntityListItem
|
3
|
-
|
4
|
-
attr_reader :permalink, :namespace
|
5
|
-
|
6
|
-
def initialize(json)
|
7
|
-
@namespace = json["namespace"]
|
8
|
-
if @namespace == "person"
|
9
|
-
@first_name = json["first_name"]
|
10
|
-
@last_name = json["last_name"]
|
11
|
-
else
|
12
|
-
@name = json["name"]
|
13
|
-
end
|
14
|
-
@permalink = json["permalink"]
|
15
|
-
end
|
16
|
-
|
17
|
-
def first_name
|
18
|
-
raise CrunchException, "Not available for this entity" unless namespace == "person"
|
19
|
-
@first_name
|
20
|
-
end
|
21
|
-
|
22
|
-
def last_name
|
23
|
-
raise CrunchException, "Not available for this entity" unless namespace == "person"
|
24
|
-
@last_name
|
25
|
-
end
|
26
|
-
|
27
|
-
# Returns concatenation of first and last names if person, otherwise
|
28
|
-
# returns name. Thus, if you wanted to, for example, iterate over search
|
29
|
-
# results and output the name, you could do so without checking entity type
|
30
|
-
# first.
|
31
|
-
def name
|
32
|
-
if @namespace == "person"
|
33
|
-
@first_name + " " + @last_name
|
34
|
-
else
|
35
|
-
@name
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# Returns the entity associated with the search result, loading from
|
40
|
-
# memory if previously fetched, unless +force_reload+ is set to true.
|
41
|
-
def entity(force_reload=false)
|
42
|
-
return @entity unless @entity.nil? || force_reload
|
43
|
-
@entity = case @namespace
|
44
|
-
when "company"
|
45
|
-
Company.get(@permalink)
|
46
|
-
when "financial-organization"
|
47
|
-
FinancialOrganization.get(@permalink)
|
48
|
-
when "person"
|
49
|
-
Person.get(@permalink)
|
50
|
-
when "product"
|
51
|
-
Product.get(@permalink)
|
52
|
-
when "service-provider"
|
53
|
-
ServiceProvider.get(@permalink)
|
54
|
-
end
|
55
|
-
return @entity
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
module Crunchbase
|
3
|
-
# Represents a Financial Organization listed in the Crunchbase.
|
4
|
-
class FinancialOrganization < CB_Object
|
5
|
-
|
6
|
-
ENT_NAME = "financial-organization"
|
7
|
-
ENT_PLURAL = "financial-organizations"
|
8
|
-
|
9
|
-
include Crunchbase::DateMethods
|
10
|
-
|
11
|
-
attr_reader :name, :permalink, :crunchbase_url, :homepage_url, :blog_url,
|
12
|
-
:blog_feed_url, :twitter_username, :phone_number, :description,
|
13
|
-
:email_address, :number_of_employees, :created_at, :updated_at,
|
14
|
-
:overview, :image, :offices, :funds, :video_embeds, :external_links,
|
15
|
-
:founded_year, :founded_month, :founded_day
|
16
|
-
|
17
|
-
def initialize(json)
|
18
|
-
@name = json['name']
|
19
|
-
@permalink = json['permalink']
|
20
|
-
@crunchbase_url = json['crunchbase_url']
|
21
|
-
@homepage_url = json['homepage_url']
|
22
|
-
@blog_url = json['blog_url']
|
23
|
-
@blog_feed_url = json['blog_feed_url']
|
24
|
-
@twitter_username = json['twitter_username']
|
25
|
-
@phone_number = json['phone_number']
|
26
|
-
@description = json['description']
|
27
|
-
@email_address = json['email_address']
|
28
|
-
@number_of_employees = json['number_of_employees']
|
29
|
-
@founded_year = json['founded_year']
|
30
|
-
@founded_month = json['founded_month']
|
31
|
-
@founded_day = json['founded_day']
|
32
|
-
@tag_list = json['tag_list']
|
33
|
-
@alias_list = json['alias_list']
|
34
|
-
@created_at = DateTime.parse(json["created_at"])
|
35
|
-
@updated_at = DateTime.parse(json["updated_at"])
|
36
|
-
@overview = json['overview']
|
37
|
-
@image = Image.create(json['image'])
|
38
|
-
@offices = json['offices']
|
39
|
-
@relationships_list = json["relationships"]
|
40
|
-
@investments_list = json['investments']
|
41
|
-
@milestones_list = json['milestones']
|
42
|
-
@providerships_list = json["providerships"]
|
43
|
-
@funds = json['funds']
|
44
|
-
@video_embeds = json['video_embeds']
|
45
|
-
@external_links = json['external_links']
|
46
|
-
end
|
47
|
-
|
48
|
-
def relationships
|
49
|
-
@relationships ||= Relationship.array_from_list(@relationships_list)
|
50
|
-
end
|
51
|
-
|
52
|
-
def providerships
|
53
|
-
@providerships ||= Relationship.array_from_list(@providerships_list)
|
54
|
-
end
|
55
|
-
|
56
|
-
def investments
|
57
|
-
@investments ||= Investment.array_from_list(@investments_list)
|
58
|
-
end
|
59
|
-
|
60
|
-
def milestones
|
61
|
-
@milestones ||= Milestone.array_from_list(@milestones_list)
|
62
|
-
end
|
63
|
-
|
64
|
-
def founded?
|
65
|
-
!!(@founded_year || @founded_month || @founded_day)
|
66
|
-
end
|
67
|
-
|
68
|
-
# Returns the date the financial org was founded, or nil if not provided.
|
69
|
-
def founded
|
70
|
-
@founded ||= date_from_components(@founded_year, @founded_month, @founded_day)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/lib/crunchbase/image.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
class Image
|
3
|
-
|
4
|
-
def self.create(hash)
|
5
|
-
hash ? self.new(hash) : nil
|
6
|
-
end
|
7
|
-
|
8
|
-
attr_reader :attribution, :sizes
|
9
|
-
|
10
|
-
def initialize(hash)
|
11
|
-
return nil unless hash
|
12
|
-
@attribution = hash['attribution']
|
13
|
-
@sizes = hash['available_sizes'].map{|s| ImageSize.new(s)}.sort
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
class ImageSize
|
18
|
-
include Comparable
|
19
|
-
|
20
|
-
attr_reader :height, :width, :url
|
21
|
-
|
22
|
-
def <=>(anOther)
|
23
|
-
pixels <=> anOther.pixels
|
24
|
-
end
|
25
|
-
|
26
|
-
def initialize(ary)
|
27
|
-
@width = ary[0][0]
|
28
|
-
@height = ary[0][1]
|
29
|
-
@url = ary[1]
|
30
|
-
end
|
31
|
-
|
32
|
-
def pixels
|
33
|
-
return @width * @height
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
class Investment
|
3
|
-
|
4
|
-
include Crunchbase::DateMethods
|
5
|
-
self.extend Crunchbase::ArrayFromList
|
6
|
-
|
7
|
-
attr_reader :funding_round_code, :funding_source_url,
|
8
|
-
:funding_source_description, :raised_amount, :raised_currency_code,
|
9
|
-
:funded_year, :funded_month, :funded_day,
|
10
|
-
:company_name, :company_permalink
|
11
|
-
|
12
|
-
def initialize(hash)
|
13
|
-
hash = hash["funding_round"]
|
14
|
-
@funding_round_code = hash["round_code"]
|
15
|
-
@funding_source_url = hash["source_url"]
|
16
|
-
@funding_source_description = hash["source_description"]
|
17
|
-
@raised_amount = hash["raised_amount"]
|
18
|
-
@raised_currency_code = hash["raised_currency_code"]
|
19
|
-
@funded_year = hash["funded_year"]
|
20
|
-
@funded_month = hash["funded_month"]
|
21
|
-
@funded_day = hash["funded_day"]
|
22
|
-
@company_name = hash["company"]["name"]
|
23
|
-
@company_permalink = hash["company"]["permalink"]
|
24
|
-
end
|
25
|
-
|
26
|
-
# Retrieves associated Company object, storing it for future use.
|
27
|
-
# If +force_reload+ is set to true, it will bypass the stored version.
|
28
|
-
def company(force_reload=false)
|
29
|
-
return @company unless @company.nil? || force_reload
|
30
|
-
@company = Company.get(@company_permalink)
|
31
|
-
return @company
|
32
|
-
end
|
33
|
-
|
34
|
-
def funded_date?
|
35
|
-
!!(@funded_year || @funded_month || @funded_day)
|
36
|
-
end
|
37
|
-
|
38
|
-
def funded_date
|
39
|
-
@funded_date ||= date_from_components(@funded_year, @funded_month, @funded_day)
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
data/lib/crunchbase/milestone.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
class Milestone
|
3
|
-
attr_reader :description, :source_url, :source_text,
|
4
|
-
:source_description, :stoneable_type, :stoned_value,
|
5
|
-
:stoned_value_type, :stoned_acquirer,
|
6
|
-
:stoned_year, :stoned_month, :stoned_year
|
7
|
-
|
8
|
-
include Crunchbase::DateMethods
|
9
|
-
self.extend Crunchbase::ArrayFromList
|
10
|
-
|
11
|
-
def initialize(obj)
|
12
|
-
@description = obj['description']
|
13
|
-
@stoned_year = obj['stoned_year']
|
14
|
-
@stoned_month = obj['stoned_month']
|
15
|
-
@stoned_day = obj['stoned_day']
|
16
|
-
@source_url = obj['source_url']
|
17
|
-
@source_text = obj['source_text']
|
18
|
-
@source_description = obj['source_description']
|
19
|
-
@stoneable_type = obj['stoneable_type']
|
20
|
-
@stoned_value = obj['stoned_value']
|
21
|
-
@stoned_value_type = obj['stoned_value_type']
|
22
|
-
@stoned_acquirer = obj['stoned_acquirer']
|
23
|
-
end
|
24
|
-
|
25
|
-
def date?
|
26
|
-
!!(@stoned_year || @stoned_month || @stoned_day)
|
27
|
-
end
|
28
|
-
|
29
|
-
def date
|
30
|
-
@date ||= date_from_components(@stoned_year, @stoned_month, @stoned_day)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/crunchbase/person.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
module Crunchbase
|
3
|
-
class Person < CB_Object
|
4
|
-
|
5
|
-
ENT_NAME = "person"
|
6
|
-
ENT_PLURAL = "people"
|
7
|
-
|
8
|
-
include Crunchbase::DateMethods
|
9
|
-
|
10
|
-
attr_reader :first_name, :last_name, :permalink, :crunchbase_url,
|
11
|
-
:homepage_url, :birthplace, :twitter_username, :blog_url, :blog_feed_url,
|
12
|
-
:affiliation_name, :created_at, :updated_at, :overview, :created_at,
|
13
|
-
:updated_at, :image, :video_embeds, :external_links, :web_presences,
|
14
|
-
:born_year, :born_month, :born_day
|
15
|
-
|
16
|
-
def self.find(first_name, last_name)
|
17
|
-
get(API.permalink({first_name: first_name, last_name: last_name}, "people")["permalink"])
|
18
|
-
end
|
19
|
-
|
20
|
-
def initialize(json)
|
21
|
-
@first_name = json["first_name"]
|
22
|
-
@last_name = json["last_name"]
|
23
|
-
@permalink = json["permalink"]
|
24
|
-
@crunchbase_url = json["crunchbase_url"]
|
25
|
-
@homepage_url = json["homepage_url"]
|
26
|
-
@birthplace = json["birthplace"]
|
27
|
-
@twitter_username = json["twitter_username"]
|
28
|
-
@blog_url = json["blog_url"]
|
29
|
-
@blog_feed_url = json["blog_feed_url"]
|
30
|
-
@affiliation_name = json["affiliation_name"]
|
31
|
-
@born_year = json["born_year"]
|
32
|
-
@born_month = json["born_month"]
|
33
|
-
@born_day = json["born_day"]
|
34
|
-
@tag_list = json["tag_list"]
|
35
|
-
@alias_list = json["alias_list"]
|
36
|
-
@created_at = DateTime.parse(json["created_at"])
|
37
|
-
@updated_at = DateTime.parse(json["updated_at"])
|
38
|
-
@overview = json["overview"]
|
39
|
-
@image = Image.create(json["image"])
|
40
|
-
@relationships_list = json["relationships"]
|
41
|
-
@investments_list = json["investments"]
|
42
|
-
@milestones_list = json["milestones"]
|
43
|
-
@video_embeds = json["video_embeds"]
|
44
|
-
@external_links = json["external_links"]
|
45
|
-
@web_presences = json["web_presences"]
|
46
|
-
end
|
47
|
-
|
48
|
-
def relationships
|
49
|
-
@relationships ||= Relationship.array_from_list(@relationships_list)
|
50
|
-
end
|
51
|
-
|
52
|
-
def investments
|
53
|
-
@investments ||= Investment.array_from_list(@investments_list)
|
54
|
-
end
|
55
|
-
|
56
|
-
def milestones
|
57
|
-
@milestones ||= Milestone.array_from_list(@milestones_list)
|
58
|
-
end
|
59
|
-
|
60
|
-
def born?
|
61
|
-
!!(@born_year || @born_month || @born_day)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Returns a date object, or nil if Date cannot be created from
|
65
|
-
# provided information.
|
66
|
-
def born
|
67
|
-
@born ||= date_from_components(@born_year, @born_month, @born_day)
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
end
|
data/lib/crunchbase/product.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
module Crunchbase
|
3
|
-
class Product < CB_Object
|
4
|
-
|
5
|
-
ENT_NAME = "product"
|
6
|
-
ENT_PLURAL = "products"
|
7
|
-
|
8
|
-
include Crunchbase::DateMethods
|
9
|
-
|
10
|
-
attr_reader :name, :permalink, :crunchbase_url, :homepage_url, :blog_url,
|
11
|
-
:blog_feed_url, :twitter_username, :stage_code, :deadpooled_url,
|
12
|
-
:deadpooled_year, :deadpooled_month, :deadpooled_day,
|
13
|
-
:launched_year, :launched_month, :launched_day,
|
14
|
-
:invite_share_url, :created_at, :updated_at, :overview, :image,
|
15
|
-
:company_permalink, :company_name, :video_embeds, :external_links
|
16
|
-
|
17
|
-
def initialize(json)
|
18
|
-
@name = json['name']
|
19
|
-
@permalink = json['permalink']
|
20
|
-
@crunchbase_url = json['crunchbase_url']
|
21
|
-
@homepage_url = json['homepage_url']
|
22
|
-
@blog_url = json['blog_url']
|
23
|
-
@blog_feed_url = json['blog_feed_url']
|
24
|
-
@twitter_username = json['twitter_username']
|
25
|
-
@stage_code = json['stage_code']
|
26
|
-
@deadpooled_url = json['deadpooled_url']
|
27
|
-
@invite_share_url = json['invite_share_url']
|
28
|
-
@tag_list = json['tag_list']
|
29
|
-
@alias_list = json['alias_list']
|
30
|
-
@deadpooled_year = json['deadpooled_year']
|
31
|
-
@deadpooled_month = json['deadpooled_month']
|
32
|
-
@deadpooled_day = json['deadpooled_day']
|
33
|
-
@launched_year = json['launched_year']
|
34
|
-
@launched_month = json['launched_month']
|
35
|
-
@launched_day = json['launched_day']
|
36
|
-
@created_at = DateTime.parse(json['created_at'])
|
37
|
-
@updated_at = DateTime.parse(json['updated_at'])
|
38
|
-
@overview = json['overview']
|
39
|
-
@image = Image.create(json["image"])
|
40
|
-
@company_permalink = json['company']['permalink']
|
41
|
-
@company_name = json['company']['name']
|
42
|
-
@milestones_list = json['milestones']
|
43
|
-
@video_embeds = json['video_embeds']
|
44
|
-
@external_links = json['external_links']
|
45
|
-
end
|
46
|
-
|
47
|
-
def milestones
|
48
|
-
@milestones ||= Milestone.array_from_list(@milestones_list)
|
49
|
-
end
|
50
|
-
|
51
|
-
def deadpooled?
|
52
|
-
!!(@deadpooled_year || @deadpooled_month || @deadpooled_day)
|
53
|
-
end
|
54
|
-
|
55
|
-
# Returns the date the product was deadpooled, or nil if not provided.
|
56
|
-
def deadpooled
|
57
|
-
@deadpooled ||= date_from_components(@deadpooled_year, @deadpooled_month, @deadpooled_day)
|
58
|
-
end
|
59
|
-
|
60
|
-
def launched?
|
61
|
-
!!(@launched_year || @launched_month || @launched_day)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Returns the date the product was launched, or nil if not provided.
|
65
|
-
def launched
|
66
|
-
@launched ||= date_from_components(@launched_year, @launched_month, @launched_day)
|
67
|
-
end
|
68
|
-
|
69
|
-
# Lazy-loads the associated Company entity and caches it. Pass true to
|
70
|
-
# force reload.
|
71
|
-
def company(force_reload = false)
|
72
|
-
return @company unless @company.nil? or force_reload
|
73
|
-
@company = Company.get(@company_permalink)
|
74
|
-
return @company
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
# Superclass for all relationships. Used for both the relationships and
|
3
|
-
# providerships arrays on retrieved objects.
|
4
|
-
class Relationship
|
5
|
-
|
6
|
-
attr_reader :title
|
7
|
-
|
8
|
-
# Takes a relationship list (directly from the JSON hash) and returns an
|
9
|
-
# array of instances of Relationship subclasses.
|
10
|
-
def self.array_from_list(list)
|
11
|
-
list.map do |l|
|
12
|
-
if l["person"]
|
13
|
-
PersonRelationship.new(l)
|
14
|
-
elsif l["firm"]
|
15
|
-
FirmRelationship.new(l)
|
16
|
-
elsif l["provider"]
|
17
|
-
ProviderRelationship.new(l)
|
18
|
-
else
|
19
|
-
# "Relationship type not recognized"
|
20
|
-
# TODO: Figure out how to log this
|
21
|
-
next
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def initialize(hash)
|
27
|
-
@is_past = hash["is_past"]
|
28
|
-
@title = hash["title"]
|
29
|
-
end
|
30
|
-
|
31
|
-
# Convenience method, returns opposite of is_past?
|
32
|
-
def current?
|
33
|
-
!@is_past
|
34
|
-
end
|
35
|
-
|
36
|
-
def is_past?
|
37
|
-
@is_past
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
class FirmRelationship < Relationship
|
3
|
-
|
4
|
-
attr_reader :firm_name, :firm_permalink, :firm_type
|
5
|
-
|
6
|
-
def self.array_from_relationship_list #:nodoc:
|
7
|
-
raise CrunchException, "Method must be called from superclass Relationship"
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(hash)
|
11
|
-
super(hash)
|
12
|
-
@firm_name = hash["firm"]["name"]
|
13
|
-
@firm_permalink = hash["firm"]["permalink"]
|
14
|
-
@firm_type = hash["firm"]["type_of_entity"]
|
15
|
-
end
|
16
|
-
|
17
|
-
# Returns a representation of the associated firm, loading from memory
|
18
|
-
# if previously fetched, unless force_reload is set to true.
|
19
|
-
def firm(force_reload=false)
|
20
|
-
return @firm unless @firm.nil? || force_reload
|
21
|
-
@firm = case @firm_type
|
22
|
-
when "company"
|
23
|
-
Company.get(@firm_permalink)
|
24
|
-
when "financial_org"
|
25
|
-
FinancialOrganization.get(@firm_permalink)
|
26
|
-
else
|
27
|
-
raise CrunchException, "Not implemented"
|
28
|
-
end
|
29
|
-
return @firm
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
class PersonRelationship < Relationship
|
3
|
-
|
4
|
-
attr_reader :person_first_name, :person_last_name, :person_permalink
|
5
|
-
|
6
|
-
def self.array_from_relationship_list #:nodoc:
|
7
|
-
raise CrunchException, "Method must be called from superclass Relationship"
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(hash)
|
11
|
-
super(hash)
|
12
|
-
@person_first_name = hash["person"]["first_name"]
|
13
|
-
@person_last_name = hash["person"]["last_name"]
|
14
|
-
@person_permalink = hash["person"]["permalink"]
|
15
|
-
end
|
16
|
-
|
17
|
-
# Returns a representation of the associated person, loading from memory
|
18
|
-
# if previously fetched, unless force_reload is set to true.
|
19
|
-
def person(force_reload=false)
|
20
|
-
return @person unless @person.nil? || force_reload
|
21
|
-
@person = Person.get(@person_permalink)
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
class ProviderRelationship < Relationship
|
3
|
-
|
4
|
-
attr_reader :provider_name, :provider_permalink
|
5
|
-
|
6
|
-
def self.array_from_relationship_list #:nodoc:
|
7
|
-
raise CrunchException, "Method must be called from superclass Relationship"
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(hash)
|
11
|
-
super(hash)
|
12
|
-
@provider_name = hash["provider"]["name"]
|
13
|
-
@provider_permalink = hash["provider"]["permalink"]
|
14
|
-
end
|
15
|
-
|
16
|
-
# Returns a representation of the associated person, loading from memory
|
17
|
-
# if previously fetched, unless force_reload is set to true.
|
18
|
-
def provider(force_reload=false)
|
19
|
-
return @provider unless @provider.nil? || force_reload
|
20
|
-
@provider = ServiceProvider.get(@provider_permalink)
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
data/lib/crunchbase/search.rb
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
|
3
|
-
# The Search class provides access to the Crunchbase search API. To perform a
|
4
|
-
# search, call the find class method, which returns an object of the Search
|
5
|
-
# class. This object represents an array of SearchResult objects, which may
|
6
|
-
# be addressed in a way analogous to an Array. These results are loaded on
|
7
|
-
# demand, in line with the CB API which returns results in pages of 10. When
|
8
|
-
# requesting a result index that has not been loaded yet, a new request is
|
9
|
-
# made to fetch it, resulting in a small delay. The class implements the
|
10
|
-
# Enumerable module, allowing usage of +map+, +select+, etc. If this is not
|
11
|
-
# sufficient, and full access to the underlying array is required, you may
|
12
|
-
# call to_ary, which will return the entire array including all results. If
|
13
|
-
# not all results have been fetched yet, there will be a delay to retrieve
|
14
|
-
# them, so consider this if your search contains a large number of results.
|
15
|
-
class Search
|
16
|
-
include Enumerable
|
17
|
-
|
18
|
-
attr_reader :size, :crunchbase_url
|
19
|
-
alias :length :size
|
20
|
-
|
21
|
-
# Performs a Crunchbase search for query.
|
22
|
-
def self.find(query)
|
23
|
-
j = API.search(query)
|
24
|
-
s = Search.new(query, j)
|
25
|
-
end
|
26
|
-
|
27
|
-
def initialize(query, json)
|
28
|
-
@query = query
|
29
|
-
@results = []
|
30
|
-
@size = json["total"]
|
31
|
-
@crunchbase_url = json["crunchbase_url"]
|
32
|
-
populate_results(json)
|
33
|
-
end
|
34
|
-
|
35
|
-
def [](*args)
|
36
|
-
case args.length
|
37
|
-
when 1
|
38
|
-
key = args[0]
|
39
|
-
if key.kind_of?(Integer)
|
40
|
-
get_single_key(key)
|
41
|
-
elsif key.kind_of?(Range)
|
42
|
-
get_range(key)
|
43
|
-
end
|
44
|
-
when 2
|
45
|
-
start = args[0]
|
46
|
-
length = args[1]
|
47
|
-
start = @size + start if start < 0
|
48
|
-
get_range(start..start+length-1)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Returns array of all search results (not just ones currently loaded.)
|
53
|
-
# This enables the user to take advantage of all Array methods, not just
|
54
|
-
# the ones implmented on Search.
|
55
|
-
def to_ary
|
56
|
-
self.map{|result| result}
|
57
|
-
end
|
58
|
-
|
59
|
-
# Calls _block_ once for each search result, passing that item as a
|
60
|
-
# parameter.
|
61
|
-
def each(&block) # :yields: result
|
62
|
-
0.upto(@size - 1) {|x| yield self[x]}
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
# Inserts items into the results array from the retrieved search page
|
68
|
-
def populate_results(json)
|
69
|
-
page = json["page"]
|
70
|
-
results = json["results"].map{|r| SearchResult.new(r)}
|
71
|
-
start = (page - 1) * 10
|
72
|
-
@results[start, results.length] = results
|
73
|
-
end
|
74
|
-
|
75
|
-
# Retrieves the search page containing the given index
|
76
|
-
def retrieve_for_index(index)
|
77
|
-
page = (index / 10) + 1
|
78
|
-
populate_results(API.search(@query, page))
|
79
|
-
end
|
80
|
-
|
81
|
-
# Given one integer key, returns the indexed object from results
|
82
|
-
def get_single_key(key)
|
83
|
-
key = @size+key if key < 0
|
84
|
-
r = @results[key]
|
85
|
-
unless r.nil? && key < @size
|
86
|
-
r
|
87
|
-
else
|
88
|
-
retrieve_for_index(key)
|
89
|
-
@results[key]
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# Given a range, returns the array slice of results indicated
|
94
|
-
def get_range(range)
|
95
|
-
r = []
|
96
|
-
enum = range.to_enum
|
97
|
-
begin
|
98
|
-
while (x = enum.next) < @size
|
99
|
-
r << get_single_key(x)
|
100
|
-
end
|
101
|
-
rescue StopIteration
|
102
|
-
end
|
103
|
-
r.empty? ? nil : r
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
class Location < Search
|
109
|
-
|
110
|
-
# Performs a Crunchbase geo-location search for query.
|
111
|
-
def self.geo(query)
|
112
|
-
j = API.geo(query)
|
113
|
-
s = Location.new(query, j)
|
114
|
-
end
|
115
|
-
|
116
|
-
# Retrieves the search page containing the given index
|
117
|
-
def retrieve_for_index(index)
|
118
|
-
page = (index / 10) + 1
|
119
|
-
populate_results(API.geo(@query, page))
|
120
|
-
end
|
121
|
-
|
122
|
-
end
|
123
|
-
|
124
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Crunchbase
|
2
|
-
# Represents a single search result arising from a Search. The information
|
3
|
-
# returned from a search includes the name, namespace (i.e. entity type),
|
4
|
-
# permalink, and an overview. You may also choose to retrieve the full
|
5
|
-
# entity with the entity method.
|
6
|
-
class SearchResult < EntityListItem
|
7
|
-
attr_reader :crunchbase_url, :overview
|
8
|
-
|
9
|
-
def initialize(json)
|
10
|
-
super
|
11
|
-
@crunchbase_url = json["crunchbase_url"]
|
12
|
-
@overview = json["overview"]
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
module Crunchbase
|
3
|
-
class ServiceProvider < CB_Object
|
4
|
-
|
5
|
-
ENT_NAME = "service-provider"
|
6
|
-
ENT_PLURAL = "service-providers"
|
7
|
-
|
8
|
-
attr_reader :name, :permalink, :crunchbase_url, :homepage_url,
|
9
|
-
:phone_number, :created_at, :updated_at, :overview, :image, :offices,
|
10
|
-
:external_links
|
11
|
-
|
12
|
-
def initialize(json)
|
13
|
-
@name = json["name"]
|
14
|
-
@permalink = json["permalink"]
|
15
|
-
@crunchbase_url = json["crunchbase_url"]
|
16
|
-
@homepage_url = json["homepage_url"]
|
17
|
-
@phone_number = json["phone_number"]
|
18
|
-
@tag_list = json["tag_list"]
|
19
|
-
@alias_list = json["alias_list"]
|
20
|
-
@created_at = DateTime.parse(json["created_at"])
|
21
|
-
@updated_at = DateTime.parse(json["updated_at"])
|
22
|
-
@overview = json["overview"]
|
23
|
-
@image = Image.create(json["image"])
|
24
|
-
@offices = json["offices"]
|
25
|
-
@providerships_list = json["providerships"]
|
26
|
-
@external_links = json["external_links"]
|
27
|
-
end
|
28
|
-
|
29
|
-
def providerships
|
30
|
-
@providerships ||= Relationship.array_from_list(@providerships_list)
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|