Class: FsrsRuby::Schedulers::BaseScheduler
- Inherits:
-
Object
- Object
- FsrsRuby::Schedulers::BaseScheduler
- Defined in:
- lib/fsrs_ruby/schedulers/base_scheduler.rb
Overview
Base scheduler implementing template method pattern
Direct Known Subclasses
Instance Attribute Summary collapse
-
#algorithm ⇒ Object
readonly
Returns the value of attribute algorithm.
-
#current ⇒ Object
readonly
Returns the value of attribute current.
-
#elapsed_days ⇒ Object
readonly
Returns the value of attribute elapsed_days.
-
#last ⇒ Object
readonly
Returns the value of attribute last.
-
#review_time ⇒ Object
readonly
Returns the value of attribute review_time.
-
#strategies ⇒ Object
readonly
Returns the value of attribute strategies.
Instance Method Summary collapse
-
#initialize(card, now, algorithm, strategies = {}) ⇒ BaseScheduler
constructor
A new instance of BaseScheduler.
-
#preview ⇒ Hash
Preview all possible outcomes.
-
#review(grade) ⇒ RecordLogItem
Apply specific rating.
Constructor Details
#initialize(card, now, algorithm, strategies = {}) ⇒ BaseScheduler
Returns a new instance of BaseScheduler.
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 9 def initialize(card, now, algorithm, strategies = {}) @last = card.is_a?(Card) ? card : TypeConverter.card(card) @current = @last.clone @review_time = now.is_a?(Time) ? now : TypeConverter.time(now) @algorithm = algorithm @strategies = strategies @next_cache = {} init end |
Instance Attribute Details
#algorithm ⇒ Object (readonly)
Returns the value of attribute algorithm.
7 8 9 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 7 def algorithm @algorithm end |
#current ⇒ Object (readonly)
Returns the value of attribute current.
7 8 9 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 7 def current @current end |
#elapsed_days ⇒ Object (readonly)
Returns the value of attribute elapsed_days.
7 8 9 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 7 def elapsed_days @elapsed_days end |
#last ⇒ Object (readonly)
Returns the value of attribute last.
7 8 9 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 7 def last @last end |
#review_time ⇒ Object (readonly)
Returns the value of attribute review_time.
7 8 9 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 7 def review_time @review_time end |
#strategies ⇒ Object (readonly)
Returns the value of attribute strategies.
7 8 9 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 7 def strategies @strategies end |
Instance Method Details
#preview ⇒ Hash
Preview all possible outcomes
22 23 24 25 26 27 28 29 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 22 def preview { Rating::AGAIN => review(Rating::AGAIN), Rating::HARD => review(Rating::HARD), Rating::GOOD => review(Rating::GOOD), Rating::EASY => review(Rating::EASY) } end |
#review(grade) ⇒ RecordLogItem
Apply specific rating
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/fsrs_ruby/schedulers/base_scheduler.rb', line 34 def review(grade) raise ArgumentError, "Invalid grade: #{grade}" unless (Rating::AGAIN..Rating::EASY).cover?(grade) return @next_cache[grade] if @next_cache.key?(grade) result = case @current.state when State::NEW new_state(grade) when State::LEARNING, State::RELEARNING learning_state(grade) when State::REVIEW review_state(grade) else raise "Unknown state: #{@current.state}" end @next_cache[grade] = result result end |