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