gotascii-crags 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/crags.gemspec CHANGED
@@ -1,16 +1,16 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{crags}
3
- s.version = "1.1.1"
3
+ s.version = "1.2.0"
4
4
 
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
6
  s.authors = ["Justin Marney"]
7
7
  s.date = %q{2009-01-31}
8
8
  s.description = %q{A library to help search across multiple craigslist locations.}
9
- s.email = %q{justin.marney@viget.com}
9
+ s.email = %q{gotascii@gmail.com}
10
10
  s.extra_rdoc_files = ["History.txt", "README.txt", "lib/js/client.html"]
11
11
  s.files = [".gitignore", "History.txt", "Manifest.txt", "README.txt", "Rakefile", "crags.gemspec", "lib/crags.rb", "lib/crags/fetch.rb", "lib/crags/proxy.rb", "lib/crags/runner.rb", "lib/crags/searcher.rb", "lib/js/client.html", "tasks/ann.rake", "tasks/bones.rake", "tasks/gem.rake", "tasks/git.rake", "tasks/manifest.rake", "tasks/notes.rake", "tasks/post_load.rake", "tasks/rdoc.rake", "tasks/rubyforge.rake", "tasks/setup.rb", "tasks/spec.rake", "tasks/svn.rake", "tasks/test.rake", "test/crags/fetch_test.rb", "test/crags/proxy_test.rb", "test/crags/runner_test.rb", "test/crags/searcher_test.rb", "test/test_helper.rb"]
12
12
  s.has_rdoc = true
13
- s.homepage = %q{http://github.com/vigetlabs/crags}
13
+ s.homepage = %q{http://github.com/gotascii/crags}
14
14
  s.rdoc_options = ["--main", "README.txt"]
15
15
  s.require_paths = ["lib"]
16
16
  s.rubyforge_project = %q{crags}
data/lib/crags.rb CHANGED
@@ -3,7 +3,7 @@ require 'curb'
3
3
  require 'hpricot'
4
4
 
5
5
  module Crags
6
- VERSION = '1.1.1'
6
+ VERSION = '1.2.0'
7
7
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
8
8
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
9
9
 
@@ -2,6 +2,10 @@ module Crags
2
2
  module Searcher
3
3
  include Fetch
4
4
 
5
+ def strip_http(url)
6
+ url.gsub(/http\:\/\/(.*)\//,'\1')
7
+ end
8
+
5
9
  def location_doc
6
10
  fetch_doc("http://geo.craigslist.org/iso/us")
7
11
  end
@@ -11,7 +15,7 @@ module Crags
11
15
  end
12
16
 
13
17
  def locations
14
- location_links.collect{|link| link["href"].gsub(/http\:\/\/(.*)\//,'\1') }
18
+ location_links.collect{|link| strip_http(link["href"]) }
15
19
  end
16
20
 
17
21
  def categories
@@ -32,22 +36,23 @@ module Crags
32
36
  end
33
37
 
34
38
  def items(doc)
35
- doc.search("item")
39
+ doc.search("item").collect do |item|
40
+ hashify(item)
41
+ end
42
+ end
43
+
44
+ def hashify(item)
45
+ title = item.at("title").inner_text
46
+ url = strip_http(item["rdf:about"])
47
+ {:title => title, :url => url}
36
48
  end
37
49
 
38
50
  def search_location(keyword, loc, category = 'sss', &block)
39
51
  doc = fetch_doc("http://#{loc}/search/#{category}?query=#{keyword}&format=rss")
40
52
  items(doc).collect do |item|
41
- link = create_link(item)
42
- yield link if block_given?
43
- link
53
+ yield item if block_given?
54
+ item
44
55
  end
45
56
  end
46
-
47
- def create_link(item)
48
- link = item["rdf:about"]
49
- title = item.at("title").inner_text
50
- "<a href=\"#{link}\">#{title}</a>"
51
- end
52
57
  end
53
58
  end
@@ -7,6 +7,11 @@ context "Searcher with stubbed fetch doc" do
7
7
  stubs(:fetch_doc)
8
8
  end
9
9
 
10
+ specify "strip_http should remove http:// and trailing /" do
11
+ url = "http://omg/"
12
+ strip_http(url).should == "omg"
13
+ end
14
+
10
15
  specify "location doc should fetch doc at location url" do
11
16
  expects(:fetch_doc).with("http://geo.craigslist.org/iso/us").returns("doc")
12
17
  location_doc.should == "doc"
@@ -51,28 +56,24 @@ context "Searcher with stubbed fetch doc" do
51
56
  search_location("keyword", "url")
52
57
  end
53
58
 
54
- specify "search location should create link with each item in doc items and return list" do
59
+ specify "search location should create return items" do
55
60
  items = [1,2,3]
56
61
  expects(:items).returns(items)
57
- items.each do |i|
58
- expects(:create_link).with(i).returns("omg#{i}")
59
- end
60
- search_location("keyword", "url").should == ['omg1','omg2','omg3']
62
+ search_location("keyword", "url").should == items
61
63
  end
62
64
 
63
- specify "create link should return an a href based on item element" do
64
- inner_text = mock(:inner_text=>"text")
65
- item = mock do |l|
66
- expects(:[]).with("rdf:about").returns("link")
67
- expects(:at).with("title").returns(inner_text)
68
- end
69
-
70
- create_link(item).should == "<a href=\"link\">text</a>"
65
+ specify "items should get all item elements from doc" do
66
+ item = stub
67
+ stubs(:hashify).with(item).returns(1)
68
+ doc = mock { expects(:search).with("item").returns([item]) }
69
+ items(doc).should == [1]
71
70
  end
72
71
 
73
- specify "items should get all item elements from doc" do
74
- doc = mock { expects(:search).with("item").returns(1) }
75
- items(doc).should == 1
72
+ specify "items should hashify all item elements from doc" do
73
+ item = stub
74
+ expects(:hashify).with(item).returns(1)
75
+ doc = stub { stubs(:search).returns([item]) }
76
+ items(doc).should == [1]
76
77
  end
77
78
 
78
79
  specify "categories should fetch doc the main sfbay page" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gotascii-crags
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Marney
@@ -14,7 +14,7 @@ default_executable:
14
14
  dependencies: []
15
15
 
16
16
  description: A library to help search across multiple craigslist locations.
17
- email: justin.marney@viget.com
17
+ email: gotascii@gmail.com
18
18
  executables: []
19
19
 
20
20
  extensions: []
@@ -55,7 +55,7 @@ files:
55
55
  - test/crags/searcher_test.rb
56
56
  - test/test_helper.rb
57
57
  has_rdoc: true
58
- homepage: http://github.com/vigetlabs/crags
58
+ homepage: http://github.com/gotascii/crags
59
59
  post_install_message:
60
60
  rdoc_options:
61
61
  - --main