beerdb 0.6.8 → 0.6.9

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.
File without changes
@@ -185,6 +185,8 @@ class Beer < ActiveRecord::Base
185
185
  rec.tags << tag
186
186
  end
187
187
  end
188
+
189
+ rec # NB: return created or updated obj
188
190
 
189
191
  end # method create_or_update_from_values
190
192
 
@@ -210,6 +210,8 @@ class Brewery < ActiveRecord::Base
210
210
  end
211
211
  end
212
212
 
213
+ rec # NB: return created or updated obj
214
+
213
215
  end # method create_or_update_from_values
214
216
 
215
217
 
@@ -32,18 +32,33 @@ class Reader
32
32
  def load( name )
33
33
 
34
34
  if name =~ /\/([a-z]{2})\/beers/
35
- ## auto-add required country code (from folder structure)
36
- load_beers( $1, name )
35
+ # classic style: e.g. /at/beers
36
+ # auto-add required country code (from folder structure)
37
+ load_beers_for_country( $1, name )
38
+ elsif name =~ /\/([a-z]{2})-[^\/]+\/([a-z]{1,2})-[^\/]+\/beers/
39
+ # new style: e.g. /at-austria/w-wien/beers
40
+ # auto-add required country n region code (from folder structure)
41
+ load_beers_for_country_n_region( $1, $2, name )
42
+ elsif name =~ /\/([a-z]{2})-[^\/]+\/beers/
43
+ # new style: e.g. /at-austria/beers
44
+ # auto-add required country code (from folder structure)
45
+ load_beers_for_country( $1, name )
37
46
  elsif name =~ /\.hl$/ # e.g. breweries.hl # NB: must end w/ .hl
38
47
  load_brewery_prod( name )
39
48
  elsif name =~ /\/([a-z]{2})\.wikipedia/ # e.g. de.wikipedia
40
49
  # auto-add required lang e.g. de or en etc.
41
50
  load_brewery_wiki( $1, name )
42
- elsif name =~ /\/([a-z]{2})\/breweries_([a-z]{1,2})(?:_|$)/ # NB: region key must end name or be followed by underscore (_)
43
- ## auto-add required country code (from folder structure) plus region
51
+ elsif name =~ /\/([a-z]{2})-[^\/]+\/([a-z]{1,2})-[^\/]+\/breweries/
52
+ # new style: e.g. /at-austria/w-wien/breweries
53
+ # auto-add required country n region code (from folder structure)
44
54
  load_breweries_for_country_n_region( $1, $2, name )
55
+ elsif name =~ /\/([a-z]{2})-[^\/]+\/breweries/
56
+ # new style: e.g. /at-austria/breweries
57
+ # auto-add required country (from folder structure)
58
+ load_breweries_for_country( $1, name )
45
59
  elsif name =~ /\/([a-z]{2})\/breweries/
46
- ## auto-add required country code (from folder structure)
60
+ # classic style: e.g. /at/breweries
61
+ # auto-add required country code (from folder structure)
47
62
  load_breweries_for_country( $1, name )
48
63
  else
49
64
  logger.error "unknown beer.db fixture type >#{name}<"
@@ -94,12 +109,30 @@ class Reader
94
109
  Prop.create_from_fixture!( name, path )
95
110
  end
96
111
 
97
- def load_beers( country_key, name, more_values={} )
112
+ def load_beers_for_country_n_region( country_key, region_key, name, more_values={} )
98
113
  country = Country.find_by_key!( country_key )
99
114
  logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
100
115
 
116
+ # NB: region lookup requires country id (region key only unique for country)
117
+ region = Region.find_by_key_and_country_id!( region_key, country.id )
118
+ logger.debug "Region #{region.key} >#{region.title}<"
119
+
101
120
  more_values[ :country_id ] = country.id
121
+ more_values[ :region_id ] = region.id
122
+
123
+ load_beers_worker( name, more_values )
124
+ end
102
125
 
126
+ def load_beers_for_country( country_key, name, more_values={} )
127
+ country = Country.find_by_key!( country_key )
128
+ logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
129
+
130
+ more_values[ :country_id ] = country.id
131
+
132
+ load_beers_worker( name, more_values )
133
+ end
134
+
135
+ def load_beers( name, more_values={} )
103
136
  path = "#{include_path}/#{name}.txt"
104
137
 
