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.
@@ -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: []