beerdb 0.9.4 → 0.9.5

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