105
138
  logger.info "parsing data '#{name}' (#{path})..."
@@ -128,7 +161,6 @@ class Reader
128
161
  load_breweries_worker( name, more_values )
129
162
  end
130
163
 
131
-
132
164
  def load_breweries_for_country( country_key, name, more_values={} )
133
165
  country = Country.find_by_key!( country_key )
134
166
  logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
@@ -138,7 +170,6 @@ class Reader
138
170
  load_breweries_worker( name, more_values )
139
171
  end
140
172
 
141
-
142
173
  def load_breweries_worker( name, more_values={} )
143
174
  path = "#{include_path}/#{name}.txt"
144
175
 
@@ -72,7 +72,7 @@ class Server < Sinatra::Base
72
72
 
73
73
  if ['r', 'rnd', 'rand', 'random'].include?( key )
74
74
  # special key for random beer
75
- beer = Beer.rnd
75
+ beer = Beer.rnd.first
76
76
  else
77
77
  beer = Beer.find_by_key!( key )
78
78
  end
@@ -107,7 +107,7 @@ class Server < Sinatra::Base
107
107
 
108
108
  if ['r', 'rnd', 'rand', 'random'].include?( key )
109
109
  # special key for random brewery
110
- brewery = Brewery.rnd
110
+ brewery = Brewery.rnd.first
111
111
  else
112
112
  brewery = Brewery.find_by_key!( key )
113
113
  end
@@ -3,20 +3,6 @@
3
3
 
4
4
  <h2>Examples</h2>
5
5
 
6
- <h3>Get random beer <code>/beer/rand</code></h3>
7
-
8
- <table>
9
- <tr>
10
- <td>
11
- <code>
12
- <a href='<%= url("/beer/rand") %>'>
13
- /beer/<span class='params'>rand</span>
14
- </a>
15
- </code>
16
- </td>
17
- </tr>
18
- </table>
19
-
20
6
  <h3>Get beer by key <code>/beer/<span class='params'>:key</span></code></h3>
21
7
 
22
8
  <table>
@@ -82,21 +68,21 @@
82
68
 
83
69
  </table>
84
70
 
85
-
86
- <h3>Get random brewery <code>/brewery/rand</code></h3>
71
+ <h3>Get random beer <code>/beer/<span class='params'>rand</span></code></h3>
87
72
 
88
73
  <table>
89
74
  <tr>
90
75
  <td>
91
76
  <code>
92
- <a href='<%= url("/brewery/rand") %>'>
93
- /brewery/<span class='params'>rand</span>
77
+ <a href='<%= url("/beer/rand") %>'>
78
+ /beer/<span class='params'>rand</span>
94
79
  </a>
95
80
  </code>
96
81
  </td>
97
82
  </tr>
98
83
  </table>
99
84
 
85
+
100
86
  <h3>Get brewery by key <code>/brewery/<span class='params'>:key</span></code></h3>
101
87
 
102
88
  <table>
@@ -113,7 +99,7 @@
113
99
  <tr>
114
100
  <td>
115
101
  <code>
116
- <a href='<%= url("/brewery/fullers") %>'>
102
+ <a href='<%= url("/brewery/fuller") %>'>
117
103
  /brewery/<span class='params'>fullers</span>
118
104
  </a>
119
105
  </code>
@@ -152,5 +138,19 @@
152
138
 
153
139
  </table>
154
140
 
141
+ <h3>Get random brewery <code>/brewery/<span class='params'>rand</span></code></h3>
142
+
143
+ <table>
144
+ <tr>
145
+ <td>
146
+ <code>
147
+ <a href='<%= url("/brewery/rand") %>'>
148
+ /brewery/<span class='params'>rand</span>
149
+ </a>
150
+ </code>
151
+ </td>
152
+ </tr>
153
+ </table>
154
+
155
155
 
156
156
  <%= erb :'_debug' %>
@@ -1,4 +1,4 @@
1
1
 
2
2
  module BeerDb
3
- VERSION = '0.6.8'
3
+ VERSION = '0.6.9'
4
4
  end
