beerdb 0.6.13 → 0.6.14
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.
- data/lib/beerdb/models/brewery.rb +57 -3
- data/lib/beerdb/reader.rb +13 -5
- data/lib/beerdb/schema.rb +27 -7
- data/lib/beerdb/server/views/_version.erb +1 -1
- data/lib/beerdb/server/views/index.erb +2 -2
- data/lib/beerdb/version.rb +1 -1
- data/test/test_values.rb +62 -0
- metadata +12 -12
@@ -66,6 +66,57 @@ class Brewery < ActiveRecord::Base
|
|
66
66
|
end
|
67
67
|
|
68
68
|
|
69
|
+
def self.find_grade( text ) # NB: returns ary [grade,text] / two values
|
70
|
+
grade = 4 # defaults to grade 4 e.g *** => 1, ** => 2, * => 3, -/- => 4
|
71
|
+
|
72
|
+
text = text.sub( /\s+(\*{1,3})\s*$/ ) do |_| # NB: stars must end field/value
|
73
|
+
if $1 == '***'
|
74
|
+
grade = 1
|
75
|
+
elsif $1 == '**'
|
76
|
+
grade = 2
|
77
|
+
elsif $1 == '*'
|
78
|
+
grade = 3
|
79
|
+
else
|
80
|
+
# unknown grade; not possible, is'it?
|
81
|
+
end
|
82
|
+
'' # remove * from title if found
|
83
|
+
end
|
84
|
+
|
85
|
+
[grade,text]
|
86
|
+
end
|
87
|
+
|
88
|
+
## todo/fix: move to helper for reuse in textutils!!! (use for beer model too)
|
89
|
+
|
90
|
+
def self.find_grade_in_titles!( new_attributes )
|
91
|
+
|
92
|
+
# NB: will add a new attributes grade to hash e.g. new_attributes[:grade] = grade
|
93
|
+
|
94
|
+
if new_attributes[:title].present?
|
95
|
+
grade, title = find_grade( new_attributes[:title] )
|
96
|
+
|
97
|
+
if grade == 1 || grade == 2 || grade == 3 # grade found/present; use stripped title
|
98
|
+
new_attributes[:title] = title
|
99
|
+
new_attributes[:grade] = grade
|
100
|
+
return grade
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
if new_attributes[:synonyms].present?
|
105
|
+
grade, synonyms = find_grade( new_attributes[:synonyms] )
|
106
|
+
|
107
|
+
if grade == 1 || grade == 2 || grade == 3 # grade found/present; use stripped title
|
108
|
+
new_attributes[:synonyms] = synonyms
|
109
|
+
new_attributes[:grade] = grade
|
110
|
+
return grade
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
grade = 4 # defaults to grade 4 e.g *** => 1, ** => 2, * => 3, -/- => 4
|
115
|
+
new_attributes[:grade] = grade
|
116
|
+
grade
|
117
|
+
end
|
118
|
+
|
119
|
+
|
69
120
|
def self.create_or_update_from_values( new_attributes, values )
|
70
121
|
|
71
122
|
## fix: add/configure logger for ActiveRecord!!!
|
@@ -74,6 +125,9 @@ class Brewery < ActiveRecord::Base
|
|
74
125
|
value_tag_keys = []
|
75
126
|
value_brands = ''
|
76
127
|
|
128
|
+
## check for grades (e.g. ***/**/*) in titles (will add new_attributes[:grade] to hash)
|
129
|
+
find_grade_in_titles!( new_attributes )
|
130
|
+
|
77
131
|
### check for "default" tags - that is, if present new_attributes[:tags] remove from hash
|
78
132
|
|
79
133
|
if new_attributes[:tags].present?
|
@@ -203,11 +257,11 @@ class Brewery < ActiveRecord::Base
|
|
203
257
|
}
|
204
258
|
|
205
259
|
if city.present?
|
206
|
-
logger.
|
260
|
+
logger.debug "update City #{city.id}-#{city.key}:"
|
207
261
|
# todo: check - any point in updating city? for now no new attributes
|
208
262
|
# update only for title - title will change?
|
209
263
|
else
|
210
|
-
logger.
|
264
|
+
logger.debug "create City:"
|
211
265
|
city = City.new
|
212
266
|
city_attributes[ :key ] = city_key # NB: new record; include/update key
|
213
267
|
end
|
@@ -220,7 +274,7 @@ class Brewery < ActiveRecord::Base
|
|
220
274
|
rec.city_id = city.id
|
221
275
|
rec.save!
|
222
276
|
else
|
223
|
-
logger.warn "auto-add city
|
277
|
+
logger.warn "auto-add city for #{new_attributes[:key]} (#{country_key}) >>#{new_attributes[:address]}<< failed; no city title found"
|
224
278
|
end
|
225
279
|
end
|
226
280
|
end
|
data/lib/beerdb/reader.rb
CHANGED
@@ -47,7 +47,7 @@ class Reader
|
|
47
47
|
load_brewery_prod( name )
|
48
48
|
elsif name =~ /\/([a-z]{2})\.wikipedia/ # e.g. de.wikipedia
|
49
49
|
# auto-add required lang e.g. de or en etc.
|
50
|
-
|
50
|
+
load_brewery_wikipedia( $1, name )
|
51
51
|
elsif name =~ /\/([a-z]{2})-[^\/]+\/([a-z]{1,2})-[^\/]+\/breweries/
|
52
52
|
# new style: e.g. /at-austria/w-wien/breweries
|
53
53
|
# auto-add required country n region code (from folder structure)
|
@@ -66,7 +66,7 @@ class Reader
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
def
|
69
|
+
def load_brewery_wikipedia( lang_key, name )
|
70
70
|
path = "#{include_path}/#{name}.yml"
|
71
71
|
|
72
72
|
logger.info "parsing data '#{name}' (#{path})..."
|
@@ -76,9 +76,9 @@ class Reader
|
|
76
76
|
reader.each do |key, value|
|
77
77
|
brewery = Brewery.find_by_key!( key )
|
78
78
|
|
79
|
-
|
80
|
-
logger.debug " adding #{key} => >#{
|
81
|
-
brewery.
|
79
|
+
wikipedia = "#{lang_key}.wikipedia.org/wiki/#{value.strip}"
|
80
|
+
logger.debug " adding #{key} => >#{wikipedia}<"
|
81
|
+
brewery.wikipedia = wikipedia
|
82
82
|
brewery.save!
|
83
83
|
end
|
84
84
|
|
@@ -119,6 +119,8 @@ class Reader
|
|
119
119
|
|
120
120
|
more_values[ :country_id ] = country.id
|
121
121
|
more_values[ :region_id ] = region.id
|
122
|
+
|
123
|
+
more_values[ :txt ] = name # store source ref
|
122
124
|
|
123
125
|
load_beers_worker( name, more_values )
|
124
126
|
end
|
@@ -129,6 +131,8 @@ class Reader
|
|
129
131
|
|
130
132
|
more_values[ :country_id ] = country.id
|
131
133
|
|
134
|
+
more_values[ :txt ] = name # store source ref
|
135
|
+
|
132
136
|
load_beers_worker( name, more_values )
|
133
137
|
end
|
134
138
|
|
@@ -158,6 +162,8 @@ class Reader
|
|
158
162
|
more_values[ :country_id ] = country.id
|
159
163
|
more_values[ :region_id ] = region.id
|
160
164
|
|
165
|
+
more_values[ :txt ] = name # store source ref
|
166
|
+
|
161
167
|
load_breweries_worker( name, more_values )
|
162
168
|
end
|
163
169
|
|
@@ -167,6 +173,8 @@ class Reader
|
|
167
173
|
|
168
174
|
more_values[ :country_id ] = country.id
|
169
175
|
|
176
|
+
more_values[ :txt ] = name # store source ref
|
177
|
+
|
170
178
|
load_breweries_worker( name, more_values )
|
171
179
|
end
|
172
180
|
|
data/lib/beerdb/schema.rb
CHANGED
@@ -15,10 +15,11 @@ create_table :beers do |t|
|
|
15
15
|
t.string :web # optional url link (e.g. )
|
16
16
|
t.integer :since # optional year (e.g. 1896)
|
17
17
|
|
18
|
-
t.boolean :bottle, :null => false, :default => false # Flaschenbier
|
19
|
-
t.boolean :draft, :null => false, :default => false # Fassbier
|
18
|
+
# t.boolean :bottle, :null => false, :default => false # Flaschenbier
|
19
|
+
# t.boolean :draft, :null => false, :default => false # Fassbier
|
20
20
|
## todo: check seasonal is it proper english?
|
21
21
|
t.boolean :seasonal, :null => false, :default => false # all year or just eg. Festbier/Oktoberfest Special
|
22
|
+
t.boolean :limited, :null => false, :default => false # one year or season only
|
22
23
|
## todo: add microbrew/brewpub flag?
|
23
24
|
#### t.boolean :brewpub, :null => false, :default => false
|
24
25
|
|
@@ -64,7 +65,12 @@ create_table :beers do |t|
|
|
64
65
|
# - B-grade /2nd class/ tier2 / regular, major, - todo: find better names?
|
65
66
|
# - C-grade /3nd class/ tier3/ / speciality, minor ?
|
66
67
|
|
67
|
-
|
68
|
+
# use stars in .txt e.g. # ***/**/*/- => 1/2/3/4
|
69
|
+
t.integer :grade, :null => false, :default => 4
|
70
|
+
|
71
|
+
t.string :txt # source ref
|
72
|
+
t.boolean :txt_auto, :null => false, :default => false # inline? got auto-added?
|
73
|
+
|
68
74
|
|
69
75
|
t.references :country, :null => false
|
70
76
|
t.references :region # optional
|
@@ -89,7 +95,15 @@ create_table :brands do |t| # beer families (sharing same name e.g. brand)
|
|
89
95
|
t.boolean :regional, :null => false, :default => false
|
90
96
|
t.boolean :local, :null => false, :default => false
|
91
97
|
|
92
|
-
t.integer :
|
98
|
+
# t.integer :brand_grade # 1/2/3/4/5 (global/intern'l/national/regional/local)
|
99
|
+
|
100
|
+
# use stars in .txt e.g. # ***/**/*/- => 1/2/3/4
|
101
|
+
t.integer :grade, :null => false, :default => 4
|
102
|
+
# -- todo: add plus 1 for brewery w/ *** ??
|
103
|
+
|
104
|
+
t.string :txt # source ref
|
105
|
+
t.boolean :txt_auto, :null => false, :default => false # inline? got auto-added?
|
106
|
+
|
93
107
|
|
94
108
|
t.references :brewery # optional (for now)
|
95
109
|
|
@@ -113,6 +127,7 @@ create_table :breweries do |t|
|
|
113
127
|
## todo: add optional parent brewery (owned_by)
|
114
128
|
|
115
129
|
t.integer :prod # (estimated) annual production/capacity in hl (1hl=100l) e.g. megabrewery 2_000_000, microbrewery 1_000 hl; brewbup 500 hl etc.
|
130
|
+
t.integer :prod_grade # 1/2/3/4/5/6/7/8/9/10/11
|
116
131
|
|
117
132
|
# grade - classified using annual production (capacity) in hl
|
118
133
|
# < 1_000 hl => 11
|
@@ -127,11 +142,16 @@ create_table :breweries do |t|
|
|
127
142
|
# < 2_000_000 hl => 2
|
128
143
|
# > 2_000_000 hl => 1
|
129
144
|
|
130
|
-
t.integer :grade # 1/2/3/4/5/6/7/8/9/10/11
|
131
145
|
|
146
|
+
# use stars in .txt e.g. # ***/**/*/- => 1/2/3/4
|
147
|
+
t.integer :grade, :null => false, :default => 4
|
132
148
|
|
133
|
-
|
134
|
-
t.string :
|
149
|
+
|
150
|
+
t.string :txt # source ref
|
151
|
+
t.boolean :txt_auto, :null => false, :default => false # inline? got auto-added?
|
152
|
+
|
153
|
+
t.string :web # optional web page (e.g. www.ottakringer.at)
|
154
|
+
t.string :wikipedia # optional wiki(pedia page)
|
135
155
|
|
136
156
|
t.boolean :indie # independent brewery (flag)
|
137
157
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div class='version'>
|
2
|
-
<a href="http://groups.google.com/group/
|
2
|
+
<a href="http://groups.google.com/group/beerdb">Questions? Comments?</a> |
|
3
3
|
<a href="https://github.com/geraldb/world.db">world.db/<%= WorldDb::VERSION %></a>,
|
4
4
|
<a href="https://github.com/geraldb/beer.db">beer.db/<%= BeerDb::VERSION %></a> -
|
5
5
|
<span>Ruby/<%= "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}/#{RUBY_PLATFORM})" %> on</span>
|
data/lib/beerdb/version.rb
CHANGED
data/test/test_values.rb
CHANGED
@@ -73,6 +73,7 @@ class TestValues < MiniTest::Unit::TestCase
|
|
73
73
|
assert( by.since == 1838 )
|
74
74
|
assert( by.web == 'www.ottakringer.at' )
|
75
75
|
assert( by.address == '1160 Wien // Ottakringer Platz 1' )
|
76
|
+
assert( by.grade == 4 )
|
76
77
|
|
77
78
|
# check auto-created brand
|
78
79
|
|
@@ -85,6 +86,67 @@ class TestValues < MiniTest::Unit::TestCase
|
|
85
86
|
end
|
86
87
|
|
87
88
|
|
89
|
+
def test_load_brewery_values_w_grade
|
90
|
+
|
91
|
+
# ottakringer, Ottakringer Brauerei, 1838, www.ottakringer.at, WI, city:wien, 1160 Wien // Ottakringer Platz 1
|
92
|
+
# brands: Ottakringer
|
93
|
+
|
94
|
+
new_attributes = {
|
95
|
+
key: 'ottakringer',
|
96
|
+
title: 'Ottakringer Brauerei **',
|
97
|
+
synonyms: '',
|
98
|
+
country_id: AT.id
|
99
|
+
}
|
100
|
+
|
101
|
+
values = [
|
102
|
+
'1838',
|
103
|
+
'www.ottakringer.at',
|
104
|
+
'1160 Wien // Ottakringer Platz 1',
|
105
|
+
'brands: Ottakringer'
|
106
|
+
]
|
107
|
+
|
108
|
+
by = Brewery.create_or_update_from_values( new_attributes, values )
|
109
|
+
|
110
|
+
by2 = Brewery.find_by_key!( new_attributes[:key] )
|
111
|
+
assert( by.id == by2.id )
|
112
|
+
|
113
|
+
assert( by.title == 'Ottakringer Brauerei' )
|
114
|
+
assert( by.grade == 2 )
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_load_brewery_values_w_grade_in_synonyms
|
118
|
+
|
119
|
+
## fix!!!!!!!!: use different brewery! use one w/ synonyms
|
120
|
+
###
|
121
|
+
|
122
|
+
# ottakringer, Ottakringer Brauerei, 1838, www.ottakringer.at, WI, city:wien, 1160 Wien // Ottakringer Platz 1
|
123
|
+
# brands: Ottakringer
|
124
|
+
|
125
|
+
new_attributes = {
|
126
|
+
key: 'ottakringer',
|
127
|
+
title: 'Ottakringer Brauerei',
|
128
|
+
synonyms: 'Otta **',
|
129
|
+
country_id: AT.id
|
130
|
+
}
|
131
|
+
|
132
|
+
values = [
|
133
|
+
'1838',
|
134
|
+
'www.ottakringer.at',
|
135
|
+
'1160 Wien // Ottakringer Platz 1',
|
136
|
+
'brands: Ottakringer'
|
137
|
+
]
|
138
|
+
|
139
|
+
by = Brewery.create_or_update_from_values( new_attributes, values )
|
140
|
+
|
141
|
+
by2 = Brewery.find_by_key!( new_attributes[:key] )
|
142
|
+
assert( by.id == by2.id )
|
143
|
+
|
144
|
+
assert( by.title == 'Ottakringer Brauerei' )
|
145
|
+
assert( by.synonyms == 'Otta' )
|
146
|
+
assert( by.grade == 2 )
|
147
|
+
end
|
148
|
+
|
149
|
+
|
88
150
|
def test_load_brewery_values_w_city_at
|
89
151
|
|
90
152
|
# ottakringer, Ottakringer Brauerei, 1838, www.ottakringer.at, WI, city:wien, 1160 Wien // Ottakringer Platz 1
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beerdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.14
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &86079670 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.2'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *86079670
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: worlddb
|
27
|
-
requirement: &
|
27
|
+
requirement: &86079430 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.6'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *86079430
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: commander
|
38
|
-
requirement: &
|
38
|
+
requirement: &86079180 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 4.1.3
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *86079180
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rdoc
|
49
|
-
requirement: &
|
49
|
+
requirement: &86078950 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '3.10'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *86078950
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: hoe
|
60
|
-
requirement: &
|
60
|
+
requirement: &86078720 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '3.3'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *86078720
|
69
69
|
description: beerdb - beer.db command line tool
|
70
70
|
email: beerdb@googlegroups.com
|
71
71
|
executables:
|