crunchbase4 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,95 @@
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 Person < Entity
8
+ RESOURCE_LIST = 'people'
9
+
10
+ def field_ids
11
+ %w[
12
+ born_on
13
+ created_at
14
+ died_on
15
+ entity_def_id
16
+ facebook
17
+ facet_ids
18
+ first_name
19
+ gender
20
+ identifier
21
+ image_id
22
+ image_url
23
+ investor_stage
24
+ investor_type
25
+ last_name
26
+ layout_id
27
+ linkedin
28
+ location_group_identifiers
29
+ location_identifiers
30
+ middle_name
31
+ num_articles
32
+ num_current_advisor_jobs
33
+ num_current_jobs
34
+ num_event_appearances
35
+ num_exits
36
+ num_exits_ipo
37
+ num_founded_organizations
38
+ num_investments
39
+ num_investments_funding_rounds
40
+ num_jobs
41
+ num_lead_investments
42
+ num_partner_investments
43
+ num_past_advisor_jobs
44
+ num_past_jobs
45
+ num_portfolio_organizations
46
+ num_relationships
47
+ override_layout_id
48
+ primary_job_title
49
+ primary_organization
50
+ rank_delta_d30
51
+ rank_delta_d7
52
+ rank_delta_d90
53
+ rank_person
54
+ rank_principal
55
+ rank_principal_investor
56
+ short_description
57
+ twitter
58
+ updated_at
59
+ ] + basis_fields
60
+ end
61
+
62
+ def basis_fields
63
+ %w[
64
+ uuid
65
+ permalink
66
+ permalink_aliases
67
+ name
68
+ aliases
69
+ website
70
+ rank
71
+ short_description
72
+ description
73
+ ]
74
+ end
75
+
76
+ def full_cards
77
+ %w[
78
+ partner_funding_rounds
79
+ participated_funds
80
+ participated_investments
81
+ degrees
82
+ primary_job
83
+ founded_organizations
84
+ event_appearances
85
+ jobs
86
+ participated_funding_rounds
87
+ fields
88
+ press_references
89
+ primary_organization
90
+ partner_investments
91
+ ]
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,37 @@
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 PressReference < Entity
8
+ RESOURCE_LIST = 'press_references'
9
+
10
+ def field_ids
11
+ %w[
12
+ activity_entities
13
+ created_at
14
+ entity_def_id
15
+ identifier
16
+ thumbnail_url
17
+ updated_at
18
+ ] + basis_fields
19
+ end
20
+
21
+ def basis_fields
22
+ %w[
23
+ uuid
24
+ url
25
+ title
26
+ author
27
+ posted_on
28
+ publisher
29
+ ]
30
+ end
31
+
32
+ def full_cards
33
+ %w[]
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crunchbase
4
+ # Searches API
5
+ module Searches
6
+ autoload :Client, 'crunchbase/searches/client'
7
+ autoload :Organization, 'crunchbase/searches/organization'
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crunchbase
4
+ # Whole Searches endpoints
5
+ module Searches
6
+ # Send request for entities endpoints
7
+ class Client
8
+ include ::Crunchbase::Utilities::Request
9
+
10
+ ROOT_LIST = 'searches'
11
+ LIMIT = 100
12
+
13
+ def initialize(field_id, value)
14
+ @field_id = field_id
15
+ @value = value
16
+ end
17
+
18
+ # Will include all attribute from API document
19
+ def search
20
+ search(root_uri, query_conditions)
21
+ end
22
+
23
+ private
24
+
25
+ def root_uri
26
+ [ROOT_LIST, endpoint].compact.join('/')
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crunchbase
4
+ # Whole Searches endpoints
5
+ module Searches
6
+ # Send request for entities endpoints
7
+ class Organization < Client
8
+ include ::Crunchbase::Utilities::Request
9
+
10
+ def endpoint
11
+ ::Crunchbase::Models::Organization::RESOURCE_LIST
12
+ end
13
+
14
+ def query_conditions
15
+ {
16
+ "field_ids": field_ids,
17
+ "order": orders,
18
+ "query": conditions,
19
+ "limit": LIMIT
20
+ }
21
+ end
22
+
23
+ private
24
+
25
+ def field_ids
26
+ ::Crunchbase::Models::Organization.new.basis_fields
27
+ end
28
+
29
+ def orders
30
+ [
31
+ {
32
+ "field_id": 'name',
33
+ "sort": 'asc'
34
+ }
35
+ ]
36
+ end
37
+
38
+ def conditions
39
+ [
40
+ {
41
+ "type": 'predicate',
42
+ "field_id": @field,
43
+ "operator_id": 'includes',
44
+ "values": [
45
+ @value
46
+ ]
47
+ }
48
+ ]
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crunchbase
4
+ # Utilities
5
+ module Utilities
6
+ autoload :Request, 'crunchbase/utilities/request'
7
+ autoload :Response, 'crunchbase/utilities/response'
8
+ end
9
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+ require 'faraday_middleware'
5
+
6
+ module Crunchbase
7
+ # Utilities
8
+ module Utilities
9
+ # API Request
10
+ module Request
11
+ module_function
12
+
13
+ def entity(uri, *args)
14
+ response = Faraday.new(url: BASE_URI, headers: headers) do |faraday|
15
+ faraday.adapter Faraday.default_adapter
16
+ faraday.response :json
17
+ end.get(uri, *args)
18
+
19
+ return response.body if response.status == 200
20
+
21
+ raise Error, response.reason_phrase
22
+ end
23
+
24
+ def search(uri, args)
25
+ response = Faraday.new(url: BASE_URI, headers: headers) do |faraday|
26
+ faraday.adapter Faraday.default_adapter
27
+ faraday.response :json
28
+ end.post(uri, args)
29
+
30
+ return response.body if response.status == 200
31
+
32
+ raise Error, response.reason_phrase
33
+ end
34
+
35
+ private
36
+
37
+ def headers
38
+ {
39
+ 'X-cb-user-key' => Crunchbase.config.user_key
40
+ }
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crunchbase
4
+ # Utilities
5
+ module Utilities
6
+ # Parse the response. build with object
7
+ module Response
8
+ module_function
9
+
10
+ def dynamic_attributes(object, attribute_names, response)
11
+ attribute_names.each do |attribute_name|
12
+ attribute_value = field_value(attribute_name, response)
13
+
14
+ # Manually creates methods for both getter and setter and then
15
+ # sends a message to the new setter with the attribute_value
16
+ object.class.send(:define_method, "#{attribute_name}=".to_sym) do |value|
17
+ instance_variable_set('@' + attribute_name, value)
18
+ end
19
+
20
+ object.class.send(:define_method, attribute_name.to_sym) do
21
+ instance_variable_get('@' + attribute_name.to_s)
22
+ end
23
+
24
+ object.send("#{attribute_name}=".to_sym, attribute_value)
25
+ end
26
+
27
+ object
28
+ end
29
+
30
+ private
31
+
32
+ def field_value(name, data)
33
+ value = data.dig(name)
34
+
35
+ return value if value.nil? || value.is_a?(String)
36
+ if value.is_a?(Array) && value[0].is_a?(Hash) && value[0].keys.include?('value')
37
+ return value.collect { |e| e.dig('value') }
38
+ end
39
+ return value.dig('value') if value.is_a?(Hash) && value.keys.include?('value')
40
+
41
+ value
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crunchbase
4
+ VERSION = '0.1.0'
5
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crunchbase4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Encore Shao
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday_middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
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: vcr
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: A Ruby wrapper for Crunchbase API version 4.0, crunchbase build new API
98
+ interface by GraphQL
99
+ email:
100
+ - encore.shao@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".rubocop.yml"
108
+ - ".rubocop_todo.yml"
109
+ - ".travis.yml"
110
+ - CHANGELOG.md
111
+ - CODE_OF_CONDUCT.md
112
+ - Gemfile
113
+ - Gemfile.lock
114
+ - LICENSE.txt
115
+ - README.md
116
+ - Rakefile
117
+ - bin/console
118
+ - bin/setup
119
+ - crunchbase4.gemspec
120
+ - lib/crunchbase.rb
121
+ - lib/crunchbase/client.rb
122
+ - lib/crunchbase/config.rb
123
+ - lib/crunchbase/entities.rb
124
+ - lib/crunchbase/entities/client.rb
125
+ - lib/crunchbase/errors.rb
126
+ - lib/crunchbase/models.rb
127
+ - lib/crunchbase/models/category.rb
128
+ - lib/crunchbase/models/category_group.rb
129
+ - lib/crunchbase/models/entity.rb
130
+ - lib/crunchbase/models/funding_round.rb
131
+ - lib/crunchbase/models/investment.rb
132
+ - lib/crunchbase/models/organization.rb
133
+ - lib/crunchbase/models/person.rb
134
+ - lib/crunchbase/models/press_reference.rb
135
+ - lib/crunchbase/searches.rb
136
+ - lib/crunchbase/searches/client.rb
137
+ - lib/crunchbase/searches/organization.rb
138
+ - lib/crunchbase/utilities.rb
139
+ - lib/crunchbase/utilities/request.rb
140
+ - lib/crunchbase/utilities/response.rb
141
+ - lib/crunchbase/version.rb
142
+ homepage: https://github.com/encoreshao/crunchbase4
143
+ licenses:
144
+ - MIT
145
+ metadata:
146
+ allowed_push_host: https://rubygems.org
147
+ homepage_uri: https://github.com/encoreshao/crunchbase4
148
+ source_code_uri: https://github.com/encoreshao/crunchbase4
149
+ changelog_uri: https://github.com/encoreshao/crunchbase4/CHANGELOG.md
150
+ post_install_message: Thanks for installing!
151
+ rdoc_options: []
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: 2.3.0
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ requirements: []
165
+ rubygems_version: 3.0.3
166
+ signing_key:
167
+ specification_version: 4
168
+ summary: Ruby Library for Crunchbase API Version 4.0
169
+ test_files: []