crunchbase-ruby-library 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/.gitignore +24 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +102 -0
  6. data/Rakefile +2 -0
  7. data/crunchbase-ruby-library.gemspec +25 -0
  8. data/lib/crunchbase.rb +12 -0
  9. data/lib/crunchbase/api.rb +160 -0
  10. data/lib/crunchbase/exception.rb +18 -0
  11. data/lib/crunchbase/model.rb +49 -0
  12. data/lib/crunchbase/model/acquired_by.rb +7 -0
  13. data/lib/crunchbase/model/acquisition.rb +36 -0
  14. data/lib/crunchbase/model/address.rb +20 -0
  15. data/lib/crunchbase/model/advisory_role.rb +10 -0
  16. data/lib/crunchbase/model/board_members_and_advisor.rb +25 -0
  17. data/lib/crunchbase/model/category.rb +17 -0
  18. data/lib/crunchbase/model/competitor.rb +7 -0
  19. data/lib/crunchbase/model/current_team.rb +25 -0
  20. data/lib/crunchbase/model/customer.rb +7 -0
  21. data/lib/crunchbase/model/degree.rb +31 -0
  22. data/lib/crunchbase/model/entity.rb +134 -0
  23. data/lib/crunchbase/model/error.rb +14 -0
  24. data/lib/crunchbase/model/founded_company.rb +27 -0
  25. data/lib/crunchbase/model/founder.rb +9 -0
  26. data/lib/crunchbase/model/fund.rb +26 -0
  27. data/lib/crunchbase/model/funding_round.rb +58 -0
  28. data/lib/crunchbase/model/headquarter.rb +6 -0
  29. data/lib/crunchbase/model/image.rb +17 -0
  30. data/lib/crunchbase/model/investment.rb +27 -0
  31. data/lib/crunchbase/model/investor.rb +28 -0
  32. data/lib/crunchbase/model/ipo.rb +35 -0
  33. data/lib/crunchbase/model/job.rb +39 -0
  34. data/lib/crunchbase/model/location.rb +29 -0
  35. data/lib/crunchbase/model/member.rb +7 -0
  36. data/lib/crunchbase/model/membership.rb +28 -0
  37. data/lib/crunchbase/model/new.rb +21 -0
  38. data/lib/crunchbase/model/office.rb +9 -0
  39. data/lib/crunchbase/model/organization.rb +88 -0
  40. data/lib/crunchbase/model/organization_summary.rb +19 -0
  41. data/lib/crunchbase/model/owned_by.rb +27 -0
  42. data/lib/crunchbase/model/parent_location.rb +7 -0
  43. data/lib/crunchbase/model/past_team.rb +25 -0
  44. data/lib/crunchbase/model/person.rb +55 -0
  45. data/lib/crunchbase/model/person_summary.rb +23 -0
  46. data/lib/crunchbase/model/primary_affiliation.rb +22 -0
  47. data/lib/crunchbase/model/primary_image.rb +7 -0
  48. data/lib/crunchbase/model/primary_location.rb +17 -0
  49. data/lib/crunchbase/model/product.rb +47 -0
  50. data/lib/crunchbase/model/school.rb +6 -0
  51. data/lib/crunchbase/model/search.rb +50 -0
  52. data/lib/crunchbase/model/search_result.rb +10 -0
  53. data/lib/crunchbase/model/sub_organization.rb +9 -0
  54. data/lib/crunchbase/model/video.rb +17 -0
  55. data/lib/crunchbase/model/website.rb +17 -0
  56. data/lib/crunchbase/version.rb +3 -0
  57. data/spec/crunchbase.yml.example +2 -0
  58. data/spec/crunchbase/model/board_members_and_advisor_spec.rb +20 -0
  59. data/spec/crunchbase/model/office_spec.rb +17 -0
  60. data/spec/crunchbase/model/organization_spec.rb +60 -0
  61. data/spec/crunchbase/model/past_team_spec.rb +26 -0
  62. data/spec/crunchbase/model/person_spec.rb +28 -0
  63. data/spec/crunchbase/model/product_spec.rb +33 -0
  64. data/spec/crunchbase/model/search_spec.rb +50 -0
  65. data/spec/crunchbase/model/website_spec.rb +18 -0
  66. data/spec/spec_helper.rb +20 -0
  67. metadata +192 -0
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Address < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'addresses'
7
+
8
+ attr_reader :name, :street_1, :street_2, :city, :city_web_path, :region, :region_web_path,
9
+ :country, :country_web_path, :latitude, :longitude, :created_at, :updated_at
10
+
11
+
12
+ def property_keys
13
+ %w[
14
+ name street_1 street_2 city city_web_path region region_web_path
15
+ country country_web_path latitude longitude created_at updated_at
16
+ ]
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class AdvisoryRole < Crunchbase::Model::Job
5
+ # called advisor_at from people api
6
+
7
+ RESOURCE_LIST = 'advisor_at'
8
+
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class BoardMembersAndAdvisor < Crunchbase::Model::Job
5
+
6
+ RESOURCE_LIST = 'board_members_and_advisors'
7
+
8
+ attr_reader :person
9
+
10
+ def initialize(json)
11
+ super
12
+
13
+ unless (relationships = json['relationships']).nil?
14
+ set_relationships_object(Crunchbase::Model::Person, 'person', relationships['person'])
15
+ end
16
+ end
17
+
18
+ def set_relationships_object(object_name, key, item)
19
+ return unless item
20
+
21
+ instance_variable_set "@#{key}", ( object_name.new(item) || nil )
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Category < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'categories'
7
+
8
+ attr_reader :web_path, :name, :organizations_in_category, :products_in_category, :created_at, :updated_at
9
+
10
+ def property_keys
11
+ %w[
12
+ web_path name organizations_in_category products_in_category created_at updated_at
13
+ ]
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Competitor < Crunchbase::Model::Organization
5
+ RESOURCE_LIST = 'competitors'
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class CurrentTeam < Crunchbase::Model::Job
5
+
6
+ RESOURCE_LIST = 'current_team'
7
+
8
+ attr_reader :person
9
+
10
+ def initialize(json)
11
+ super
12
+
13
+ unless (relationships = json['relationships']).nil?
14
+ set_relationships_object(Crunchbase::Model::Person, 'person', relationships['person'])
15
+ end
16
+ end
17
+
18
+ def set_relationships_object(object_name, key, item)
19
+ return unless item
20
+
21
+ instance_variable_set "@#{key}", ( object_name.new(item) || nil )
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Customer < Crunchbase::Model::Organization
5
+ RESOURCE_LIST = 'customers'
6
+ end
7
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Degree < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'degrees'
7
+
8
+ attr_reader :degree_type_name, :degree_subject, :started_on, :started_on_trust_code, :is_completed,
9
+ :completed_on, :completed_on_trust_code,
10
+ :created_at, :updated_at
11
+
12
+ attr_reader :school
13
+
14
+ def initialize(json)
15
+ super
16
+
17
+ unless (relationships = json['relationships']).nil?
18
+ instance_relationships_object(Crunchbase::Model::School, 'school', relationships['school'])
19
+ end
20
+ end
21
+
22
+ def property_keys
23
+ %w[
24
+ degree_type_name degree_subject started_on started_on_trust_code is_completed
25
+ completed_on completed_on_trust_code
26
+ created_at updated_at
27
+ ]
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,134 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Entity
5
+
6
+ attr_reader :type_name, :uuid
7
+
8
+ def initialize(json)
9
+ instance_variable_set("@type_name", json['type'] || nil)
10
+ instance_variable_set("@uuid", json['uuid'] || nil)
11
+
12
+ property_keys.each { |v|
13
+ instance_variable_set("@#{v}", json['properties'][v] || nil)
14
+ }
15
+
16
+ date_keys.each { |v|
17
+ instance_variable_set("@#{v}", json['properties'][v].nil? ? nil : Date.parse(json['properties'][v]))
18
+ }
19
+
20
+ %w[created_at updated_at].each { |v|
21
+ if json['properties'][v].kind_of?(String)
22
+ instance_variable_set( "@#{v}", begin Time.parse(json['properties'][v]) rescue nil end )
23
+ else
24
+ instance_variable_set( "@#{v}", begin Time.at(json['properties'][v]) rescue nil end )
25
+ end
26
+ }
27
+ end
28
+
29
+ # Factory method to return an instance from a permalink
30
+ def self.get(permalink)
31
+ result = Crunchbase::API.single_entity(permalink, self::RESOURCE_NAME)
32
+
33
+ return self.new( result )
34
+ end
35
+
36
+ def self.list(page=nil)
37
+ model_name = get_model_name(self::RESOURCE_LIST)
38
+
39
+ return Crunchbase::API.list( { page: page, model_name: model_name }, self::RESOURCE_LIST )
40
+ end
41
+
42
+ def self.organization_lists(permalink, options={})
43
+ options = options.merge({ model_name: self })
44
+
45
+ return Crunchbase::API.organization_lists(permalink, self::RESOURCE_LIST, options)
46
+ end
47
+
48
+ def self.person_lists(permalink, options={})
49
+ options = options.merge({ model_name: self })
50
+
51
+ return Crunchbase::API.person_lists(permalink, self::RESOURCE_LIST, options)
52
+ end
53
+
54
+ def fetch
55
+ fetch_object = get_fetch_object
56
+ return [] if fetch_object.empty?
57
+
58
+ return fetch_object[0].new API.fetch(self.permalink, fetch_object[1])
59
+ end
60
+
61
+ def self.array_from_list(list)
62
+ return [] if list.nil?
63
+
64
+ list['items'].map do |l|
65
+ self.new l if l.kind_of?(Hash)
66
+ end.compact
67
+ end
68
+
69
+ def self.parsing_from_list(list)
70
+ return [] if list.nil?
71
+
72
+ list.map do |l|
73
+ self.new l if l.kind_of?(Hash)
74
+ end.compact
75
+ end
76
+
77
+ def self.total_items_from_list(list)
78
+ return 0 if list.nil?
79
+
80
+ list['paging']['total_items']
81
+ end
82
+
83
+ private
84
+
85
+ def property_keys
86
+ []
87
+ end
88
+
89
+ def date_keys
90
+ []
91
+ end
92
+
93
+ def set_relationships_object(object_name, key, list)
94
+ return unless list
95
+
96
+ one_to_one(object_name, key, list['item']) if list['item']
97
+ one_to_many(object_name, key, list) if list['items']
98
+ end
99
+
100
+ def one_to_one(object_name, key, item)
101
+ return unless item
102
+
103
+ instance_variable_set "@#{key}", ( object_name.new( item ) || nil )
104
+ instance_variable_set "@#{key}_total_items", (item ? 1 : 0)
105
+ end
106
+
107
+ def one_to_many(object_name, key, list)
108
+ return unless list['items'].respond_to?(:each)
109
+
110
+ instance_variable_set "@#{key}", list['items'].inject([]) { |v, i| v << object_name.new(i) }
111
+ instance_variable_set "@#{key}_total_items", list['paging']['total_items']
112
+ end
113
+
114
+ def instance_relationships_object(object_name, key, item)
115
+ return unless item
116
+
117
+ instance_variable_set "@#{key}", ( object_name.new(item) || nil )
118
+ end
119
+
120
+ def self.get_model_name(resource_list)
121
+ return nil unless ['organizations', 'people'].include?(resource_list)
122
+
123
+ case resource_list
124
+ when 'organizations'
125
+ OrganizationSummary
126
+ when 'people'
127
+ PersonSummary
128
+ else
129
+ nil
130
+ end
131
+ end
132
+
133
+ end
134
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Error < Crunchbase::Model::Entity
5
+
6
+ attr_reader :message, :code
7
+
8
+ def initialize(json)
9
+ @message = json['message']
10
+ @code = json['code']
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class FoundedCompany < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'founded_companies'
7
+
8
+ attr_reader :type, :name, :path, :created_at, :updated_at
9
+
10
+ def initialize(json)
11
+ property_keys.each { |v|
12
+ instance_variable_set("@#{v}", json[v] || nil)
13
+ }
14
+
15
+ %w[created_at updated_at].each { |v|
16
+ instance_variable_set("@#{v}", Time.at(json[v]))
17
+ }
18
+ end
19
+
20
+ def property_keys
21
+ %w[
22
+ type name path created_at updated_at
23
+ ]
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Founder < Crunchbase::Model::Person
5
+
6
+ RESOURCE_LIST = 'founders'
7
+
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ # encoding utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Fund < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'funds'
7
+
8
+ attr_reader :api_path, :web_path, :name, :announced_on, :announced_on_trust_code, :money_raised, :money_raised_currency_code, :money_raised_usd, :created_at, :updated_at
9
+
10
+ # attr_reader :venture_firm, :investor, :images, :videos, :news
11
+
12
+ # attr_reader :venture_firm_total_items, :investor_total_items, :images_total_items, :videos_total_items, :news_total_items
13
+
14
+ def property_keys
15
+ %w[
16
+ api_path web_path name announced_on announced_on_trust_code
17
+ money_raised money_raised_currency_code money_raised_usd created_at updated_at
18
+ ]
19
+ end
20
+
21
+ def date_keys
22
+ %w[ announced_on ]
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class FundingRound < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'funding_rounds'
7
+
8
+ attr_reader :api_path, :web_path, :funding_type, :series, :series_qualifier,
9
+ :announced_on, :announced_on_trust_code, :closed_on, :closed_on_trust_code,
10
+ :money_raised, :money_raised_currency_code, :money_raised_usd,
11
+ :target_money_raised, :target_money_raised_currency_code, :target_money_raised_usd,
12
+ :created_at, :updated_at
13
+
14
+ attr_reader :investments, :funded_organization, :images, :videos, :news
15
+
16
+ attr_reader :investments_total_items, :funded_organization_total_items, :images_total_items,
17
+ :videos_total_items, :news_total_items
18
+
19
+ def initialize(json)
20
+ super
21
+
22
+ unless (relationships = json['relationships']).nil?
23
+ set_relationships_object(Crunchbase::Model::Investment, 'investments', relationships['investments'])
24
+ set_relationships_object(Crunchbase::Model::Organization, 'funded_organization', relationships['funded_organization'])
25
+ set_relationships_object(Crunchbase::Model::Image, 'images', relationships['images'])
26
+ set_relationships_object(Crunchbase::Model::Video, 'videos', relationships['videos'])
27
+ set_relationships_object(Crunchbase::Model::New, 'news', relationships['news'])
28
+ end
29
+
30
+ end
31
+
32
+ def property_keys
33
+ %w[
34
+ api_path web_path funding_type series series_qualifier
35
+ announced_on announced_on_trust_code closed_on closed_on_trust_code
36
+ money_raised money_raised_currency_code money_raised_usd
37
+ target_money_raised target_money_raised_currency_code target_money_raised_usd
38
+ created_at updated_at
39
+ ]
40
+ end
41
+
42
+ def date_keys
43
+ %w[ announced_on closed_on ]
44
+ end
45
+
46
+
47
+ def set_relationships_object(object_name, key, item)
48
+ return unless item
49
+
50
+ instance_variable_set "@#{key}", ( object_name.new(item) || nil )
51
+ instance_variable_set "@#{key}_total_items", 1
52
+
53
+ super
54
+ end
55
+
56
+
57
+ end
58
+ end
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Headquarter < Crunchbase::Model::Address
5
+ end
6
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Image < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'images'
7
+
8
+ attr_reader :asset_path, :asset_url, :content_type, :height, :width, :filesize, :created_at, :updated_at
9
+
10
+ def property_keys
11
+ %w[
12
+ asset_url asset_path content_type height width filesize created_at updated_at
13
+ ]
14
+ end
15
+
16
+ end
17
+ end