Module: FsrsRuby::Helpers
- Defined in:
- lib/fsrs_ruby/helpers.rb
Class Method Summary collapse
-
.clamp(value, min, max) ⇒ Object
Clamp value between min and max.
-
.date_diff(now, pre, unit) ⇒ Integer
Calculate difference between two dates.
-
.date_diff_in_days(last, cur) ⇒ Integer
Calculate day difference ignoring time.
-
.date_scheduler(now, t, is_day = false) ⇒ Time
Add time offset to a date.
-
.format_date(time) ⇒ String
Format date as YYYY-MM-DD HH:MM:SS.
-
.get_fuzz_range(interval, elapsed_days, maximum_interval) ⇒ Hash
Calculate fuzz range for interval randomization.
-
.round8(value) ⇒ Object
Round to 8 decimal places for TypeScript compatibility.
Class Method Details
.clamp(value, min, max) ⇒ Object
Clamp value between min and max
12 13 14 |
# File 'lib/fsrs_ruby/helpers.rb', line 12 def self.clamp(value, min, max) [[value, min].max, max].min end |
.date_diff(now, pre, unit) ⇒ Integer
Calculate difference between two dates
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/fsrs_ruby/helpers.rb', line 34 def self.date_diff(now, pre, unit) diff_seconds = now - pre case unit when :days (diff_seconds / (24 * 60 * 60)).floor when :minutes (diff_seconds / 60).floor else raise ArgumentError, "Invalid unit: #{unit}. Use :days or :minutes" end end |
.date_diff_in_days(last, cur) ⇒ Integer
Calculate day difference ignoring time
90 91 92 |
# File 'lib/fsrs_ruby/helpers.rb', line 90 def self.date_diff_in_days(last, cur) (cur.to_date - last.to_date).to_i end |
.date_scheduler(now, t, is_day = false) ⇒ Time
Add time offset to a date
21 22 23 24 25 26 27 |
# File 'lib/fsrs_ruby/helpers.rb', line 21 def self.date_scheduler(now, t, is_day = false) if is_day now + (t * 24 * 60 * 60) # Days to seconds else now + (t * 60) # Minutes to seconds end end |
.format_date(time) ⇒ String
Format date as YYYY-MM-DD HH:MM:SS
82 83 84 |
# File 'lib/fsrs_ruby/helpers.rb', line 82 def self.format_date(time) time.strftime('%Y-%m-%d %H:%M:%S') end |
.get_fuzz_range(interval, elapsed_days, maximum_interval) ⇒ Hash
Calculate fuzz range for interval randomization
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/fsrs_ruby/helpers.rb', line 52 def self.get_fuzz_range(interval, elapsed_days, maximum_interval) delta = 1.0 # Apply fuzzing factors based on interval ranges if interval >= 2.5 delta += (interval - 2.5) * 0.15 if interval < 7.0 delta += (7.0 - 2.5) * 0.15 if interval >= 7.0 delta += (interval - 7.0) * 0.10 if interval >= 7.0 && interval < 20.0 delta += (20.0 - 7.0) * 0.10 if interval >= 20.0 delta += (interval - 20.0) * 0.05 if interval >= 20.0 end # Clamp interval to maximum interval = [interval, maximum_interval].min min_ivl = [2, (interval - delta).round].max max_ivl = [(interval + delta).round, maximum_interval].min # Ensure min_ivl is greater than elapsed_days if interval exceeds it min_ivl = [min_ivl, elapsed_days + 1].max if interval > elapsed_days # Ensure min <= max min_ivl = max_ivl if min_ivl > max_ivl { min_ivl: min_ivl, max_ivl: max_ivl } end |
.round8(value) ⇒ Object
Round to 8 decimal places for TypeScript compatibility
6 7 8 9 |
# File 'lib/fsrs_ruby/helpers.rb', line 6 def self.round8(value) return value if value.nil? (value * 100_000_000).round / 100_000_000.0 end |