Class: Fsrs::Card

Inherits:
Object
  • Object
show all
Defined in:
lib/fsrs/fsrs.rb

Overview

Card

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCard

Returns a new instance of Card.



205
206
207
208
209
210
211
212
213
214
# File 'lib/fsrs/fsrs.rb', line 205

def initialize
  @due = DateTime.new
  @stability = 0.0
  @difficulty = 0.0
  @elapsed_days = 0
  @scheduled_days = 0
  @reps = 0
  @lapses = 0
  @state = State::NEW
end

Instance Attribute Details

#difficultyObject

Returns the value of attribute difficulty.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def difficulty
  @difficulty
end

#dueObject

Returns the value of attribute due.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def due
  @due
end

#elapsed_daysObject

Returns the value of attribute elapsed_days.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def elapsed_days
  @elapsed_days
end

#lapsesObject

Returns the value of attribute lapses.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def lapses
  @lapses
end

#last_reviewObject

Returns the value of attribute last_review.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def last_review
  @last_review
end

#repsObject

Returns the value of attribute reps.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def reps
  @reps
end

#scheduled_daysObject

Returns the value of attribute scheduled_days.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def scheduled_days
  @scheduled_days
end

#stabilityObject

Returns the value of attribute stability.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def stability
  @stability
end

#stateObject

Returns the value of attribute state.



203
204
205
# File 'lib/fsrs/fsrs.rb', line 203

def state
  @state
end

Class Method Details

.from_h(hash) ⇒ Object



240
241
242
243
244
245
246
247
248
249
250
251
252
# File 'lib/fsrs/fsrs.rb', line 240

def self.from_h(hash)
  card = new
  hash.each do |key, value|
    if %w[due last_review].include?(key) && value.is_a?(String)
      # Handle DateTime fields from JSON input
      card.instance_variable_set("@#{key}", DateTime.parse(value))
    else
      # Handle regular fields and DateTime objects from hash input
      card.instance_variable_set("@#{key}", value)
    end
  end
  card
end

Instance Method Details

#deep_cloneObject



226
227
228
# File 'lib/fsrs/fsrs.rb', line 226

def deep_clone
  Marshal.load(Marshal.dump(self))
end

#get_retrievability(now) ⇒ Object



216
217
218
219
220
221
222
223
224
# File 'lib/fsrs/fsrs.rb', line 216

def get_retrievability(now)
  decay = -0.5
  factor = (0.9**(1 / decay)) - 1

  return nil unless @state == State::REVIEW

  elapsed_days = [0, (now - @last_review).to_i].max
  (1 + (factor * elapsed_days / @stability))**decay
end

#to_hObject



230
231
232
233
234
235
236
237
238
# File 'lib/fsrs/fsrs.rb', line 230

def to_h
  {
    state: @state, due: @due,
    stability: @stability, difficulty: @difficulty,
    elapsed_days: @elapsed_days, scheduled_days: @scheduled_days,
    reps: @reps, lapses: @lapses,
    last_review: @last_review
  }
end