beerdb 0.9.4 → 0.9.5

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.rb CHANGED
@@ -14,6 +14,8 @@ require 'logger'
14
14
  require 'optparse'
15
15
  require 'fileutils'
16
16
  require 'erb'
17
+ require 'uri'
18
+
17
19
 
18
20
  # 3rd party gems / libs
19
21
 
@@ -24,183 +26,19 @@ require 'erb'
24
26
 
25
27
  require 'worlddb'
26
28
 
27
- ######################
28
- # fix begin:
29
-
30
-
31
- ################
32
- # todo: move module to textutils!!!
33
-
34
- ### fix: move to textutils??
35
-
36
-
37
- ## todo: rename to TitleHelpers? TitleMatcher? TitleMapper? TitleMapping? TitleMappings? TitleFinder? TitleHelpers?
38
- # or rename to KeyMapping?, KeyMapper?, KeyTable? etc.
39
-
40
-
41
- module TextUtils::TitleTable
42
-
43
-
44
- def build_title_table_for( records )
45
- ## build known tracks table w/ synonyms e.g.
46
- #
47
- # [[ 'wolfsbrug', [ 'VfL Wolfsburg' ]],
48
- # [ 'augsburg', [ 'FC Augsburg', 'Augi2', 'Augi3' ]],
49
- # [ 'stuttgart', [ 'VfB Stuttgart' ]] ]
50
-
51
- known_titles = []
52
-
53
- records.each_with_index do |rec,index|
54
-
55
- title_candidates = []
56
- title_candidates << rec.title
57
-
58
- title_candidates += rec.synonyms.split('|') if rec.synonyms.present?
59
-
60
-
61
- ## check if title includes subtitle e.g. Grand Prix Japan (Suzuka Circuit)
62
- # make subtitle optional by adding title w/o subtitle e.g. Grand Prix Japan
63
-
64
- titles = []
65
- title_candidates.each do |t|
66
- titles << t
67
- if t =~ /\(.+\)/
68
- extra_title = t.gsub( /\(.+\)/, '' ) # remove/delete subtitles
69
- extra_title.strip! # strip leading n trailing withspaces too!
70
- titles << extra_title
71
- end
72
- end
73
-
74
-
75
- ## NB: sort here by length (largest goes first - best match)
76
- # exclude code and key (key should always go last)
77
- titles = titles.sort { |left,right| right.length <=> left.length }
78
-
79
- ## escape for regex plus allow subs for special chars/accents
80
- titles = titles.map { |title| TextUtils.title_esc_regex( title ) }
81
-
82
- ## NB: only include code field - if defined
83
- titles << rec.code if rec.respond_to?(:code) && rec.code.present?
84
-
85
- known_titles << [ rec.key, titles ]
86
-
87
- ### fix: use plain logger
88
- LogUtils::Logger.root.debug " #{rec.class.name}[#{index+1}] #{rec.key} >#{titles.join('|')}<"
89
- end
90
-
91
- known_titles
92
- end
93
-
94
-
95
-
96
- def find_key_for!( name, line )
97
- regex = /@@oo([^@]+?)oo@@/ # e.g. everything in @@ .... @@ (use non-greedy +? plus all chars but not @, that is [^@])
98
-
99
- upcase_name = name.upcase
100
- downcase_name = name.downcase
101
-
102
- if line =~ regex
103
- value = "#{$1}"
104
- ### fix: use plain logger
105
- LogUtils::Logger.root.debug " #{downcase_name}: >#{value}<"
106
-
107
- line.sub!( regex, "[#{upcase_name}]" )
108
-
109
- return $1
110
- else
111
- return nil
112
- end
113
- end
114
-
115
-
116
- def find_keys_for!( name, line ) # NB: keys (plural!) - will return array
117
- counter = 1
118
- keys = []
119
-
120
- downcase_name = name.downcase
121
-
122
- key = find_key_for!( "#{downcase_name}#{counter}", line )
123
- while key.present?
124
- keys << key
125
- counter += 1
126
- key = find_key_for!( "#{downcase_name}#{counter}", line )
127
- end
128
-
129
- keys
130
- end
131
-
132
-
133
- def map_titles_for!( name, line, title_table )
134
- title_table.each do |rec|
135
- key = rec[0]
136
- values = rec[1]
137
- map_title_worker_for!( name, line, key, values )
138
- end
139
- end
140
-
141
-
142
- def map_title_worker_for!( name, line, key, values )
143
-
144
- downcase_name = name.downcase
145
-
146
- values.each do |value|
147
- ## nb: \b does NOT include space or newline for word boundry (only alphanums e.g. a-z0-9)
148
- ## (thus add it, allows match for Benfica Lis. for example - note . at the end)
149
-
150
- ## check add $ e.g. (\b| |\t|$) does this work? - check w/ Benfica Lis.$
151
- regex = /\b#{value}(\b| |\t|$)/ # wrap with world boundry (e.g. match only whole words e.g. not wac in wacker)
152
- if line =~ regex
153
- ### fix: use plain logger
154
- LogUtils::Logger.root.debug " match for #{downcase_name} >#{key}< >#{value}<"
155
- # make sure @@oo{key}oo@@ doesn't match itself with other key e.g. wacker, wac, etc.
156
- line.sub!( regex, "@@oo#{key}oo@@ " ) # NB: add one space char at end
157
- return true # break out after first match (do NOT continue)
158
- end
159
- end
160
- return false
161
- end
162
-
163
-
164
-
165
- end # module TextUtils::TitleTable
166
-
167
-
168
-
169
- ## auto-include methods
170
-
171
- module TextUtils
172
- # make helpers available as class methods e.g. TextUtils.convert_unicode_dashes_to_plain_ascii
173
- extend TitleTable # lets us use TextUtils.build_title_table_for etc.
174
- end
175
-
176
- # quich fix end:
177
- ########################
178
-
179
-
180
29
 
