class Repetition::Flashcard
Attributes
due_at[R]
due_on[R]
easiness_factor[R]
interval[R]
repetitions[R]
Public Class Methods
new(easiness_factor: 2.5, interval: 0, repetitions: 0)
click to toggle source
# File lib/repetition/flashcard.rb, line 22 def initialize(easiness_factor: 2.5, interval: 0, repetitions: 0) @easiness_factor = easiness_factor @interval = interval @repetitions = repetitions end
Public Instance Methods
recall(quality)
click to toggle source
# File lib/repetition/flashcard.rb, line 28 def recall(quality) raise ArgumentError, 'Invalid quality of recall. Should be in range from 0 to 5.' unless (0..5).cover?(quality) if quality < 3 # An incorrect recall is reset back to the beginning @repetitions = 0 @interval = 0 elsif quality == 3 # The item was correctly recalled but should be tested again quickly @interval = 0 else # The item was correctly recalled and we can review later on @repetitions += 1 case @repetitions when 1 @interval = 1 when 2 @interval = 6 else @easiness_factor = calculate_easiness_factor(@easiness_factor, quality) @interval = @interval * @easiness_factor end end @due_at = DateTime.now + @interval @due_on = Date.today + @interval end
Private Instance Methods
calculate_easiness_factor(easiness_factor, quality)
click to toggle source
# File lib/repetition/flashcard.rb, line 59 def calculate_easiness_factor(easiness_factor, quality) result = easiness_factor - 0.8 + (0.28 * quality) - (0.02 * quality * quality) result < 1.3 ? 1.3 : result end