craigslist_scraper 0.0.1.alpha → 0.0.2.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3666542934dc2d61a7387c62595f8faf281833e6
4
- data.tar.gz: 532e27c818c8a5a549bf220b5eebd907c904187d
3
+ metadata.gz: fad02f3cde182850b02e1fe252afdf5472af8074
4
+ data.tar.gz: 0364b9d6d2f1d1474188b2419b2869edecab4988
5
5
  SHA512:
6
- metadata.gz: 79eb6ca55698a33a5f61c222decc0b7d0691e02eb936ea202937ebed6488866a3ba8c77b0d23d0b3bf67ae230838f25d58680e706d35e07630b7a024b1084853
7
- data.tar.gz: ea7d4d37bef349c99e1b513c3e1fcb07780a003d9164fdc7e8a81d3f49107c42bf3c7d3d24b37975e3ab2ec86f78b2a5dcba16db4da20cbfa8433cf6140aed10
6
+ metadata.gz: fe736b2bc66bc759cf7b9c2d5fa37eb2ab9cb113db2db9ed9a43ca2a715b06469b631947cb70c2849674f57108b07df5caca6af3e233ced77384c614cb8a4599
7
+ data.tar.gz: 02e2f0eb9bc325cb04f9744d8831e3b826aa713ff6f2090596dd1b3a42a31e9bb9b1325ea3514e13b69be286ce551cea6393e280a1c7867c61550f9dbb1bd66d
data/README.md CHANGED
@@ -41,12 +41,17 @@ Or install it yourself as:
41
41
  price: 5
42
42
  }]
43
43
 
44
- ### calculate average prices on postings
45
- #### example
44
+ ### Data calculations
45
+ #### average price
46
46
 
47
47
  craigslist = CraigsList.new
48
48
  craigslist.search_miami_for "white aligator shoes".average_price #=> 200
49
49
 
50
+ #### median price
51
+
52
+ craigslist = CraigsList.new
53
+ craigslist.search_losangeles_for "pretentious handbag".median_price #=> 700
54
+
50
55
  ### You can search most valid craigslist cities
51
56
  #### example
52
57
  craigslist.search_dallas_for "a NoBama bumper sticker"
@@ -38,11 +38,33 @@ class CraigsList
38
38
 
39
39
  Array.class_eval do
40
40
  def average_price
41
+ reject! { |item| item[:price] == nil }
41
42
  return 0 if empty?
42
-
43
- self.reject! { |item| item[:price] == nil }
44
43
 
45
- flat_map { |item| [item[:price]] }.map { |price| price.to_i }.reduce(:+) / self.size
44
+ price_array.reduce(:+) / size
45
+ end
46
+
47
+ def median_price
48
+ reject! { |item| item[:price] == nil }
49
+
50
+ return 0 if empty?
51
+ return first[:price].to_i if size == 1
52
+
53
+ if size.odd?
54
+ price_array.sort[middle]
55
+ else
56
+ price_array.sort[middle - 1.. middle].reduce(:+) / 2
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ def middle
63
+ size / 2
64
+ end
65
+
66
+ def price_array
67
+ flat_map { |item| [item[:price]] }.map { |price| price.to_i }
46
68
  end
47
69
  end
48
70
 
@@ -1,3 +1,3 @@
1
1
  module CraigslistScraper
2
- VERSION = "0.0.1.alpha"
2
+ VERSION = "0.0.2.alpha"
3
3
  end
@@ -133,6 +133,42 @@ describe CraigsList do
133
133
  craigslist.search_denver_for("uranium").average_price.should == 1
134
134
  end
135
135
 
136
+ end
137
+ describe "Array#median_price" do
138
+ let(:craigslist) { CraigsList.new }
139
+
140
+ it "returns the median price for a search with multiple items" do
141
+ craigslist.stub(:search_denver_for).and_return([{price: "1"} , {price: "1000"} , {price: "5"}])
142
+ craigslist.search_denver_for("uranium").median_price.should == 5
143
+ end
144
+
145
+ it "returns 0 for search with no results" do
146
+ craigslist.stub(:search_denver_for).and_return([])
147
+ craigslist.search_denver_for("uranium").median_price.should == 0
148
+ end
149
+
150
+ it "returns median for a search with two items" do
151
+ craigslist.stub(:search_denver_for).and_return([{price: "8"} , {price: "12"} ])
152
+
153
+ craigslist.search_denver_for("uranium").median_price.should == 10
154
+ end
155
+
156
+ it "returns the price for a search with one item" do
157
+ craigslist.stub(:search_denver_for).and_return([{price: 1}])
158
+
159
+ craigslist.search_denver_for("uranium").median_price.should == 1
160
+ end
161
+
162
+ it "returns the average of the two middle numbers for an even array" do
163
+ craigslist.stub(:search_denver_for).and_return([{price: "1"} , {price: "5"} , {price: "15"} , {price: "10000"}])
164
+ craigslist.search_denver_for("uranium").median_price.should == 10
165
+ end
166
+
167
+ it "discards nil prices" do
168
+ craigslist.stub(:search_denver_for).and_return([{price: 1} , {price: nil}])
169
+
170
+ craigslist.search_denver_for("uranium").median_price.should == 1
171
+ end
136
172
  end
137
173
  end
138
174
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: craigslist_scraper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.alpha
4
+ version: 0.0.2.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - mark nery