beerdb-models 1.0.1 → 1.1.0
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/Manifest.txt +30 -30
- data/README.md +4 -3
- data/Rakefile +5 -5
- data/lib/beerdb/models.rb +1 -1
- data/lib/beerdb/models/beer.rb +23 -23
- data/lib/beerdb/models/brand.rb +3 -3
- data/lib/beerdb/models/brewery.rb +20 -21
- data/lib/beerdb/models/forward.rb +2 -3
- data/lib/beerdb/models/world/{region.rb → state.rb} +5 -6
- data/lib/beerdb/reader.rb +34 -32
- data/lib/beerdb/readers/beer.rb +5 -5
- data/lib/beerdb/schema.rb +11 -12
- data/lib/beerdb/version.rb +2 -3
- data/test/helper.rb +9 -9
- data/test/test_fixture_matchers.rb +7 -7
- data/test/test_values.rb +8 -8
- metadata +11 -15
- data/.gemtest +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e0814546ffaf1bdce1f0a10a33183cb5d3642c4
|
4
|
+
data.tar.gz: 95860781d2554c27001e6db34eb1b926bba44473
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0190214a599104891fe8620f3fd04b33001cbcc4c4651a93e8111ac6aacf782f471f336a50bd56a82aa1a87bd68c260d8c3005e0f4122c996c15651542282bb
|
7
|
+
data.tar.gz: 7f26566ee130d0a570f8bdd5abe363ebd496ef6ff11bbe8878a6704564a08c3c5ddc72b0aedefcdd125c4146cc57e2bb73cc3c0b2b0eaa0af3fb77ac5d77b4a7
|
data/Manifest.txt
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
HISTORY.md
|
2
|
-
Manifest.txt
|
3
|
-
README.md
|
4
|
-
Rakefile
|
5
|
-
lib/beerdb/deleter.rb
|
6
|
-
lib/beerdb/models.rb
|
7
|
-
lib/beerdb/models/beer.rb
|
8
|
-
lib/beerdb/models/brand.rb
|
9
|
-
lib/beerdb/models/brewery.rb
|
10
|
-
lib/beerdb/models/forward.rb
|
11
|
-
lib/beerdb/models/tag.rb
|
12
|
-
lib/beerdb/models/world/city.rb
|
13
|
-
lib/beerdb/models/world/country.rb
|
14
|
-
lib/beerdb/models/world/
|
15
|
-
lib/beerdb/reader.rb
|
16
|
-
lib/beerdb/reader_file.rb
|
17
|
-
lib/beerdb/reader_zip.rb
|
18
|
-
lib/beerdb/readers/beer.rb
|
19
|
-
lib/beerdb/readers/brewery.rb
|
20
|
-
lib/beerdb/readers/quick.rb
|
21
|
-
lib/beerdb/schema.rb
|
22
|
-
lib/beerdb/serializers/beer.rb
|
23
|
-
lib/beerdb/serializers/brewery.rb
|
24
|
-
lib/beerdb/stats.rb
|
25
|
-
lib/beerdb/version.rb
|
26
|
-
test/data/great-beers-europe.txt
|
27
|
-
test/helper.rb
|
28
|
-
test/test_fixture_matchers.rb
|
29
|
-
test/test_reader_quick.rb
|
30
|
-
test/test_values.rb
|
1
|
+
HISTORY.md
|
2
|
+
Manifest.txt
|
3
|
+
README.md
|
4
|
+
Rakefile
|
5
|
+
lib/beerdb/deleter.rb
|
6
|
+
lib/beerdb/models.rb
|
7
|
+
lib/beerdb/models/beer.rb
|
8
|
+
lib/beerdb/models/brand.rb
|
9
|
+
lib/beerdb/models/brewery.rb
|
10
|
+
lib/beerdb/models/forward.rb
|
11
|
+
lib/beerdb/models/tag.rb
|
12
|
+
lib/beerdb/models/world/city.rb
|
13
|
+
lib/beerdb/models/world/country.rb
|
14
|
+
lib/beerdb/models/world/state.rb
|
15
|
+
lib/beerdb/reader.rb
|
16
|
+
lib/beerdb/reader_file.rb
|
17
|
+
lib/beerdb/reader_zip.rb
|
18
|
+
lib/beerdb/readers/beer.rb
|
19
|
+
lib/beerdb/readers/brewery.rb
|
20
|
+
lib/beerdb/readers/quick.rb
|
21
|
+
lib/beerdb/schema.rb
|
22
|
+
lib/beerdb/serializers/beer.rb
|
23
|
+
lib/beerdb/serializers/brewery.rb
|
24
|
+
lib/beerdb/stats.rb
|
25
|
+
lib/beerdb/version.rb
|
26
|
+
test/data/great-beers-europe.txt
|
27
|
+
test/helper.rb
|
28
|
+
test/test_fixture_matchers.rb
|
29
|
+
test/test_reader_quick.rb
|
30
|
+
test/test_values.rb
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# beerdb-models - beer.db schema 'n' models for easy (re)use
|
2
2
|
|
3
3
|
|
4
|
-
* home :: [github.com/beerkit/beer.db
|
5
|
-
* bugs :: [github.com/beerkit/beer.db
|
4
|
+
* home :: [github.com/beerkit/beer.db](https://github.com/beerkit/beer.db)
|
5
|
+
* bugs :: [github.com/beerkit/beer.db/issues](https://github.com/beerkit/beer.db/issues)
|
6
6
|
* gem :: [rubygems.org/gems/beerdb-models](https://rubygems.org/gems/beerdb-models)
|
7
7
|
* rdoc :: [rubydoc.info/gems/beerdb-models](http://rubydoc.info/gems/beerdb-models)
|
8
8
|
* forum :: [groups.google.com/group/beerdb](https://groups.google.com/group/beerdb)
|
@@ -92,6 +92,8 @@ wien.breweries
|
|
92
92
|
|
93
93
|
## License
|
94
94
|
|
95
|
+

|
96
|
+
|
95
97
|
The `beerdb-models` scripts are dedicated to the public domain.
|
96
98
|
Use it as you please with no restrictions whatsoever.
|
97
99
|
|
@@ -99,4 +101,3 @@ Use it as you please with no restrictions whatsoever.
|
|
99
101
|
|
100
102
|
Send them along to the [Open Beer & Brewery Database Forum/Mailing List](http://groups.google.com/group/beerdb).
|
101
103
|
Thanks!
|
102
|
-
|
data/Rakefile
CHANGED
@@ -3,13 +3,13 @@ require './lib/beerdb/version.rb'
|
|
3
3
|
|
4
4
|
|
5
5
|
Hoe.spec 'beerdb-models' do
|
6
|
-
|
6
|
+
|
7
7
|
self.version = BeerDb::VERSION
|
8
|
-
|
8
|
+
|
9
9
|
self.summary = "beerdb-models - beer.db schema 'n' models for easy (re)use"
|
10
10
|
self.description = summary
|
11
11
|
|
12
|
-
self.urls = ['https://github.com/beerkit/beer.db
|
12
|
+
self.urls = ['https://github.com/beerkit/beer.db']
|
13
13
|
|
14
14
|
self.author = 'Gerald Bauer'
|
15
15
|
self.email = 'beerdb@googlegroups.com'
|
@@ -19,13 +19,13 @@ Hoe.spec 'beerdb-models' do
|
|
19
19
|
self.history_file = 'HISTORY.md'
|
20
20
|
|
21
21
|
self.extra_deps = [
|
22
|
-
['worlddb-models', '>= 2.
|
22
|
+
['worlddb-models', '>= 2.3.4'], # Note: worlddb-models pulls in all dependencies
|
23
23
|
]
|
24
24
|
|
25
25
|
self.licenses = ['Public Domain']
|
26
26
|
|
27
27
|
self.spec_extras = {
|
28
|
-
required_ruby_version: '>=
|
28
|
+
required_ruby_version: '>= 2.3'
|
29
29
|
}
|
30
30
|
|
31
31
|
end
|
data/lib/beerdb/models.rb
CHANGED
@@ -10,7 +10,7 @@ require 'beerdb/version' ## version always goes first
|
|
10
10
|
|
11
11
|
require 'beerdb/models/forward'
|
12
12
|
require 'beerdb/models/world/country'
|
13
|
-
require 'beerdb/models/world/
|
13
|
+
require 'beerdb/models/world/state'
|
14
14
|
require 'beerdb/models/world/city'
|
15
15
|
require 'beerdb/models/tag'
|
16
16
|
require 'beerdb/models/beer'
|
data/lib/beerdb/models/beer.rb
CHANGED
@@ -7,12 +7,12 @@ class Beer < ActiveRecord::Base
|
|
7
7
|
|
8
8
|
extend TextUtils::TagHelper # will add self.find_tags, self.find_tags_in_attribs!, etc.
|
9
9
|
|
10
|
-
#
|
10
|
+
# Note: use extend - is_<type>? become class methods e.g. self.is_<type>? for use in
|
11
11
|
# self.create_or_update_from_values
|
12
|
-
extend TextUtils::ValueHelper # e.g. self.is_year?, self.
|
12
|
+
extend TextUtils::ValueHelper # e.g. self.is_year?, self.is_state?, self.is_address?, is_taglist? etc.
|
13
13
|
|
14
14
|
belongs_to :country, :class_name => 'WorldDb::Model::Country', :foreign_key => 'country_id'
|
15
|
-
belongs_to :
|
15
|
+
belongs_to :state, :class_name => 'WorldDb::Model::State', :foreign_key => 'state_id'
|
16
16
|
belongs_to :city, :class_name => 'WorldDb::Model::City', :foreign_key => 'city_id'
|
17
17
|
|
18
18
|
belongs_to :brand, :class_name => 'BeerDb::Model::Brewery', :foreign_key => 'brand_id'
|
@@ -55,7 +55,7 @@ class Beer < ActiveRecord::Base
|
|
55
55
|
|
56
56
|
|
57
57
|
def as_json_v2( opts={} )
|
58
|
-
#
|
58
|
+
# Note: do NOT overwrite "default" / builtin as_json, thus, lets use as_json_v2
|
59
59
|
BeerSerializer.new( self ).as_json
|
60
60
|
end
|
61
61
|
|
@@ -64,7 +64,7 @@ class Beer < ActiveRecord::Base
|
|
64
64
|
|
65
65
|
attribs, more_values = find_key_n_title( values )
|
66
66
|
attribs = attribs.merge( more_attribs )
|
67
|
-
|
67
|
+
|
68
68
|
# check for optional values
|
69
69
|
Beer.create_or_update_from_attribs( attribs, more_values )
|
70
70
|
end
|
@@ -74,23 +74,23 @@ class Beer < ActiveRecord::Base
|
|
74
74
|
|
75
75
|
# fix: add/configure logger for ActiveRecord!!!
|
76
76
|
logger = LogKernel::Logger.root
|
77
|
-
|
77
|
+
|
78
78
|
value_tag_keys = []
|
79
|
-
|
79
|
+
|
80
80
|
## check for grades (e.g. ***/**/*) in titles (will add attribs[:grade] to hash)
|
81
81
|
## if grade missing; set default to 4; lets us update overwrite 1,2,3 values on update
|
82
82
|
attribs[ :grade ] ||= 4
|
83
|
-
|
83
|
+
|
84
84
|
### check for "default" tags - that is, if present attribs[:tags] remove from hash
|
85
85
|
value_tag_keys += find_tags_in_attribs!( attribs )
|
86
|
-
|
86
|
+
|
87
87
|
## check for optional values
|
88
88
|
values.each_with_index do |value,index|
|
89
89
|
if match_country(value) do |country|
|
90
90
|
attribs[ :country_id ] = country.id
|
91
91
|
end
|
92
|
-
elsif
|
93
|
-
attribs[ :
|
92
|
+
elsif match_state_for_country(value, attribs[:country_id]) do |state|
|
93
|
+
attribs[ :state_id ] = state.id
|
94
94
|
end
|
95
95
|
elsif match_city(value) do |city|
|
96
96
|
if city.present?
|
@@ -103,19 +103,19 @@ class Beer < ActiveRecord::Base
|
|
103
103
|
elsif match_brewery(value) do |brewery|
|
104
104
|
attribs[ :brewery_id ] = brewery.id
|
105
105
|
|
106
|
-
# for easy queries cache city and
|
107
|
-
|
106
|
+
# for easy queries cache city and state ids
|
107
|
+
|
108
108
|
# 1) check if brewery has city - if yes, use it for beer too
|
109
109
|
if brewery.city.present?
|
110
110
|
attribs[ :city_id ] = brewery.city.id
|
111
111
|
end
|
112
112
|
|
113
|
-
# 2) check if brewery has city w/
|
114
|
-
# if not check for
|
115
|
-
if brewery.city.present? && brewery.city.
|
116
|
-
attribs[ :
|
117
|
-
elsif brewery.
|
118
|
-
attribs[ :
|
113
|
+
# 2) check if brewery has city w/ state if yes, use it for beer to
|
114
|
+
# if not check for state for brewery
|
115
|
+
if brewery.city.present? && brewery.city.state.present?
|
116
|
+
attribs[ :state_id ] = brewery.city.state.id
|
117
|
+
elsif brewery.state.present?
|
118
|
+
attribs[ :state_id ] = brewery.state.id
|
119
119
|
end
|
120
120
|
end
|
121
121
|
elsif match_year( value ) do |num| # founded/established year e.g. 1776
|
@@ -154,27 +154,27 @@ class Beer < ActiveRecord::Base
|
|
154
154
|
logger.debug "create Beer:"
|
155
155
|
rec = Beer.new
|
156
156
|
end
|
157
|
-
|
157
|
+
|
158
158
|
logger.debug attribs.to_json
|
159
159
|
|
160
160
|
rec.update_attributes!( attribs )
|
161
161
|
|
162
162
|
##################
|
163
|
-
# add taggings
|
163
|
+
# add taggings
|
164
164
|
|
165
165
|
##
|
166
166
|
## fix: delete all tags first or only add diff?
|
167
167
|
## fix e.g.
|
168
168
|
##
|
169
169
|
## [debug] update Beer 1340-opatsvetlevycepni:
|
170
|
-
## [debug] {"title":"Opat Světlé Výčepní","key":"opatsvetlevycepni","country_id":130,"txt":"cz-czech-republic!/beers","grade":4,"brewery_id":839,"city_id":1154,"
|
170
|
+
## [debug] {"title":"Opat Světlé Výčepní","key":"opatsvetlevycepni","country_id":130,"txt":"cz-czech-republic!/beers","grade":4,"brewery_id":839,"city_id":1154,"state_id":241,"abv":4.2,"og":11.0}
|
171
171
|
## [debug] adding 1 taggings: >>pale lager<<...
|
172
172
|
## rake aborted!
|
173
173
|
## ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: columns taggable_id, taggable_type, tag_id are not unique: INSERT INTO "taggings" ("created_at", "tag_id", "taggable_id", "taggable_type", "updated_at") VALUES (?, ?, ?, ?, ?)
|
174
174
|
|
175
175
|
=begin
|
176
176
|
if value_tag_keys.size > 0
|
177
|
-
|
177
|
+
|
178
178
|
value_tag_keys.uniq! # remove duplicates
|
179
179
|
logger.debug " adding #{value_tag_keys.size} taggings: >>#{value_tag_keys.join('|')}<<..."
|
180
180
|
|
data/lib/beerdb/models/brand.rb
CHANGED
@@ -6,10 +6,10 @@ module BeerDb
|
|
6
6
|
class Brand < ActiveRecord::Base
|
7
7
|
|
8
8
|
# NB: use extend - is_<type>? become class methods e.g. self.is_<type>?
|
9
|
-
extend TextUtils::ValueHelper # e.g. self.find_key_n_title, self.is_year?, self.
|
9
|
+
extend TextUtils::ValueHelper # e.g. self.find_key_n_title, self.is_year?, self.is_state?, is_address?, is_taglist? etc.
|
10
10
|
|
11
11
|
belongs_to :country, :class_name => 'WorldDb::Model::Country', :foreign_key => 'country_id'
|
12
|
-
belongs_to :
|
12
|
+
belongs_to :state, :class_name => 'WorldDb::Model::State', :foreign_key => 'state_id'
|
13
13
|
belongs_to :city, :class_name => 'WorldDb::Model::City', :foreign_key => 'city_id'
|
14
14
|
|
15
15
|
belongs_to :brewery, :class_name => 'BeerDb::Model::Brewery', :foreign_key => 'brewery_id'
|
@@ -50,7 +50,7 @@ class Brand < ActiveRecord::Base
|
|
50
50
|
logger.debug "create Brand:"
|
51
51
|
rec = Brand.new
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
logger.debug attribs.to_json
|
55
55
|
|
56
56
|
rec.update_attributes!( attribs )
|
@@ -9,13 +9,13 @@ class Brewery < ActiveRecord::Base
|
|
9
9
|
|
10
10
|
# NB: use extend - is_<type>? become class methods e.g. self.is_<type>? for use in
|
11
11
|
# self.create_or_update_from_values
|
12
|
-
extend TextUtils::ValueHelper # e.g. self.is_year?, self.
|
12
|
+
extend TextUtils::ValueHelper # e.g. self.is_year?, self.is_state?, is_address?, is_taglist? etc.
|
13
13
|
extend TextUtils::AddressHelper # e.g self.normalize_addr, self.find_city_in_addr, etc.
|
14
14
|
|
15
15
|
self.table_name = 'breweries'
|
16
16
|
|
17
17
|
belongs_to :country, :class_name => 'WorldDb::Model::Country', :foreign_key => 'country_id'
|
18
|
-
belongs_to :
|
18
|
+
belongs_to :state, :class_name => 'WorldDb::Model::State', :foreign_key => 'state_id'
|
19
19
|
belongs_to :city, :class_name => 'WorldDb::Model::City', :foreign_key => 'city_id'
|
20
20
|
|
21
21
|
has_many :beers, :class_name => 'BeerDb::Model::Beer', :foreign_key => 'brewery_id'
|
@@ -38,9 +38,9 @@ class Brewery < ActiveRecord::Base
|
|
38
38
|
|
39
39
|
def m?() prod_m == true; end
|
40
40
|
def l?() prod_l == true; end
|
41
|
-
|
41
|
+
|
42
42
|
## TODO: activerecord supplies brewpub? already? same as attrib; check w/ test case (and remove here)
|
43
|
-
def brewpub?() brewpub == true; end
|
43
|
+
def brewpub?() brewpub == true; end
|
44
44
|
|
45
45
|
|
46
46
|
|
@@ -80,8 +80,8 @@ class Brewery < ActiveRecord::Base
|
|
80
80
|
if match_country(value) do |country|
|
81
81
|
new_attributes[ :country_id ] = country.id
|
82
82
|
end
|
83
|
-
elsif
|
84
|
-
new_attributes[ :
|
83
|
+
elsif match_state_for_country(value,new_attributes[:country_id]) do |state|
|
84
|
+
new_attributes[ :state_id ] = state.id
|
85
85
|
end
|
86
86
|
elsif match_city(value) do |city|
|
87
87
|
if city.present?
|
@@ -91,10 +91,10 @@ class Brewery < ActiveRecord::Base
|
|
91
91
|
logger.warn "city with key #{value[5..-1]} missing - for brewery #{new_attributes[:key]}"
|
92
92
|
end
|
93
93
|
|
94
|
-
## for easy queries: cache
|
95
|
-
# - check if city w/
|
96
|
-
if city.present? && city.
|
97
|
-
new_attributes[ :
|
94
|
+
## for easy queries: cache state_id (from city)
|
95
|
+
# - check if city w/ state if yes, use it for brewery too
|
96
|
+
if city.present? && city.state.present?
|
97
|
+
new_attributes[ :state_id ] = city.state.id
|
98
98
|
end
|
99
99
|
end
|
100
100
|
elsif match_year( value ) do |num| # founded/established year e.g. 1776
|
@@ -131,19 +131,19 @@ class Brewery < ActiveRecord::Base
|
|
131
131
|
logger.debug "create Brewery:"
|
132
132
|
rec = Brewery.new
|
133
133
|
end
|
134
|
-
|
134
|
+
|
135
135
|
logger.debug new_attributes.to_json
|
136
136
|
|
137
137
|
rec.update_attributes!( new_attributes )
|
138
138
|
|
139
139
|
|
140
140
|
##############################
|
141
|
-
# auto-add city if not present and country n
|
142
|
-
|
141
|
+
# auto-add city if not present and country n state present
|
142
|
+
|
143
143
|
if new_attributes[:city_id].blank? &&
|
144
144
|
new_attributes[:country_id].present? &&
|
145
|
-
new_attributes[:
|
146
|
-
|
145
|
+
new_attributes[:state_id].present?
|
146
|
+
|
147
147
|
country_key = rec.country.key
|
148
148
|
|
149
149
|
###
|
@@ -158,9 +158,9 @@ class Brewery < ActiveRecord::Base
|
|
158
158
|
## todo: how to handle nil/empty address lines?
|
159
159
|
|
160
160
|
city_title = find_city_in_addr( new_attributes[:address], country_key )
|
161
|
-
|
161
|
+
|
162
162
|
if city_title.present?
|
163
|
-
|
163
|
+
|
164
164
|
## for czech - some cleanup
|
165
165
|
## remove any (remaining) digits in city title
|
166
166
|
city_title = city_title.gsub( /[0-9]/, '' ).strip
|
@@ -168,7 +168,7 @@ class Brewery < ActiveRecord::Base
|
|
168
168
|
city_values = [city_title]
|
169
169
|
city_attributes = {
|
170
170
|
country_id: rec.country_id,
|
171
|
-
|
171
|
+
state_id: rec.state_id
|
172
172
|
}
|
173
173
|
# todo: add convenience helper create_or_update_from_title
|
174
174
|
city = City.create_or_update_from_values( city_values, city_attributes )
|
@@ -194,7 +194,7 @@ class Brewery < ActiveRecord::Base
|
|
194
194
|
|
195
195
|
## todo/fix: use strip_inline_comments (e.g #() or (()) - why?? why not??)
|
196
196
|
# - allows titles as usual (use new syntax for inline comments e.g. #() or (()) for example)
|
197
|
-
|
197
|
+
|
198
198
|
# remove optional longer title part in () e.g. Las Palmas (de Gran Canaria), Palma (de Mallorca)
|
199
199
|
value_brands = TextUtils.strip_subtitles( value_brands )
|
200
200
|
|
@@ -206,7 +206,7 @@ class Brewery < ActiveRecord::Base
|
|
206
206
|
brand_attribs = {
|
207
207
|
brewery_id: rec.id,
|
208
208
|
country_id: rec.country_id,
|
209
|
-
|
209
|
+
state_id: rec.state_id,
|
210
210
|
city_id: rec.city_id
|
211
211
|
}
|
212
212
|
|
@@ -253,4 +253,3 @@ end # class Brewery
|
|
253
253
|
|
254
254
|
end # module Model
|
255
255
|
end # module BeerDb
|
256
|
-
|
@@ -12,7 +12,7 @@ module BeerDb
|
|
12
12
|
|
13
13
|
Continent = WorldDb::Model::Continent
|
14
14
|
Country = WorldDb::Model::Country
|
15
|
-
|
15
|
+
State = WorldDb::Model::State
|
16
16
|
City = WorldDb::Model::City
|
17
17
|
|
18
18
|
Tag = TagDb::Model::Tag
|
@@ -29,7 +29,7 @@ module BeerDb
|
|
29
29
|
## convenience alias (for better english ;-) )
|
30
30
|
## lets you use => include Models (instead of include Model)
|
31
31
|
Models = Model
|
32
|
-
|
32
|
+
|
33
33
|
end # module BeerDb
|
34
34
|
|
35
35
|
|
@@ -43,4 +43,3 @@ module WorldDb
|
|
43
43
|
|
44
44
|
end # module Model
|
45
45
|
end # module WorldDb
|
46
|
-
|
@@ -3,12 +3,11 @@
|
|
3
3
|
module WorldDb
|
4
4
|
module Model
|
5
5
|
|
6
|
-
class
|
7
|
-
has_many :beers, :class_name => 'BeerDb::Model::Beer', :foreign_key => '
|
8
|
-
has_many :brands, :class_name => 'BeerDb::Model::Brand', :foreign_key => '
|
9
|
-
has_many :breweries, :class_name => 'BeerDb::Model::Brewery', :foreign_key => '
|
10
|
-
end # class
|
6
|
+
class State
|
7
|
+
has_many :beers, :class_name => 'BeerDb::Model::Beer', :foreign_key => 'state_id'
|
8
|
+
has_many :brands, :class_name => 'BeerDb::Model::Brand', :foreign_key => 'state_id'
|
9
|
+
has_many :breweries, :class_name => 'BeerDb::Model::Brewery', :foreign_key => 'state_id'
|
10
|
+
end # class State
|
11
11
|
|
12
12
|
end # module Model
|
13
13
|
end # module WorldDb
|
14
|
-
|
data/lib/beerdb/reader.rb
CHANGED
@@ -9,24 +9,24 @@ module Matcher
|
|
9
9
|
match_xxx_for_country( name, 'beers', &blk )
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
|
12
|
+
def match_beers_for_country_n_state( name, &blk )
|
13
|
+
match_xxx_for_country_n_state( name, 'beers', &blk )
|
14
14
|
end
|
15
15
|
|
16
16
|
def match_breweries_for_country( name, &blk )
|
17
17
|
match_xxx_for_country( name, 'breweries', &blk )
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
|
20
|
+
def match_breweries_for_country_n_state( name, &blk )
|
21
|
+
match_xxx_for_country_n_state( name, 'breweries', &blk )
|
22
22
|
end
|
23
23
|
|
24
24
|
def match_brewpubs_for_country( name, &blk )
|
25
25
|
match_xxx_for_country( name, 'brewpubs', &blk )
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
29
|
-
|
28
|
+
def match_brewpubs_for_country_n_state( name, &blk )
|
29
|
+
match_xxx_for_country_n_state( name, 'brewpubs', &blk )
|
30
30
|
end
|
31
31
|
|
32
32
|
|
@@ -55,20 +55,20 @@ class ReaderBase
|
|
55
55
|
|
56
56
|
def load( name )
|
57
57
|
|
58
|
-
if
|
59
|
-
|
58
|
+
if match_beers_for_country_n_state( name ) do |country_key, state_key|
|
59
|
+
load_beers_for_country_n_state( country_key, state_key, name )
|
60
60
|
end
|
61
61
|
elsif match_beers_for_country( name ) do |country_key|
|
62
62
|
load_beers_for_country( country_key, name )
|
63
63
|
end
|
64
|
-
elsif
|
65
|
-
|
64
|
+
elsif match_breweries_for_country_n_state( name ) do |country_key, state_key|
|
65
|
+
load_breweries_for_country_n_state( country_key, state_key, name )
|
66
66
|
end
|
67
67
|
elsif match_breweries_for_country( name ) do |country_key|
|
68
68
|
load_breweries_for_country( country_key, name )
|
69
69
|
end
|
70
|
-
elsif
|
71
|
-
|
70
|
+
elsif match_brewpubs_for_country_n_state( name ) do |country_key, state_key|
|
71
|
+
load_breweries_for_country_n_state( country_key, state_key, name, brewpub: true )
|
72
72
|
end
|
73
73
|
elsif match_brewpubs_for_country( name ) do |country_key|
|
74
74
|
load_breweries_for_country( country_key, name, brewpub: true )
|
@@ -80,19 +80,20 @@ class ReaderBase
|
|
80
80
|
end
|
81
81
|
|
82
82
|
|
83
|
-
def
|
84
|
-
country = Country.
|
83
|
+
def load_beers_for_country_n_state( country_key, state_key, name, more_attribs={} )
|
84
|
+
country = Country.find_by!( key: country_key )
|
85
85
|
logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
|
86
86
|
more_attribs[ :country_id ] = country.id
|
87
87
|
|
88
|
-
#
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
88
|
+
# Note: state lookup requires country id (state key only unique for country)
|
89
|
+
## check: was find_by_key_and_country_id
|
90
|
+
state = State.find_by( key: state_key, country_id: country.id )
|
91
|
+
if state.nil?
|
92
|
+
# note: allow unknown state keys; issue warning n skip state
|
93
|
+
logger.warn "State w/ key >#{state_key}< not found; skip adding state"
|
93
94
|
else
|
94
|
-
logger.debug "
|
95
|
-
more_attribs[ :
|
95
|
+
logger.debug "State #{state.key} >#{state.title}<"
|
96
|
+
more_attribs[ :state_id ] = state.id
|
96
97
|
end
|
97
98
|
|
98
99
|
more_attribs[ :txt ] = name # store source ref
|
@@ -101,7 +102,7 @@ class ReaderBase
|
|
101
102
|
end
|
102
103
|
|
103
104
|
def load_beers_for_country( country_key, name, more_attribs={} )
|
104
|
-
country = Country.
|
105
|
+
country = Country.find_by!( key: country_key )
|
105
106
|
logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
|
106
107
|
|
107
108
|
more_attribs[ :country_id ] = country.id
|
@@ -112,20 +113,21 @@ class ReaderBase
|
|
112
113
|
end
|
113
114
|
|
114
115
|
|
115
|
-
def
|
116
|
-
country = Country.
|
116
|
+
def load_breweries_for_country_n_state( country_key, state_key, name, more_attribs={} )
|
117
|
+
country = Country.find_by!( key: country_key )
|
117
118
|
logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
|
118
119
|
|
119
120
|
more_attribs[ :country_id ] = country.id
|
120
121
|
|
121
|
-
# note:
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
122
|
+
# note: state lookup requires country id (state key only unique for country)
|
123
|
+
## was: State.find_by_key_and_country_id( state_key, country.id )
|
124
|
+
state = State.find_by( key: state_key, country_id: country.id )
|
125
|
+
if state.nil?
|
126
|
+
# note: allow unknown state keys; issue warning n skip state
|
127
|
+
logger.warn "State w/ key >#{state_key}< not found; skip adding state"
|
126
128
|
else
|
127
|
-
logger.debug "
|
128
|
-
more_attribs[ :
|
129
|
+
logger.debug "State #{state.key} >#{state.title}<"
|
130
|
+
more_attribs[ :state_id ] = state.id
|
129
131
|
end
|
130
132
|
|
131
133
|
more_attribs[ :txt ] = name # store source ref
|
@@ -134,7 +136,7 @@ class ReaderBase
|
|
134
136
|
end
|
135
137
|
|
136
138
|
def load_breweries_for_country( country_key, name, more_attribs={} )
|
137
|
-
country = Country.
|
139
|
+
country = Country.find_by!( key: country_key )
|
138
140
|
logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
|
139
141
|
|
140
142
|
more_attribs[ :country_id ] = country.id
|
data/lib/beerdb/readers/beer.rb
CHANGED
@@ -29,7 +29,7 @@ class BeerReader
|
|
29
29
|
|
30
30
|
def self.from_string( text, more_attribs={} )
|
31
31
|
BeerReader.new( text, more_attribs )
|
32
|
-
end
|
32
|
+
end
|
33
33
|
|
34
34
|
def initialize( text, more_attribs={} )
|
35
35
|
## todo/fix: how to add opts={} ???
|
@@ -44,12 +44,12 @@ class BeerReader
|
|
44
44
|
|
45
45
|
### todo: cleanup - check if [] works for build_title...
|
46
46
|
# better cleaner way ???
|
47
|
-
if @more_attribs[:
|
48
|
-
known_breweries_source = Brewery.where(
|
47
|
+
if @more_attribs[:state_id].present?
|
48
|
+
known_breweries_source = Brewery.where( state_id: @more_attribs[:state_id] )
|
49
49
|
elsif @more_attribs[:country_id].present?
|
50
50
|
known_breweries_source = Brewery.where( country_id: @more_attribs[:country_id] )
|
51
51
|
else
|
52
|
-
logger.warn "no
|
52
|
+
logger.warn "no state or country specified; use empty brewery ary for header mapper"
|
53
53
|
known_breweries_source = []
|
54
54
|
end
|
55
55
|
|
@@ -61,7 +61,7 @@ class BeerReader
|
|
61
61
|
## note: check for header attrib; if present remove
|
62
62
|
### todo: cleanup code later
|
63
63
|
## fix: add to new_attributes hash instead of values ary
|
64
|
-
## - fix: match_brewery() move
|
64
|
+
## - fix: match_brewery() move state,city code out of values loop for reuse at the end
|
65
65
|
if new_attributes[:header].present?
|
66
66
|
brewery_line = new_attributes[:header].dup # note: make sure we make a copy; will use in-place string ops
|
67
67
|
new_attributes.delete(:header) ## note: do NOT forget to remove from hash!
|
data/lib/beerdb/schema.rb
CHANGED
@@ -3,9 +3,11 @@
|
|
3
3
|
module BeerDb
|
4
4
|
|
5
5
|
|
6
|
-
class CreateDb
|
6
|
+
class CreateDb
|
7
|
+
|
7
8
|
|
8
9
|
def up
|
10
|
+
ActiveRecord::Schema.define do
|
9
11
|
|
10
12
|
create_table :beers do |t|
|
11
13
|
t.string :key, null: false # import/export key
|
@@ -26,7 +28,7 @@ create_table :beers do |t|
|
|
26
28
|
## add t.boolean :lite flag ??
|
27
29
|
t.decimal :kcal, precision: 10, scale: 2 # kcal/100ml e.g. 45.0 kcal/100ml
|
28
30
|
|
29
|
-
## check: why decimal and not float?
|
31
|
+
## check: why decimal and not float?
|
30
32
|
t.decimal :abv, precision: 10, scale: 2 # Alcohol by volume (abbreviated as ABV, abv, or alc/vol) e.g. 4.9 %
|
31
33
|
t.decimal :og, precision: 10, scale: 2 # malt extract (original gravity) in plato
|
32
34
|
t.integer :srm # color in srm
|
@@ -73,7 +75,7 @@ create_table :beers do |t|
|
|
73
75
|
|
74
76
|
|
75
77
|
t.references :country, null: false
|
76
|
-
t.references :
|
78
|
+
t.references :state # optional
|
77
79
|
t.references :city # optional
|
78
80
|
|
79
81
|
t.timestamps
|
@@ -89,7 +91,7 @@ create_table :brands do |t| # beer families (sharing same name e.g. brand)
|
|
89
91
|
t.integer :since
|
90
92
|
|
91
93
|
## scope of brand (global/intern'l/national/regional/local) ??
|
92
|
-
t.boolean :global, null: false, default: false
|
94
|
+
t.boolean :global, null: false, default: false
|
93
95
|
t.boolean :internl, null: false, default: false
|
94
96
|
t.boolean :national, null: false, default: false
|
95
97
|
t.boolean :regional, null: false, default: false
|
@@ -108,7 +110,7 @@ create_table :brands do |t| # beer families (sharing same name e.g. brand)
|
|
108
110
|
t.references :brewery # optional (for now)
|
109
111
|
|
110
112
|
t.references :country, null: false
|
111
|
-
t.references :
|
113
|
+
t.references :state # optional
|
112
114
|
t.references :city # optional
|
113
115
|
|
114
116
|
t.timestamps
|
@@ -124,7 +126,7 @@ create_table :breweries do |t|
|
|
124
126
|
## fix: add flag for ca./about boolean opened_guess / opened_est / opened_??
|
125
127
|
## ca. / about 1010 marker e.g t.boolean : opened_est (for estimate) or similar!!!
|
126
128
|
## renamed to founded to since
|
127
|
-
## t.integer :founded # year founded/established - todo/fix: rename to since?
|
129
|
+
## t.integer :founded # year founded/established - todo/fix: rename to since?
|
128
130
|
t.integer :closed # optional; year brewery closed
|
129
131
|
|
130
132
|
## todo: add optional parent brewery (owned_by) ???
|
@@ -177,18 +179,15 @@ create_table :breweries do |t|
|
|
177
179
|
# (or better use has many parents w/ percentage of ownership; might not be 100%)
|
178
180
|
|
179
181
|
t.references :country, null: false
|
180
|
-
t.references :
|
182
|
+
t.references :state # optional
|
181
183
|
t.references :city # optional
|
182
|
-
|
184
|
+
|
183
185
|
t.timestamps
|
184
186
|
end
|
185
187
|
|
188
|
+
end # Schema.define
|
186
189
|
end # method up
|
187
190
|
|
188
|
-
def down
|
189
|
-
raise ActiveRecord::IrreversibleMigration
|
190
|
-
end
|
191
|
-
|
192
191
|
|
193
192
|
end # class CreateDb
|
194
193
|
|
data/lib/beerdb/version.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
module BeerDb
|
4
4
|
MAJOR = 1 ## todo: namespace inside version or something - why? why not??
|
5
|
-
MINOR =
|
6
|
-
PATCH =
|
5
|
+
MINOR = 1
|
6
|
+
PATCH = 0
|
7
7
|
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
8
8
|
|
9
9
|
def self.version
|
@@ -18,4 +18,3 @@ module BeerDb
|
|
18
18
|
"#{File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )}"
|
19
19
|
end
|
20
20
|
end # module BeerDb
|
21
|
-
|
data/test/helper.rb
CHANGED
@@ -11,7 +11,7 @@ require 'beerdb/models'
|
|
11
11
|
|
12
12
|
|
13
13
|
Country = WorldDb::Model::Country
|
14
|
-
|
14
|
+
State = WorldDb::Model::State
|
15
15
|
|
16
16
|
## todo: get all models aliases (e.g. from console script)
|
17
17
|
|
@@ -46,18 +46,18 @@ def fillup_in_memory_db
|
|
46
46
|
## add some counties
|
47
47
|
|
48
48
|
at = Country.create!( key: 'at', title: 'Austria', code: 'AUT', pop: 0, area: 0 )
|
49
|
-
|
50
|
-
|
49
|
+
State.create!( key: 'w', title: 'Wien', country_id: at.id )
|
50
|
+
|
51
51
|
de = Country.create!( key: 'de', title: 'Germany', code: 'DEU', pop: 0, area: 0 )
|
52
|
-
|
53
|
-
|
52
|
+
State.create!( key: 'by', title: 'Bayern', country_id: de.id )
|
53
|
+
|
54
54
|
end
|
55
55
|
|
56
56
|
setup_in_memory_db()
|
57
57
|
fillup_in_memory_db()
|
58
58
|
|
59
|
-
AT = Country.
|
60
|
-
W =
|
59
|
+
AT = Country.find_by!( key: 'at' )
|
60
|
+
W = State.find_by!( key: 'w' )
|
61
61
|
|
62
|
-
DE = Country.
|
63
|
-
BY =
|
62
|
+
DE = Country.find_by!( key: 'de' )
|
63
|
+
BY = State.find_by!( key: 'by' )
|
@@ -46,7 +46,7 @@ class TestFixtureMatchers < MiniTest::Test
|
|
46
46
|
end # method test_country
|
47
47
|
|
48
48
|
|
49
|
-
def
|
49
|
+
def test_country_n_state
|
50
50
|
|
51
51
|
beers_at = [
|
52
52
|
'europe/at-austria/w-wien/beers',
|
@@ -57,9 +57,9 @@ class TestFixtureMatchers < MiniTest::Test
|
|
57
57
|
]
|
58
58
|
|
59
59
|
beers_at.each do |name|
|
60
|
-
found =
|
60
|
+
found = match_beers_for_country_n_state( name ) do |country_key,state_key|
|
61
61
|
assert( country_key == 'at')
|
62
|
-
assert(
|
62
|
+
assert( state_key == 'w' )
|
63
63
|
end
|
64
64
|
assert( found == true )
|
65
65
|
end
|
@@ -73,13 +73,13 @@ class TestFixtureMatchers < MiniTest::Test
|
|
73
73
|
]
|
74
74
|
|
75
75
|
breweries_at.each do |name|
|
76
|
-
found =
|
76
|
+
found = match_breweries_for_country_n_state( name ) do |country_key,state_key|
|
77
77
|
assert( country_key == 'at')
|
78
|
-
assert(
|
78
|
+
assert( state_key == 'w' )
|
79
79
|
end
|
80
80
|
assert( found == true )
|
81
81
|
end
|
82
|
-
end # method
|
82
|
+
end # method test_country_n_state
|
83
83
|
|
84
84
|
|
85
|
-
end # class TestFixtureMatchers
|
85
|
+
end # class TestFixtureMatchers
|
data/test/test_values.rb
CHANGED
@@ -37,7 +37,7 @@ class TestValues < MiniTest::Test
|
|
37
37
|
assert_equal beer.id, beer2.id
|
38
38
|
|
39
39
|
assert_equal beer.title, values[0]
|
40
|
-
assert_equal beer.country_id, AT.id
|
40
|
+
assert_equal beer.country_id, AT.id
|
41
41
|
assert_equal beer.country.title, AT.title
|
42
42
|
assert_equal beer.abv, 5.2
|
43
43
|
assert_equal beer.og, 11.8
|
@@ -64,7 +64,7 @@ class TestValues < MiniTest::Test
|
|
64
64
|
country_id: AT.id
|
65
65
|
}
|
66
66
|
|
67
|
-
|
67
|
+
|
68
68
|
by = Brewery.create_or_update_from_values( values, more_attribs )
|
69
69
|
|
70
70
|
by2 = Brewery.find_by_key!( key )
|
@@ -122,7 +122,7 @@ class TestValues < MiniTest::Test
|
|
122
122
|
|
123
123
|
## fix!!!!!!!!: use different brewery! use one w/ synonyms
|
124
124
|
###
|
125
|
-
|
125
|
+
|
126
126
|
# ottakringer, Ottakringer Brauerei, 1838, www.ottakringer.at, WI, city:wien, 1160 Wien // Ottakringer Platz 1
|
127
127
|
# brands: Ottakringer
|
128
128
|
|
@@ -170,7 +170,7 @@ class TestValues < MiniTest::Test
|
|
170
170
|
|
171
171
|
more_attribs = {
|
172
172
|
country_id: AT.id,
|
173
|
-
|
173
|
+
state_id: W.id
|
174
174
|
}
|
175
175
|
|
176
176
|
by = Brewery.create_or_update_from_values( values, more_attribs )
|
@@ -193,7 +193,7 @@ class TestValues < MiniTest::Test
|
|
193
193
|
assert( br.brewery_id == by.id )
|
194
194
|
assert( br.brewery.title == by.title )
|
195
195
|
assert( br.country_id == by.country_id )
|
196
|
-
|
196
|
+
|
197
197
|
# todo: check for auto-created city
|
198
198
|
assert( by.city.title == 'Wien' )
|
199
199
|
end
|
@@ -201,12 +201,12 @@ class TestValues < MiniTest::Test
|
|
201
201
|
|
202
202
|
def test_load_brewery_values_w_city_de
|
203
203
|
|
204
|
-
# hofbraeu, Hofbräu München, 1589, www.hofbraeu-muenchen.de, 81829 München // Hofbräuallee 1
|
204
|
+
# hofbraeu, Hofbräu München, 1589, www.hofbraeu-muenchen.de, 81829 München // Hofbräuallee 1
|
205
205
|
|
206
206
|
key = 'hofbraeu'
|
207
207
|
|
208
208
|
values = [
|
209
|
-
key,
|
209
|
+
key,
|
210
210
|
'Hofbräu München',
|
211
211
|
'1589',
|
212
212
|
'www.hofbraeu-muenchen.de',
|
@@ -216,7 +216,7 @@ class TestValues < MiniTest::Test
|
|
216
216
|
|
217
217
|
more_attribs = {
|
218
218
|
country_id: DE.id,
|
219
|
-
|
219
|
+
state_id: BY.id
|
220
220
|
}
|
221
221
|
|
222
222
|
by = Brewery.create_or_update_from_values( values, more_attribs )
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beerdb-models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: worlddb-models
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.3.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
26
|
+
version: 2.3.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rdoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
47
|
+
version: '3.16'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
54
|
+
version: '3.16'
|
55
55
|
description: beerdb-models - beer.db schema 'n' models for easy (re)use
|
56
56
|
email: beerdb@googlegroups.com
|
57
57
|
executables: []
|
@@ -61,7 +61,6 @@ extra_rdoc_files:
|
|
61
61
|
- Manifest.txt
|
62
62
|
- README.md
|
63
63
|
files:
|
64
|
-
- ".gemtest"
|
65
64
|
- HISTORY.md
|
66
65
|
- Manifest.txt
|
67
66
|
- README.md
|
@@ -75,7 +74,7 @@ files:
|
|
75
74
|
- lib/beerdb/models/tag.rb
|
76
75
|
- lib/beerdb/models/world/city.rb
|
77
76
|
- lib/beerdb/models/world/country.rb
|
78
|
-
- lib/beerdb/models/world/
|
77
|
+
- lib/beerdb/models/world/state.rb
|
79
78
|
- lib/beerdb/reader.rb
|
80
79
|
- lib/beerdb/reader_file.rb
|
81
80
|
- lib/beerdb/reader_zip.rb
|
@@ -92,7 +91,7 @@ files:
|
|
92
91
|
- test/test_fixture_matchers.rb
|
93
92
|
- test/test_reader_quick.rb
|
94
93
|
- test/test_values.rb
|
95
|
-
homepage: https://github.com/beerkit/beer.db
|
94
|
+
homepage: https://github.com/beerkit/beer.db
|
96
95
|
licenses:
|
97
96
|
- Public Domain
|
98
97
|
metadata: {}
|
@@ -106,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
105
|
requirements:
|
107
106
|
- - ">="
|
108
107
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
108
|
+
version: '2.3'
|
110
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
110
|
requirements:
|
112
111
|
- - ">="
|
@@ -114,11 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
113
|
version: '0'
|
115
114
|
requirements: []
|
116
115
|
rubyforge_project:
|
117
|
-
rubygems_version: 2.
|
116
|
+
rubygems_version: 2.5.2
|
118
117
|
signing_key:
|
119
118
|
specification_version: 4
|
120
119
|
summary: beerdb-models - beer.db schema 'n' models for easy (re)use
|
121
|
-
test_files:
|
122
|
-
- test/test_values.rb
|
123
|
-
- test/test_reader_quick.rb
|
124
|
-
- test/test_fixture_matchers.rb
|
120
|
+
test_files: []
|
data/.gemtest
DELETED
File without changes
|