181
30
  # our own code
182
31
 
183
32
  require 'beerdb/version' ## version always goes first
184
33
 
185
34
  require 'beerdb/models/forward'
186
- require 'beerdb/models/country'
187
- require 'beerdb/models/region'
188
- require 'beerdb/models/city'
35
+ require 'beerdb/models/world/country'
36
+ require 'beerdb/models/world/region'
37
+ require 'beerdb/models/world/city'
189
38
  require 'beerdb/models/tag'
190
39
  require 'beerdb/models/beer'
191
40
  require 'beerdb/models/brand'
192
41
  require 'beerdb/models/brewery'
193
- require 'beerdb/models/user' # db model extensions - move to its own addon gem?
194
- require 'beerdb/models/drink' # db model extensions - move to its own addon gem?
195
- require 'beerdb/models/bookmark' # db model extensions - move to its own addon gem?
196
- require 'beerdb/models/note' # db model extensions - move to its own addon gem?
197
-
198
-
199
- ## add backwards compatible namespace
200
- ## todo: move to forward -- check sportdb/worlddb convention ??
201
- module BeerDb
202
- Models = Model
203
- end
204
42
 
205
43
 
206
44
  require 'beerdb/serializers/beer'
@@ -214,14 +52,6 @@ require 'beerdb/stats'
214
52
 
215
53
  module BeerDb
216
54
 
217
- def self.banner
218
- "beerdb #{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
219
- end
220
-
221
- def self.root
222
- "#{File.expand_path( File.dirname(File.dirname(__FILE__)) )}"
223
- end
224
-
225
55
  def self.main
226
56
  require 'beerdb/cli/main'
227
57
  # Runner.new.run(ARGV) old code
@@ -231,10 +61,13 @@ module BeerDb
231
61
  CreateDb.new.up
232
62
 
233
63
  ### fix: make optional do NOT auto create here
