crunchbase4 0.1.0
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 +7 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +35 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.md +0 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +82 -0
- data/LICENSE.txt +21 -0
- data/README.md +139 -0
- data/Rakefile +8 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/crunchbase4.gemspec +44 -0
- data/lib/crunchbase.rb +16 -0
- data/lib/crunchbase/client.rb +47 -0
- data/lib/crunchbase/config.rb +18 -0
- data/lib/crunchbase/entities.rb +8 -0
- data/lib/crunchbase/entities/client.rb +52 -0
- data/lib/crunchbase/errors.rb +5 -0
- data/lib/crunchbase/models.rb +15 -0
- data/lib/crunchbase/models/category.rb +26 -0
- data/lib/crunchbase/models/category_group.rb +33 -0
- data/lib/crunchbase/models/entity.rb +28 -0
- data/lib/crunchbase/models/funding_round.rb +63 -0
- data/lib/crunchbase/models/investment.rb +47 -0
- data/lib/crunchbase/models/organization.rb +139 -0
- data/lib/crunchbase/models/person.rb +95 -0
- data/lib/crunchbase/models/press_reference.rb +37 -0
- data/lib/crunchbase/searches.rb +9 -0
- data/lib/crunchbase/searches/client.rb +30 -0
- data/lib/crunchbase/searches/organization.rb +52 -0
- data/lib/crunchbase/utilities.rb +9 -0
- data/lib/crunchbase/utilities/request.rb +44 -0
- data/lib/crunchbase/utilities/response.rb +45 -0
- data/lib/crunchbase/version.rb +5 -0
- metadata +169 -0
data/lib/crunchbase.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'crunchbase/version'
|
4
|
+
|
5
|
+
require 'crunchbase/config'
|
6
|
+
require 'crunchbase/utilities'
|
7
|
+
require 'crunchbase/client'
|
8
|
+
require 'crunchbase/entities'
|
9
|
+
require 'crunchbase/searches'
|
10
|
+
require 'crunchbase/models'
|
11
|
+
require 'crunchbase/errors'
|
12
|
+
|
13
|
+
module Crunchbase
|
14
|
+
API_VERSION = 'v4'
|
15
|
+
BASE_URI = "https://api.crunchbase.com/api/#{API_VERSION}/"
|
16
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# API Request
|
5
|
+
class Client
|
6
|
+
# API Parameters
|
7
|
+
#
|
8
|
+
# entity_id: UUID or permalink of desired entity
|
9
|
+
# card_id: A card to include on the resulting entity
|
10
|
+
# order: Field name with order direction (asc/desc)
|
11
|
+
# limit: Number of rows to return. Default is 100, min is 1, max is 100.
|
12
|
+
def organization(entity_id, card_id: nil)
|
13
|
+
kobject = entities('Organization', entity_id)
|
14
|
+
return kobject.fetch if card_id.nil?
|
15
|
+
|
16
|
+
kobject.cards(card_id)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Fetching all cards of organization
|
20
|
+
def organization_cards(entity_id, cards: [])
|
21
|
+
entities('Organization', entity_id).fetch_cards(cards)
|
22
|
+
end
|
23
|
+
|
24
|
+
def person(entity_id, card_id: nil)
|
25
|
+
kobject = entities('Person', entity_id)
|
26
|
+
return kobject.fetch if card_id.nil?
|
27
|
+
|
28
|
+
kobject.cards(card_id)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Fetching all cards of people
|
32
|
+
def person_cards(entity_id)
|
33
|
+
entities('Person', entity_id).fetch_cards
|
34
|
+
end
|
35
|
+
|
36
|
+
def searches(keyword, _scope: nil)
|
37
|
+
Crunchbase::Searches::Organization.new('name', keyword)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def entities(kclass_name, entity_id)
|
43
|
+
model_name = Kernel.const_get("Crunchbase::Models::#{kclass_name}")
|
44
|
+
Crunchbase::Entities::Client.new(entity_id, model_name)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
# Root Crunchbase
|
6
|
+
module Crunchbase
|
7
|
+
# Config
|
8
|
+
class Config
|
9
|
+
include Singleton
|
10
|
+
attr_accessor :user_key
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.config
|
14
|
+
yield Config.instance if block_given?
|
15
|
+
|
16
|
+
Config.instance
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# Whole entities endpoints
|
5
|
+
module Entities
|
6
|
+
# Send request for entities endpoints
|
7
|
+
class Client
|
8
|
+
include ::Crunchbase::Utilities::Request
|
9
|
+
|
10
|
+
attr_reader :object
|
11
|
+
|
12
|
+
ROOT_LIST = 'entities'
|
13
|
+
|
14
|
+
def initialize(entity_id, model_name)
|
15
|
+
@entity_id = entity_id
|
16
|
+
@object = model_name.new
|
17
|
+
end
|
18
|
+
|
19
|
+
# Will include all attribute from API document
|
20
|
+
def fetch
|
21
|
+
object.parse_response(entity(
|
22
|
+
root_uri,
|
23
|
+
field_ids: object.field_ids.join(',')
|
24
|
+
))
|
25
|
+
end
|
26
|
+
|
27
|
+
# Only include a part basis fields of endpoint
|
28
|
+
def fetch_cards(card_names = [])
|
29
|
+
object.parse_cards_response(entity(
|
30
|
+
root_uri,
|
31
|
+
field_ids: object.basis_fields.join(','),
|
32
|
+
cards: (object.full_cards & card_names).join(',')
|
33
|
+
))
|
34
|
+
end
|
35
|
+
|
36
|
+
def cards(card_id)
|
37
|
+
object.parse_response(entity(
|
38
|
+
root_uri(name: __method__, id: card_id)
|
39
|
+
))
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def root_uri(args = {})
|
45
|
+
[
|
46
|
+
ROOT_LIST, object.class::RESOURCE_LIST,
|
47
|
+
@entity_id, args[:name], args[:id]
|
48
|
+
].compact.join('/')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# Models
|
5
|
+
module Models
|
6
|
+
autoload :Entity, 'crunchbase/models/entity'
|
7
|
+
autoload :Organization, 'crunchbase/models/organization'
|
8
|
+
autoload :Person, 'crunchbase/models/person'
|
9
|
+
autoload :FundingRound, 'crunchbase/models/funding_round'
|
10
|
+
autoload :Investment, 'crunchbase/models/investment'
|
11
|
+
autoload :PressReference, 'crunchbase/models/press_reference'
|
12
|
+
autoload :CategoryGroup, 'crunchbase/models/category_group'
|
13
|
+
autoload :Category, 'crunchbase/models/category'
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# Get the Entities data from API
|
5
|
+
module Models
|
6
|
+
# Get the person data from API
|
7
|
+
class Category < Entity
|
8
|
+
RESOURCE_LIST = 'categories'
|
9
|
+
|
10
|
+
def field_ids
|
11
|
+
%w[
|
12
|
+
] + basis_fields
|
13
|
+
end
|
14
|
+
|
15
|
+
def basis_fields
|
16
|
+
%w[
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
def full_cards
|
21
|
+
%w[
|
22
|
+
]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# Get the Entities data from API
|
5
|
+
module Models
|
6
|
+
# Get the person data from API
|
7
|
+
class CategoryGroup < Entity
|
8
|
+
RESOURCE_LIST = 'category_groups'
|
9
|
+
|
10
|
+
def field_ids
|
11
|
+
%w[
|
12
|
+
categories
|
13
|
+
created_at
|
14
|
+
entity_def_id
|
15
|
+
identifier
|
16
|
+
rank
|
17
|
+
updated_at
|
18
|
+
] + basis_fields
|
19
|
+
end
|
20
|
+
|
21
|
+
def basis_fields
|
22
|
+
%w[
|
23
|
+
uuid
|
24
|
+
name
|
25
|
+
]
|
26
|
+
end
|
27
|
+
|
28
|
+
def full_cards
|
29
|
+
%w[]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# Get the Organization data from API
|
5
|
+
module Models
|
6
|
+
# Root
|
7
|
+
class Entity
|
8
|
+
include ::Crunchbase::Utilities::Response
|
9
|
+
|
10
|
+
def fields
|
11
|
+
field_ids.map(&:to_sym)
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_response(response)
|
15
|
+
dynamic_attributes(self, field_ids, response.dig('properties'))
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse_cards_response(response)
|
19
|
+
parse_response(response, response.dig('properties'))
|
20
|
+
# response.dig('cards')
|
21
|
+
end
|
22
|
+
|
23
|
+
def as_json
|
24
|
+
fields.each_with_object({}) { |item, hash| hash[item] = send(item) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# Get the Entities data from API
|
5
|
+
module Models
|
6
|
+
# Get the person data from API
|
7
|
+
class FundingRound < Entity
|
8
|
+
RESOURCE_LIST = 'funding_rounds'
|
9
|
+
|
10
|
+
def field_ids
|
11
|
+
%w[
|
12
|
+
created_at
|
13
|
+
entity_def_id
|
14
|
+
funded_organization_categories
|
15
|
+
funded_organization_description
|
16
|
+
funded_organization_funding_stage
|
17
|
+
funded_organization_funding_total
|
18
|
+
funded_organization_identifier
|
19
|
+
funded_organization_location
|
20
|
+
funded_organization_revenue_range
|
21
|
+
identifier
|
22
|
+
image_id
|
23
|
+
investor_identifiers
|
24
|
+
is_equity
|
25
|
+
lead_investor_identifiers
|
26
|
+
num_partners
|
27
|
+
num_relationships
|
28
|
+
permalink
|
29
|
+
pre_money_valuation
|
30
|
+
rank
|
31
|
+
rank_funding_round
|
32
|
+
updated_at
|
33
|
+
] + basis_fields
|
34
|
+
end
|
35
|
+
|
36
|
+
def basis_fields
|
37
|
+
%w[
|
38
|
+
uuid
|
39
|
+
name
|
40
|
+
announced_on
|
41
|
+
closed_on
|
42
|
+
investment_stage
|
43
|
+
investment_type
|
44
|
+
money_raised
|
45
|
+
target_money_raised
|
46
|
+
num_investors
|
47
|
+
short_description
|
48
|
+
]
|
49
|
+
end
|
50
|
+
|
51
|
+
def full_cards
|
52
|
+
%w[
|
53
|
+
investments
|
54
|
+
lead_investors
|
55
|
+
investors
|
56
|
+
organization
|
57
|
+
partners
|
58
|
+
press_references
|
59
|
+
]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# Get the Entities data from API
|
5
|
+
module Models
|
6
|
+
# Get the person data from API
|
7
|
+
class Investment < Entity
|
8
|
+
RESOURCE_LIST = 'investments'
|
9
|
+
|
10
|
+
def field_ids
|
11
|
+
%w[
|
12
|
+
created_at
|
13
|
+
entity_def_id
|
14
|
+
identifier
|
15
|
+
investor_identifier
|
16
|
+
is_lead_investor
|
17
|
+
funding_round_identifier
|
18
|
+
updated_at
|
19
|
+
] + basis_fields
|
20
|
+
end
|
21
|
+
|
22
|
+
def basis_fields
|
23
|
+
%w[
|
24
|
+
uuid
|
25
|
+
name
|
26
|
+
permalink
|
27
|
+
money_invested
|
28
|
+
investor_stage
|
29
|
+
investor_type
|
30
|
+
funding_round_money_raised
|
31
|
+
organization_identifier
|
32
|
+
partner_identifiers
|
33
|
+
announced_on
|
34
|
+
]
|
35
|
+
end
|
36
|
+
|
37
|
+
def full_cards
|
38
|
+
%w[
|
39
|
+
investor
|
40
|
+
organization
|
41
|
+
funding_round
|
42
|
+
partner
|
43
|
+
]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
# Get the Organization data from API
|
5
|
+
module Models
|
6
|
+
# Build Organization API
|
7
|
+
class Organization < Entity
|
8
|
+
RESOURCE_LIST = 'organizations'
|
9
|
+
|
10
|
+
def basis_fields
|
11
|
+
%w[
|
12
|
+
uuid
|
13
|
+
identifier
|
14
|
+
permalink
|
15
|
+
permalink_aliases
|
16
|
+
name
|
17
|
+
legal_name
|
18
|
+
aliases
|
19
|
+
website
|
20
|
+
linkedin
|
21
|
+
twitter
|
22
|
+
rank_org
|
23
|
+
short_description
|
24
|
+
description
|
25
|
+
rank_org_company
|
26
|
+
]
|
27
|
+
end
|
28
|
+
|
29
|
+
def field_ids
|
30
|
+
%w[
|
31
|
+
acquirer_identifier
|
32
|
+
categories
|
33
|
+
category_groups
|
34
|
+
closed_on
|
35
|
+
company_type
|
36
|
+
contact_email
|
37
|
+
created_at
|
38
|
+
delisted_on
|
39
|
+
demo_days
|
40
|
+
entity_def_id
|
41
|
+
equity_funding_total
|
42
|
+
exited_on
|
43
|
+
facebook
|
44
|
+
facet_ids
|
45
|
+
founded_on
|
46
|
+
founder_identifiers
|
47
|
+
funding_stage
|
48
|
+
funding_total
|
49
|
+
funds_total
|
50
|
+
image_id
|
51
|
+
image_url
|
52
|
+
investor_identifiers
|
53
|
+
investor_stage
|
54
|
+
investor_type
|
55
|
+
ipo_status
|
56
|
+
last_equity_funding_total
|
57
|
+
last_equity_funding_type
|
58
|
+
last_funding_at
|
59
|
+
last_funding_total
|
60
|
+
last_funding_type
|
61
|
+
layout_id
|
62
|
+
listed_stock_symbol
|
63
|
+
location_group_identifiers
|
64
|
+
location_identifiers
|
65
|
+
num_acquisitions
|
66
|
+
num_alumni
|
67
|
+
num_articles
|
68
|
+
num_current_advisor_positions
|
69
|
+
num_current_positions
|
70
|
+
num_employees_enum
|
71
|
+
num_enrollments
|
72
|
+
num_event_appearances
|
73
|
+
num_exits
|
74
|
+
num_exits_ipo
|
75
|
+
num_founder_alumni
|
76
|
+
num_founders
|
77
|
+
num_funding_rounds
|
78
|
+
num_funds
|
79
|
+
num_investments
|
80
|
+
num_investments_funding_rounds
|
81
|
+
num_investors
|
82
|
+
num_lead_investments
|
83
|
+
num_lead_investors
|
84
|
+
num_past_positions
|
85
|
+
num_portfolio_organizations
|
86
|
+
num_relationships
|
87
|
+
num_sub_organizations
|
88
|
+
operating_status
|
89
|
+
override_layout_id
|
90
|
+
owner_identifier
|
91
|
+
phone_number
|
92
|
+
program_application_deadline
|
93
|
+
program_duration
|
94
|
+
program_type
|
95
|
+
rank_delta_d30
|
96
|
+
rank_delta_d7
|
97
|
+
rank_delta_d90
|
98
|
+
rank
|
99
|
+
rank_org_school
|
100
|
+
rank_principal
|
101
|
+
rank_principal_investor
|
102
|
+
revenue_range
|
103
|
+
school_method
|
104
|
+
school_program
|
105
|
+
school_type
|
106
|
+
status
|
107
|
+
stock_exchange_symbol
|
108
|
+
stock_symbol
|
109
|
+
updated_at
|
110
|
+
went_public_on
|
111
|
+
] + basis_fields
|
112
|
+
end
|
113
|
+
|
114
|
+
def full_cards
|
115
|
+
%w[
|
116
|
+
raised_investments
|
117
|
+
participated_funds
|
118
|
+
child_organizations
|
119
|
+
participated_investments
|
120
|
+
investors
|
121
|
+
parent_organization
|
122
|
+
raised_funding_rounds
|
123
|
+
ipos
|
124
|
+
event_appearances
|
125
|
+
raised_funds
|
126
|
+
acquiree_acquisitions
|
127
|
+
acquirer_acquisitions
|
128
|
+
parent_ownership
|
129
|
+
jobs
|
130
|
+
founders
|
131
|
+
child_ownerships
|
132
|
+
participated_funding_rounds
|
133
|
+
press_references
|
134
|
+
headquarters_address
|
135
|
+
]
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|