class Temporality::SliceCollection
Attributes
slices[RW]
Public Class Methods
new(values = nil)
click to toggle source
# File lib/temporality/slice_collection.rb, line 8 def initialize(values = nil) collection_from_history(values) if values end
Private Class Methods
not_period_complete!()
click to toggle source
# File lib/temporality/slice_collection.rb, line 70 def self.not_period_complete! raise 'Not period complete' end
Public Instance Methods
fill_missing_with!(slices, time_span)
click to toggle source
Remplit les 'trous' d'une collection de slices par rapport à un time_span de référence en utilisant les valeurs disponibles dans la collection de slices passée en paramètre
# File lib/temporality/slice_collection.rb, line 27 def fill_missing_with!(slices, time_span) self << slices.intersect(time_span.substract(self)) flatten! sort! end
intersect(tsc)
click to toggle source
# File lib/temporality/slice_collection.rb, line 39 def intersect(tsc) if tsc.is_a? TimeSpanCollection tsc.inject(SliceCollection.new) do |r, s| r << intersect(s) end.compact.sort elsif tsc.is_a? TimeSpan map { |s| s.intersect tsc }.compact end end
to_s()
click to toggle source
# File lib/temporality/slice_collection.rb, line 12 def to_s "{SLC : #{map(&:to_s) .join(', ')}}" end
value_for(time_span)
click to toggle source
# File lib/temporality/slice_collection.rb, line 33 def value_for(time_span) detect do |slice| slice.covers? time_span end.value end
Private Instance Methods
<=>(slice_collection)
click to toggle source
# File lib/temporality/slice_collection.rb, line 74 def <=>(slice_collection) (size == slice_collection.slices.size) && all? { |slice| slice_collection.include?(slice) } end
collection_from_history(values)
click to toggle source
# File lib/temporality/slice_collection.rb, line 51 def collection_from_history(values) sorted_values = values.sort do |a, b| a.starts_on <=> b.starts_on end previous_slice = nil sorted_values.each_with_index do |v, _i| slice = Slice.new(v.starts_on, v.ends_on, v.value) if previous_slice raise 'Overlapping slices!' if slice.starts_on <= previous_slice.ends_on not_period_complete! if previous_slice.ends_on.advance(days: 1) < slice.starts_on end self.<<(slice) end end
method_missing(_method, *_args)
click to toggle source
# File lib/temporality/slice_collection.rb, line 78 def method_missing(_method, *_args) raise SlicedConceptInterrupt end