beerdb 0.6.8 → 0.6.9

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