quixoten-craigler 1.2.0 → 1.2.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/README.rdoc +5 -3
- data/Rakefile +2 -1
- data/VERSION.yml +1 -1
- data/craigler.gemspec +1 -1
- data/lib/craigler.rb +6 -1
- data/lib/craigler/constants.rb +7 -3
- data/lib/craigler/search.rb +5 -5
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -19,21 +19,23 @@ or
|
|
19
19
|
puts item.time
|
20
20
|
end
|
21
21
|
|
22
|
-
You can also create a search object to fetch the results later. When no location or category is given Craigler searches <tt>:all_for_sale_or_wanted</tt>
|
22
|
+
You can also create a search object to fetch the results later. When no location or category is given Craigler searches <tt>:all_for_sale_or_wanted</tt> <tt>:in => :anywhere</tt>
|
23
23
|
|
24
24
|
search = Craigler::Search.new('Yamaha')
|
25
|
-
search.results(
|
25
|
+
search.results()
|
26
26
|
|
27
27
|
Note that additional calls to <tt>search.results()</tt> will always return the same result set unless refresh is forced
|
28
28
|
search.results(:refresh => true)
|
29
29
|
|
30
|
+
See Craigler::Search for a list of all available options
|
31
|
+
|
30
32
|
=== Supported Categories
|
31
33
|
<tt>:all_for_sale_or_wanted</tt>, <tt>:art_and_crafts</tt>, <tt>:auto_parts</tt>, <tt>:baby_and_kid_stuff</tt>, <tt>:barter</tt>, <tt>:bicycles</tt>, <tt>:boats</tt>, <tt>:books</tt>, <tt>:business</tt>, <tt>:cars_and_trucks</tt>, <tt>:clothing</tt>, <tt>:collectibles</tt>, <tt>:community</tt>, <tt>:computers_and_tech</tt>, <tt>:electronics</tt>, <tt>:event</tt>, <tt>:farm_and_garden</tt>, <tt>:free_stuff</tt>, <tt>:furniture</tt>, <tt>:games_and_toys</tt>, <tt>:garage_sales</tt>, <tt>:general</tt>, <tt>:gigs</tt>, <tt>:household</tt>, <tt>:housing</tt>, <tt>:items_wanted</tt>, <tt>:jewelry</tt>, <tt>:jobs</tt>, <tt>:materials</tt>, <tt>:media</tt>, <tt>:motorcycles</tt>, <tt>:musical_instruments</tt>, <tt>:personals</tt>, <tt>:photo_and_video</tt>, <tt>:recreational_vehicles</tt>, <tt>:resume</tt>, <tt>:services_offered</tt>, <tt>:sporting_goods</tt>, <tt>:tickets</tt>, <tt>:tools</tt>
|
32
34
|
|
33
35
|
=== Supported Locations
|
34
36
|
<tt>:alaska</tt>, <tt>:arizona</tt>, <tt>:arkansas</tt>, <tt>:california</tt>, <tt>:colorado</tt>, <tt>:connecticut</tt>, <tt>:delaware</tt>, <tt>:dc</tt>, <tt>:florida</tt>, <tt>:georgia</tt>, <tt>:hawaii</tt>, <tt>:idaho</tt>, <tt>:illinois</tt>, <tt>:indiana</tt>, <tt>:iowa</tt>, <tt>:kansas</tt>, <tt>:kentucky</tt>, <tt>:louisiana</tt>, <tt>:maine</tt>, <tt>:maryland</tt>, <tt>:mass</tt>, <tt>:michigan</tt>, <tt>:minnesota</tt>, <tt>:mississippi</tt>, <tt>:missouri</tt>, <tt>:montana</tt>, <tt>:nebraska</tt>, <tt>:nevada</tt>, <tt>:n_hampshire</tt>, <tt>:new_jersey</tt>, <tt>:new_mexico</tt>, <tt>:new_york</tt>, <tt>:n_carolina</tt>, <tt>:north_dakota</tt>, <tt>:ohio</tt>, <tt>:oklahoma</tt>, <tt>:oregon</tt>, <tt>:pennsylvania</tt>, <tt>:rhode_island</tt>, <tt>:s_carolina</tt>, <tt>:south_dakota</tt>, <tt>:tennessee</tt>, <tt>:texas</tt>, <tt>:utah</tt>, <tt>:vermont</tt>, <tt>:virginia</tt>, <tt>:washington</tt>, <tt>:west_virginia</tt> <tt>:wisconsin</tt>, <tt>:wyoming</tt>
|
35
37
|
|
36
|
-
Or use <tt>:anywhere</tt> to search all supported locations.
|
38
|
+
Or use <tt>:in => :anywhere</tt> to search all supported locations.
|
37
39
|
|
38
40
|
== REQUIREMENTS:
|
39
41
|
|
data/Rakefile
CHANGED
@@ -50,7 +50,8 @@ Rake::RDocTask.new do |rdoc|
|
|
50
50
|
|
51
51
|
rdoc.rdoc_dir = 'rdoc'
|
52
52
|
rdoc.title = "Craigler #{version}"
|
53
|
-
rdoc.rdoc_files.include('README.rdoc', 'LICENSE')
|
54
53
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
54
|
+
rdoc.rdoc_files.include('README.rdoc', 'LICENSE')
|
55
|
+
rdoc.main = 'README.rdoc'
|
55
56
|
end
|
56
57
|
|
data/VERSION.yml
CHANGED
data/craigler.gemspec
CHANGED
data/lib/craigler.rb
CHANGED
@@ -5,15 +5,20 @@ require 'craigler/constants'
|
|
5
5
|
require 'craigler/search'
|
6
6
|
|
7
7
|
module Craigler
|
8
|
+
|
9
|
+
# :stopdoc:
|
8
10
|
class CraiglerError < StandardError; end
|
9
11
|
class InvalidCategory < CraiglerError; end
|
10
12
|
class InvalidSearchTerm < CraiglerError; end
|
11
13
|
class InvalidLocation < CraiglerError; end
|
14
|
+
# :startdoc:
|
12
15
|
|
13
16
|
class << self
|
14
17
|
# Interface to Search that may or may not be more readable
|
18
|
+
#
|
19
|
+
# Supports all options of Search#new except <tt>:only</tt>, as it's supplied through the <tt>category</tt> parameter
|
15
20
|
def search(category, options = {})
|
16
|
-
options = { :only => category }
|
21
|
+
options = options.merge({ :only => category })
|
17
22
|
results = Search.new(options.delete(:for), options).results()
|
18
23
|
results.each {|result| yield(result) } if block_given?
|
19
24
|
results
|
data/lib/craigler/constants.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Craigler
|
2
|
-
|
2
|
+
|
3
|
+
# :stopdoc:
|
4
|
+
RESULTS_PER_PAGE = 25
|
3
5
|
|
4
6
|
LOCATIONS = {
|
5
7
|
:alabama => ['http://auburn.craigslist.org/','http://bham.craigslist.org/','http://columbusga.craigslist.org/','http://dothan.craigslist.org/','http://shoals.craigslist.org/','http://gadsden.craigslist.org/','http://huntsville.craigslist.org/','http://mobile.craigslist.org/','http://montgomery.craigslist.org/','http://tuscaloosa.craigslist.org/'],
|
@@ -53,7 +55,7 @@ module Craigler
|
|
53
55
|
:west_virginia => ['http://charlestonwv.craigslist.org/','http://huntington.craigslist.org/','http://martinsburg.craigslist.org/','http://morgantown.craigslist.org/','http://parkersburg.craigslist.org/','http://wv.craigslist.org/','http://wheeling.craigslist.org/'],
|
54
56
|
:wisconsin => ['http://appleton.craigslist.org/','http://duluth.craigslist.org/','http://eauclaire.craigslist.org/','http://greenbay.craigslist.org/','http://janesville.craigslist.org/','http://racine.craigslist.org/','http://lacrosse.craigslist.org/','http://madison.craigslist.org/','http://milwaukee.craigslist.org/','http://sheboygan.craigslist.org/','http://wausau.craigslist.org/'],
|
55
57
|
:wyoming => ['http://wyoming.craigslist.org/']
|
56
|
-
}
|
58
|
+
}
|
57
59
|
|
58
60
|
CATEGORIES = {
|
59
61
|
:community => 'ccc',
|
@@ -96,5 +98,7 @@ module Craigler
|
|
96
98
|
:personals => 'ppp',
|
97
99
|
:resume => 'res',
|
98
100
|
:services_offered => 'bbb'
|
99
|
-
}
|
101
|
+
}
|
102
|
+
|
103
|
+
# :startdoc:
|
100
104
|
end
|
data/lib/craigler/search.rb
CHANGED
@@ -18,7 +18,7 @@ module Craigler
|
|
18
18
|
# <b>Note:</b> A location may, and often does, have more than one searchable
|
19
19
|
# url assciated with it, e.g., {California}[http://geo.craigslist.org/iso/us/ca]. Because
|
20
20
|
# <tt>:page_limit</tt> is applied seperately to each url within the location, searching <tt>:in => :california</tt>
|
21
|
-
# with a <tt>:page_limit => 4</tt> could potentially make up to 100 page requests
|
21
|
+
# with a <tt>:page_limit => 4</tt> could potentially make up to 100 page requests.
|
22
22
|
def initialize(search_term, options = {})
|
23
23
|
raise InvalidSearchTerm if search_term.nil? || search_term == ''
|
24
24
|
|
@@ -59,20 +59,20 @@ module Craigler
|
|
59
59
|
end
|
60
60
|
|
61
61
|
protected
|
62
|
-
def _validate_locations
|
62
|
+
def _validate_locations # :nodoc:
|
63
63
|
@locations.each() do |location|
|
64
64
|
raise InvalidLocation.new(":anywhere not expected as part of an array") if location == :anywhere
|
65
65
|
raise InvalidLocation.new(":#{location} is not a valid location") unless LOCATIONS.key?(location)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
def _validate_categories
|
69
|
+
def _validate_categories # :nodoc:
|
70
70
|
@categories.each() do |category|
|
71
71
|
raise InvalidCategory unless CATEGORIES.key?(category)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
def _for_each_locations_search_url
|
75
|
+
def _for_each_locations_search_url # :nodoc:
|
76
76
|
@locations.each do |location|
|
77
77
|
LOCATIONS[location].each do |url|
|
78
78
|
@categories.each do |category|
|
@@ -82,7 +82,7 @@ module Craigler
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
def _extract_items_from_url(location, url)
|
85
|
+
def _extract_items_from_url(location, url) # :nodoc:
|
86
86
|
(Hpricot(open(url))/'item').collect { |item| {
|
87
87
|
:url => item['rdf:about'],
|
88
88
|
:title => (item%'title').inner_text,
|