234
- CreateDbExtrasUsers.new.up
235
- CreateDbExtrasBookmarks.new.up
236
- CreateDbExtrasDrinks.new.up
237
- CreateDbExtrasNotes.new.up
64
+ ### fix: use if defined? BeerDbNote or similar or/and check if table exist ??
65
+ ### or move to beerdb-note ??
66
+
67
+ # CreateDbExtrasUsers.new.up
68
+ # CreateDbExtrasBookmarks.new.up
69
+ # CreateDbExtrasDrinks.new.up
70
+ # CreateDbExtrasNotes.new.up
238
71
 
239
72
  ConfDb::Model::Prop.create!( key: 'db.schema.beer.version', value: VERSION )
240
73
  end
@@ -267,11 +100,6 @@ module BeerDb
267
100
  Stats.new.tables
268
101
  end
269
102
 
270
- ###
271
- # fix: (re)use ConfDb.props
272
- def self.props
273
- Stats.new.props
274
- end
275
103
 
276
104
  end # module BeerDb
277
105
 
data/test/helper.rb CHANGED
@@ -9,20 +9,11 @@ require 'minitest/autorun'
9
9
  # include MiniTest::Unit # lets us use TestCase instead of MiniTest::Unit::TestCase
10
10
 
11
11
 
12
- # ruby stdlibs
13
-
14
- require 'json'
15
- require 'uri'
16
- require 'pp'
17
-
18
- # ruby gems
19
-
20
- require 'active_record'
21
-
22
12
  # our own code
23
13
 
24
14
  require 'beerdb'
25
- require 'logutils/db' # NB: explict require required for LogDb (not automatic)
15
+ require 'logutils/db' # NOTE: explict require required for LogDb (not automatic)
16
+
26
17
 
27
18
  Country = WorldDb::Model::Country
28
19
  Region = WorldDb::Model::Region
@@ -3,7 +3,6 @@
3
3
 
4
4
  require 'helper'
5
5
 
6
- ### todo/fix: move to worlddb along with fixture matcher module!!
7
6
 
8
7
  class TestFixtureMatchers < MiniTest::Unit::TestCase
9
8
 
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.9.4
4
+ version: 0.9.5
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: 2014-10-12 00:00:00.000000000 Z
12
+ date: 2014-10-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: props
16
- requirement: &77761980 !ruby/object:Gem::Requirement
16
+ requirement: &82209140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *77761980
24
+ version_requirements: *82209140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: logutils
27
- requirement: &77761760 !ruby/object:Gem::Requirement
27
+ requirement: &82208590 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *77761760
35
+ version_requirements: *82208590
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: textutils
38
- requirement: &77761510 !ruby/object:Gem::Requirement
38
+ requirement: &82208120 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *77761510
46
+ version_requirements: *82208120
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: worlddb
49
- requirement: &77761150 !ruby/object:Gem::Requirement
49
+ requirement: &82207380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.0.2
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *77761150
57
+ version_requirements: *82207380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: tagutils
60
- requirement: &77760800 !ruby/object:Gem::Requirement
60
+ requirement: &82206750 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *77760800
68
+ version_requirements: *82206750
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activerecord-utils
71
- requirement: &77760460 !ruby/object:Gem::Requirement
71
+ requirement: &82205990 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *77760460
79
+ version_requirements: *82205990
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: fetcher
82
- requirement: &77760170 !ruby/object:Gem::Requirement
82
+ requirement: &82204150 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0.3'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *77760170
90
+ version_requirements: *82204150
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: gli
93
- requirement: &77759820 !ruby/object:Gem::Requirement
93
+ requirement: &82203870 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 2.5.6
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *77759820
101
+ version_requirements: *82203870
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: activerecord
104
- requirement: &77759280 !ruby/object:Gem::Requirement
104
+ requirement: &82203620 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *77759280
112
+ version_requirements: *82203620
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rdoc
115
- requirement: &77758880 !ruby/object:Gem::Requirement
115
+ requirement: &82203360 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '4.0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *77758880
123
+ version_requirements: *82203360
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: hoe
126
- requirement: &77758470 !ruby/object:Gem::Requirement
126
+ requirement: &82203110 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,7 +131,7 @@ dependencies:
131
131
  version: '3.12'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *77758470
