Class: OpenC3::NoteModel

Inherits:
SortedModel show all
Defined in:
lib/openc3/models/note_model.rb

Constant Summary collapse

NOTE_TYPE =
'note'.freeze
PRIMARY_KEY =
'__NOTE'.freeze

Constants inherited from SortedModel

SortedModel::SORTED_TYPE

Instance Attribute Summary collapse

Attributes inherited from SortedModel

#start

Attributes inherited from Model

#name, #plugin, #scope, #updated_at

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from SortedModel

all, count, destroy, #destroy, get, get_current_value, #notify, range, range_destroy, #validate_start

Methods inherited from Model

all, #check_disable_erb, #deploy, #destroy, #destroyed?, filter, find_all_by_plugin, from_json, get, get_all_models, get_model, handle_config, names, set, store, store_queued, #undeploy

Constructor Details

#initialize(scope:, start:, stop:, color: nil, description:, type: NOTE_TYPE, updated_at: 0) ⇒ NoteModel

Returns a new instance of NoteModel.

Parameters:

  • scope (String)
    • OpenC3 scope to track event to

  • start (Integer)
    • start of the event in seconds from Epoch

  • stop (Integer)
    • stop of the event in seconds from Epoch

  • color (String) (defaults to: nil)
    • The event color

  • description (String)
    • What the event is about



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/openc3/models/note_model.rb', line 54

def initialize(
  scope:,
  start:,
  stop:,
  color: nil,
  description:,
  type: NOTE_TYPE,
  updated_at: 0
)
  super(start: start, scope: scope, updated_at: updated_at)
  @start = start
  @stop = stop
  @color = color
  @description = description
  @type = type # For the as_json, from_json round trip
end

Instance Attribute Details

#colorObject (readonly)

Returns the value of attribute color.



47
48
49
# File 'lib/openc3/models/note_model.rb', line 47

def color
  @color
end

#descriptionObject (readonly)

Returns the value of attribute description.



47
48
49
# File 'lib/openc3/models/note_model.rb', line 47

def description
  @description
end

#stopObject (readonly)

Returns the value of attribute stop.



47
48
49
# File 'lib/openc3/models/note_model.rb', line 47

def stop
  @stop
end

#typeObject (readonly)

Returns the value of attribute type.



47
48
49
# File 'lib/openc3/models/note_model.rb', line 47

def type
  @type
end

Class Method Details

.notify(scope:, kind:, start:, stop: nil) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/openc3/models/note_model.rb', line 36

def self.notify(scope:, kind:, start:, stop: nil)
  json = {'type' => NOTE_TYPE, 'start' => start}
  json['stop'] = stop if stop
  notification = {
    'data' => JSON.generate(json),
    'kind' => kind,
    'type' => 'calendar',
  }
  CalendarTopic.write_entry(notification, scope: scope)
end

.pk(scope) ⇒ Object



32
33
34
# File 'lib/openc3/models/note_model.rb', line 32

def self.pk(scope)
  "#{scope}#{PRIMARY_KEY}"
end

Instance Method Details

#as_json(*a) ⇒ Hash Also known as: to_s

Returns generated from the NoteModel.

Returns:

  • (Hash)

    generated from the NoteModel



123
124
125
126
127
128
129
130
131
132
133
# File 'lib/openc3/models/note_model.rb', line 123

def as_json(*a)
  return {
    'scope' => @scope,
    'start' => @start,
    'stop' => @stop,
    'color' => @color,
    'description' => @description,
    'type' => NOTE_TYPE,
    'updated_at' => @updated_at,
  }
end

#create(update: false) ⇒ Object

Update the Redis hash at primary_key based on the initial passed start The member is set to the JSON generated via calling as_json



100
101
102
103
104
105
106
107
108
109
110
# File 'lib/openc3/models/note_model.rb', line 100

def create(update: false)
  validate(update: update)
  @updated_at = Time.now.to_nsec_from_epoch
  NoteModel.destroy(scope: @scope, start: update) if update
  Store.zadd(@primary_key, @start, JSON.generate(as_json(:allow_nan => true)))
  if update
    notify(kind: 'updated')
  else
    notify(kind: 'created')
  end
end

#update(start: nil, stop: nil, color: nil, description: nil) ⇒ Object

Update the Redis hash at primary_key



113
114
115
116
117
118
119
120
# File 'lib/openc3/models/note_model.rb', line 113

def update(start: nil, stop: nil, color: nil, description: nil)
  orig_start = @start
  @start = start if start
  @stop = stop if stop
  @color = color if color
  @description = description if description
  create(update: orig_start)
end

#validate(update: false) ⇒ Object

Validates the instance variables: @start, @stop, @color, @description



72
73
74
75
76
# File 'lib/openc3/models/note_model.rb', line 72

def validate(update: false)
  validate_start(update: update)
  validate_stop()
  validate_color()
end

#validate_colorObject



88
89
90
91
92
93
94
95
96
# File 'lib/openc3/models/note_model.rb', line 88

def validate_color()
  if @color.nil?
    @color = '#%06x' % (rand * 0xffffff)
  end
  unless @color =~ /#?([0-9a-fA-F]{6})/
    raise SortedInputError.new "invalid color, must be in hex format, e.g. #FF0000"
  end
  @color = "##{@color}" unless @color.start_with?('#')
end

#validate_stopObject



78
79
80
81
82
83
84
85
86
# File 'lib/openc3/models/note_model.rb', line 78

def validate_stop()
  unless @stop.is_a?(Integer)
    raise SortedInputError.new "stop must be integer: #{@stop}"
  end
  if @stop.to_i < @start
    raise SortedInputError.new "stop: #{@stop} must be >= start: #{@start}"
  end
  @stop = @stop.to_i
end