Class: ActiveRecall::Deck
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- ActiveRecall::Deck
- Includes:
- Base, Enumerable
- Defined in:
- lib/active_recall/models/deck.rb
Class Method Summary collapse
Instance Method Summary collapse
- #<<(source) ⇒ Object
- #==(other) ⇒ Object
- #_items ⇒ Object
- #box(number) ⇒ Object
- #delete(source) ⇒ Object
- #each ⇒ Object
- #expired ⇒ Object
- #failed ⇒ Object
- #known ⇒ Object
- #last ⇒ Object
- #next ⇒ Object
- #review ⇒ Object
- #source_class ⇒ Object
- #untested ⇒ Object
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
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 |
#_items ⇒ Object
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 |
#each ⇒ Object
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 |
#expired ⇒ Object
75 76 77 |
# File 'lib/active_recall/models/deck.rb', line 75 def expired source_class.find(items.expired.pluck(:source_id)) end |
#failed ⇒ Object
67 68 69 |
# File 'lib/active_recall/models/deck.rb', line 67 def failed source_class.find(items.failed.pluck(:source_id)) end |
#known ⇒ Object
71 72 73 |
# File 'lib/active_recall/models/deck.rb', line 71 def known source_class.find(items.known.pluck(:source_id)) end |
#last ⇒ Object
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 |
#next ⇒ Object
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 |
#review ⇒ Object
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_class ⇒ Object
83 84 85 |
# File 'lib/active_recall/models/deck.rb', line 83 def source_class user.deck_name.to_s.singularize.titleize.constantize end |
#untested ⇒ Object
63 64 65 |
# File 'lib/active_recall/models/deck.rb', line 63 def untested source_class.find(items.untested.pluck(:source_id)) end |