crunchbase 0.0.1
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.
- data/LICENSE.txt +20 -0
- data/README.rdoc +13 -0
- data/VERSION +1 -0
- data/lib/crunchbase.rb +9 -0
- data/lib/crunchbase/api.rb +33 -0
- data/lib/crunchbase/cb_object.rb +18 -0
- data/lib/crunchbase/company.rb +83 -0
- data/lib/crunchbase/crunch_exception.rb +4 -0
- data/lib/crunchbase/person.rb +56 -0
- data/spec/crunchbase/api_spec.rb +22 -0
- data/spec/crunchbase/company_spec.rb +27 -0
- data/spec/crunchbase/person_spec.rb +71 -0
- data/spec/fixtures/brad-fitzpatrick.js +70 -0
- data/spec/fixtures/steve-jobs.js +83 -0
- data/spec/spec_helper.rb +4 -0
- metadata +120 -0
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Tyler Cunnion
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/lib/crunchbase.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
require 'timeout'
|
4
|
+
|
5
|
+
module Crunchbase
|
6
|
+
class API
|
7
|
+
CB_URL = 'http://api.crunchbase.com/v/1/'
|
8
|
+
|
9
|
+
def self.person(permalink)
|
10
|
+
fetch_uri = URI.parse(CB_URL + "person/#{permalink}.js")
|
11
|
+
fetch(fetch_uri)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.company(permalink)
|
15
|
+
fetch_uri = URI.parse(CB_URL + "company/#{permalink}.js")
|
16
|
+
fetch(fetch_uri)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Fetches URI and parses JSON. Raises Timeout::Error if fetching times out.
|
20
|
+
# Raises CrunchException if the returned JSON indicates an error.
|
21
|
+
def self.fetch(uri)
|
22
|
+
resp = Timeout::timeout(5) {
|
23
|
+
Net::HTTP.get(uri)
|
24
|
+
}
|
25
|
+
j = JSON.parse(resp)
|
26
|
+
raise CrunchException, j["error"] if j["error"]
|
27
|
+
return j
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Crunchbase
|
2
|
+
class CB_Object
|
3
|
+
|
4
|
+
# Returns an array of tags
|
5
|
+
def tags
|
6
|
+
@tag_list.respond_to?('split') ? @tag_list.split(', ') : []
|
7
|
+
end
|
8
|
+
|
9
|
+
def aliases
|
10
|
+
@alias_list.respond_to?('split') ? @alias_list.split(", ") : []
|
11
|
+
end
|
12
|
+
|
13
|
+
def ===(other)
|
14
|
+
@permalink == other.permalink && @updated_at == other.updated_at
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'date'
|
2
|
+
module Crunchbase
|
3
|
+
class Company < CB_Object
|
4
|
+
|
5
|
+
attr_reader :name, :permalink, :crunchbase_url, :homepage_url, :blog_url,
|
6
|
+
:blog_feed_url, :twitter_username, :category_code, :number_of_employees,
|
7
|
+
:founded_year, :founded_month, :founded_day, :deadpooled_year,
|
8
|
+
:deadpooled_month, :deadpooled_day, :deadpooled_url, :tag_list,
|
9
|
+
:alias_list, :email_address, :phone_number, :description, :created_at,
|
10
|
+
:updated_at, :overview, :image, :products, :relationships, :competitions,
|
11
|
+
:providerships, :total_money_raised, :funding_rounds, :investments,
|
12
|
+
:acquisition, :acquisitions, :offices, :milestones, :ipo, :video_embeds,
|
13
|
+
:screenshots, :external_links
|
14
|
+
|
15
|
+
def self.get(permalink)
|
16
|
+
j = API.company(permalink)
|
17
|
+
c = Company.new(j)
|
18
|
+
return c
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(json)
|
22
|
+
@name = json["name"]
|
23
|
+
@permalink = json["permalink"]
|
24
|
+
@crunchbase_url = json["crunchbase_url"]
|
25
|
+
@homepage_url = json["homepage_url"]
|
26
|
+
@blog_url = json["blog_url"]
|
27
|
+
@blog_feed_url = json["blog_feed_url"]
|
28
|
+
@twitter_username = json["twitter_username"]
|
29
|
+
@category_code = json["category_code"]
|
30
|
+
@number_of_employees = json["number_of_employees"]
|
31
|
+
@founded_year = json["founded_year"]
|
32
|
+
@founded_month = json["founded_month"]
|
33
|
+
@founded_day = json["founded_day"]
|
34
|
+
@deadpooled_year = json["deadpooled_year"]
|
35
|
+
@deadpooled_month = json["deadpooled_month"]
|
36
|
+
@deadpooled_day = json["deadpooled_day"]
|
37
|
+
@deadpooled_url = json["deadpooled_url"]
|
38
|
+
@tag_list = json["tag_list"]
|
39
|
+
@alias_list = json["alias_list"]
|
40
|
+
@email_address = json["email_address"]
|
41
|
+
@phone_number = json["phone_number"]
|
42
|
+
@description = json["description"]
|
43
|
+
@created_at = DateTime.parse(json["created_at"])
|
44
|
+
@updated_at = DateTime.parse(json["updated_at"])
|
45
|
+
@overview = json["overview"]
|
46
|
+
@image = json["image"]
|
47
|
+
@products = json["products"]
|
48
|
+
@relationships = json["relationships"]
|
49
|
+
@competitions = json["competitions"]
|
50
|
+
@providerships = json["providerships"]
|
51
|
+
@total_money_raised = json["total_money_raised"]
|
52
|
+
@funding_rounds = json["funding_rounds"]
|
53
|
+
@investments = json["investments"]
|
54
|
+
@acquisition = json["acquisition"]
|
55
|
+
@acquisitions = json["acquisitions"]
|
56
|
+
@offices = json["offices"]
|
57
|
+
@milestones = json["milestones"]
|
58
|
+
@ipo = json["ipo"]
|
59
|
+
@video_embeds = json["video_embeds"]
|
60
|
+
@screenshots = json["screenshots"]
|
61
|
+
@external_links = json["external_links"]
|
62
|
+
end
|
63
|
+
|
64
|
+
def founded
|
65
|
+
begin
|
66
|
+
founded = Date.new(@founded_year, @founded_month, @founded_day)
|
67
|
+
rescue
|
68
|
+
founded = nil
|
69
|
+
end
|
70
|
+
return founded
|
71
|
+
end
|
72
|
+
|
73
|
+
def deadpooled
|
74
|
+
begin
|
75
|
+
dp = Date.new(@deadpooled_year, @deadpooled_month, @deadpooled_day)
|
76
|
+
rescue
|
77
|
+
dp = nil
|
78
|
+
end
|
79
|
+
return dp
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'date'
|
2
|
+
module Crunchbase
|
3
|
+
class Person < CB_Object
|
4
|
+
|
5
|
+
attr_reader :first_name, :last_name, :permalink, :crunchbase_url,
|
6
|
+
:homepage_url, :birthplace, :twitter_username, :blog_url, :blog_feed_url,
|
7
|
+
:affiliation_name, :born_year, :born_month, :born_day, :created_at,
|
8
|
+
:updated_at, :overview, :tag_list
|
9
|
+
|
10
|
+
def self.get(permalink)
|
11
|
+
j = API.person(permalink)
|
12
|
+
p = Person.new(j)
|
13
|
+
return p
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(json)
|
17
|
+
@first_name = json["first_name"]
|
18
|
+
@last_name = json["last_name"]
|
19
|
+
@permalink = json["permalink"]
|
20
|
+
@crunchbase_url = json["crunchbase_url"]
|
21
|
+
@homepage_url = json["homepage_url"]
|
22
|
+
@birthplace = json["birthplace"]
|
23
|
+
@twitter_username = json["twitter_username"]
|
24
|
+
@blog_url = json["blog_url"]
|
25
|
+
@blog_feed_url = json["blog_feed_url"]
|
26
|
+
@affiliation_name = json["affiliation_name"]
|
27
|
+
@born_year = json["born_year"]
|
28
|
+
@born_month = json["born_month"]
|
29
|
+
@born_day = json["born_day"]
|
30
|
+
@tag_list = json["tag_list"]
|
31
|
+
@alias_list = json["alias_list"]
|
32
|
+
@created_at = DateTime.parse(json["created_at"])
|
33
|
+
@updated_at = DateTime.parse(json["updated_at"])
|
34
|
+
@overview = json["overview"]
|
35
|
+
|
36
|
+
@relationships = json["relationships"]
|
37
|
+
@investments = json["investments"]
|
38
|
+
@milestones = json["milestones"]
|
39
|
+
@video_embeds = json["video_embeds"]
|
40
|
+
@external_links = json["external_links"]
|
41
|
+
@web_presences = json["web_presences"]
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns a date object, or nil if Date cannot be created from
|
45
|
+
# provided information.
|
46
|
+
def born
|
47
|
+
begin
|
48
|
+
born = Date.new(@born_year, @born_month, @born_day)
|
49
|
+
rescue
|
50
|
+
born = nil
|
51
|
+
end
|
52
|
+
born
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "spec_helper.rb")
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
module Crunchbase
|
5
|
+
describe API do
|
6
|
+
|
7
|
+
it "should return a JSON hash" do
|
8
|
+
j = API.fetch(URI.parse(API::CB_URL + "person/steve-jobs.js"))
|
9
|
+
j.class.should == Hash
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return JSON from person permalink" do
|
13
|
+
j = API.person("steve-jobs")
|
14
|
+
j.class.should == Hash
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should raise exception on unfound person" do
|
18
|
+
expect { API.person("not-real") }.to raise_error
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "spec_helper.rb")
|
2
|
+
|
3
|
+
module Crunchbase
|
4
|
+
describe Company do
|
5
|
+
|
6
|
+
it "should pull from web api" do
|
7
|
+
company = Company.get("facebook")
|
8
|
+
company.name.should == "Facebook"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should return date for founded" do
|
12
|
+
company = Company.new({"founded_year" => 2004, "founded_month" => 2,
|
13
|
+
"founded_day" => 1, "created_at" => "Sat Dec 22 08:42:28 UTC 2007",
|
14
|
+
"updated_at" => "Sat Dec 22 08:42:28 UTC 2007"})
|
15
|
+
company.founded.should === Date.new(2004, 2, 1)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return date for deadpooled" do
|
19
|
+
company = Company.new({"deadpooled_year" => 2004, "deadpooled_month" => 2,
|
20
|
+
"deadpooled_day" => 1, "created_at" => "Sat Dec 22 08:42:28 UTC 2007",
|
21
|
+
"updated_at" => "Sat Dec 22 08:42:28 UTC 2007"})
|
22
|
+
company.deadpooled.should === Date.new(2004, 2, 1)
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "spec_helper.rb")
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Crunchbase
|
5
|
+
describe Person do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
@steve = File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "steve-jobs.js"))
|
9
|
+
@brad = File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "brad-fitzpatrick.js"))
|
10
|
+
end
|
11
|
+
|
12
|
+
before(:each) do
|
13
|
+
@steve.rewind
|
14
|
+
@brad.rewind
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should ask for JSON object" do
|
18
|
+
API.should_receive(:person).with("brad-fitzpatrick").and_return(JSON.parse(@brad.read))
|
19
|
+
person = Person.get("brad-fitzpatrick")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should get information from supplied file" do
|
23
|
+
API.should_receive(:person).with("steve-jobs").and_return(JSON.parse(@steve.read))
|
24
|
+
person = Person.get("steve-jobs")
|
25
|
+
person.first_name.should == "Steve"
|
26
|
+
|
27
|
+
API.should_receive(:person).with("brad-fitzpatrick").and_return(JSON.parse(@brad.read))
|
28
|
+
person = Person.get("brad-fitzpatrick")
|
29
|
+
person.first_name.should == "Brad"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return a date for born" do
|
33
|
+
person = Person.new(JSON.parse(@steve.read))
|
34
|
+
date = Date.new(1955, 2, 24)
|
35
|
+
person.born.should === date
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return nil when birthday is unavailable" do
|
39
|
+
person = Person.new({
|
40
|
+
"created_at" => "Sat Dec 22 08:42:28 UTC 2007",
|
41
|
+
"updated_at" => "Sat Dec 22 08:42:28 UTC 2007"})
|
42
|
+
person.born.should be_nil
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should get an array of tags" do
|
46
|
+
person = Person.new({"tag_list" => "computers, technology",
|
47
|
+
"created_at" => "Sat Dec 22 08:42:28 UTC 2007",
|
48
|
+
"updated_at" => "Sat Dec 22 08:42:28 UTC 2007"})
|
49
|
+
person.tags.should == ["computers", "technology"]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should return empty array for null tags" do
|
53
|
+
person = Person.new({"tag_list" => nil,
|
54
|
+
"created_at" => "Sat Dec 22 08:42:28 UTC 2007",
|
55
|
+
"updated_at" => "Sat Dec 22 08:42:28 UTC 2007"})
|
56
|
+
person.tags.should == []
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should get from web" do
|
60
|
+
person = Person.get("steve-jobs")
|
61
|
+
person.first_name.should == "Steve"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be equal to another with the same permalink and last updated" do
|
65
|
+
person = Person.get("steve-jobs")
|
66
|
+
person2 = Person.get("steve-jobs")
|
67
|
+
person.should === person2
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
{"first_name": "Brad",
|
2
|
+
"last_name": "Fitzpatrick",
|
3
|
+
"permalink": "brad-fitzpatrick",
|
4
|
+
"crunchbase_url": "http://www.crunchbase.com/person/brad-fitzpatrick",
|
5
|
+
"homepage_url": "http://bradfitz.com",
|
6
|
+
"birthplace": "Iowa",
|
7
|
+
"twitter_username": null,
|
8
|
+
"blog_url": "http://brad.livejournal.com",
|
9
|
+
"blog_feed_url": "http://brad.livejournal.com/data/rss",
|
10
|
+
"affiliation_name": "LiveJournal",
|
11
|
+
"born_year": 1980,
|
12
|
+
"born_month": 2,
|
13
|
+
"born_day": 5,
|
14
|
+
"tag_list": "",
|
15
|
+
"alias_list": null,
|
16
|
+
"created_at": "Sun Dec 09 14:29:02 UTC 2007",
|
17
|
+
"updated_at": "Wed Feb 02 19:23:16 UTC 2011",
|
18
|
+
"overview": "\u003Cp\u003EBrad Fitzpatrick originated the \u003Ca href=\"http://www.crunchbase.com/product/openid\" title=\"OpenID\"\u003EOpenID\u003C/a\u003E protocol in 2005 while working at \u003Ca href=\"http://www.crunchbase.com/company/six+apart\" title=\"Six Apart\"\u003ESix Apart\u003C/a\u003E, which he started in 1999.\u003C/p\u003E\n\n\u003Cp\u003EHe\u0026#8217;s also known creating memcached, MogileFS (a GFS-like filesystem), djabberd (a Jabber server), Gearman (and RPC balancer), and other open source backend software.\u003C/p\u003E\n\n\u003Cp\u003EHe now works at Google.\u003C/p\u003E",
|
19
|
+
"image":
|
20
|
+
{"available_sizes":
|
21
|
+
[[[112,
|
22
|
+
150],
|
23
|
+
"assets/images/resized/0001/6259/16259v3-max-150x150.jpg"],
|
24
|
+
[[188,
|
25
|
+
250],
|
26
|
+
"assets/images/resized/0001/6259/16259v3-max-250x250.jpg"],
|
27
|
+
[[188,
|
28
|
+
250],
|
29
|
+
"assets/images/resized/0001/6259/16259v3-max-450x450.jpg"]],
|
30
|
+
"attribution": ""},
|
31
|
+
"degrees":
|
32
|
+
[],
|
33
|
+
"relationships":
|
34
|
+
[{"is_past": true,
|
35
|
+
"title": "Founder",
|
36
|
+
"firm":
|
37
|
+
{"name": "LiveJournal",
|
38
|
+
"permalink": "livejournal",
|
39
|
+
"type_of_entity": "company"}},
|
40
|
+
{"is_past": false,
|
41
|
+
"title": "",
|
42
|
+
"firm":
|
43
|
+
{"name": "Google",
|
44
|
+
"permalink": "google",
|
45
|
+
"type_of_entity": "company"}},
|
46
|
+
{"is_past": true,
|
47
|
+
"title": "",
|
48
|
+
"firm":
|
49
|
+
{"name": "OpenID Foundation",
|
50
|
+
"permalink": "openid-foundation",
|
51
|
+
"type_of_entity": "company"}},
|
52
|
+
{"is_past": true,
|
53
|
+
"title": "",
|
54
|
+
"firm":
|
55
|
+
{"name": "Six Apart",
|
56
|
+
"permalink": "six-apart",
|
57
|
+
"type_of_entity": "company"}}],
|
58
|
+
"investments":
|
59
|
+
[],
|
60
|
+
"milestones":
|
61
|
+
[],
|
62
|
+
"video_embeds":
|
63
|
+
[],
|
64
|
+
"external_links":
|
65
|
+
[],
|
66
|
+
"web_presences":
|
67
|
+
[{"external_url": "http://en.wikipedia.org/wiki/Brad_Fitzpatrick",
|
68
|
+
"title": "Wikipedia"},
|
69
|
+
{"external_url": "http://www.linkedin.com/in/bradfitz",
|
70
|
+
"title": "Linkedin"}]}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
{"first_name": "Steve",
|
2
|
+
"last_name": "Jobs",
|
3
|
+
"permalink": "steve-jobs",
|
4
|
+
"crunchbase_url": "http://www.crunchbase.com/person/steve-jobs",
|
5
|
+
"homepage_url": "",
|
6
|
+
"birthplace": "",
|
7
|
+
"twitter_username": "",
|
8
|
+
"blog_url": "",
|
9
|
+
"blog_feed_url": "",
|
10
|
+
"affiliation_name": "Apple",
|
11
|
+
"born_year": 1955,
|
12
|
+
"born_month": 2,
|
13
|
+
"born_day": 24,
|
14
|
+
"tag_list": "",
|
15
|
+
"alias_list": "",
|
16
|
+
"created_at": "Sat Dec 22 08:42:28 UTC 2007",
|
17
|
+
"updated_at": "Thu Aug 25 19:22:47 UTC 2011",
|
18
|
+
"overview": "\u003Cp\u003ESteve Jobs is the co-founder and CEO of \u003Ca href=\"http://www.crunchbase.com/person/steve-jobs\" title=\"Apple\"\u003EApple\u003C/a\u003E and formerly \u003Ca href=\"/company/pixar\" title=\"Pixar\" rel=\"nofollow\"\u003EPixar\u003C/a\u003E.\u003C/p\u003E\n\n\u003Cp\u003E\u0026#8220;Innovation distinguishes between a leader and a follower.\u0026#8221; -Steve Jobs\u003C/p\u003E\n\n\u003Cp\u003ESteve Jobs regularly makes most rosters of the rich and powerful. It is surprising for a guy who takes home an annual salary of U.S. $1. The reasons why he is on all power lists are; \u003Ca href=\"/company/apple\" title=\"Apple\" rel=\"nofollow\"\u003EApple\u003C/a\u003E, \u003Ca href=\"/company/next\" title=\"Next\" rel=\"nofollow\"\u003ENext\u003C/a\u003E, \u003Ca href=\"/product/ipod\" title=\"iPod\" rel=\"nofollow\"\u003EiPod\u003C/a\u003E and \u003Ca href=\"/company/pixar\" title=\"Pixar\" rel=\"nofollow\"\u003EPixar\u003C/a\u003E. Jobs is also known as the one man who could have upstaged \u003Ca href=\"/person/bill-gates\" title=\"Bill Gates\" rel=\"nofollow\"\u003EBill Gates\u003C/a\u003E. But Jobs was as excited about innovation as \u003Ca href=\"/person/bill-gates\" title=\"Bill Gates\" rel=\"nofollow\"\u003EBill Gates\u003C/a\u003E was interested in making money.\u003C/p\u003E\n\n\u003Cp\u003ESteve Jobs was born in Green Bay, Wisconsin to Joanne Simpson and a Syrian father Abdulfattah Jandali (who became a political science professor). Paul and Clara Jobs of \u003Ca href=\"/maps/city/Mountain%2520View\" title=\"Mountain View, Santa Clara County, California\" rel=\"nofollow\"\u003EMountain View, Santa Clara County, California\u003C/a\u003E then adopted him. The writer Mona Simpson is Jobs\u2019 biological sister. In 1972, Jobs graduated from Homestead High School in Cupertino, California and enrolled in Reed College in Portland, Oregon. One semester later he had dropped out. But instead of going back home he hung around college and took up the study of philosophy and foreign cultures.\u003C/p\u003E\n\n\u003Cp\u003ESteve Jobs had a deep-seated interest in technology so he took up a job at \u003Ca href=\"/company/atari-interactive\" title=\"Atari Inc.\" rel=\"nofollow\"\u003EAtari Inc.\u003C/a\u003E which was a leading manufacturer of video games. He struck a friendship with fellow designer \u003Ca href=\"/person/steve-wozniak\" title=\"Steve Wozniak\" rel=\"nofollow\"\u003ESteve Wozniak\u003C/a\u003E and attended meetings of the \u0026#8220;Homebrew Computer Club\u0026#8221; with him. \u003Ca href=\"/person/steve-wozniak\" title=\"Wozniak\" rel=\"nofollow\"\u003EWozniak\u003C/a\u003E and Jobs developed a system with a toy whistle available in the Cap\u0026#8217;n Crunch cereal box to make it possible to make free long distance telephone calls. They called off the amateur venture after someone told them of the possible legal consequences.\u003C/p\u003E\n\n\u003Cp\u003EAfter saving up some money Steve Jobs took off for India in the search of enlightenment with his friend Dan Kottke. Once he returned he convinced Wozniak to quit his job at \u003Ca href=\"/company/hewlett-packard\" title=\"Hewlett Packard\" rel=\"nofollow\"\u003EHewlett Packard\u003C/a\u003E and join him in his venture that concerned personal computers. They sold items like a scientific calculator to raise the seed capital. \u003C/p\u003E\n\n\u003Cp\u003EIn 1976, Jobs, then 21, and Wozniak, 26, founded \u003Ca href=\"/company/apple\" title=\"Apple Computer Co.\" rel=\"nofollow\"\u003EApple Computer Co.\u003C/a\u003E in the Jobs family garage. The first personal computer was sold for $666.66. By 1980, \u003Ca href=\"/company/apple\" title=\"Apple\" rel=\"nofollow\"\u003EApple\u003C/a\u003E had already released three improved versions of the personal computer. It had a wildly successful IPO, which made both founders millionaires many times over. Steve Jobs had managed to rope in John Scully of Pepsi to head the marketing function in \u003Ca href=\"/company/apple\" title=\"Apple\" rel=\"nofollow\"\u003EApple\u003C/a\u003E.\u003C/p\u003E\n\n\u003Cp\u003EA tiff with the \u003Ca href=\"/company/apple\" title=\"Apple\" rel=\"nofollow\"\u003EApple\u003C/a\u003E board and John Scully led to the resignation of Steve Jobs. As soon as he resigned he immersed himself in his brand new venture. Steve Jobs decided that he wanted to change the hardware industry. The company was called \u003Ca href=\"/company/next\" title=\"NeXTStep\" rel=\"nofollow\"\u003ENeXTStep\u003C/a\u003E and the new machine was called NeXT Computer. He ploughed in more than U.S. $250 million into the company. The machine was a commercial washout but it did help in object-oriented programming, PostScript, and magneto-optical devices. \u003Ca href=\"/person/tim-berners-lee\" title=\"Tim Berners-Lee\" rel=\"nofollow\"\u003ETim Berners-Lee\u003C/a\u003E developed the original World Wide Web system at CERN on a NeXT machine. Bitterly disappointed with \u003Ca href=\"/company/next\" title=\"NeXTStep\" rel=\"nofollow\"\u003ENeXTStep\u003C/a\u003E, Jobs accepted the offer that \u003Ca href=\"/company/apple\" title=\"Apple\" rel=\"nofollow\"\u003EApple\u003C/a\u003E made him.\u003C/p\u003E\n\n\u003Cp\u003ESteve Jobs also started \u003Ca href=\"/company/pixar\" title=\"Pixar Inc.\" rel=\"nofollow\"\u003EPixar Inc.\u003C/a\u003E, which has gone on to produce animated movies such as Toy Story (1995); A Bug\u0026#8217;s Life (1998); Toy Story 2 (1999); Monsters, Inc. (2001); Finding Nemo (2003); and The Incredibles (2004). This venture has made him one of the most sought after men in Hollywood.\u003C/p\u003E\n\n\u003Cp\u003EPost \u003Ca href=\"/company/pixar\" title=\"Pixar\" rel=\"nofollow\"\u003EPixar\u003C/a\u003E, Steve Jobs wanted another round of revolutionizing to do. This time it was the music industry. He introduced the \u003Ca href=\"/product/ipod\" title=\"iPod\" rel=\"nofollow\"\u003EiPod\u003C/a\u003E in 2003. Later he came up with \u003Ca href=\"/product/itunes\" title=\"iTunes\" rel=\"nofollow\"\u003EiTunes\u003C/a\u003E, which was a digital jukebox. A million and a half \u003Ca href=\"/product/ipod\" title=\"iPods\" rel=\"nofollow\"\u003EiPods\u003C/a\u003E later, the music industry still does not know whether this invention will save it or destroy it. \u003Ca href=\"/company/apple\" title=\"Apple\" rel=\"nofollow\"\u003EApple\u003C/a\u003E has a great advertising track record and its \u2018Rip, Mix, Burn\u2019 campaign was another feather in its cap. Now the industry uses a Mac to make the music and an \u003Ca href=\"/product/ipod\" title=\"iPod\" rel=\"nofollow\"\u003EiPod\u003C/a\u003E to store it.\u003C/p\u003E\n\n\u003Cp\u003ESteve Jobs lives with his wife, Laurene Powell and their three children in Silicon Valley. He also has a daughter, Lisa Jobs from a previous relationship. In 2004, there was a cancerous tumor in his pancreas, which was successfully operated upon. Jobs continued to struggle with his health, and in 2009 he underwent a successful liver transplant.\u003C/p\u003E\n\n\u003Cp\u003EJobs resigned as CEO of Apple in August 2011 and subsequently assumed the role of Chairman of the Board.\u003C/p\u003E",
|
19
|
+
"image":
|
20
|
+
{"available_sizes":
|
21
|
+
[[[150,
|
22
|
+
150],
|
23
|
+
"assets/images/resized/0001/0974/10974v3-max-150x150.jpg"],
|
24
|
+
[[250,
|
25
|
+
250],
|
26
|
+
"assets/images/resized/0001/0974/10974v3-max-250x250.jpg"],
|
27
|
+
[[400,
|
28
|
+
400],
|
29
|
+
"assets/images/resized/0001/0974/10974v3-max-450x450.jpg"]],
|
30
|
+
"attribution": ""},
|
31
|
+
"degrees":
|
32
|
+
[],
|
33
|
+
"relationships":
|
34
|
+
[{"is_past": true,
|
35
|
+
"title": "CEO",
|
36
|
+
"firm":
|
37
|
+
{"name": "Apple",
|
38
|
+
"permalink": "apple",
|
39
|
+
"type_of_entity": "company"}},
|
40
|
+
{"is_past": false,
|
41
|
+
"title": "Founder",
|
42
|
+
"firm":
|
43
|
+
{"name": "Pixar",
|
44
|
+
"permalink": "pixar",
|
45
|
+
"type_of_entity": "company"}},
|
46
|
+
{"is_past": false,
|
47
|
+
"title": "Founder",
|
48
|
+
"firm":
|
49
|
+
{"name": "NeXT",
|
50
|
+
"permalink": "next",
|
51
|
+
"type_of_entity": "company"}},
|
52
|
+
{"is_past": false,
|
53
|
+
"title": "Chairman, Co-Founder",
|
54
|
+
"firm":
|
55
|
+
{"name": "Apple",
|
56
|
+
"permalink": "apple",
|
57
|
+
"type_of_entity": "company"}}],
|
58
|
+
"investments":
|
59
|
+
[],
|
60
|
+
"milestones":
|
61
|
+
[{"description": "Named one of Time Magazine's top 25 most influential people on the web (2008)",
|
62
|
+
"stoned_year": 2009,
|
63
|
+
"stoned_month": 4,
|
64
|
+
"stoned_day": 30,
|
65
|
+
"source_url": "http://images.businessweek.com/ss/08/09/0929_most_influential/1.htm",
|
66
|
+
"source_text": "",
|
67
|
+
"source_description": "The 25 Most Influential People on the Web",
|
68
|
+
"stoneable_type": "Person",
|
69
|
+
"stoned_value": null,
|
70
|
+
"stoned_value_type": null,
|
71
|
+
"stoned_acquirer": null,
|
72
|
+
"stoneable":
|
73
|
+
{"first_name": "Steve",
|
74
|
+
"last_name": "Jobs",
|
75
|
+
"permalink": "steve-jobs"}}],
|
76
|
+
"video_embeds":
|
77
|
+
[{"embed_code": "\u003Cobject width=\"480\" height=\"385\"\u003E\u003Cparam name=\"movie\" value=\"http://www.youtube.com/v/D1R-jKKp3NA\u0026hl=en\u0026fs=1\"\u003E\u003C/param\u003E\u003Cparam name=\"allowFullScreen\" value=\"true\"\u003E\u003C/param\u003E\u003Cparam name=\"allowscriptaccess\" value=\"always\"\u003E\u003C/param\u003E\u003Cembed src=\"http://www.youtube.com/v/D1R-jKKp3NA\u0026hl=en\u0026fs=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"480\" height=\"385\"\u003E\u003C/embed\u003E\u003C/object\u003E",
|
78
|
+
"description": "\u003Cp\u003ESteve Jobs delivering his commencement speech to the graduates of Stanford University in 2005\u003C/p\u003E"}],
|
79
|
+
"external_links":
|
80
|
+
[{"external_url": "http://thcx.org/tech-news/ipad-the-apple-tablet-all-you-need-to-know.html",
|
81
|
+
"title": "iPad"}],
|
82
|
+
"web_presences":
|
83
|
+
[]}
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crunchbase
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Tyler Cunnion
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-12 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
requirement: &70283755317100 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70283755317100
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70283755316060 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70283755316060
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: bundler
|
38
|
+
requirement: &70283755314920 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.0.0
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70283755314920
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: jeweler
|
49
|
+
requirement: &70283755313820 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.6.4
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70283755313820
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rcov
|
60
|
+
requirement: &70283755312820 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70283755312820
|
69
|
+
description:
|
70
|
+
email: tyler.cunnion@gmail.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files:
|
74
|
+
- LICENSE.txt
|
75
|
+
- README.rdoc
|
76
|
+
files:
|
77
|
+
- VERSION
|
78
|
+
- lib/crunchbase.rb
|
79
|
+
- lib/crunchbase/api.rb
|
80
|
+
- lib/crunchbase/cb_object.rb
|
81
|
+
- lib/crunchbase/company.rb
|
82
|
+
- lib/crunchbase/crunch_exception.rb
|
83
|
+
- lib/crunchbase/person.rb
|
84
|
+
- spec/crunchbase/api_spec.rb
|
85
|
+
- spec/crunchbase/company_spec.rb
|
86
|
+
- spec/crunchbase/person_spec.rb
|
87
|
+
- spec/fixtures/brad-fitzpatrick.js
|
88
|
+
- spec/fixtures/steve-jobs.js
|
89
|
+
- spec/spec_helper.rb
|
90
|
+
- LICENSE.txt
|
91
|
+
- README.rdoc
|
92
|
+
homepage: http://github.com/tylercunnion/crunchbase
|
93
|
+
licenses:
|
94
|
+
- MIT
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
hash: 4570443541107244094
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 1.8.6
|
117
|
+
signing_key:
|
118
|
+
specification_version: 3
|
119
|
+
summary: Ruby wrapper for CrunchBase API
|
120
|
+
test_files: []
|