134
+ version_requirements: *82203110
135
135
  description: beerdb - beer.db command line tool
136
136
  email: beerdb@googlegroups.com
137
137
  executables:
@@ -153,28 +153,17 @@ files:
153
153
  - lib/beerdb/console.rb
154
154
  - lib/beerdb/deleter.rb
155
155
  - lib/beerdb/models/beer.rb
156
- - lib/beerdb/models/bookmark.rb
157
156
  - lib/beerdb/models/brand.rb
158
157
  - lib/beerdb/models/brewery.rb
159
- - lib/beerdb/models/city.rb
160
- - lib/beerdb/models/country.rb
161
- - lib/beerdb/models/drink.rb
162
158
  - lib/beerdb/models/forward.rb
163
- - lib/beerdb/models/note.rb
164
- - lib/beerdb/models/region.rb
165
159
  - lib/beerdb/models/tag.rb
166
- - lib/beerdb/models/user.rb
160
+ - lib/beerdb/models/world/city.rb
161
+ - lib/beerdb/models/world/country.rb
162
+ - lib/beerdb/models/world/region.rb
167
163
  - lib/beerdb/reader.rb
168
164
  - lib/beerdb/schema.rb
169
165
  - lib/beerdb/serializers/beer.rb
170
166
  - lib/beerdb/serializers/brewery.rb
171
- - lib/beerdb/server.rb
172
- - lib/beerdb/server/public/style.css
173
- - lib/beerdb/server/views/_debug.erb
174
- - lib/beerdb/server/views/_version.erb
175
- - lib/beerdb/server/views/debug.erb
176
- - lib/beerdb/server/views/index.erb
177
- - lib/beerdb/server/views/layout.erb
178
167
  - lib/beerdb/stats.rb
179
168
  - lib/beerdb/version.rb
180
169
  - test/helper.rb
