eaternet 0.3.5 → 0.3.6
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 +4 -4
- data/.travis.yml +2 -1
- data/Gemfile +1 -1
- data/eaternet.gemspec +0 -1
- data/lib/eaternet/lives_1_0/inspection.rb +35 -35
- data/lib/eaternet/lives_1_0/violation.rb +32 -4
- data/lib/eaternet/validated_object.rb +12 -9
- data/lib/eaternet/version.rb +1 -1
- data/test/eaternet/lives_1_0/business_test.rb +6 -6
- data/test/script.rb +43 -0
- metadata +5 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af617767abcfabf9ef5d9db64481d40ff6a4c174
|
4
|
+
data.tar.gz: 157ecfe72159f0bf69fce1482d584d06eec42223
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 209c90a1a9bd7e0524dc114624dcaf5ef90af0e26d98582797b80b83702d2fc34cd10b567a7a210dc8b147175566188b6468d52cdd0901d68036db88aed4c772
|
7
|
+
data.tar.gz: cf63bcaf4d071b8f13b9135b26aa2d92eb2cbf93118a340666f9749af5a36b39c9495b6915c0612dc1a72ea12305bf1bcd7642a49e56d630727547f0ca8ec187
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/eaternet.gemspec
CHANGED
@@ -23,7 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'guard'
|
24
24
|
spec.add_development_dependency 'guard-minitest'
|
25
25
|
spec.add_development_dependency 'minitest'
|
26
|
-
spec.add_development_dependency 'minitest-utils'
|
27
26
|
spec.add_development_dependency 'pry'
|
28
27
|
spec.add_development_dependency 'rake', '~> 10'
|
29
28
|
spec.add_development_dependency 'vcr'
|
@@ -4,62 +4,62 @@ module Eaternet
|
|
4
4
|
module Lives_1_0
|
5
5
|
# Information about an inspectors’ visit to a businesses.
|
6
6
|
#
|
7
|
-
# @todo Clean up the Yard doc.
|
8
7
|
# @see http://www.yelp.com/healthscores#inspections LIVES / Inspections
|
9
8
|
# specification
|
10
9
|
class Inspection < ValidatedObject
|
11
10
|
ZERO_TO_ONE_HUNDRED_AND_BLANK = (0..100).to_a + ['']
|
12
11
|
|
13
12
|
# Unique identifier of the business for which this inspection
|
14
|
-
# was done.
|
13
|
+
# was done.
|
15
14
|
#
|
15
|
+
# @required Yes
|
16
16
|
# @return [String]
|
17
17
|
attr_accessor :business_id
|
18
|
-
validates
|
19
|
-
type: String,
|
20
|
-
presence: true
|
18
|
+
validates :business_id, type: String, presence: true
|
21
19
|
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
20
|
+
# Inspection score on a 0-100 scale. 100 is the highest score. This
|
21
|
+
# column must always be present in inspections.csv. However, it can be
|
22
|
+
# safely left blank for inspection rows that don’t have an associated
|
23
|
+
# score. (For example, some municipalities don’t associate a follow-up
|
24
|
+
# inspection with a score.)
|
25
|
+
#
|
26
|
+
# @required No
|
27
|
+
# @return [Integer] if it's a scored inspection
|
28
|
+
# @return [String] if it's an un-scored inspection, then the return
|
29
|
+
# value will be an empty string.
|
31
30
|
attr_accessor :score
|
32
|
-
validates
|
33
|
-
|
34
|
-
|
31
|
+
validates :score,
|
32
|
+
inclusion: { in: ZERO_TO_ONE_HUNDRED_AND_BLANK },
|
33
|
+
allow_nil: true
|
35
34
|
def score
|
36
35
|
# noinspection RubyResolve
|
37
36
|
@score.nil? ? '' : @score
|
38
37
|
end
|
39
38
|
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
39
|
+
# Date of the inspection.
|
40
|
+
#
|
41
|
+
# @required Yes
|
42
|
+
# @return [Date]
|
43
43
|
attr_accessor :date
|
44
|
-
validates
|
45
|
-
type: Date,
|
46
|
-
presence: true
|
44
|
+
validates :date, type: Date, presence: true
|
47
45
|
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
46
|
+
# Single line description containing details on the outcome of an
|
47
|
+
# inspection. Use of this field is only encouraged if no violations
|
48
|
+
# are provided.
|
49
|
+
#
|
50
|
+
# @required No
|
51
|
+
# @return [String]
|
53
52
|
attr_accessor :description
|
54
53
|
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
54
|
+
# String representing the type of inspection. Must be (initial,
|
55
|
+
# routine, followup, complaint).
|
56
|
+
#
|
57
|
+
# @required No
|
58
|
+
# @return [String]
|
59
59
|
attr_accessor :type
|
60
|
-
validates
|
61
|
-
|
62
|
-
|
60
|
+
validates :type,
|
61
|
+
inclusion: { in: %w(initial routine followup complaint) },
|
62
|
+
allow_nil: true
|
63
63
|
|
64
64
|
# @return [String]
|
65
65
|
def to_s
|
@@ -2,19 +2,47 @@ require 'eaternet/validated_object'
|
|
2
2
|
|
3
3
|
module Eaternet
|
4
4
|
module Lives_1_0
|
5
|
-
#
|
5
|
+
# Contains information about specific violations.
|
6
|
+
#
|
7
|
+
# @required No
|
6
8
|
# @see http://www.yelp.com/healthscores#violations LIVES / Violations
|
7
9
|
# specification
|
8
10
|
class Violation < ValidatedObject
|
9
|
-
|
10
|
-
|
11
|
+
# Unique identifier of the business for which this violation applies
|
12
|
+
#
|
13
|
+
# @required Yes
|
14
|
+
# @return [String]
|
15
|
+
attr_accessor :business_id
|
11
16
|
validates :business_id,
|
12
17
|
type: String,
|
13
18
|
presence: true
|
19
|
+
|
20
|
+
# Date of violation. This should correspond with the related inspection.
|
21
|
+
#
|
22
|
+
# @required Yes
|
23
|
+
# @return [Date]
|
24
|
+
attr_accessor :date
|
14
25
|
validates :date,
|
15
26
|
type: Date,
|
16
27
|
presence: true
|
17
|
-
|
28
|
+
|
29
|
+
# Code for the violation. It is recommended that this be based on the FDA
|
30
|
+
# Food Code. However, municipalities can decide to use pre-existing codes
|
31
|
+
# for this field.
|
32
|
+
#
|
33
|
+
# @required No
|
34
|
+
# @return [String]
|
35
|
+
attr_accessor :code
|
36
|
+
validates :code,
|
37
|
+
type: String,
|
38
|
+
allow_nil: true
|
39
|
+
|
40
|
+
# One line description of the violation.
|
41
|
+
#
|
42
|
+
# @required No
|
43
|
+
# @return [String]
|
44
|
+
attr_accessor :description
|
45
|
+
validates :description,
|
18
46
|
type: String,
|
19
47
|
allow_nil: true
|
20
48
|
end
|
@@ -5,8 +5,8 @@ module Eaternet
|
|
5
5
|
# to create custom validating objects.
|
6
6
|
#
|
7
7
|
# Uses [ActiveModel::Validations](http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates)
|
8
|
-
# to create self-validating Plain Old Ruby objects. This is especially
|
9
|
-
# data validation when importing from CSV.
|
8
|
+
# to create self-validating Plain Old Ruby objects. This is especially
|
9
|
+
# useful for data validation when importing from CSV.
|
10
10
|
#
|
11
11
|
# @example Writing a self-validating object
|
12
12
|
# class Dog < Eaternet::ValidatedObject
|
@@ -17,8 +17,8 @@ module Eaternet
|
|
17
17
|
# end
|
18
18
|
#
|
19
19
|
# @example Instantiating and automatically validating
|
20
|
-
# # The dog1 instance is validated at the end of instantiation.
|
21
|
-
# # without exception.
|
20
|
+
# # The dog1 instance is validated at the end of instantiation.
|
21
|
+
# # Here, it succeeds without exception.
|
22
22
|
# dog1 = Dog.new do |d|
|
23
23
|
# d.name = 'Spot'
|
24
24
|
# end
|
@@ -55,11 +55,12 @@ module Eaternet
|
|
55
55
|
# Run any validations and raise an error if invalid.
|
56
56
|
# @raise [ArgumentError] if any validations fail.
|
57
57
|
def check_validations!
|
58
|
-
fail ArgumentError, errors.
|
58
|
+
fail ArgumentError, errors.full_messages.join('; ') if invalid?
|
59
59
|
end
|
60
60
|
|
61
61
|
# A custom validator which ensures an object is a certain class.
|
62
|
-
# It's here as a nested class in {ValidatedObject} for easy
|
62
|
+
# It's here as a nested class in {ValidatedObject} for easy
|
63
|
+
# access by subclasses.
|
63
64
|
#
|
64
65
|
# @example Ensure that weight is a floating point number
|
65
66
|
# class Dog < ValidatedObject
|
@@ -69,10 +70,12 @@ module Eaternet
|
|
69
70
|
class TypeValidator < ActiveModel::EachValidator
|
70
71
|
# @return [nil]
|
71
72
|
def validate_each(record, attribute, value)
|
72
|
-
|
73
|
+
expected = options[:with]
|
74
|
+
actual = value.class
|
75
|
+
return if actual == expected
|
73
76
|
|
74
|
-
|
75
|
-
record.errors.add attribute,
|
77
|
+
msg = options[:message] || "is class #{actual}, not #{expected}"
|
78
|
+
record.errors.add attribute, msg
|
76
79
|
end
|
77
80
|
end
|
78
81
|
end
|
data/lib/eaternet/version.rb
CHANGED
@@ -9,7 +9,7 @@ class BusinessTest < Minitest::Test
|
|
9
9
|
|
10
10
|
PORTLAND_OR_US = { lat: 45.5236111, lon: -122.675 }
|
11
11
|
|
12
|
-
def
|
12
|
+
def test_creates_business_without_lat_and_lon
|
13
13
|
business = Eaternet::Lives_1_0::Business.new do |i|
|
14
14
|
i.business_id = '789123hjd'
|
15
15
|
i.name = 'Starbucks'
|
@@ -18,7 +18,7 @@ class BusinessTest < Minitest::Test
|
|
18
18
|
refute_nil business
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
21
|
+
def test_rejects_lat_and_lon_which_are_not_numbers
|
22
22
|
assert_raises(ArgumentError) {
|
23
23
|
Eaternet::Lives_1_0::Business.new do |i|
|
24
24
|
i.business_id = '789123hjd'
|
@@ -30,7 +30,7 @@ class BusinessTest < Minitest::Test
|
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def test_creates_business_with_lat_and_lon
|
34
34
|
business = Eaternet::Lives_1_0::Business.new do |i|
|
35
35
|
i.business_id = '789123hjd'
|
36
36
|
i.name = 'Starbucks'
|
@@ -41,7 +41,7 @@ class BusinessTest < Minitest::Test
|
|
41
41
|
refute_nil business
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
44
|
+
def test_rejects_invalid_latitude
|
45
45
|
assert_raises(ArgumentError) {
|
46
46
|
Eaternet::Lives_1_0::Business.new do |i|
|
47
47
|
i.business_id = '789123hjd'
|
@@ -53,7 +53,7 @@ class BusinessTest < Minitest::Test
|
|
53
53
|
}
|
54
54
|
end
|
55
55
|
|
56
|
-
def
|
56
|
+
def test_rejects_invalid_longitude
|
57
57
|
assert_raises(ArgumentError) {
|
58
58
|
Eaternet::Lives_1_0::Business.new do |i|
|
59
59
|
i.business_id = '789123hjd'
|
@@ -69,7 +69,7 @@ class BusinessTest < Minitest::Test
|
|
69
69
|
# Business#name
|
70
70
|
#
|
71
71
|
|
72
|
-
def
|
72
|
+
def test_rejects_blank_name
|
73
73
|
assert_raises(ArgumentError) {
|
74
74
|
Eaternet::Lives_1_0::Business.new do |i|
|
75
75
|
i.business_id = '789123hjd'
|
data/test/script.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'eaternet/validated_object'
|
3
|
+
|
4
|
+
# @example Writing a self-validating object
|
5
|
+
# class Dog < Eaternet::ValidatedObject
|
6
|
+
# attr_accessor :name, :birthday
|
7
|
+
#
|
8
|
+
# validates :name, presence: true
|
9
|
+
# validates :birthday, type: Date, allow_nil: true
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# @example Instantiating and automatically validating
|
13
|
+
# # The dog1 instance is validated at the end of instantiation.
|
14
|
+
# # Here, it succeeds without exception.
|
15
|
+
# dog1 = Dog.new do |d|
|
16
|
+
# d.name = 'Spot'
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # We can also explicitly test for validity
|
20
|
+
# dog1.valid? # => true
|
21
|
+
#
|
22
|
+
# dog1.birthday = Date.new(2015, 1, 23)
|
23
|
+
# dog1.valid? # => true
|
24
|
+
#
|
25
|
+
# @example Making an instance invalid
|
26
|
+
# dog1.birthday = '2015-01-23'
|
27
|
+
# dog1.valid? # => false
|
28
|
+
# dog1.check_validations! # => ArgumentError: birthday is not of class Date
|
29
|
+
|
30
|
+
class Dog < Eaternet::ValidatedObject
|
31
|
+
attr_accessor :name, :birthday
|
32
|
+
|
33
|
+
validates :name, presence: true
|
34
|
+
validates :birthday, type: Date, allow_nil: true
|
35
|
+
end
|
36
|
+
|
37
|
+
dog1 = Dog.new do |d|
|
38
|
+
d.name = 'Spot'
|
39
|
+
end
|
40
|
+
puts "dog1.valid? #{dog1.valid?}"
|
41
|
+
|
42
|
+
dog1.birthday = '2015-01-23'
|
43
|
+
dog1.check_validations!
|
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: 0.3.
|
4
|
+
version: 0.3.6
|
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-05-
|
11
|
+
date: 2015-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,20 +66,6 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: minitest-utils
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: pry
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -209,6 +195,7 @@ files:
|
|
209
195
|
- test/eaternet/nyc_adapter_test.rb
|
210
196
|
- test/eaternet/snhd_adapter_test.rb
|
211
197
|
- test/fixtures/morris-park-bake-shop.csv
|
198
|
+
- test/script.rb
|
212
199
|
- test/test_helper.rb
|
213
200
|
homepage: https://github.com/eaternet/adapters-ruby
|
214
201
|
licenses:
|
@@ -230,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
230
217
|
version: '0'
|
231
218
|
requirements: []
|
232
219
|
rubyforge_project:
|
233
|
-
rubygems_version: 2.4.
|
220
|
+
rubygems_version: 2.4.7
|
234
221
|
signing_key:
|
235
222
|
specification_version: 4
|
236
223
|
summary: Regional adapters for restaurant health scores
|
@@ -244,5 +231,6 @@ test_files:
|
|
244
231
|
- test/eaternet/nyc_adapter_test.rb
|
245
232
|
- test/eaternet/snhd_adapter_test.rb
|
246
233
|
- test/fixtures/morris-park-bake-shop.csv
|
234
|
+
- test/script.rb
|
247
235
|
- test/test_helper.rb
|
248
236
|
has_rdoc:
|