class Shameless::Cell

Constants

BASE

Attributes

id[R]
model[R]
name[R]

Public Class Methods

base(model, body) click to toggle source
# File lib/shameless/cell.rb, line 7
def self.base(model, body)
  serialized_body = serialize_body(body)
  new(model, BASE, body: serialized_body)
end
new(model, name, values = nil) click to toggle source
# File lib/shameless/cell.rb, line 18
def initialize(model, name, values = nil)
  @model = model
  @name = name
  reload
  initialize_from_values(values)
end
serialize_body(body) click to toggle source
# File lib/shameless/cell.rb, line 12
def self.serialize_body(body)
  MessagePack.pack(body)
end

Public Instance Methods

[](key) click to toggle source
# File lib/shameless/cell.rb, line 25
def [](key)
  body[key.to_s]
end
[]=(key, value) click to toggle source
# File lib/shameless/cell.rb, line 29
def []=(key, value)
  @model.prevent_readonly_attribute_mutation!(key)
  body[key.to_s] = value
end
as_json(*) click to toggle source
# File lib/shameless/cell.rb, line 89
def as_json(*)
  cell_values(false).merge(id: id)
end
body() click to toggle source
# File lib/shameless/cell.rb, line 61
def body
  load
  @body
end
created_at() click to toggle source
# File lib/shameless/cell.rb, line 56
def created_at
  load
  @created_at
end
fetch(key, default) click to toggle source
# File lib/shameless/cell.rb, line 76
def fetch(key, default)
  body.key?(key.to_s) ? self[key] : default
end
present?() click to toggle source
# File lib/shameless/cell.rb, line 80
def present?
  load
  !@ref_key.nil?
end
previous() click to toggle source
# File lib/shameless/cell.rb, line 66
def previous
  if ref_key && previous_cell_values = @model.fetch_cell(@name, ref_key - 1)
    self.class.new(@model, @name, previous_cell_values)
  end
end
ref_key() click to toggle source
# File lib/shameless/cell.rb, line 51
def ref_key
  load
  @ref_key
end
reload() click to toggle source
# File lib/shameless/cell.rb, line 72
def reload
  @id = @body = @ref_key = @created_at = nil
end
save() click to toggle source
# File lib/shameless/cell.rb, line 34
def save
  load
  @created_at = Time.now
  @created_at = (@created_at.to_f * 1000).to_i if @model.class.store.configuration.legacy_created_at_is_bigint
  @ref_key ||= -1
  @ref_key += 1
  @id = @model.put_cell(cell_values(true))
end
update(values) click to toggle source
# File lib/shameless/cell.rb, line 43
def update(values)
  values.each do |key, value|
    self[key] = value
  end

  save
end
uuid() click to toggle source
# File lib/shameless/cell.rb, line 85
def uuid
  @model.uuid
end

Private Instance Methods

cell_values(serialize_body) click to toggle source
# File lib/shameless/cell.rb, line 95
def cell_values(serialize_body)
  {
    uuid: uuid,
    column_name: @name,
    ref_key: ref_key,
    created_at: created_at,
    body: serialize_body ? serialized_body : body
  }
end
deserialize_body(body) click to toggle source
# File lib/shameless/cell.rb, line 109
def deserialize_body(body)
  MessagePack.unpack(body)
end
initialize_from_values(values) click to toggle source
# File lib/shameless/cell.rb, line 123
def initialize_from_values(values)
  if values
    @id = values[:id]
    @body = deserialize_body(values[:body])
    @ref_key = values[:ref_key]
    @created_at = values[:created_at]
  end
end
load() click to toggle source
# File lib/shameless/cell.rb, line 115
def load
  if @body.nil?
    values = @model.fetch_cell(@name)
    initialize_from_values(values)
    @body ||= {}
  end
end
serialized_body() click to toggle source
# File lib/shameless/cell.rb, line 105
def serialized_body
  self.class.serialize_body(body)
end