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.
@@ -16,6 +16,7 @@ lib/beerdb/models/city.rb
16
16
  lib/beerdb/models/country.rb
17
17
  lib/beerdb/models/drink.rb
18
18
  lib/beerdb/models/forward.rb
19
+ lib/beerdb/models/note.rb
19
20
  lib/beerdb/models/region.rb
20
21
  lib/beerdb/models/tag.rb
21
22
  lib/beerdb/models/user.rb
@@ -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
- CreateUsers.new.up
69
- CreateBookmarks.new.up
70
- CreateDrinks.new.up
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
@@ -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::CreateUsers.new.up
73
- BeerDb::CreateBookmarks.new.up
74
- BeerDb::CreateDrinks.new.up
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
@@ -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
@@ -26,6 +26,7 @@ class Beer < ActiveRecord::Base
26
26
  # begin extras/extension drink/bookmar/user
27
27
 
28
28
  has_many :drinks ## :class_name => 'Drink'
29
+ has_many :notes ## :class_name => 'Note'
29
30
  has_many :bookmarks, :as => :bookmarkable
30
31
 
31
32
  # end extensions
@@ -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
@@ -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
@@ -22,6 +22,7 @@ module BeerDb::Models
22
22
  class User < ActiveRecord::Base ; end
23
23
  class Bookmark < ActiveRecord::Base ; end
24
24
  class Drink < ActiveRecord::Base ; end
25
+ class Note < ActiveRecord::Base ; end
25
26
 
26
27
  end
27
28
 
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+
3
+ module BeerDb::Models
4
+
5
+ class Note < ActiveRecord::Base
6
+
7
+ belongs_to :beer, class_name: 'BeerDb::Models::Beer'
8
+ belongs_to :user, class_name: 'BeerDb::Models::User'
9
+
10
+ end # class Note
11
+
12
+ end # module BeerDb::Models
@@ -4,13 +4,14 @@ module BeerDb::Models
4
4
 
5
5
  class User < ActiveRecord::Base
6
6
 
7
- has_many :drinks # beers w/ ratings
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'
@@ -7,13 +7,17 @@ module BeerDb
7
7
  #
8
8
  # see beer.db.admin (copied for possible service/api version only)
9
9
 
10
- class CreateDrinks < ActiveRecord::Migration
10
+
11
+ ####
12
+ # tasting notes (w/ ratings)
13
+ class CreateDbExtrasNotes < ActiveRecord::Migration
11
14
 
12
15
  def up
13
- create_table :drinks do |t| # join table (user,beer)
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 CreateBookmarks < ActiveRecord::Migration
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, :null => false, :default => false # like/favorite/top
39
- t.boolean :no, :null => false, :default => false # dislike/flop/blacklisted
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 CreateUsers < ActiveRecord::Migration
82
+ class CreateDbExtrasUsers < ActiveRecord::Migration
54
83
 
55
84
  def up
56
85
  create_table :users do |t|
@@ -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 (w/ ratings)
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( 'rating DESC, updated_at DESC' ).where( user_id: user.id ).all
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
 
@@ -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
@@ -1,4 +1,4 @@
1
1
 
2
2
  module BeerDb
3
- VERSION = '0.8.0'
3
+ VERSION = '0.8.1'
4
4
  end
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.0
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-14 00:00:00.000000000 Z
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: &74333290 !ruby/object:Gem::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: *74333290
24
+ version_requirements: *77241100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: worlddb
27
- requirement: &74333070 !ruby/object:Gem::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: *74333070
35
+ version_requirements: *77240880
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: commander
38
- requirement: &74332850 !ruby/object:Gem::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: *74332850
46
+ version_requirements: *77240660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &74332630 !ruby/object:Gem::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: *74332630
57
+ version_requirements: *77240440
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hoe
60
- requirement: &74332410 !ruby/object:Gem::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: *74332410
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