class ActiveRecall::Deck
Public Class Methods
add_deck(user)
click to toggle source
# File lib/active_recall/models/deck.rb, line 35 def self.add_deck(user) create!(user) end
Public Instance Methods
<<(source)
click to toggle source
# 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)
click to toggle source
# File lib/active_recall/models/deck.rb, line 21 def ==(other) _items == other end
_items()
click to toggle source
# File lib/active_recall/models/deck.rb, line 25 def _items source_class.find(items.pluck(:source_id)) end
box(number)
click to toggle source
# File lib/active_recall/models/deck.rb, line 82 def box(number) source_class.find(items.where(box: number).pluck(:source_id)) end
delete(source)
click to toggle source
# File lib/active_recall/models/deck.rb, line 39 def delete(source) ActiveRecall::Item .find_by(deck: self, source_id: source.id, source_type: source.class.name) .destroy end
each() { |item| ... }
click to toggle source
# 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()
click to toggle source
# File lib/active_recall/models/deck.rb, line 78 def expired source_class.find(items.expired.pluck(:source_id)) end
failed()
click to toggle source
# File lib/active_recall/models/deck.rb, line 70 def failed source_class.find(items.failed.pluck(:source_id)) end
known()
click to toggle source
# File lib/active_recall/models/deck.rb, line 74 def known source_class.find(items.known.pluck(:source_id)) end
last()
click to toggle source
# File lib/active_recall/models/deck.rb, line 62 def last items.order('created_at desc').limit(1).first.try(:source) end
next()
click to toggle source
OPTIMIZE: Use optimized review
and build only the record to be returned
# File lib/active_recall/models/deck.rb, line 53 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()
click to toggle source
OPTIMIZE: Attempt in active record, rather than array of Ruby records
# File lib/active_recall/models/deck.rb, line 46 def review %i[untested failed expired].inject([]) do |words, s| words += items.send(s).order(random_order_function).map(&:source) end end
source_class()
click to toggle source
# File lib/active_recall/models/deck.rb, line 86 def source_class user.deck_name.to_s.singularize.titleize.constantize end
untested()
click to toggle source
# File lib/active_recall/models/deck.rb, line 66 def untested source_class.find(items.untested.pluck(:source_id)) end
Private Instance Methods
mysql?()
click to toggle source
# File lib/active_recall/models/deck.rb, line 96 def mysql? source_class.connection.adapter_name == 'Mysql2' end
random_order_function()
click to toggle source
# File lib/active_recall/models/deck.rb, line 92 def random_order_function Arel.sql(mysql? ? 'RAND()' : 'random()') end