@@ -1,33 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module BeerDb
4
- module Model
5
-
6
- class Bookmark < ActiveRecord::Base
7
-
8
- belongs_to :bookmarkable, :polymorphic => true
9
- belongs_to :user
10
-
11
-
12
- ### fix - how to do it with has_many macro? use finder_sql?
13
- def drinks
14
- ## todo: check/assert bookmarkable_type == BeerDB::Model::Beer
15
- Drink.where( user_id: user_id, beer_id: bookmarkable_id )
16
- end
17
-
18
- def notes
19
- ## todo: check/assert bookmarkable_type == BeerDB::Model::Beer
20
- Note.where( user_id: user_id, beer_id: bookmarkable_id )
21
- end
22
-
23
-
24
- ## todo: check: how to handle polymorphic best for getting beer for bookmarkable?
25
- def beer
26
- ## todo: check/assert bookmarkable_type == BeerDB::Model::Beer
27
- Beer.find( bookmarkable_id )
28
- end
29
-
30
- end # class Bookmark
31
-
32
- end # module Model
33
- end # module BeerDb
@@ -1,14 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module WorldDb
4
- module Model
5
-
6
- class City
7
- has_many :beers, :class_name => 'BeerDb::Model::Beer', :foreign_key => 'city_id'
8
- has_many :brands, :class_name => 'BeerDb::Model::Brand', :foreign_key => 'city_id'
9
- has_many :breweries, :class_name => 'BeerDb::Model::Brewery', :foreign_key => 'city_id'
10
- end # class Country
11
-
12
- end # module Model
13
- end # module WorldDb
14
-
@@ -1,25 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module BeerDb
4
- module Model
5
-
6
- class Drink < ActiveRecord::Base
7
-
8
- belongs_to :beer, class_name: 'BeerDb::Model::Beer'
9
- belongs_to :user, class_name: 'BeerDb::Model::User'
10
-
11
- before_save :on_before_save
12
-
13
- def on_before_save
14
- # todo/check: can we use blank? for datetime too or just array,strings,etc.
15
- # check - can we use/access created_at? already set for new records?
16
-
17
- self.drunk_at = Time.now if drunk_at.blank?
18
- end
19
-
20
-
21
- end # class Drink
22
-
23
- end # module Model
24
- end # module BeerDb
25
-
@@ -1,15 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module BeerDb
4
- module Model
5
-
6
- class Note < ActiveRecord::Base
7
-
8
- belongs_to :beer, class_name: 'BeerDb::Model::Beer'
9
- belongs_to :user, class_name: 'BeerDb::Model::User'
10
-
11
- end # class Note
12
-
13
- end # module Model
14
- end # module BeerDb
15
-
@@ -1,14 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module WorldDb
4
- module Model
5
-
6
- class Region
7
- has_many :beers, :class_name => 'BeerDb::Model::Beer', :foreign_key => 'region_id'
8
- has_many :brands, :class_name => 'BeerDb::Model::Brand', :foreign_key => 'region_id'
9
- has_many :breweries, :class_name => 'BeerDb::Model::Brewery', :foreign_key => 'region_id'
10
- end # class Region
11
-
12
- end # module Model
13
- end # module WorldDb
14
-
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module BeerDb
4
- module Model
5
-
6
- class User < ActiveRecord::Base
7
-
8
- has_many :notes # beers w/ ratings
9
- has_many :drinks
10
-
11
- has_many :bookmarks # bookmarked beers
12
-
13
-
14
- before_save :on_before_save
15
-
16
- def on_before_save
17
- if email.blank?
18
- self.key = 'xxx'
19
- else
20
- # NB: remove whitespace and (.-+_) and downcase
21
- self.key = email.gsub( /[\s\.\-+_]/, '' ).downcase
22
- end
23
- end
24
-
25
- end # class User
26
-
27
- end # module Model
28
- end # module BeerDb
29
-
@@ -1,36 +0,0 @@
1
- body {
2
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
3
-
4
- a {
5
- color: black;
6
- text-decoration: none; }
7
- a:hover {
8
- color: black;
9
- background-color: aqua;
10
- text-decoration: underline; }
11
- a:visited {
12
- color: black; }
13
-
14
- .params {
15
- color: green;
16
- font-style: italic;
17
- font-weight: bold; }
18
-
19
- pre {
20
- background-color: #F3F3F3;
21
- border-bottom: 1px solid #BBBBBB;
22
- border-top: 1px solid #BBBBBB;
23
- padding: 4px; }
24
-
25
-
26
- /**********
27
- * version / powered by
28
- */
29
-
30
- .version {
31
- text-align: center;
32
- margin-top: 10px;
33
- color: grey; }
34
- .version a, .version span {
35
- font-size: 12px;
36
- color: grey; }
@@ -1,17 +0,0 @@
1
-
2
- <h3>Debug</h3>
3
-
4
- <pre>
5
- request.scheme <%= request.scheme %>
6
- request.script_name <%= request.script_name %>
7
- request.path_info <%= request.path_info %>
8
- request.port <%= request.port %>
9
- request.request_method <%= request.request_method %>
10
- request.query_string <%= request.query_string %>
11
- request.host <%= request.host %>
12
- request.referrer <%= request.referrer %>
13
- request.user_agent <%= request.user_agent %>
14
- request.url <%= request.url %>
15
- request.path <%= request.path %>
16
- request.ip <%= request.ip %>
17
- </pre>
@@ -1,7 +0,0 @@
1
- <div class='version'>
2
- <a href="http://groups.google.com/group/beerdb">Questions? Comments?</a> |
3
- <a href="https://github.com/geraldb/world.db">world.db/<%= WorldDb::VERSION %></a>,
4
- <a href="https://github.com/geraldb/beer.db">beer.db/<%= BeerDb::VERSION %></a> -
5
- <span>Ruby/<%= "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}/#{RUBY_PLATFORM})" %> on</span>
6
- <span>Sinatra/<%= Sinatra::VERSION %> (<%= ENV['RACK_ENV'] %>)</span>
7
- </div>
@@ -1,3 +0,0 @@
1
-
2
- <%= erb :'_debug' %>
3
-