Class: ScheduledValue::ScheduledValue

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(timespans: []) ⇒ ScheduledValue

Returns a new instance of ScheduledValue.



21
22
23
# File 'lib/scheduled_value/scheduled_value.rb', line 21

def initialize(timespans: [])
  self.timespans = timespans
end

Instance Attribute Details

#timespansObject

Returns the value of attribute timespans.



3
4
5
# File 'lib/scheduled_value/scheduled_value.rb', line 3

def timespans
  @timespans
end

Class Method Details

.always(value) ⇒ Object



9
10
11
12
# File 'lib/scheduled_value/scheduled_value.rb', line 9

def self.always(value)
  timespan = timespan_with_value_class.new(start: nil, finish: nil, value: value)
  self.new(timespans: [timespan])
end

.timespan_with_value_classObject



5
6
7
# File 'lib/scheduled_value/scheduled_value.rb', line 5

def self.timespan_with_value_class
  TimespanWithValue
end

Instance Method Details

#<<(timespan_with_value) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/scheduled_value/scheduled_value.rb', line 52

def <<(timespan_with_value)
  overlapping_timespan = timespan_overlapping(timespan_with_value)
  raise "Timespan for value #{overlapping_timespan} would overlap with #{timespan_with_value}" if overlapping_timespan

  @timespans << timespan_with_value
  @timespans_array = nil

  timespan_with_value
end

#attributesObject



25
26
27
28
29
# File 'lib/scheduled_value/scheduled_value.rb', line 25

def attributes
  {
    timespans: timespans
  }
end

#attributes=(attributes) ⇒ Object



31
32
33
# File 'lib/scheduled_value/scheduled_value.rb', line 31

def attributes=(attributes)
  self.timespans = attributes[:timespans] || attributes['timespans']
end

#covers_all_time?Boolean

Returns:

  • (Boolean)


85
86
87
88
# File 'lib/scheduled_value/scheduled_value.rb', line 85

def covers_all_time?
  timespans_array = timespans.to_a
  !timespans_array.first.start && !timespans_array.last.finish
end

#from_json(json, include_root = false) ⇒ Object



14
15
16
17
18
19
# File 'lib/scheduled_value/scheduled_value.rb', line 14

def from_json(json, include_root = false)
  hash = JSON.parse(json)
  hash = hash.values.first if include_root
  self.attributes = hash
  self
end

#has_value_at?(timestamp) ⇒ Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/scheduled_value/scheduled_value.rb', line 67

def has_value_at?(timestamp)
  !!(timespan_containing(timestamp))
end

#next_value_change_after(timestamp) ⇒ Object



78
79
80
81
82
83
# File 'lib/scheduled_value/scheduled_value.rb', line 78

def next_value_change_after(timestamp)
  timespan = timespan_containing(timestamp)
  return nil unless timespan

  timespan.finish
end

#set_value_for_timespan(start, finish, value) ⇒ Object



62
63
64
65
# File 'lib/scheduled_value/scheduled_value.rb', line 62

def set_value_for_timespan(start, finish, value)
  self << self.class.timespan_with_value_class.new(start: start, finish: finish, vaule: value)
  value
end

#value_at(timestamp) ⇒ Object



71
72
73
74
75
76
# File 'lib/scheduled_value/scheduled_value.rb', line 71

def value_at(timestamp)
  timespan = timespan_containing(timestamp)
  raise "No timespan found for #{timestamp}" unless timespan

  timespan.value
end