Class: ActiveRecall::Deck

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Base, Enumerable
Defined in:
lib/active_recall/models/deck.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.add_deck(user) ⇒ Object



35
36
37
# File 'lib/active_recall/models/deck.rb', line 35

def self.add_deck(user)
  create!(user)
end

Instance Method Details

#<<(source) ⇒ Object

Raises:

  • (ArgumentError)


29
30
31
32
33
# File 'lib/active_recall/models/deck.rb', line 29

def <<(source)
  raise ArgumentError, 'Word already in the stack' if include?(source)

  items << ActiveRecall::Item.new(deck: self, source_id: source.id, source_type: source.class.name)
end

#==(other) ⇒ Object



21
22
23
# File 'lib/active_recall/models/deck.rb', line 21

def ==(other)
  _items == other
end

#_itemsObject



25
26
27
# File 'lib/active_recall/models/deck.rb', line 25

def _items
  source_class.find(items.pluck(:source_id))
end

#box(number) ⇒ Object



79
80
81
# File 'lib/active_recall/models/deck.rb', line 79

def box(number)
  source_class.find(items.where(box: number).pluck(:source_id))
end

#delete(source) ⇒ Object



39
40
41
42
# File 'lib/active_recall/models/deck.rb', line 39

def delete(source)
  item = ActiveRecall::Item.new(deck: self, source_id: source.id, source_type: source.class.name)
  item.destroy
end

#eachObject



11
12
13
14
15
16
17
18
19
# File 'lib/active_recall/models/deck.rb', line 11

def each
  _items.each do |item|
    if block_given?
      yield item
    else
      yield item
    end
  end
end

#expiredObject



75
76
77
# File 'lib/active_recall/models/deck.rb', line 75

def expired
  source_class.find(items.expired.pluck(:source_id))
end

#failedObject



67
68
69
# File 'lib/active_recall/models/deck.rb', line 67

def failed
  source_class.find(items.failed.pluck(:source_id))
end

#knownObject



71
72
73
# File 'lib/active_recall/models/deck.rb', line 71

def known
  source_class.find(items.known.pluck(:source_id))
end

#lastObject



59
60
61
# File 'lib/active_recall/models/deck.rb', line 59

def last
  items.order('created_at desc').limit(1).first.try(:source)
end

#nextObject



50
51
52
53
54
55
56
57
# File 'lib/active_recall/models/deck.rb', line 50

def next
  word = nil
  %i[untested failed expired].each do |category|
    word = items.send(category).order(random_order_function).limit(1).map(&:source).first
    break if word
  end
  word
end

#reviewObject



44
45
46
47
48
# File 'lib/active_recall/models/deck.rb', line 44

def review
  %i[untested failed expired].inject([]) do |words, s|
    words += items.send(s).order(random_order_function).map(&:source)
  end
end

#source_classObject



83
84
85
# File 'lib/active_recall/models/deck.rb', line 83

def source_class
  user.deck_name.to_s.singularize.titleize.constantize
end

#untestedObject



63
64
65
# File 'lib/active_recall/models/deck.rb', line 63

def untested
  source_class.find(items.untested.pluck(:source_id))
end