crunchbase 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -40,6 +40,9 @@ an array.
40
40
  first_result = s[0]
41
41
  s.each { |result| puts result.name }
42
42
 
43
+ The Search will return a list consisting of objects of the SearchResult type. To
44
+ access the full entity object, call the +entity+ method of the SearchResult.
45
+
43
46
  While Search does include the Enumerable module, it does not implement all of
44
47
  the methods of Array. If you need to treat the results as an array in a way not
45
48
  supported, you can call +to_ary+; this prefetches all result pages (if they have
@@ -47,7 +50,6 @@ not already been loaded), so it may entail a slight delay, depending on the
47
50
  number of results.
48
51
 
49
52
  all_results = s.to_ary
50
- result_slice = s[3..6]
51
53
 
52
54
  === List all Items
53
55
 
@@ -59,9 +61,10 @@ type, you can do so with the +all+ method.
59
61
 
60
62
  This returns an array containing objects representing each entity. Just like
61
63
  Search, the full item can be grabbed with the +entity+ method. Unlike Search,
62
- however, all of the items are pre-fetched, so iterating through the list does
63
- not entail a delay every ten items. Of course, the list is probably enormous,
64
- so it's little consolation.
64
+ however, all of the result objects are fetched at once, so iterating through the
65
+ list does not entail a delay every ten items. Of course, the list is enormous
66
+ (the list of all companies returns over 84,500 entries as of this writing), so
67
+ it's little consolation.
65
68
 
66
69
  == Copyright
67
70
 
@@ -69,4 +72,4 @@ Copyright (c) 2011-12 Tyler Cunnion. This software is made available under the
69
72
  MIT/X11 license. See LICENSE.txt for further details.
70
73
 
71
74
  I am not affiliated in any way with AOL, TechCrunch, Crunchbase, or anyone
72
- really.
75
+ really.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{crunchbase}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Tyler Cunnion}]
12
- s.date = %q{2012-02-28}
12
+ s.date = %q{2012-03-16}
13
13
  s.email = %q{tyler.cunnion@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -17,5 +17,5 @@ require 'crunchbase/search_result'
17
17
  require 'crunchbase/crunch_exception'
18
18
 
19
19
  module Crunchbase
20
- VERSION = "0.2.0"
21
- end
20
+ VERSION = "0.2.1"
21
+ end
@@ -32,15 +32,20 @@ module Crunchbase
32
32
  populate_results(json)
33
33
  end
34
34
 
35
- def [](key)
36
- if key.kind_of?(Integer)
37
- r = @results[key]
38
- unless r.nil? && key < @size
39
- r
40
- else
41
- retrieve_for_index(key)
42
- @results[key]
35
+ def [](*args)
36
+ case args.length
37
+ when 1
38
+ key = args[0]
39
+ if key.kind_of?(Integer)
40
+ get_single_key(key)
41
+ elsif key.kind_of?(Range)
42
+ get_range(key)
43
43
  end
44
+ when 2
45
+ start = args[0]
46
+ length = args[1]
47
+ start = @size + start if start < 0
48
+ get_range(start..start+length-1)
44
49
  end
45
50
  end
46
51
 
@@ -59,6 +64,7 @@ module Crunchbase
59
64
 
60
65
  private
61
66
 
67
+ # Inserts items into the results array from the retrieved search page
62
68
  def populate_results(json)
63
69
  page = json["page"]
64
70
  results = json["results"].map{|r| SearchResult.new(r)}
@@ -66,9 +72,36 @@ module Crunchbase
66
72
  @results[start, results.length] = results
67
73
  end
68
74
 
75
+ # Retrieves the search page containing the given index
69
76
  def retrieve_for_index(index)
70
77
  page = (index / 10) + 1
71
78
  populate_results(API.search(@query, page))
72
79
  end
80
+
81
+ # Given one integer key, returns the indexed object from results
82
+ def get_single_key(key)
83
+ key = @size+key if key < 0
84
+ r = @results[key]
85
+ unless r.nil? && key < @size
86
+ r
87
+ else
88
+ retrieve_for_index(key)
89
+ @results[key]
90
+ end
91
+ end
92
+
93
+ # Given a range, returns the array slice of results indicated
94
+ def get_range(range)
95
+ r = []
96
+ enum = range.to_enum
97
+ begin
98
+ while (x = enum.next) < @size
99
+ r << get_single_key(x)
100
+ end
101
+ rescue StopIteration
102
+ end
103
+ r.empty? ? nil : r
104
+ end
105
+
73
106
  end
74
- end
107
+ end
@@ -9,6 +9,48 @@ module Crunchbase
9
9
  s[0].class.should == SearchResult
10
10
  end
11
11
 
12
+ describe "advanced indexing" do
13
+ before(:all) do
14
+ @s = Search.find('google')
15
+ end
16
+
17
+ it "should return slices with ranges" do
18
+ slice = @s[8..11]
19
+ slice.class.should == Array
20
+ slice[0].class.should == SearchResult
21
+ end
22
+
23
+ it "should return abbreviated slice for range with upper out of range" do
24
+ slice = @s[@s.size-3..@s.size+2]
25
+ slice.length.should == 3
26
+ end
27
+
28
+ it "should return nil for slice out of range" do
29
+ slice = @s[@s.size..@s.size+4]
30
+ slice.should == nil
31
+ end
32
+
33
+ it "should slice with two arguments" do
34
+ start = @s.size / 3
35
+ slice = @s[start, 5]
36
+ slice.length.should == 5
37
+ slice[0].class.should == SearchResult
38
+ end
39
+
40
+ it "should slice with negative start" do
41
+ slice = @s[-12, 4]
42
+ slice.length.should == 4
43
+ slice[0].class.should == SearchResult
44
+ end
45
+
46
+ end #Indexing
47
+
48
+ it "should accept negative indices" do
49
+ s = Search.find('google')
50
+ s[-13].should == s[s.size-13]
51
+ s[-13].class.should == SearchResult
52
+ end
53
+
12
54
  it "should return higher search results" do
13
55
  s = Search.find('google')
14
56
  s[s.size/2].class.should == SearchResult
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crunchbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-28 00:00:00.000000000Z
12
+ date: 2012-03-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70327968354500 !ruby/object:Gem::Requirement
16
+ requirement: &70161600273460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70327968354500
24
+ version_requirements: *70161600273460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70327968353340 !ruby/object:Gem::Requirement
27
+ requirement: &70161600233040 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70327968353340
35
+ version_requirements: *70161600233040
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &70327968352400 !ruby/object:Gem::Requirement
38
+ requirement: &70161600230540 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.4
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70327968352400
46
+ version_requirements: *70161600230540
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rcov
49
- requirement: &70327968350960 !ruby/object:Gem::Requirement
49
+ requirement: &70161600229340 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70327968350960
57
+ version_requirements: *70161600229340
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rdoc
60
- requirement: &70327968349800 !ruby/object:Gem::Requirement
60
+ requirement: &70161600227720 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70327968349800
68
+ version_requirements: *70161600227720
69
69
  description:
70
70
  email: tyler.cunnion@gmail.com
71
71
  executables: []
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  segments:
127
127
  - 0
128
- hash: 2248363577786522930
128
+ hash: 4593283541442877220
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements: