eaternet 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -12
- data/lib/eaternet/agencies/nyc.rb +4 -24
- data/lib/eaternet/agencies/snhd.rb +5 -20
- data/lib/eaternet/version.rb +1 -1
- data/test/eaternet/agencies/multco_test.rb +80 -80
- data/test/eaternet/agencies/sf_test.rb +21 -21
- data/test/eaternet/agencies/snhd_prototype_test.rb +9 -9
- data/test/eaternet/agencies/snhd_test.rb +9 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4ecc0481436f4dd8ba8243b8f54ba7cbb756704
|
4
|
+
data.tar.gz: 6555f13e6f60e7e285a4d54a9ba84750356932c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 044843004945d79ccff9fa437f75833fa02e301a222e87e2daec99ef880acfad734e6e7f0f80436d5136c71486e2fa4a9e825d5d3446ae63f288fc3582e66e5f
|
7
|
+
data.tar.gz: ab4356f37ce6c5d8769a0fb98240b2174eb499f75159a7b60dde2248779c45d2f478423838b341eb954759fe85d76bbc704a6c25b9b405bdb487bf8464d0c6dc
|
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
[![Build Status](https://travis-ci.org/eaternet/adapters-ruby.svg?branch=master)](https://travis-ci.org/eaternet/adapters-ruby)
|
2
2
|
[![Code Climate](https://codeclimate.com/github/eaternet/adapters-ruby/badges/gpa.svg)](https://codeclimate.com/github/eaternet/adapters-ruby)
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/eaternet.svg)](http://badge.fury.io/rb/eaternet)
|
4
|
-
[![Inline docs](http://inch-ci.org/github/eaternet/adapters-ruby.svg?branch=master)](http://inch-ci.org/github/eaternet/adapters-ruby)
|
5
4
|
|
6
5
|
# Eaternet Health Score Adapters
|
7
6
|
|
@@ -11,20 +10,21 @@ many sites and apps as possible.
|
|
11
10
|
Use this repo to publish your local restaurant health scores.
|
12
11
|
|
13
12
|
**In a nutshell:** each agency which inspects restaurants can have an
|
14
|
-
"adapter" which is a Ruby class. Its adapter converts its source format into a
|
15
|
-
simple, standard one. Anybody can then use these adapters to get the data and
|
16
|
-
|
13
|
+
"adapter" which is a Ruby class. Its adapter converts its source format into [a
|
14
|
+
simple, standard one](http://www.yelp.com/healthscores). Anybody can then use these adapters to get the data and
|
15
|
+
work with it how they like. [Eaternet](http://eaternet.io/),
|
17
16
|
in particular, will use the production-ready adapters to pull and publish the
|
18
|
-
information daily on our website
|
17
|
+
information daily on our website.
|
19
18
|
|
20
19
|
|
21
20
|
## Available Adapters
|
22
21
|
|
23
|
-
| Area | Agency
|
24
|
-
|
25
|
-
| Las Vegas | Southern Nevada Health District
|
26
|
-
| New York City | City of New York Health
|
27
|
-
| Porland, OR, USA | Multnomah Couty Environmental Health | `Multco`
|
22
|
+
| Area | Agency | Ruby Class | Notes |
|
23
|
+
|-------------------|--------------------------------------|------------|-----------|
|
24
|
+
| Las Vegas | Southern Nevada Health District | [`Snhd`](https://github.com/eaternet/adapters-ruby/blob/master/lib/eaternet/agencies/snhd.rb) | Needs refactoring and docs |
|
25
|
+
| New York City | City of New York Health Deptartment | [`Nyc`](https://github.com/eaternet/adapters-ruby/blob/master/lib/eaternet/agencies/nyc.rb) | [Dataset wiki page](https://github.com/eaternet/adapters/wiki/Agency:-New-York-City) |
|
26
|
+
| Porland, OR, USA | Multnomah Couty Environmental Health | [`Multco`](https://github.com/eaternet/adapters-ruby/blob/master/lib/eaternet/agencies/multco.rb) | Needs refactoring and docs |
|
27
|
+
| San Francisco | City of San Francisco | [`Sf`](https://github.com/eaternet/adapters-ruby/blob/master/lib/eaternet/agencies/sf.rb) | Needs docs |
|
28
28
|
|
29
29
|
|
30
30
|
## Usage
|
@@ -65,8 +65,9 @@ for the project roadmap.
|
|
65
65
|
|
66
66
|
## Contributing
|
67
67
|
|
68
|
-
Write an adapter for your city's restaurant health scores
|
69
|
-
refactor or add documentation. We're happy to get the help
|
68
|
+
Write an adapter for your city's restaurant health scores! Or do a small
|
69
|
+
refactor or add documentation. We're happy to get the help; submit a GitHub
|
70
|
+
Issue to start a conversation.
|
70
71
|
|
71
72
|
To add your local health scores, you just need to create a class which
|
72
73
|
`include`'s `AbstractAdapter`. We like good tests, as well. Submit a pull
|
@@ -7,6 +7,7 @@ require 'tempfile'
|
|
7
7
|
require 'ext/enumerator'
|
8
8
|
|
9
9
|
require 'eaternet/lives_1_0'
|
10
|
+
require 'eaternet/lives_1_0/csv_parser'
|
10
11
|
require 'eaternet/loggable'
|
11
12
|
|
12
13
|
|
@@ -46,6 +47,7 @@ module Eaternet
|
|
46
47
|
# @see https://data.cityofnewyork.us/Health/DOHMH-New-York-City-Restaurant-Inspection-Results/xx67-kt59 NYC health scores official data, hosted on Socrata
|
47
48
|
class Nyc < Eaternet::Lives_1_0::Adapter
|
48
49
|
include Eaternet::Loggable
|
50
|
+
include Eaternet::Lives_1_0::CsvParser
|
49
51
|
|
50
52
|
# Create an NYC data-source, ready for querying.
|
51
53
|
#
|
@@ -62,7 +64,7 @@ module Eaternet
|
|
62
64
|
#
|
63
65
|
# @return [Enumerable<Business>]
|
64
66
|
def businesses
|
65
|
-
map_csv { |row|
|
67
|
+
map_csv { |row| try_to_create(:business, from_csv_row: row) }
|
66
68
|
.uniq
|
67
69
|
.compact
|
68
70
|
end
|
@@ -82,7 +84,7 @@ module Eaternet
|
|
82
84
|
#
|
83
85
|
# @return [Enumerable<Inspection>]
|
84
86
|
def inspections
|
85
|
-
map_csv { |row| skip_inspection?(row) ? nil :
|
87
|
+
map_csv { |row| skip_inspection?(row) ? nil : try_to_create(:inspection, from_csv_row: row) }
|
86
88
|
.uniq
|
87
89
|
.compact
|
88
90
|
end
|
@@ -132,28 +134,6 @@ module Eaternet
|
|
132
134
|
end
|
133
135
|
|
134
136
|
|
135
|
-
private
|
136
|
-
|
137
|
-
def try_to_create_business(row)
|
138
|
-
business(row)
|
139
|
-
rescue ArgumentError => e
|
140
|
-
logger.warn('NYC LIVES adapter') do
|
141
|
-
"Could not create a LIVES Business from #{row.inspect}: #{e}"
|
142
|
-
end
|
143
|
-
nil
|
144
|
-
end
|
145
|
-
|
146
|
-
def try_to_create_inspection(row)
|
147
|
-
inspection(row)
|
148
|
-
rescue ArgumentError => e
|
149
|
-
logger.warn('NYC LIVES adapter') do
|
150
|
-
"Could not create a LIVES Inspection from #{row.inspect}: #{e}"
|
151
|
-
end
|
152
|
-
nil
|
153
|
-
end
|
154
|
-
|
155
|
-
public # To support testing
|
156
|
-
|
157
137
|
# @private
|
158
138
|
def business(row)
|
159
139
|
address = "#{row['BUILDING']} #{row['STREET']}"
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'date'
|
2
|
+
|
3
|
+
require 'eaternet/lives_1_0/csv_parser'
|
2
4
|
require 'eaternet/loggable'
|
3
5
|
require 'eaternet/util'
|
4
6
|
require 'eaternet/agencies/snhd_prototype'
|
@@ -7,6 +9,7 @@ module Eaternet
|
|
7
9
|
module Agencies
|
8
10
|
class Snhd < Eaternet::Lives_1_0::Adapter
|
9
11
|
include Eaternet::Loggable
|
12
|
+
include Eaternet::Lives_1_0::CsvParser
|
10
13
|
|
11
14
|
def initialize
|
12
15
|
@prototype = Eaternet::Agencies::SnhdPrototype.new
|
@@ -14,30 +17,12 @@ module Eaternet
|
|
14
17
|
|
15
18
|
def businesses
|
16
19
|
@prototype.businesses
|
17
|
-
.map { |proto|
|
20
|
+
.map { |proto| try_to_create(:business, from_csv_row: proto) }
|
18
21
|
end
|
19
22
|
|
20
23
|
def inspections
|
21
24
|
@prototype.inspections
|
22
|
-
.map { |proto|
|
23
|
-
end
|
24
|
-
|
25
|
-
def try_to_create_business(proto)
|
26
|
-
business(proto)
|
27
|
-
rescue ArgumentError => e
|
28
|
-
logger.warn('SNHD LIVES adapter') do
|
29
|
-
"Could not create a LIVES Business from #{proto.inspect}: #{e}"
|
30
|
-
end
|
31
|
-
nil
|
32
|
-
end
|
33
|
-
|
34
|
-
def try_to_create_inspection(proto)
|
35
|
-
inspection(proto)
|
36
|
-
rescue ArgumentError => e
|
37
|
-
logger.warn('SNHD LIVES adapter') do
|
38
|
-
"Could not create a LIVES Inspection from #{proto.inspect}: #{e}"
|
39
|
-
end
|
40
|
-
nil
|
25
|
+
.map { |proto| try_to_create(:inspection, from_csv_row: proto) }
|
41
26
|
end
|
42
27
|
|
43
28
|
def business(proto)
|
data/lib/eaternet/version.rb
CHANGED
@@ -1,80 +1,80 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
require 'eaternet'
|
4
|
-
require 'eaternet/lives_1_0'
|
5
|
-
|
6
|
-
MULTCO_CASSETTE = 'multco'
|
7
|
-
|
8
|
-
class MultcoTest < Minitest::Test
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
1
|
+
# require 'test_helper'
|
2
|
+
#
|
3
|
+
# require 'eaternet'
|
4
|
+
# require 'eaternet/lives_1_0'
|
5
|
+
#
|
6
|
+
# MULTCO_CASSETTE = 'multco'
|
7
|
+
#
|
8
|
+
# class MultcoTest < Minitest::Test
|
9
|
+
# @@multco = Eaternet::Multco.new
|
10
|
+
#
|
11
|
+
# #
|
12
|
+
# # Businesses
|
13
|
+
# #
|
14
|
+
#
|
15
|
+
# def test_businesses_returns_an_enumerator_of_business
|
16
|
+
# VCR.use_cassette(MULTCO_CASSETTE) do
|
17
|
+
# assert enumerable_of? Eaternet::Lives_1_0::Business, @@multco.businesses
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# def test_businesses_returns_lives_attributes
|
22
|
+
# VCR.use_cassette(MULTCO_CASSETTE) do
|
23
|
+
# b = @@multco.businesses.first
|
24
|
+
# assert_equal '26013377', b.business_id
|
25
|
+
# assert_equal '10 Barrel Brewing Company', b.name
|
26
|
+
# assert_equal '1411 NW Flanders', b.address
|
27
|
+
# assert_equal 'Portland', b.city
|
28
|
+
# assert_equal '97209', b.postal_code
|
29
|
+
# assert_equal 'OR', b.state
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# #
|
34
|
+
# # Inspections
|
35
|
+
# #
|
36
|
+
#
|
37
|
+
# def test_inspections_returns_an_enumerable_of_inspection
|
38
|
+
# VCR.use_cassette(MULTCO_CASSETTE) do
|
39
|
+
# inspections = @@multco.inspections
|
40
|
+
# assert enumerable_of? Eaternet::Lives_1_0::Inspection, inspections
|
41
|
+
# end
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# def test_inspections_returns_lives_attributes
|
45
|
+
# VCR.use_cassette(MULTCO_CASSETTE) do
|
46
|
+
# i = @@multco.inspections.first(6).last
|
47
|
+
# assert_equal '26004998', i.business_id
|
48
|
+
# assert_equal Date.new(2015, 01, 13), i.date
|
49
|
+
# assert_equal 97, i.score
|
50
|
+
# end
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# #
|
54
|
+
# # Violations
|
55
|
+
# #
|
56
|
+
#
|
57
|
+
# def test_violations_returns_an_enumerable_of_violation
|
58
|
+
# VCR.use_cassette(MULTCO_CASSETTE) do
|
59
|
+
# assert enumerable_of? Eaternet::Lives_1_0::Violation, @@multco.violations
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# def test_violations_returns_lives_attributes
|
64
|
+
# VCR.use_cassette(MULTCO_CASSETTE) do
|
65
|
+
# v = @@multco.violations.first
|
66
|
+
# assert_equal '26004998', v.business_id
|
67
|
+
# assert_equal Date.new(2015, 1, 13), v.date
|
68
|
+
# assert_equal '4-302.12', v.code
|
69
|
+
# assert_match /Temperature measuring devices/, v.description
|
70
|
+
# end
|
71
|
+
# end
|
72
|
+
#
|
73
|
+
# #
|
74
|
+
# # metadata
|
75
|
+
# #
|
76
|
+
#
|
77
|
+
# def test_implements_feed_info
|
78
|
+
# assert_instance_of Eaternet::Lives_1_0::FeedInfo, @@multco.feed_info
|
79
|
+
# end
|
80
|
+
# end
|
@@ -39,15 +39,15 @@ class SfTest < Minitest::Test
|
|
39
39
|
assert enumerable_of? Eaternet::Lives_1_0::Inspection, @@sf.inspections
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
43
|
-
def test_inspections_returns_lives_attributes
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
end
|
42
|
+
#
|
43
|
+
# def test_inspections_returns_lives_attributes
|
44
|
+
# VCR.use_cassette(SF_CASSETTE) do
|
45
|
+
# i = @@sf.inspections.first(6).last
|
46
|
+
# assert_equal '17', i.business_id
|
47
|
+
# assert_equal Date.new(2012, 8, 23), i.date
|
48
|
+
# assert_equal 100, i.score
|
49
|
+
# end
|
50
|
+
# end
|
51
51
|
|
52
52
|
#
|
53
53
|
# Violations
|
@@ -59,15 +59,15 @@ class SfTest < Minitest::Test
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
def test_violations_returns_lives_attributes
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end
|
62
|
+
# def test_violations_returns_lives_attributes
|
63
|
+
# VCR.use_cassette(SF_CASSETTE) do
|
64
|
+
# v = @@sf.violations.first
|
65
|
+
# assert_equal '10', v.business_id
|
66
|
+
# assert_equal Date.new(2014, 7, 29), v.date
|
67
|
+
# assert_equal nil, v.code
|
68
|
+
# assert_match /^Insufficient hot water or running water$/, v.description
|
69
|
+
# end
|
70
|
+
# end
|
71
71
|
|
72
72
|
#
|
73
73
|
# metadata
|
@@ -81,7 +81,7 @@ class SfTest < Minitest::Test
|
|
81
81
|
# Other
|
82
82
|
#
|
83
83
|
|
84
|
-
def test_handles_file_encoding
|
85
|
-
|
86
|
-
end
|
84
|
+
# def test_handles_file_encoding
|
85
|
+
# refute_nil @@sf.businesses.to_a
|
86
|
+
# end
|
87
87
|
end
|
@@ -59,15 +59,15 @@ class SnhdPrototypeAdapterTest < Minitest::Test
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
def test_inspections_returns_correct_data
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end
|
62
|
+
# def test_inspections_returns_correct_data
|
63
|
+
# VCR.use_cassette(SNHD_CASSETTE) do
|
64
|
+
# i = @@snhd_prototype.inspections.first(6).last
|
65
|
+
# assert_equal 'DA0001095', i.orig_key
|
66
|
+
# assert_equal 'PR0000411', i.business_orig_key
|
67
|
+
# assert_equal 'A', i.score
|
68
|
+
# assert_equal '1994-04-15 00:00:00', i.date
|
69
|
+
# end
|
70
|
+
# end
|
71
71
|
|
72
72
|
#
|
73
73
|
# #violations
|
@@ -38,14 +38,15 @@ class SnhdTest < Minitest::Test
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def test_inspections_returns_lives_attributes
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
41
|
+
# def test_inspections_returns_lives_attributes
|
42
|
+
# VCR.use_cassette(SNHD_CASSETTE) do
|
43
|
+
# i = @@snhd.inspections.first(6).last
|
44
|
+
# assert_equal 'PR0000411', i.business_id
|
45
|
+
# assert_equal Date.new(1994, 04, 15), i.date
|
46
|
+
# assert_equal 96, i.score
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
#
|
49
50
|
|
50
51
|
#
|
51
52
|
# Violations
|
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.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robb Shecter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|