crags 1.6.0 → 2.0.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.
- data/.gitignore +3 -1
- data/Gemfile +8 -0
- data/README.rdoc +45 -8
- data/Rakefile +14 -24
- data/VERSION +1 -1
- data/crags.gemspec +41 -16
- data/lib/crags/category.rb +29 -0
- data/lib/crags/country.rb +37 -0
- data/lib/crags/{fetch.rb → fetcher.rb} +1 -1
- data/lib/crags/item.rb +11 -0
- data/lib/crags/location.rb +13 -0
- data/lib/crags/search/country.rb +26 -0
- data/lib/crags/search/location.rb +28 -0
- data/lib/crags/search/search.rb +13 -0
- data/lib/crags.rb +26 -39
- data/lib/ext/hpricot/elem.rb +19 -0
- data/lib/ext/string.rb +5 -0
- data/spec/crags/category_spec.rb +54 -0
- data/spec/crags/country_spec.rb +57 -0
- data/spec/crags/fetcher_spec.rb +36 -0
- data/spec/crags/item_spec.rb +23 -0
- data/spec/crags/location_spec.rb +15 -0
- data/spec/crags/search/country_spec.rb +67 -0
- data/spec/crags/search/location_spec.rb +59 -0
- data/spec/crags/search/search_spec.rb +25 -0
- data/spec/ext/hpricot/elem_spec.rb +32 -0
- data/spec/ext/string_spec.rb +13 -0
- data/spec/spec_helper.rb +5 -0
- metadata +62 -20
- data/lib/crags/proxy.rb +0 -21
- data/lib/crags/runner.rb +0 -10
- data/lib/crags/searcher.rb +0 -77
- data/test/crags/fetch_test.rb +0 -33
- data/test/crags/proxy_test.rb +0 -25
- data/test/crags/runner_test.rb +0 -28
- data/test/crags/searcher_test.rb +0 -139
- data/test/test_helper.rb +0 -5
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Item do
|
4
|
+
before do
|
5
|
+
elem = stub
|
6
|
+
elem.stub!(:title).and_return("title!")
|
7
|
+
elem.stub!(:url).and_return("url!")
|
8
|
+
elem.stub!(:date).and_return("date!")
|
9
|
+
@item = Item.new(elem)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "has a title reader" do
|
13
|
+
@item.title.should == "title!"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "has a url reader" do
|
17
|
+
@item.url.should == "url!"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "has a date reader" do
|
21
|
+
@item.date.should == "date!"
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Location do
|
4
|
+
before do
|
5
|
+
@loc = Location.new("domain.com")
|
6
|
+
end
|
7
|
+
|
8
|
+
it "has a domain reader" do
|
9
|
+
@loc.domain.should == "domain.com"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "has a url generated form the domain" do
|
13
|
+
@loc.url.should == "http://domain.com"
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Search::Country do
|
4
|
+
before do
|
5
|
+
Crags::Config.stub!(:defaults).and_return({:country => 'heya', :interval => 200})
|
6
|
+
@default = Search::Country.new
|
7
|
+
@custom = Search::Country.new({:country => 'gabba', :interval => 10})
|
8
|
+
end
|
9
|
+
|
10
|
+
it "has config default country" do
|
11
|
+
@default.country.should == "heya"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has config default interval" do
|
15
|
+
@default.interval.should == 200
|
16
|
+
end
|
17
|
+
|
18
|
+
it "has custom country" do
|
19
|
+
@custom.country.should == "gabba"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "has config default interval" do
|
23
|
+
@custom.interval.should == 10
|
24
|
+
end
|
25
|
+
|
26
|
+
it "delegates locations to country" do
|
27
|
+
@default.country.should_receive(:locations).and_return("locations")
|
28
|
+
@default.locations.should == "locations"
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "with location searches" do
|
32
|
+
before do
|
33
|
+
@search = stub
|
34
|
+
@search.stub!(:items)
|
35
|
+
Search::Location.stub!(:new).and_return(@search)
|
36
|
+
@locations = ["loc1", "loc2"]
|
37
|
+
@custom.stub!(:sleep)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "calls sleep with interval for each location" do
|
41
|
+
@custom.stub!(:locations).and_return(@locations)
|
42
|
+
@custom.should_receive(:sleep).with(10).twice
|
43
|
+
@custom.items
|
44
|
+
end
|
45
|
+
|
46
|
+
it "creates a new search for each location" do
|
47
|
+
Search::Location.should_receive(:new).twice.and_return(@search)
|
48
|
+
@custom.stub!(:locations).and_return(@locations)
|
49
|
+
@custom.items
|
50
|
+
end
|
51
|
+
|
52
|
+
it "performs the search for each location" do
|
53
|
+
@search.should_receive(:items).twice
|
54
|
+
@custom.stub!(:locations).and_return(@locations)
|
55
|
+
@custom.items
|
56
|
+
end
|
57
|
+
|
58
|
+
it "flattens the search results" do
|
59
|
+
collect = mock
|
60
|
+
collect.should_receive(:flatten).and_return("flat!")
|
61
|
+
locations = stub
|
62
|
+
locations.stub!(:collect).and_return(collect)
|
63
|
+
@custom.stub!(:locations).and_return(locations)
|
64
|
+
@custom.items.should == "flat!"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Search::Location do
|
4
|
+
before do
|
5
|
+
@default_loc = Crags::Location.new("default.domain.com")
|
6
|
+
@default_cat = Crags::Category.new('for sale', 'sss/')
|
7
|
+
@custom_loc = Crags::Location.new("custom.domain.com")
|
8
|
+
Crags::Config.stub!(:defaults).and_return({
|
9
|
+
:keyword => 'bicycle',
|
10
|
+
:location => @default_loc,
|
11
|
+
:category => @default_cat
|
12
|
+
})
|
13
|
+
@default = Search::Location.new
|
14
|
+
@custom = Search::Location.new({:location => @custom_loc})
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has config default location" do
|
18
|
+
@default.location.should == @default_loc
|
19
|
+
end
|
20
|
+
|
21
|
+
it "has custom country" do
|
22
|
+
@custom.location.should == @custom_loc
|
23
|
+
end
|
24
|
+
|
25
|
+
it "generate a url based on location, category and keyword" do
|
26
|
+
@default.stub!(:url_encode).with('bicycle').and_return('bicycle')
|
27
|
+
@default.url.should == "#{@default_loc.url}/search#{@default_cat.url}?query=bicycle"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "fetch the doc at the url with an rss format" do
|
31
|
+
@default.stub!(:url).and_return("url")
|
32
|
+
@default.should_receive(:fetch_doc).with("url&format=rss").and_return('doc')
|
33
|
+
@default.doc.should == 'doc'
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "with a doc" do
|
37
|
+
before do
|
38
|
+
@doc = mock
|
39
|
+
@items = ["item"]
|
40
|
+
@doc.stub!(:search).and_return(@items)
|
41
|
+
@default.stub!(:doc).and_return(@doc)
|
42
|
+
Item.stub!(:new).and_return("crags_item")
|
43
|
+
end
|
44
|
+
|
45
|
+
it "gets all items from the doc" do
|
46
|
+
@doc.should_receive(:search).with("item").and_return(@items)
|
47
|
+
@default.items
|
48
|
+
end
|
49
|
+
|
50
|
+
it "creates a new crags item for each doc item" do
|
51
|
+
Item.should_receive(:new).with("item").and_return("crags_item")
|
52
|
+
@default.items
|
53
|
+
end
|
54
|
+
|
55
|
+
it "collects all created items" do
|
56
|
+
@default.items.should == ["crags_item"]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Search::Search do
|
4
|
+
before do
|
5
|
+
Crags::Config.stub!(:defaults).and_return({:keyword => 'cribz', :category => 'cribcat'})
|
6
|
+
@default_obj = Search::Search.new
|
7
|
+
@custom_obj = Search::Search.new(:keyword => 'zaks', :category => 'catz')
|
8
|
+
end
|
9
|
+
|
10
|
+
it "has a custom keyword" do
|
11
|
+
@custom_obj.keyword.should == "zaks"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has a custom category" do
|
15
|
+
@custom_obj.category.should == "catz"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "has a custom keyword" do
|
19
|
+
@default_obj.keyword.should == "cribz"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "has a custom category" do
|
23
|
+
@default_obj.category.should == "cribcat"
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hpricot::Elem do
|
4
|
+
before do
|
5
|
+
@elem = Hpricot::Elem.new("<omg></omg>")
|
6
|
+
end
|
7
|
+
|
8
|
+
it "uses the inner_text of title element for title" do
|
9
|
+
title = stub
|
10
|
+
title.stub!(:inner_text).and_return("title!")
|
11
|
+
@elem.stub!(:at).with("title").and_return(title)
|
12
|
+
@elem.title.should == "title!"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "rdf:about attribute for the url" do
|
16
|
+
@elem.stub!(:[]).with("rdf:about").and_return("url!")
|
17
|
+
@elem.url.should == "url!"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "uses the inner_text of the dc:date element for date_str" do
|
21
|
+
dc_date = stub
|
22
|
+
dc_date.stub!(:inner_text).and_return("date_str!")
|
23
|
+
@elem.stub!(:at).with("dc:date").and_return(dc_date)
|
24
|
+
@elem.date_str.should == "date_str!"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "parses date_str to create a real date" do
|
28
|
+
DateTime.should_receive(:parse).with("date_str!").and_return("date!")
|
29
|
+
@elem.stub!(:date_str).and_return("date_str!")
|
30
|
+
@elem.date.should == "date!"
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe String do
|
4
|
+
it "removes http:// and trailing /" do
|
5
|
+
url = "http://omg/"
|
6
|
+
url.strip_http.should == "omg"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "removes http:// when there is no trailing slash" do
|
10
|
+
url = "http://omg"
|
11
|
+
url.strip_http.should == "omg"
|
12
|
+
end
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -3,10 +3,10 @@ name: crags
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
-
-
|
7
|
-
- 6
|
6
|
+
- 2
|
8
7
|
- 0
|
9
|
-
|
8
|
+
- 0
|
9
|
+
version: 2.0.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Justin Marney
|
@@ -14,10 +14,33 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-07-26 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: curb
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: hpricot
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
21
44
|
description: A library to help search across multiple craigslist locations.
|
22
45
|
email: gotascii@gmail.com
|
23
46
|
executables: []
|
@@ -29,21 +52,34 @@ extra_rdoc_files:
|
|
29
52
|
- README.rdoc
|
30
53
|
files:
|
31
54
|
- .gitignore
|
55
|
+
- Gemfile
|
32
56
|
- LICENSE
|
33
57
|
- README.rdoc
|
34
58
|
- Rakefile
|
35
59
|
- VERSION
|
36
60
|
- crags.gemspec
|
37
61
|
- lib/crags.rb
|
38
|
-
- lib/crags/
|
39
|
-
- lib/crags/
|
40
|
-
- lib/crags/
|
41
|
-
- lib/crags/
|
42
|
-
-
|
43
|
-
-
|
44
|
-
-
|
45
|
-
-
|
46
|
-
-
|
62
|
+
- lib/crags/category.rb
|
63
|
+
- lib/crags/country.rb
|
64
|
+
- lib/crags/fetcher.rb
|
65
|
+
- lib/crags/item.rb
|
66
|
+
- lib/crags/location.rb
|
67
|
+
- lib/crags/search/country.rb
|
68
|
+
- lib/crags/search/location.rb
|
69
|
+
- lib/crags/search/search.rb
|
70
|
+
- lib/ext/hpricot/elem.rb
|
71
|
+
- lib/ext/string.rb
|
72
|
+
- spec/crags/category_spec.rb
|
73
|
+
- spec/crags/country_spec.rb
|
74
|
+
- spec/crags/fetcher_spec.rb
|
75
|
+
- spec/crags/item_spec.rb
|
76
|
+
- spec/crags/location_spec.rb
|
77
|
+
- spec/crags/search/country_spec.rb
|
78
|
+
- spec/crags/search/location_spec.rb
|
79
|
+
- spec/crags/search/search_spec.rb
|
80
|
+
- spec/ext/hpricot/elem_spec.rb
|
81
|
+
- spec/ext/string_spec.rb
|
82
|
+
- spec/spec_helper.rb
|
47
83
|
has_rdoc: true
|
48
84
|
homepage: http://github.com/gotascii/crags
|
49
85
|
licenses: []
|
@@ -75,8 +111,14 @@ signing_key:
|
|
75
111
|
specification_version: 3
|
76
112
|
summary: A library to help search across multiple craigslist locations.
|
77
113
|
test_files:
|
78
|
-
-
|
79
|
-
-
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
114
|
+
- spec/crags/category_spec.rb
|
115
|
+
- spec/crags/country_spec.rb
|
116
|
+
- spec/crags/fetcher_spec.rb
|
117
|
+
- spec/crags/item_spec.rb
|
118
|
+
- spec/crags/location_spec.rb
|
119
|
+
- spec/crags/search/country_spec.rb
|
120
|
+
- spec/crags/search/location_spec.rb
|
121
|
+
- spec/crags/search/search_spec.rb
|
122
|
+
- spec/ext/hpricot/elem_spec.rb
|
123
|
+
- spec/ext/string_spec.rb
|
124
|
+
- spec/spec_helper.rb
|
data/lib/crags/proxy.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Crags
|
2
|
-
module Proxy
|
3
|
-
include Fetch
|
4
|
-
|
5
|
-
def lists
|
6
|
-
["http://www.proxy4free.com/page1.html","http://www.proxy4free.com/page3.html"]
|
7
|
-
end
|
8
|
-
|
9
|
-
def fetch_lists
|
10
|
-
lists.collect {|url| fetch_html(url)}
|
11
|
-
end
|
12
|
-
|
13
|
-
def scan(text)
|
14
|
-
text.scan(/\d+\.\d+\.\d+\.\d+/)
|
15
|
-
end
|
16
|
-
|
17
|
-
def proxies
|
18
|
-
fetch_lists.collect{|html|scan(html)}.flatten.uniq
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/crags/runner.rb
DELETED
data/lib/crags/searcher.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
module Crags
|
2
|
-
module Searcher
|
3
|
-
include Fetch
|
4
|
-
include ERB::Util
|
5
|
-
|
6
|
-
def strip_http(url)
|
7
|
-
url.gsub(/^http\:\/\//,'').gsub(/\/$/,'')
|
8
|
-
end
|
9
|
-
|
10
|
-
def location_link(country)
|
11
|
-
"http://geo.craigslist.org/iso/#{country}"
|
12
|
-
end
|
13
|
-
|
14
|
-
def location_doc(country)
|
15
|
-
fetch_doc(location_link(country))
|
16
|
-
end
|
17
|
-
|
18
|
-
def location_request(country)
|
19
|
-
fetch_request(location_link(country))
|
20
|
-
end
|
21
|
-
|
22
|
-
def location_links(country)
|
23
|
-
location_doc(country).search("#list a")
|
24
|
-
end
|
25
|
-
|
26
|
-
def locations(country)
|
27
|
-
linkz = location_links(country)
|
28
|
-
if linkz.empty?
|
29
|
-
[strip_http(location_request(country).last_effective_url)]
|
30
|
-
else
|
31
|
-
linkz.collect{|link| strip_http(link["href"]) }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def categories
|
36
|
-
doc = fetch_doc("http://sfbay.craigslist.org/")
|
37
|
-
links = doc.search("table[@summary=\"for sale\"] a")
|
38
|
-
categories = {}
|
39
|
-
links.each do |link|
|
40
|
-
categories[link.inner_html] = link["href"]
|
41
|
-
end
|
42
|
-
categories
|
43
|
-
end
|
44
|
-
|
45
|
-
def search(keyword, country = 'us', category = 'sss', &block)
|
46
|
-
locations(country).collect do |loc|
|
47
|
-
sleep(1 + rand(3))
|
48
|
-
search_location(keyword, loc, category, &block)
|
49
|
-
end.flatten
|
50
|
-
end
|
51
|
-
|
52
|
-
def items(doc)
|
53
|
-
doc.search("item").collect do |item|
|
54
|
-
hashify(item)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def hashify(item)
|
59
|
-
title = item.at("title").inner_text
|
60
|
-
url = strip_http(item["rdf:about"])
|
61
|
-
date = DateTime.parse(item.at("dc:date").inner_text)
|
62
|
-
{:title => title, :url => url, :date => date}
|
63
|
-
end
|
64
|
-
|
65
|
-
def search_location_link(keyword, loc, category = 'sss')
|
66
|
-
"http://#{loc}/search/#{category}?query=#{url_encode(keyword)}"
|
67
|
-
end
|
68
|
-
|
69
|
-
def search_location(keyword, loc, category = 'sss', &block)
|
70
|
-
doc = fetch_doc("#{search_location_link(keyword, loc, category)}&format=rss")
|
71
|
-
items(doc).collect do |item|
|
72
|
-
yield item if block_given?
|
73
|
-
item
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
data/test/crags/fetch_test.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
|
3
|
-
class Crags::FetchTest < Test::Unit::TestCase
|
4
|
-
context "Fetch" do
|
5
|
-
setup do
|
6
|
-
extend Crags::Fetch
|
7
|
-
end
|
8
|
-
|
9
|
-
should "fetch doc should hpricot fetched html" do
|
10
|
-
stubs(:fetch_html).with("url").returns("html")
|
11
|
-
Hpricot.expects(:parse).with("html").returns("doc")
|
12
|
-
fetch_doc("url").should == "doc"
|
13
|
-
end
|
14
|
-
|
15
|
-
should "fetch html should fetch_request a url" do
|
16
|
-
curb = stub(:body_str => "uhh")
|
17
|
-
expects(:fetch_request).with("url").returns(curb)
|
18
|
-
fetch_html("url").should == "uhh"
|
19
|
-
end
|
20
|
-
|
21
|
-
should "create a new request" do
|
22
|
-
req = stub(:follow_location= => nil, :perform => nil)
|
23
|
-
Curl::Easy.expects(:new).with("url").returns(req)
|
24
|
-
fetch_request("url").should == req
|
25
|
-
end
|
26
|
-
|
27
|
-
should "follow redirects for fetched requests" do
|
28
|
-
req = mock(:follow_location= => nil, :perform => nil)
|
29
|
-
Curl::Easy.stubs(:new).returns(req)
|
30
|
-
fetch_request("url")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/test/crags/proxy_test.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
|
3
|
-
class Crags::ProxyTest < Test::Unit::TestCase
|
4
|
-
context "Proxy" do
|
5
|
-
setup do
|
6
|
-
extend Crags::Proxy
|
7
|
-
end
|
8
|
-
|
9
|
-
should "lists should return a list of proxy list websites" do
|
10
|
-
lists.should == ["http://www.proxy4free.com/page1.html", "http://www.proxy4free.com/page3.html"]
|
11
|
-
end
|
12
|
-
|
13
|
-
should "fetch lists should fetch html for each site in lists" do
|
14
|
-
stubs(:lists).returns(["1", "2"])
|
15
|
-
expects(:fetch_html).with("1").returns("html_1")
|
16
|
-
expects(:fetch_html).with("2").returns("html_2")
|
17
|
-
fetch_lists.should == ["html_1", "html_2"]
|
18
|
-
end
|
19
|
-
|
20
|
-
should "scan should return all ips in a text blizoc" do
|
21
|
-
text = "192.168.1.2 omg dude!! wtf.f.f.asdasd9.8.9 78.900.42.32"
|
22
|
-
scan(text).should == ["192.168.1.2", "78.900.42.32"]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/test/crags/runner_test.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
|
3
|
-
class Crags::RunnerTest < Test::Unit::TestCase
|
4
|
-
context "instance of Runner" do
|
5
|
-
setup do
|
6
|
-
@runner = Crags::Runner.new
|
7
|
-
@runner.stubs(:fetch_doc)
|
8
|
-
@runner.stubs(:items).returns([])
|
9
|
-
end
|
10
|
-
|
11
|
-
should "runner should include searcher" do
|
12
|
-
Crags::Runner.ancestors.include?(Crags::Searcher).should == true
|
13
|
-
end
|
14
|
-
|
15
|
-
should "search location should puts message with loc" do
|
16
|
-
@runner.expects(:puts).with { |val| val =~ /location/ }
|
17
|
-
@runner.search_location("", "location", "category")
|
18
|
-
end
|
19
|
-
|
20
|
-
should "search location should take a category" do
|
21
|
-
@runner.search_location("", "location", "category")
|
22
|
-
end
|
23
|
-
|
24
|
-
should "search location should have default category sss" do
|
25
|
-
@runner.search_location("", "location")
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|