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, #deploy, #destroy, #destroyed?, filter, find_all_by_plugin, from_json, get, get_all_models, get_model, handle_config, names, set, store, #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



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/openc3/models/note_model.rb', line 43

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.



36
37
38
# File 'lib/openc3/models/note_model.rb', line 36

def color
  @color
end

#descriptionObject (readonly)

Returns the value of attribute description.



36
37
38
# File 'lib/openc3/models/note_model.rb', line 36

def description
  @description
end

#stopObject (readonly)

Returns the value of attribute stop.



36
37
38
# File 'lib/openc3/models/note_model.rb', line 36

def stop
  @stop
end

#typeObject (readonly)

Returns the value of attribute type.



36
37
38
# File 'lib/openc3/models/note_model.rb', line 36

def type
  @type
end

Class Method Details

.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



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

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



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

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



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

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



61
62
63
64
65
# File 'lib/openc3/models/note_model.rb', line 61

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

#validate_colorObject



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

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



67
68
69
70
71
72
73
74
75
# File 'lib/openc3/models/note_model.rb', line 67

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