/
deck.rb
44 lines (39 loc) · 1.13 KB
/
deck.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Deck
include Mongoid::Document
include Mongoid::Timestamps
embeds_many :cards
embeds_many :activities do
def by_date
@target.sort do |a, b|
b.updated_at <=> a.updated_at
end
end
end
def draw_cards(params)
res = []
res << activity("Drawing #{params[:number].to_i} cards for '#{params[:reason]}'...")
params[:number].to_i.times do
if available_cards.length == 0 then
res << activity("Reshuffling as the deck is now empty!")
self.cards.each {|c| c.destroy }
reload_available_cards
raise "Error reshuffling the deck" if available_cards.length == 0
end
card = available_cards.pop
self.cards.build(:description => card)
res << activity(Activity.make_draw_description(card, params[:reason]))
end
save!
res
end
def activity(desc)
self.activities.build(:description => desc)
end
def available_cards
puts self.cards.inspect unless @available_cards
@available_cards ||= (Card::CARDS - self.cards.map(&:description)).shuffle
end
def reload_available_cards
@available_cards = nil
end
end