Class: ActiveRecall::FSRS
- Inherits:
-
Object
- Object
- ActiveRecall::FSRS
- Defined in:
- lib/active_recall/algorithms/fsrs.rb,
lib/active_recall/algorithms/fsrs/internal.rb
Defined Under Namespace
Modules: Internal
Constant Summary collapse
- REQUIRED_ATTRIBUTES =
[ :box, :stability, :difficulty, :state, :lapses, :elapsed_days, :scheduled_days, :times_right, :times_wrong, :last_reviewed, :grade ].freeze
- GRADE_TO_RATING =
{ 1 => Internal::Rating::AGAIN, 2 => Internal::Rating::HARD, 3 => Internal::Rating::GOOD, 4 => Internal::Rating::EASY }.freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(box:, stability:, difficulty:, state:, lapses:, elapsed_days:, scheduled_days:, times_right:, times_wrong:, last_reviewed:, grade:, current_time: Time.current) ⇒ FSRS
constructor
A new instance of FSRS.
- #score ⇒ Object
Constructor Details
#initialize(box:, stability:, difficulty:, state:, lapses:, elapsed_days:, scheduled_days:, times_right:, times_wrong:, last_reviewed:, grade:, current_time: Time.current) ⇒ FSRS
Returns a new instance of FSRS.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/active_recall/algorithms/fsrs.rb', line 40 def initialize(box:, stability:, difficulty:, state:, lapses:, elapsed_days:, scheduled_days:, times_right:, times_wrong:, last_reviewed:, grade:, current_time: Time.current) @box = box || 0 @stability = stability @difficulty = difficulty @state = state || Internal::State::NEW @lapses = lapses || 0 @elapsed_days = elapsed_days || 0 @scheduled_days = scheduled_days || 0 @times_right = times_right || 0 @times_wrong = times_wrong || 0 @last_reviewed = last_reviewed @grade = grade @current_time = current_time end |
Class Method Details
.required_attributes ⇒ Object
28 29 30 |
# File 'lib/active_recall/algorithms/fsrs.rb', line 28 def self.required_attributes REQUIRED_ATTRIBUTES end |
.score(**kwargs) ⇒ Object
36 37 38 |
# File 'lib/active_recall/algorithms/fsrs.rb', line 36 def self.score(**kwargs) new(**kwargs).score end |
.type ⇒ Object
32 33 34 |
# File 'lib/active_recall/algorithms/fsrs.rb', line 32 def self.type :gradable end |
Instance Method Details
#score ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/active_recall/algorithms/fsrs.rb', line 57 def score raise "Grade must be between 1-4!" unless GRADE_TO_RATING.key?(@grade) now = to_utc_datetime(@current_time) scheduling = scheduler.repeat(build_card, now) result = scheduling[GRADE_TO_RATING[@grade]].card { box: result.reps, stability: result.stability, difficulty: result.difficulty, state: result.state, lapses: result.lapses, elapsed_days: result.elapsed_days, scheduled_days: result.scheduled_days, last_reviewed: result.last_review, next_review: result.due, times_right: @times_right + ((@grade >= 2) ? 1 : 0), times_wrong: @times_wrong + ((@grade == 1) ? 1 : 0) } end |