beerdb 0.8.0 → 0.8.1
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/Manifest.txt +1 -0
- data/lib/beerdb.rb +5 -3
- data/lib/beerdb/cli/main.rb +4 -3
- data/lib/beerdb/deleter.rb +1 -0
- data/lib/beerdb/models/beer.rb +1 -0
- data/lib/beerdb/models/bookmark.rb +7 -1
- data/lib/beerdb/models/drink.rb +10 -0
- data/lib/beerdb/models/forward.rb +1 -0
- data/lib/beerdb/models/note.rb +12 -0
- data/lib/beerdb/models/user.rb +4 -3
- data/lib/beerdb/schema.rb +37 -8
- data/lib/beerdb/server.rb +72 -9
- data/lib/beerdb/stats.rb +2 -1
- data/lib/beerdb/version.rb +1 -1
- metadata +13 -12
data/Manifest.txt
CHANGED
data/lib/beerdb.rb
CHANGED
@@ -36,6 +36,7 @@ require 'beerdb/models/brewery'
|
|
36
36
|
require 'beerdb/models/user' # db model extensions - move to its own addon gem?
|
37
37
|
require 'beerdb/models/drink' # db model extensions - move to its own addon gem?
|
38
38
|
require 'beerdb/models/bookmark' # db model extensions - move to its own addon gem?
|
39
|
+
require 'beerdb/models/note' # db model extensions - move to its own addon gem?
|
39
40
|
|
40
41
|
require 'beerdb/serializers/beer'
|
41
42
|
require 'beerdb/serializers/brewery'
|
@@ -65,9 +66,10 @@ module BeerDb
|
|
65
66
|
CreateDb.new.up
|
66
67
|
|
67
68
|
### fix: make optional do NOT auto create here
|
68
|
-
|
69
|
-
|
70
|
-
|
69
|
+
CreateDbExtrasUsers.new.up
|
70
|
+
CreateDbExtrasBookmarks.new.up
|
71
|
+
CreateDbExtrasDrinks.new.up
|
72
|
+
CreateDbExtrasNotes.new.up
|
71
73
|
|
72
74
|
BeerDb::Models::Prop.create!( key: 'db.schema.beer.version', value: VERSION )
|
73
75
|
end
|
data/lib/beerdb/cli/main.rb
CHANGED
@@ -69,9 +69,10 @@ command :create do |c|
|
|
69
69
|
|
70
70
|
if options.extras.present?
|
71
71
|
# quick hack: only create extra tables
|
72
|
-
BeerDb::
|
73
|
-
BeerDb::
|
74
|
-
BeerDb::
|
72
|
+
BeerDb::CreateDbExtrasUsers.new.up
|
73
|
+
BeerDb::CreateDbExtrasBookmarks.new.up
|
74
|
+
BeerDb::CreateDbExtrasNotes.new.up
|
75
|
+
BeerDb::CreateDbExtrasDrinks.new.up
|
75
76
|
else
|
76
77
|
LogDb.create
|
77
78
|
WorldDb.create
|
data/lib/beerdb/deleter.rb
CHANGED
@@ -11,6 +11,7 @@ module BeerDb
|
|
11
11
|
|
12
12
|
Bookmark.delete_all # db model extension - move to its own addon?
|
13
13
|
Drink.delete_all # db model extension - move to its own addon?
|
14
|
+
Note.delete_all # db model extension - move to its own addon?
|
14
15
|
User.delete_all # db model extension - move to its own addon?
|
15
16
|
|
16
17
|
Beer.delete_all
|
data/lib/beerdb/models/beer.rb
CHANGED
@@ -13,7 +13,13 @@ class Bookmark < ActiveRecord::Base
|
|
13
13
|
## todo: check/assert bookmarkable_type == BeerDB::Models::Beer
|
14
14
|
Drink.where( user_id: user_id, beer_id: bookmarkable_id )
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
|
+
def notes
|
18
|
+
## todo: check/assert bookmarkable_type == BeerDB::Models::Beer
|
19
|
+
Note.where( user_id: user_id, beer_id: bookmarkable_id )
|
20
|
+
end
|
21
|
+
|
22
|
+
|
17
23
|
## todo: check: how to handle polymorphic best for getting beer for bookmarkable?
|
18
24
|
def beer
|
19
25
|
## todo: check/assert bookmarkable_type == BeerDB::Models::Beer
|
data/lib/beerdb/models/drink.rb
CHANGED
@@ -7,6 +7,16 @@ class Drink < ActiveRecord::Base
|
|
7
7
|
belongs_to :beer, class_name: 'BeerDb::Models::Beer'
|
8
8
|
belongs_to :user, class_name: 'BeerDb::Models::User'
|
9
9
|
|
10
|
+
before_save :on_before_save
|
11
|
+
|
12
|
+
def on_before_save
|
13
|
+
# todo/check: can we use blank? for datetime too or just array,strings,etc.
|
14
|
+
# check - can we use/access created_at? already set for new records?
|
15
|
+
|
16
|
+
self.drunk_at = Time.now if drunk_at.blank?
|
17
|
+
end
|
18
|
+
|
19
|
+
|
10
20
|
end # class Drink
|
11
21
|
|
12
22
|
end # module BeerDb::Models
|
data/lib/beerdb/models/user.rb
CHANGED
@@ -4,13 +4,14 @@ module BeerDb::Models
|
|
4
4
|
|
5
5
|
class User < ActiveRecord::Base
|
6
6
|
|
7
|
-
has_many :
|
8
|
-
|
7
|
+
has_many :notes # beers w/ ratings
|
8
|
+
has_many :drinks
|
9
|
+
|
9
10
|
has_many :bookmarks # bookmarked beers
|
10
11
|
|
11
12
|
|
12
13
|
before_save :on_before_save
|
13
|
-
|
14
|
+
|
14
15
|
def on_before_save
|
15
16
|
if email.blank?
|
16
17
|
self.key = 'xxx'
|
data/lib/beerdb/schema.rb
CHANGED
@@ -7,13 +7,17 @@ module BeerDb
|
|
7
7
|
#
|
8
8
|
# see beer.db.admin (copied for possible service/api version only)
|
9
9
|
|
10
|
-
|
10
|
+
|
11
|
+
####
|
12
|
+
# tasting notes (w/ ratings)
|
13
|
+
class CreateDbExtrasNotes < ActiveRecord::Migration
|
11
14
|
|
12
15
|
def up
|
13
|
-
create_table :
|
16
|
+
create_table :notes do |t| # join table (user,beer)
|
14
17
|
t.references :beer, :null => false
|
15
18
|
t.references :user, :null => false
|
16
|
-
t.integer :rating # 1-10 scala (10 is best)
|
19
|
+
t.integer :rating, :null => false # 1-10 scala (10 is best)
|
20
|
+
|
17
21
|
t.text :comments
|
18
22
|
t.string :place # location (place) where tasted/drunken
|
19
23
|
|
@@ -27,18 +31,43 @@ def down
|
|
27
31
|
raise ActiveRecord::IrreversibleMigration
|
28
32
|
end
|
29
33
|
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
#################
|
38
|
+
# +1 - beer drink log; track beers
|
39
|
+
class CreateDbExtrasDrinks < ActiveRecord::Migration
|
40
|
+
|
41
|
+
def up
|
42
|
+
create_table :drinks do |t| # join table (user,beer)
|
43
|
+
t.references :beer, :null => false
|
44
|
+
t.references :user, :null => false
|
45
|
+
t.datetime :drunk_at ## , :null => false # todo: pre-set if nil to created_at?
|
46
|
+
|
47
|
+
t.string :place # location (place) where tasted/drunken
|
48
|
+
|
49
|
+
## todo: add flag for bottle, can, draft
|
50
|
+
|
51
|
+
t.timestamps
|
52
|
+
end
|
53
|
+
end # method up
|
54
|
+
|
55
|
+
def down
|
56
|
+
raise ActiveRecord::IrreversibleMigration
|
57
|
+
end
|
58
|
+
|
30
59
|
end # class CreateDrinks
|
31
60
|
|
32
|
-
class
|
61
|
+
class CreateDbExtrasBookmarks < ActiveRecord::Migration
|
33
62
|
|
34
63
|
def up
|
35
64
|
create_table :bookmarks do |t| # join table (user,beer/brewery)
|
36
65
|
t.references :bookmarkable, :polymorphic => true # todo: check add :null => false is possible/needed?
|
37
66
|
t.references :user, :null => false
|
38
|
-
t.boolean :yes,
|
39
|
-
t.boolean :no,
|
67
|
+
t.boolean :yes, :null => false, :default => false # like/favorite/top
|
68
|
+
t.boolean :no, :null => false, :default => false # dislike/flop/blacklisted
|
40
69
|
t.boolean :wish, :null => false, :default => false # e.g wish == false == drunk / wishlist (beer not yet drunken/tasted)
|
41
|
-
|
70
|
+
|
42
71
|
t.timestamps
|
43
72
|
end
|
44
73
|
end # method up
|
@@ -50,7 +79,7 @@ end
|
|
50
79
|
end # class CreateBookmarks
|
51
80
|
|
52
81
|
|
53
|
-
class
|
82
|
+
class CreateDbExtrasUsers < ActiveRecord::Migration
|
54
83
|
|
55
84
|
def up
|
56
85
|
create_table :users do |t|
|
data/lib/beerdb/server.rb
CHANGED
@@ -59,19 +59,85 @@ class Server < Sinatra::Base
|
|
59
59
|
erb :index
|
60
60
|
end
|
61
61
|
|
62
|
+
get '/notes/:key' do |key|
|
63
|
+
|
64
|
+
puts " handle GET /notes/:key"
|
65
|
+
|
66
|
+
if ['l', 'latest'].include?( key )
|
67
|
+
# get latest tasting notes (w/ ratings)
|
68
|
+
notes = Note.order( 'updated_at DESC' ).limit(10).all
|
69
|
+
elsif ['h', 'hot'].include?( key )
|
70
|
+
# get latest tasting notes (w/ ratings)
|
71
|
+
# fix: use log algo for "hotness" - for now same as latest
|
72
|
+
notes = Note.order( 'updated_at DESC' ).limit(10).all
|
73
|
+
elsif ['t', 'top'].include?( key )
|
74
|
+
notes = Note.order( 'rating DESC, updated_at DESC' ).limit(10).all
|
75
|
+
else
|
76
|
+
### todo: move to /u/:key/notes ??
|
77
|
+
|
78
|
+
# assume it's a user key
|
79
|
+
user = User.find_by_key!( key )
|
80
|
+
notes = Note.order( 'rating DESC, updated_at DESC' ).where( user_id: user.id ).all
|
81
|
+
end
|
82
|
+
|
83
|
+
data = []
|
84
|
+
notes.each do |note|
|
85
|
+
data << {
|
86
|
+
beer: { title: note.beer.title,
|
87
|
+
key: note.beer.key },
|
88
|
+
user: { name: note.user.name,
|
89
|
+
key: note.user.key },
|
90
|
+
rating: note.rating,
|
91
|
+
comments: note.comments,
|
92
|
+
place: note.place,
|
93
|
+
created_at: note.created_at,
|
94
|
+
updated_at: note.updated_at
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
json_or_jsonp( data.to_json )
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
get '/notes' do
|
103
|
+
if params[:method] == 'post'
|
104
|
+
|
105
|
+
puts " handle GET /notes?method=post"
|
106
|
+
|
107
|
+
user = User.find_by_key!( params[:user] )
|
108
|
+
beer = Beer.find_by_key!( params[:beer] )
|
109
|
+
rating = params[:rating].to_i
|
110
|
+
place = params[:place] # assumes for now a string or nil / pass through as is
|
111
|
+
|
112
|
+
attribs = {
|
113
|
+
user_id: user.id,
|
114
|
+
beer_id: beer.id,
|
115
|
+
rating: rating,
|
116
|
+
place: place
|
117
|
+
}
|
118
|
+
|
119
|
+
note = Note.new
|
120
|
+
note.update_attributes!( attribs )
|
121
|
+
end
|
122
|
+
|
123
|
+
json_or_jsonp( { status: 'ok' }.to_json )
|
124
|
+
end
|
125
|
+
|
126
|
+
|
62
127
|
get '/drinks/:key' do |key|
|
63
128
|
|
64
129
|
puts " handle GET /drinks/:key"
|
65
130
|
|
66
131
|
if ['l', 'latest'].include?( key )
|
67
|
-
# get latest drinks
|
132
|
+
# get latest +1 drinks
|
133
|
+
## todo: order by drunk_at??
|
68
134
|
drinks = Drink.order( 'updated_at DESC' ).limit(10).all
|
69
|
-
elsif ['t', 'top'].include?( key )
|
70
|
-
drinks = Drink.order( 'rating DESC, updated_at DESC' ).limit(10).all
|
71
135
|
else
|
136
|
+
### todo: move to /u/:key/drinks ??
|
137
|
+
|
72
138
|
# assume it's a user key
|
73
139
|
user = User.find_by_key!( key )
|
74
|
-
drinks = Drink.order( '
|
140
|
+
drinks = Drink.order( 'updated_at DESC' ).where( user_id: user.id ).all
|
75
141
|
end
|
76
142
|
|
77
143
|
data = []
|
@@ -79,16 +145,15 @@ class Server < Sinatra::Base
|
|
79
145
|
data << {
|
80
146
|
beer: { title: drink.beer.title,
|
81
147
|
key: drink.beer.key },
|
82
|
-
rating: drink.rating,
|
83
148
|
user: { name: drink.user.name,
|
84
149
|
key: drink.user.key },
|
85
|
-
comments: drink.comments,
|
86
150
|
place: drink.place,
|
151
|
+
drunk_at: drink.drunk_at,
|
87
152
|
created_at: drink.created_at,
|
88
153
|
updated_at: drink.updated_at
|
89
154
|
}
|
90
155
|
end
|
91
|
-
|
156
|
+
|
92
157
|
json_or_jsonp( data.to_json )
|
93
158
|
end
|
94
159
|
|
@@ -100,13 +165,11 @@ class Server < Sinatra::Base
|
|
100
165
|
|
101
166
|
user = User.find_by_key!( params[:user] )
|
102
167
|
beer = Beer.find_by_key!( params[:beer] )
|
103
|
-
rating = params[:rating].to_i
|
104
168
|
place = params[:place] # assumes for now a string or nil / pass through as is
|
105
169
|
|
106
170
|
attribs = {
|
107
171
|
user_id: user.id,
|
108
172
|
beer_id: beer.id,
|
109
|
-
rating: rating,
|
110
173
|
place: place
|
111
174
|
}
|
112
175
|
|
data/lib/beerdb/stats.rb
CHANGED
@@ -10,10 +10,11 @@ module BeerDb
|
|
10
10
|
puts " #{'%5d' % Beer.count} beers"
|
11
11
|
puts " #{'%5d' % Brand.count} brands"
|
12
12
|
puts " #{'%5d' % Brewery.count} breweries"
|
13
|
-
|
13
|
+
puts
|
14
14
|
puts " #{'%5d' % User.count} users" # db model extension - move to its own addon?
|
15
15
|
puts " #{'%5d' % Bookmark.count} bookmarks" # db model extension - move to its own addon?
|
16
16
|
puts " #{'%5d' % Drink.count} drinks" # db model extension - move to its own addon?
|
17
|
+
puts " #{'%5d' % Note.count} notes" # db model extension - move to its own addon?
|
17
18
|
end
|
18
19
|
|
19
20
|
def props
|
data/lib/beerdb/version.rb
CHANGED
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.8.
|
4
|
+
version: 0.8.1
|
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-07-
|
12
|
+
date: 2013-07-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &77241100 !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: *
|
24
|
+
version_requirements: *77241100
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: worlddb
|
27
|
-
requirement: &
|
27
|
+
requirement: &77240880 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.7'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *77240880
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: commander
|
38
|
-
requirement: &
|
38
|
+
requirement: &77240660 !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: *
|
46
|
+
version_requirements: *77240660
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rdoc
|
49
|
-
requirement: &
|
49
|
+
requirement: &77240440 !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: *
|
57
|
+
version_requirements: *77240440
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: hoe
|
60
|
-
requirement: &
|
60
|
+
requirement: &77240220 !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: *
|
68
|
+
version_requirements: *77240220
|
69
69
|
description: beerdb - beer.db command line tool
|
70
70
|
email: beerdb@googlegroups.com
|
71
71
|
executables:
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- lib/beerdb/models/country.rb
|
93
93
|
- lib/beerdb/models/drink.rb
|
94
94
|
- lib/beerdb/models/forward.rb
|
95
|
+
- lib/beerdb/models/note.rb
|
95
96
|
- lib/beerdb/models/region.rb
|
96
97
|
- lib/beerdb/models/tag.rb
|
97
98
|
- lib/beerdb/models/user.rb
|