class HolidaysFromGoogleCalendar::Cache
Attributes
size[R]
Public Class Methods
new(enable: nil, max_size: nil)
click to toggle source
# File lib/holidays_from_google_calendar/cache.rb, line 5 def initialize(enable: nil, max_size: nil) @enable = enable @max_size = max_size @container = [] calculate_size end
Public Instance Methods
cache(holidays, date_min, date_max)
click to toggle source
# File lib/holidays_from_google_calendar/cache.rb, line 16 def cache(holidays, date_min, date_max) pack_container(CacheUnit.new(holidays.dup, date_min, date_max)) page_out if calculate_size > @max_size end
enabled?()
click to toggle source
# File lib/holidays_from_google_calendar/cache.rb, line 12 def enabled? @enable end
retrieve(date_min, date_max)
click to toggle source
# File lib/holidays_from_google_calendar/cache.rb, line 21 def retrieve(date_min, date_max) unit = @container.find { |e| e.include?(date_min, date_max) } return nil if unit.nil? # For LRU (Least Recently Used) @container.delete(unit) @container.push(unit) unit.retrieve(date_min, date_max) end
Private Instance Methods
calculate_size()
click to toggle source
The size of cache is sum of unit count and the number of holidays
# File lib/holidays_from_google_calendar/cache.rb, line 35 def calculate_size @size = unit_count + holidays_count end
holidays_count()
click to toggle source
# File lib/holidays_from_google_calendar/cache.rb, line 43 def holidays_count @container.map(&:size).sum end
pack_container(new_unit)
click to toggle source
# File lib/holidays_from_google_calendar/cache.rb, line 47 def pack_container(new_unit) unnecessary_units = @container.reduce([]) do |array, unit| # If there are overlapped units, combine them into the new unit if new_unit.include?(unit.date_min, unit.date_max) array.push(unit) elsif new_unit.overlapped?(unit) new_unit.combine(unit) array.push(unit) else array # Do nothing end end @container -= unnecessary_units @container.push(new_unit) end
page_out()
click to toggle source
# File lib/holidays_from_google_calendar/cache.rb, line 63 def page_out deleted_size = 0 while (@size - deleted_size) > @max_size unit = @container.shift deleted_size += (1 + unit.size) # Size is unit count plus holiday count end @size -= deleted_size end
unit_count()
click to toggle source
# File lib/holidays_from_google_calendar/cache.rb, line 39 def unit_count @container.size end