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,23 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class PersonSummary < Crunchbase::Model::Entity
5
+
6
+ attr_reader :permalink, :api_path, :web_path, :first_name, :last_name, :title,
7
+ :organization_permalink, :organization_api_path, :organization_web_path, :organization_name,
8
+ :profile_image_url, :homepage_url, :facebook_url, :twitter_url, :linkedin_url,
9
+ :city_name, :region_name, :country_code,
10
+ :created_at, :updated_at
11
+
12
+ def property_keys
13
+ %w[
14
+ permalink api_path web_path first_name last_name title
15
+ organization_permalink organization_api_path organization_web_path organization_name
16
+ profile_image_url homepage_url facebook_url twitter_url linkedin_url
17
+ city_name region_name country_code
18
+ created_at updated_at
19
+ ]
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class PrimaryAffiliation < Crunchbase::Model::Job
5
+
6
+ attr_reader :organization
7
+
8
+ def initialize(json)
9
+ super
10
+
11
+ unless (relationships = json['relationships']).nil?
12
+ set_relationships_object(Crunchbase::Model::Organization, 'organization', relationships['organization'])
13
+ end
14
+ end
15
+
16
+ def set_relationships_object(object_name, key, item)
17
+ return unless item
18
+
19
+ instance_variable_set "@#{key}", ( object_name.new(item) || nil )
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class PrimaryImage < Crunchbase::Model::Image
5
+
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class PrimaryLocation < Crunchbase::Model::Location
5
+
6
+ attr_reader :parent_locations
7
+
8
+ def initialize(json)
9
+ super
10
+
11
+ unless (relationships = json['relationships']).nil?
12
+ set_relationships_object(Crunchbase::Model::ParentLocation, 'parent_locations', relationships['parent_locations'])
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Product < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = RESOURCE_NAME = 'products'
7
+
8
+ attr_reader :permalink, :api_path, :web_path, :name, :also_known_as,
9
+ :lifecycle_stage, :short_description, :description,
10
+ :launched_on, :launched_on_trust_code, :closed_on, :closed_on_trust_code,
11
+ :homepage_url, :created_at, :updated_at
12
+
13
+ attr_reader :websites, :primary_image, :images, :images_total_items, :categories, :video, :news
14
+
15
+ attr_reader :websites_total_items, :primary_image_total_items, :categories_items, :video_total_items, :new_total_items
16
+
17
+ # attr_reader :owner, :competitors, :customers
18
+
19
+ # attr_reader :owner_total_items, :competitors_total_items, :customers_total_items
20
+
21
+ def initialize(json)
22
+ super
23
+
24
+ unless (relationships = json['relationships']).nil?
25
+ set_relationships_object(Crunchbase::Model::Category, 'categories', relationships['categories'])
26
+ set_relationships_object(Crunchbase::Model::PrimaryImage, 'primary_image', relationships['primary_image'])
27
+ set_relationships_object(Crunchbase::Model::Image, 'images', relationships['images'])
28
+ set_relationships_object(Crunchbase::Model::Video, 'video', relationships['video'])
29
+ set_relationships_object(Crunchbase::Model::New, 'news', relationships['news'])
30
+ end
31
+ end
32
+
33
+ def property_keys
34
+ %w[
35
+ permalink api_path web_path name also_known_as
36
+ lifecycle_stage short_description description
37
+ launched_on launched_on_trust_code closed_on closed_on_trust_code
38
+ homepage_url created_at updated_at
39
+ ]
40
+ end
41
+
42
+ def date_keys
43
+ %w[launched_on closed_on]
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class School < Crunchbase::Model::Organization
5
+ end
6
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Search < Crunchbase::Model::Entity
5
+ include Enumerable
6
+
7
+ attr_reader :total_items, :per_page, :pages, :current_page, :prev_page_url, :next_page_url, :sort_order, :results
8
+
9
+ alias :length :total_items
10
+ alias :size :total_items
11
+ alias :items :results
12
+
13
+ def initialize(query, json, _model)
14
+ @query = query
15
+ @results = []
16
+ @total_items = 0
17
+
18
+ populate_results(json, _model) if json['error'].nil?
19
+ end
20
+
21
+
22
+ def populate_results(json, _model)
23
+ @results = json["items"].map{|r| _model.new(r)}
24
+
25
+ @total_items = json['paging']['total_items']
26
+ @per_page = json['paging']['items_per_page']
27
+ @pages = json['paging']['number_of_pages']
28
+ @current_page = json['paging']['current_page']
29
+ @prev_page_url = json['paging']['prev_page_url']
30
+ @next_page_url = json['paging']['next_page_url']
31
+ @sort_order = json['paging']['sort_order']
32
+ end
33
+
34
+ # Finds an entity by its name. Uses two HTTP requests; one to find the
35
+ # permalink, and another to request the actual entity.
36
+ def self.search(options, resource_list)
37
+ model_name = get_model_name(resource_list)
38
+
39
+ raise 'Unknown type error!' if model_name.nil?
40
+
41
+ return Search.new options, Crunchbase::API.search( options, resource_list ), model_name
42
+ end
43
+
44
+ # Factory method to return an instance from a permalink
45
+ def self.get(permalink)
46
+ nil
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class SearchResult < Crunchbase::Model::Entity
5
+
6
+ def initialize
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class SubOrganization < Crunchbase::Model::Organization
5
+
6
+ RESOURCE_LIST = 'sub_organizations'
7
+
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Video < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'videos'
7
+
8
+ attr_reader :title, :service_name, :url, :created_at, :updated_at
9
+
10
+ def property_keys
11
+ %w[
12
+ title service_name url created_at updated_at
13
+ ]
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ module Crunchbase::Model
4
+ class Website < Crunchbase::Model::Entity
5
+
6
+ RESOURCE_LIST = 'websites'
7
+
8
+ attr_reader :website, :url, :created_at, :updated_at
9
+
10
+ def property_keys
11
+ %w[
12
+ website url created_at updated_at
13
+ ]
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module Crunchbase
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,2 @@
1
+ key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2
+ debug: true
@@ -0,0 +1,20 @@
1
+ require File.join(File.dirname(__FILE__), "../..", "spec_helper.rb")
2
+
3
+ module Crunchbase
4
+ module Model
5
+
6
+ describe BoardMembersAndAdvisor do
7
+ begin
8
+ o = BoardMembersAndAdvisor.organization_lists("apple")
9
+
10
+ puts o.total_items
11
+
12
+ o.results.collect { |p| puts p.person.first_name }
13
+
14
+ rescue Exception => e
15
+ puts e.message
16
+ end
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ require File.join(File.dirname(__FILE__), "../..", "spec_helper.rb")
2
+
3
+ module Crunchbase
4
+ module Model
5
+
6
+ describe Office, "#organization_lists" do
7
+ begin
8
+ results = Office.organization_lists("facebook").results
9
+ results.collect {|e| puts e.name }
10
+
11
+ rescue Exception => e
12
+ puts e.message
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,60 @@
1
+ require File.join(File.dirname(__FILE__), "../..", "spec_helper.rb")
2
+
3
+ module Crunchbase
4
+ module Model
5
+
6
+ describe Organization do
7
+
8
+ before(:all) do
9
+ @organization = Organization.get("facebook")
10
+ end
11
+
12
+ it 'show all products name' do
13
+ puts @organization.products.map { |i| i.name }.inspect
14
+ end
15
+
16
+ it 'show all offices name' do
17
+ puts @organization.offices.map { |i| i.name }.inspect
18
+ end
19
+
20
+ it 'show all funding_rounds funding_type' do
21
+ puts @organization.funding_rounds.map { |i| i.funding_type }.inspect
22
+ end
23
+
24
+ it 'show all competitors name' do
25
+ puts @organization.competitors.map { |i| i.name }.inspect
26
+ end
27
+
28
+ it 'show all investments money_invested' do
29
+ puts @organization.investments.map { |i| i.money_invested }.inspect
30
+ end
31
+
32
+ it 'show all acquisitions acquiree name' do
33
+ puts @organization.acquisitions.map { |i| i.acquiree.name }.inspect
34
+ end
35
+
36
+ it 'show all ipo funded_company name' do
37
+ puts "IPOs - #{@organization.ipo_total_items.nil?}"
38
+ puts @organization.ipo.map { |i| i.funded_company.name }.inspect unless @organization.ipo.nil?
39
+ end
40
+
41
+ it "show all categories name" do
42
+ puts @organization.categories.map {|i| i.name }.inspect
43
+ end
44
+
45
+ it "show all news name" do
46
+ puts @organization.news.map {|i| i.title }.inspect
47
+ end
48
+
49
+ it "show all current_team members name" do
50
+ puts @organization.current_team.map {|i| [i.title, i.person.last_name] }.inspect
51
+ end
52
+
53
+ it "show all websites website" do
54
+ puts @organization.websites.map {|i| i.website }.inspect
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,26 @@
1
+ require File.join(File.dirname(__FILE__), "../..", "spec_helper.rb")
2
+
3
+ module Crunchbase
4
+ module Model
5
+
6
+ describe PastTeam do
7
+
8
+ before(:all) do
9
+ begin
10
+ @past_team = PastTeam.organization_lists("apple2")
11
+ rescue Exception => e
12
+ @past_team = nil
13
+ end
14
+ end
15
+
16
+ it 'show past team results' do
17
+ unless @past_team.nil?
18
+ puts @past_team.total_items
19
+
20
+ puts @past_team.results.collect { |p| [p.title, p.person.first_name] }.inspect
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ require File.join(File.dirname(__FILE__), "../..", "spec_helper.rb")
2
+
3
+ module Crunchbase
4
+ module Model
5
+
6
+ # describe Person, "#get" do
7
+ # begin
8
+ # person = Person.get("li-ka-shing")
9
+
10
+ # puts person.inspect
11
+
12
+ # rescue Exception => e
13
+ # puts e.message
14
+ # end
15
+ # end
16
+
17
+ describe Person, "#list" do
18
+ begin
19
+ person = Person.list( 1 )
20
+ puts person.results.map {|e| [e.first_name, e.last_name].join(', ') }.inspect
21
+ rescue Exception => e
22
+ puts e.message
23
+ end
24
+ end
25
+
26
+
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ require File.join(File.dirname(__FILE__), "../..", "spec_helper.rb")
2
+
3
+ module Crunchbase
4
+ module Model
5
+
6
+ describe Product, "#get" do
7
+ begin
8
+ ps = Product.get("hiphop-virtual-machine")
9
+
10
+ puts ps.inspect
11
+
12
+ rescue Exception => e
13
+ puts e.message
14
+ end
15
+ end
16
+
17
+ describe Product, "#organization_lists" do
18
+ # begin
19
+ # ps = Product.organization_lists("facebook")
20
+
21
+ # puts ps.total_items
22
+
23
+ # ps.results.each do |p|
24
+ # puts [p.permalink, p.name].inspect
25
+ # end
26
+
27
+ # rescue Exception => e
28
+ # puts e.message
29
+ # end
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,50 @@
1
+ require File.join(File.dirname(__FILE__), "../..", "spec_helper.rb")
2
+
3
+ module Crunchbase
4
+ module Model
5
+
6
+ # Full text search of an Organization's name,
7
+ # aliases (i.e. previous names or "also known as"), and short description
8
+ describe Search, "Search organizations with -> query through crunchbase API" do
9
+ o = Search.search({query: "Google"}, 'organizations')
10
+
11
+
12
+ o.results.each do |i|
13
+ puts [i.name, i.permalink].inspect
14
+ end
15
+ end
16
+
17
+ # Full text search limited to name and aliases
18
+ describe Search, "Search organizations with -> name through crunchbase API" do
19
+ o = Search.search({name: "Google"}, 'organizations')
20
+
21
+
22
+ o.results.each do |i|
23
+ puts [i.name, i.permalink].inspect
24
+ end
25
+ end
26
+
27
+ # Text search of an Organization's domain_name (e.g. www.google.com)
28
+ describe Search, "Search organizations with -> domain_name through crunchbase API" do
29
+ o = Search.search({domain_name: "google.com"}, 'organizations')
30
+
31
+
32
+ o.results.each do |i|
33
+ puts [i.name, i.domain].inspect
34
+ end
35
+ end
36
+
37
+ # A full-text query of name, title, and company
38
+ describe Search, "Search person with -> query through crunchbase API" do
39
+ o = Search.search({query: "encore"}, 'people')
40
+
41
+
42
+ o.results.each do |i|
43
+ puts [i.first_name, i.last_name].inspect
44
+ end
45
+ end
46
+
47
+
48
+
49
+ end
50
+ end