@@ -0,0 +1,88 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_helper.rb
6
+ # or better
7
+ # rake test
8
+
9
+ require 'helper'
10
+
11
+ class TestValues < MiniTest::Unit::TestCase
12
+
13
+ def setup
14
+ # delete all beers, brands, breweries in in-memory only db
15
+ BeerDb.delete!
16
+ end
17
+
18
+ def test_load_beer_values
19
+
20
+ new_attributes = {
21
+ key: 'ottakringerpur',
22
+ title: 'Ottakringer (Gold Fassl) Pur {Bio}',
23
+ synonyms: '',
24
+ country_id: AT.id
25
+ }
26
+
27
+ values = [
28
+ '5.2 %',
29
+ '11.8°',
30
+ 'bio'
31
+ ]
32
+
33
+ beer = Beer.create_or_update_from_values( new_attributes, values )
34
+
35
+ beer2 = Beer.find_by_key!( new_attributes[:key] )
36
+ assert( beer.id == beer2.id )
37
+
38
+ assert( beer.title == new_attributes[:title] )
39
+ assert( beer.country_id == AT.id )
40
+ assert( beer.country.title == AT.title )
41
+ assert( beer.abv == 5.2 )
42
+ assert( beer.og == 11.8 )
43
+ assert( beer.srm == nil )
44
+ end
45
+
46
+ def test_load_brewery_values
47
+
48
+ # ottakringer, Ottakringer Brauerei, 1838, www.ottakringer.at, WI, city:wien, 1160 Wien // Ottakringer Platz 1
49
+ # brands: Ottakringer
50
+
51
+ new_attributes = {
52
+ key: 'ottakringer',
53
+ title: 'Ottakringer Brauerei',
54
+ synonyms: '',
55
+ country_id: AT.id
56
+ }
57
+
58
+ values = [
59
+ '1838',
60
+ 'www.ottakringer.at',
61
+ '1160 Wien // Ottakringer Platz 1',
62
+ 'brands: Ottakringer'
63
+ ]
64
+
65
+ by = Brewery.create_or_update_from_values( new_attributes, values )
66
+
67
+ by2 = Brewery.find_by_key!( new_attributes[:key] )
68
+ assert( by.id == by2.id )
69
+
70
+ assert( by.title == new_attributes[:title] )
71
+ assert( by.country_id == AT.id )
72
+ assert( by.country.title == AT.title )
73
+ assert( by.since == 1838 )
74
+ assert( by.web == 'www.ottakringer.at' )
75
+ assert( by.address == '1160 Wien // Ottakringer Platz 1' )
76
+
77
+ # check auto-created brand
78
+
79
+ br = Brand.find_by_key!( 'ottakringer')
80
+
81
+ assert( br.title == 'Ottakringer' )
82
+ assert( br.brewery_id == by.id )
83
+ assert( br.brewery.title == by.title )
84
+ assert( br.country_id == by.country_id )
85
+ end
86
+
87
+
88
+ end # class TestValues
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.8
4
+ version: 0.6.9
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-09 00:00:00.000000000 Z
12
+ date: 2013-05-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &83579610 !ruby/object:Gem::Requirement
16
+ requirement: &84206950 !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: *83579610
24
+ version_requirements: *84206950
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: worlddb
27
- requirement: &83579390 !ruby/object:Gem::Requirement
27
+ requirement: &84206730 !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: *83579390
35
+ version_requirements: *84206730
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: commander
38
- requirement: &83579170 !ruby/object:Gem::Requirement
38
+ requirement: &84206510 !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: *83579170
46
+ version_requirements: *84206510
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &83578950 !ruby/object:Gem::Requirement
49
+ requirement: &84206290 !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: *83578950
57
+ version_requirements: *84206290
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hoe
60
- requirement: &83578730 !ruby/object:Gem::Requirement
60
+ requirement: &84206070 !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: *83578730
68
+ version_requirements: *84206070
69
69
  description: beerdb - beer.db command line tool
70
70
  email: beerdb@googlegroups.com
71
71
  executables:
@@ -103,6 +103,8 @@ files:
103
103
  - lib/beerdb/server/views/layout.erb
104
104
  - lib/beerdb/stats.rb
105
105
  - lib/beerdb/version.rb
106
+ - test/test_values.rb
107
+ - .gemtest
106
108
  homepage: https://github.com/geraldb/beer.db.ruby
107
109
  licenses:
108
110
  - Public Domain
@@ -130,4 +132,5 @@ rubygems_version: 1.8.17
130
132
  signing_key:
131
133
  specification_version: 3
132
134
  summary: beerdb - beer.db command line tool
133
- test_files: []
135
+ test_files:
136
+ - test/test_values.rb