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.
@@ -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.info "update City #{city.id}-#{city.key}:"
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.info "create City:"
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 (#{country_key}) for #{new_attributes[:key]} >>#{new_attributes[:address]}<< failed; no city title found"
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
- load_brewery_wiki( $1, name )
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 load_brewery_wiki( lang_key, name )
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
- wiki = "#{lang_key}.wikipedia.org/wiki/#{value.strip}"
80
- logger.debug " adding #{key} => >#{wiki}<"
81
- brewery.wiki = wiki
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
- t.integer :grade # 1/2/3 (A/B/C)
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 :grade # 1/2/3/4/5 (global/intern'l/national/regional/local)
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
- t.string :web # optional web page (e.g. www.ottakringer.at)
134
- t.string :wiki # optional wiki(pedia page)
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/opensport">Questions? Comments?</a> |
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>
@@ -49,8 +49,8 @@
49
49
  <tr>
50
50
  <td>
51
51
  <code>
52
- <a href='<%= url("/beer/dosequisxxamber") %>'>
53
- /beer/<span class='params'>dosequisxxamber</span>
52
+ <a href='<%= url("/beer/dosequisamber") %>'>
53
+ /beer/<span class='params'>dosequisamber</span>
54
54
  </a>
55
55
  </code>
56
56
  </td>
@@ -1,4 +1,4 @@
1
1
 
2
2
  module BeerDb
3
- VERSION = '0.6.13'
3
+ VERSION = '0.6.14'
4
4
  end
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.13
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-13 00:00:00.000000000 Z
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: &79691710 !ruby/object:Gem::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: *79691710
24
+ version_requirements: *86079670
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: worlddb
27
- requirement: &79691460 !ruby/object:Gem::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: *79691460
35
+ version_requirements: *86079430
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: commander
38
- requirement: &79691230 !ruby/object:Gem::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: *79691230
46
+ version_requirements: *86079180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &79691000 !ruby/object:Gem::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: *79691000
57
+ version_requirements: *86078950
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hoe
60
- requirement: &79690780 !ruby/object:Gem::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: *79690780
68
+ version_requirements: *86078720
69
69
  description: beerdb - beer.db command line tool
70
70
  email: beerdb@googlegroups.com
71
71
  executables: