eaternet 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -0
- data/lib/eaternet/agencies/austin.rb +8 -1
- data/lib/eaternet/agencies/nyc.rb +2 -2
- data/lib/eaternet/agencies/snhd_prototype.rb +1 -1
- data/lib/eaternet/lives_1_0/csv_parser.rb +1 -1
- data/lib/eaternet/loggable.rb +3 -2
- data/lib/eaternet/util.rb +1 -1
- data/lib/eaternet/version.rb +1 -1
- data/test/eaternet/agencies/austin_test.rb +42 -35
- data/test/eaternet/agencies/lives2_test.rb +1 -2
- data/test/eaternet/agencies/nyc_test.rb +3 -1
- data/test/eaternet/agencies/sf_test.rb +1 -2
- data/test/test_helper.rb +6 -3
- metadata +2 -4
- data/test/fixtures/austin.csv +0 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 933e9e7767be38a5187f7fe75da2bb413c32c5eb
|
4
|
+
data.tar.gz: a8c297bab85882be74676fce1a91d5c57a0fcf65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbc30f5f4f5628ba6ae4004788990d2c9bb0f5244a36b1c3c1832193f76f28ced9771fbd03f3ce7f12b08392852758012b2452cc3d4daa7cb8389ecb561f2bc0
|
7
|
+
data.tar.gz: 628541d013b36ae249e6f2b5e98e2eb126d0ee4b1e16a764bc12ba6ef8d4764a4532ffa73916a9e14783a902178d0d9eeb90f95566a666ba53bcf2c9043aa80b
|
data/README.md
CHANGED
@@ -40,6 +40,13 @@ nyc.businesses.each { |biz| puts biz.name }
|
|
40
40
|
Each adapter provides [a small set of enumerators](https://github.com/eaternet/adapters-ruby/blob/master/lib/eaternet/adapters/framework.rb#L27-L39) such as `businesses` and `inspections`. See the [Las Vegas tests](https://github.com/eaternet/adapters-ruby/blob/master/test/snhd_adapter_test.rb) to learn how an application would use this gem. The framework also includes [standardized data transfer objects](https://github.com/eaternet/adapters-ruby/blob/master/lib/eaternet/adapters/framework.rb#L42-L103) which these enumerators return.
|
41
41
|
|
42
42
|
|
43
|
+
## Logging
|
44
|
+
|
45
|
+
* Optionally set `EATERNET_LOG_FILE` to send to a file instead of `STDOUT`.
|
46
|
+
* Optionally set `EATERNET_LOG_SEVERITY` to an **integer** to control which
|
47
|
+
messages are reported. Through experimenting with `Logger::`, I've found that
|
48
|
+
`DEBUG` is `0`, `INFO` is `1`, `WARN` is 2, `ERROR` is 3, and `FATAL` is `4`.
|
49
|
+
|
43
50
|
## Installation
|
44
51
|
|
45
52
|
Add this line to your application's Gemfile:
|
@@ -9,6 +9,7 @@ module Eaternet
|
|
9
9
|
include Eaternet::Loggable
|
10
10
|
include Eaternet::Lives_1_0::CsvParser
|
11
11
|
|
12
|
+
|
12
13
|
# Create an Austin data-source, ready for querying.
|
13
14
|
#
|
14
15
|
# @example
|
@@ -19,6 +20,7 @@ module Eaternet
|
|
19
20
|
@table_file = csv_path
|
20
21
|
end
|
21
22
|
|
23
|
+
|
22
24
|
# @example Print the number of restaurants in the city.
|
23
25
|
# puts austin.businesses.count
|
24
26
|
#
|
@@ -29,19 +31,23 @@ module Eaternet
|
|
29
31
|
.compact
|
30
32
|
end
|
31
33
|
|
34
|
+
|
32
35
|
def inspections
|
33
36
|
map_csv { |row| try_to_create(:inspection, from_csv_row: row) }
|
34
37
|
.compact
|
35
38
|
end
|
36
39
|
|
40
|
+
|
37
41
|
def violations
|
38
42
|
fail Eaternet::UnsupportedError, "Austin doesn't publish violation data"
|
39
43
|
end
|
40
44
|
|
45
|
+
|
41
46
|
def legends
|
42
47
|
fail Eaternet::UnsupportedError, 'Austin does not assign letter grades'
|
43
48
|
end
|
44
49
|
|
50
|
+
|
45
51
|
def feed_info
|
46
52
|
Eaternet::Lives_1_0::FeedInfo.new do |fi|
|
47
53
|
fi.feed_date = Date.today
|
@@ -61,6 +67,7 @@ module Eaternet
|
|
61
67
|
end
|
62
68
|
end
|
63
69
|
|
70
|
+
|
64
71
|
def business(row)
|
65
72
|
Eaternet::Lives_1_0::Business.new do |b|
|
66
73
|
fail ArgumentError, 'No address found' if row['Address'].nil?
|
@@ -92,7 +99,7 @@ module Eaternet
|
|
92
99
|
|
93
100
|
|
94
101
|
def table_file
|
95
|
-
|
102
|
+
Austin.download_via_url
|
96
103
|
end
|
97
104
|
|
98
105
|
def self.download_via_url
|
@@ -57,7 +57,7 @@ module Eaternet
|
|
57
57
|
#
|
58
58
|
# @param [String] csv_path for unit testing
|
59
59
|
def initialize(csv_path: nil)
|
60
|
-
@
|
60
|
+
@fixture_table_file = csv_path
|
61
61
|
end
|
62
62
|
|
63
63
|
# @example Print the number of restaurants in New York.
|
@@ -194,7 +194,7 @@ module Eaternet
|
|
194
194
|
end
|
195
195
|
|
196
196
|
def table_file
|
197
|
-
Nyc.download_via_url
|
197
|
+
@fixture_table_file || Nyc.download_via_url
|
198
198
|
end
|
199
199
|
|
200
200
|
# Fastest method for downloading all data but may be non-standard
|
data/lib/eaternet/loggable.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Eaternet
|
2
3
|
# A mixin to add logging functionality to a class.
|
3
4
|
module Loggable
|
@@ -11,8 +12,8 @@ module Eaternet
|
|
11
12
|
def create_logger
|
12
13
|
logger = Logger.new(ENV['EATERNET_LOG_FILE'] || $stderr)
|
13
14
|
logger.datetime_format = '%Y-%m-%d %H:%M:%S'
|
14
|
-
logger.progname
|
15
|
-
logger.level
|
15
|
+
logger.progname = 'Eaternet Adapter (Ruby)'
|
16
|
+
logger.level = ENV['EATERNET_LOG_SEVERITY'] || Logger::ERROR
|
16
17
|
logger
|
17
18
|
end
|
18
19
|
end
|
data/lib/eaternet/util.rb
CHANGED
data/lib/eaternet/version.rb
CHANGED
@@ -1,55 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
require 'eaternet'
|
4
5
|
require 'eaternet/lives_1_0'
|
5
6
|
|
6
|
-
AUSTIN_CSV = 'test/fixtures/austin.csv'
|
7
|
-
|
8
7
|
class AustinAdapterTest < Minitest::Test
|
9
|
-
|
8
|
+
def austin_agency
|
9
|
+
Eaternet::Austin.new
|
10
|
+
end
|
10
11
|
|
11
12
|
#
|
12
13
|
# Businesses
|
13
14
|
#
|
14
15
|
|
15
16
|
def test_businesses_returns_an_enumerator_of_business
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
def test_businesses_returns_lives_attributes
|
20
|
-
b = @@agency.businesses.first
|
21
|
-
assert_equal '2801033', b.business_id
|
22
|
-
assert_equal '15th Street Cafe', b.name
|
23
|
-
assert_equal '303 W 15TH ST', b.address
|
24
|
-
assert_equal 'AUSTIN', b.city
|
25
|
-
assert_equal '78701', b.postal_code
|
26
|
-
assert_equal 'TX', b.state
|
27
|
-
assert_equal 30.277553492000038, b.latitude
|
28
|
-
assert_equal -97.74209889799994, b.longitude
|
17
|
+
VCR.use_cassette(AUSTIN_CASSETTE) do
|
18
|
+
assert enumerable_of? Eaternet::Lives_1_0::Business, austin_agency.businesses
|
19
|
+
end
|
29
20
|
end
|
30
21
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
22
|
+
def test_businesses_returns_correct_attributes
|
23
|
+
VCR.use_cassette(AUSTIN_CASSETTE) do
|
24
|
+
b = austin_agency.businesses.find { |biz| biz.business_id == '2801033' }
|
25
|
+
assert_equal '15th Street Cafe', b.name
|
26
|
+
assert_equal '303 W 15TH ST', b.address
|
27
|
+
assert_equal 'AUSTIN', b.city
|
28
|
+
assert_equal '78701', b.postal_code
|
29
|
+
assert_equal 'TX', b.state
|
30
|
+
assert_in_delta 30.277553492000038, b.latitude
|
31
|
+
assert_in_delta(-97.74209889799994, b.longitude)
|
32
|
+
end
|
34
33
|
end
|
35
34
|
|
36
|
-
def test_businesses_returns_unique_rows
|
37
|
-
assert_equal 3, @@agency.businesses.to_a.size
|
38
|
-
end
|
39
35
|
|
40
36
|
#
|
41
37
|
# Inspections
|
42
38
|
#
|
43
39
|
|
44
40
|
def test_inspections_returns_an_enumerable_of_inspection
|
45
|
-
|
41
|
+
VCR.use_cassette(AUSTIN_CASSETTE) do
|
42
|
+
assert enumerable_of? Eaternet::Lives_1_0::Inspection, austin_agency.inspections
|
43
|
+
end
|
46
44
|
end
|
47
45
|
|
48
46
|
def test_inspections_returns_correct_attributes
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
47
|
+
VCR.use_cassette(AUSTIN_CASSETTE) do
|
48
|
+
i = austin_agency.inspections.find { |x|
|
49
|
+
x.business_id == '10811324' && x.date.iso8601 == '2014-06-03'
|
50
|
+
}
|
51
|
+
assert_equal 100, i.score
|
52
|
+
end
|
53
53
|
end
|
54
54
|
|
55
55
|
#
|
@@ -57,14 +57,18 @@ class AustinAdapterTest < Minitest::Test
|
|
57
57
|
#
|
58
58
|
|
59
59
|
def test_violations_raises_an_unsupported_error
|
60
|
-
|
60
|
+
VCR.use_cassette(AUSTIN_CASSETTE) do
|
61
|
+
assert_raises(Eaternet::UnsupportedError) { austin_agency.violations }
|
62
|
+
end
|
61
63
|
end
|
62
64
|
|
63
65
|
def test_violations_raises_an_error_with_a_message
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
VCR.use_cassette(AUSTIN_CASSETTE) do
|
67
|
+
begin
|
68
|
+
austin_agency.violations
|
69
|
+
rescue => e
|
70
|
+
assert_match(/doesn't/, e.to_s)
|
71
|
+
end
|
68
72
|
end
|
69
73
|
end
|
70
74
|
|
@@ -74,11 +78,14 @@ class AustinAdapterTest < Minitest::Test
|
|
74
78
|
# #
|
75
79
|
#
|
76
80
|
def test_implements_feed_info
|
77
|
-
|
81
|
+
VCR.use_cassette(AUSTIN_CASSETTE) do
|
82
|
+
assert_instance_of Eaternet::Lives_1_0::FeedInfo, austin_agency.feed_info
|
83
|
+
end
|
78
84
|
end
|
79
85
|
|
80
86
|
def test_legends_raises_an_unsupported_error
|
81
|
-
|
87
|
+
VCR.use_cassette(AUSTIN_CASSETTE) do
|
88
|
+
assert_raises(Eaternet::UnsupportedError) { austin_agency.legends }
|
89
|
+
end
|
82
90
|
end
|
83
|
-
|
84
91
|
end
|
@@ -49,8 +49,7 @@ class Lives2Test < Minitest::Test
|
|
49
49
|
def test_inspections_returns_lives_attributes
|
50
50
|
VCR.use_cassette(L2_CASSETTE) do
|
51
51
|
chosen_inspection = @@l2.inspections
|
52
|
-
.
|
53
|
-
.first
|
52
|
+
.find { |i| i.business_id == '19' && i.date == Date.new(2016, 5, 13) }
|
54
53
|
raise "Couldn't find the chosen inspection" if chosen_inspection.nil?
|
55
54
|
assert_equal 94, chosen_inspection.score
|
56
55
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
require 'eaternet'
|
@@ -65,7 +66,8 @@ class NycAdapterTest < Minitest::Test
|
|
65
66
|
09/11/2013
|
66
67
|
08/14/2013
|
67
68
|
01/24/2013
|
68
|
-
12/31/2012
|
69
|
+
12/31/2012
|
70
|
+
).map { |d| Date.strptime(d, '%m/%d/%Y') }
|
69
71
|
actual_dates = @@nyc.inspections.map(&:date).to_a
|
70
72
|
assert_equal expected_dates, actual_dates
|
71
73
|
end
|
@@ -43,8 +43,7 @@ class SfTest < Minitest::Test
|
|
43
43
|
def test_inspections_returns_lives_attributes
|
44
44
|
VCR.use_cassette(SF_CASSETTE) do
|
45
45
|
chosen_inspection = @@sf.inspections
|
46
|
-
.
|
47
|
-
.first
|
46
|
+
.find { |i| i.business_id == "19" && i.date == Date.new(2016, 5, 13) }
|
48
47
|
raise "Couldn't find the chosen inspection" if chosen_inspection.nil?
|
49
48
|
assert_equal 94, chosen_inspection.score
|
50
49
|
end
|
data/test/test_helper.rb
CHANGED
@@ -19,7 +19,10 @@ def enumerable_of?(a_class, obj)
|
|
19
19
|
assert_kind_of a_class, obj.first
|
20
20
|
end
|
21
21
|
|
22
|
-
SNHD_CASSETTE =
|
23
|
-
SF_CASSETTE =
|
24
|
-
L2_CASSETTE =
|
22
|
+
SNHD_CASSETTE = 'snhd'
|
23
|
+
SF_CASSETTE = 'sf'
|
24
|
+
L2_CASSETTE = 'lives2'
|
25
|
+
AUSTIN_CASSETTE = 'austin'
|
26
|
+
|
27
|
+
# Skip the annoying rubyzip warnings
|
25
28
|
ENV['RUBYZIP_NO_WARN_INVALID_DATE'] = '1'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eaternet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robb Shecter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -293,7 +293,6 @@ files:
|
|
293
293
|
- test/eaternet/loggable_test.rb
|
294
294
|
- test/eaternet/util_test.rb
|
295
295
|
- test/ext/enumerator_test.rb
|
296
|
-
- test/fixtures/austin.csv
|
297
296
|
- test/fixtures/nyc.csv
|
298
297
|
- test/script.rb
|
299
298
|
- test/test_helper.rb
|
@@ -337,7 +336,6 @@ test_files:
|
|
337
336
|
- test/eaternet/loggable_test.rb
|
338
337
|
- test/eaternet/util_test.rb
|
339
338
|
- test/ext/enumerator_test.rb
|
340
|
-
- test/fixtures/austin.csv
|
341
339
|
- test/fixtures/nyc.csv
|
342
340
|
- test/script.rb
|
343
341
|
- test/test_helper.rb
|
data/test/fixtures/austin.csv
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
Restaurant Name,Zip Code,Inspection Date,Score,Address,Facility ID,Process Description
|
2
|
-
15th Street Cafe,78701,05/13/2015,97,"303 W 15TH ST
|
3
|
-
AUSTIN, TX 78701
|
4
|
-
(30.277553492000038, -97.74209889799994)",2801033,Routine Inspection
|
5
|
-
15th Street Cafe,78701,05/22/2013,91,"303 W 15TH ST
|
6
|
-
AUSTIN, TX 78701
|
7
|
-
(30.277553492000038, -97.74209889799994)",2801033,Routine Inspection
|
8
|
-
15th Street Cafe,78701,06/18/2014,97,"303 W 15TH ST
|
9
|
-
AUSTIN, TX 78701
|
10
|
-
(30.277553492000038, -97.74209889799994)",2801033,Routine Inspection
|
11
|
-
15th Street Cafe,78701,12/02/2014,93,"303 W 15TH ST
|
12
|
-
AUSTIN, TX 78701
|
13
|
-
(30.277553492000038, -97.74209889799994)",2801033,Routine Inspection
|
14
|
-
15th Street Cafe,78701,09/13/2012,93,"303 W 15TH ST
|
15
|
-
AUSTIN, TX 78701
|
16
|
-
(30.277553492000038, -97.74209889799994)",2801033,Routine Inspection
|
17
|
-
15th Street Cafe,78701,12/05/2013,97,"303 W 15TH ST
|
18
|
-
AUSTIN, TX 78701
|
19
|
-
(30.277553492000038, -97.74209889799994)",2801033,Routine Inspection
|
20
|
-
1st Food Mart,78704,02/09/2015,94,"1410 S 1ST ST
|
21
|
-
AUSTIN, TX 78704
|
22
|
-
(30.25030317900007, -97.75485926699997)",10677646,Routine Inspection
|
23
|
-
1st Food Mart,78704,02/14/2013,97,"1410 S 1ST ST
|
24
|
-
AUSTIN, TX 78704
|
25
|
-
(30.25030317900007, -97.75485926699997)",10677646,Routine Inspection
|
26
|
-
1st Food Mart,78704,07/26/2012,97,"1410 S 1ST ST
|
27
|
-
AUSTIN, TX 78704
|
28
|
-
(30.25030317900007, -97.75485926699997)",10677646,Routine Inspection
|
29
|
-
1st Food Mart,78704,01/16/2014,90,"1410 S 1ST ST
|
30
|
-
AUSTIN, TX 78704
|
31
|
-
(30.25030317900007, -97.75485926699997)",10677646,Routine Inspection
|
32
|
-
1st Food Mart,78704,06/17/2013,100,"1410 S 1ST ST
|
33
|
-
AUSTIN, TX 78704
|
34
|
-
(30.25030317900007, -97.75485926699997)",10677646,Routine Inspection
|
35
|
-
1st Food Mart,78704,07/29/2014,90,"1410 S 1ST ST
|
36
|
-
AUSTIN, TX 78704
|
37
|
-
(30.25030317900007, -97.75485926699997)",10677646,Routine Inspection
|
38
|
-
Austin Recovery,78610,06/05/2015,100,"13207 WRIGHT ROAD
|
39
|
-
BUDA, TX 78610
|
40
|
-
(30.084734110000056, -97.75172505999996)",10774078,Routine Inspection
|
41
|
-
Austin Recovery,78610,10/09/2014,95,"13207 WRIGHT ROAD
|
42
|
-
BUDA, TX 78610
|
43
|
-
(30.084734110000056, -97.75172505999996)",10774078,Routine Inspection
|
44
|
-
Austin Recovery,78610,09/13/2013,96,"13207 WRIGHT ROAD
|
45
|
-
BUDA, TX 78610
|
46
|
-
(30.084734110000056, -97.75172505999996)",10774078,Routine Inspection
|
47
|
-
Austin Recovery,78610,05/01/2014,97,"13207 WRIGHT ROAD
|
48
|
-
BUDA, TX 78610
|
49
|
-
(30.084734110000056, -97.75172505999996)",10774078,Routine Inspection
|
50
|
-
Austin Recovery,78610,02/13/2015,100,"13207 WRIGHT ROAD
|
51
|
-
BUDA, TX 78610
|
52
|
-
(30.084734110000056, -97.75172505999996)",10774078,Routine Inspection
|
53
|
-
Austin Recovery,78610,02/27/2013,92,"13207 WRIGHT ROAD
|
54
|
-
BUDA, TX 78610
|
55
|
-
(30.084734110000056, -97.75172505999996)",10774078,Routine Inspection
|
56
|
-
|