craigslist_scraper 0.0.1.alpha → 0.0.2.alpha

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.
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