Ravn::BDE::MissionRecord::

Bolt class

A finished bolt, instanced from this callsign.

Public Instance Methods

before_validation()

Attach common data to all new rows.

# File lib/ravn/bde/mission_record/bolt.rb, line 85
def before_validation
        self.inserted_at ||= Ravn.monotonic_time
        self.version ||= Ravn::BDE::MissionRecord::Version.current
        self.state ||= {}

        super
end
initislize( ... )

Override to set some instance variables on instantiation

# File lib/ravn/bde/mission_record/bolt.rb, line 34
def initislize( ... )
        super

        @state = nil
end
state()

Get the hash of Bolt state

# File lib/ravn/bde/mission_record/bolt.rb, line 50
def state
        return @state ||= begin
                unparsed = self[ :state ]
                if unparsed
                        parsed = Yajl::Parser.parse( unparsed, symbolize_keys: true )
                        deep_freeze( parsed )
                else
                        nil
                end
        end
end
state=( new_state )

Set the Bolt state.

# File lib/ravn/bde/mission_record/bolt.rb, line 64
def state=( new_state )
        raise ArgumentError, "state must be a Hash" unless new_state.is_a?( Hash )

        self.log.debug "Serializing %p" % [ new_state ]
        new_state = symbolify_keys( new_state )
        return if new_state == self.state

        @state = deep_freeze( new_state )

        self.will_change_column( :state )
        self[:state] = Yajl::Encoder.encode( @state )
        self.log.debug "Serialized state is now: %p" % [ self[:state] ]
end
validate()

Sequel::Model API – validate the object before saving

# File lib/ravn/bde/mission_record/bolt.rb, line 95
def validate
        super

        self.validates_integer( :inserted_at )
        self.validate_associated_object( self.model.association_reflection(:version), self.version )
        self.validates_presence( [:bolt_id, :instance_id] )

        self.validate_state
end
validate_state()

Sequel validation API: Ensure the state set on the object is valid.

# File lib/ravn/bde/mission_record/bolt.rb, line 107
def validate_state
        serialized_value = self[:state] or return self.errors.add( :state, "can't be nil" )
        Yajl::Parser.parse( serialized_value )
rescue Yajl::ParseError => err
        self.errors.add( :state, "is not valid JSON: %s" % [err.message] )
end
version()

The version metadata when this bolt was finished.

# File lib/ravn/bde/mission_record/bolt.rb, line 46
many_to_one :version