beerdb 0.6.13 → 0.6.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: