module DataSteroid::Entity

Inject behaviour for Datastore Entity.

Public Class Methods

kind(kind_name) click to toggle source
# File lib/data_steroid/entity.rb, line 54
def self.kind(kind_name)
  self.kind = kind_name
end

Public Instance Methods

as_parent_key() click to toggle source
# File lib/data_steroid/entity.rb, line 31
def as_parent_key
  raise DataSteroid::Errors::InvalidRecord.new('parent not persisted') unless persisted?
  gcloud_key
end
create(*params) click to toggle source
# File lib/data_steroid/entity.rb, line 80
def create(*params)
  new(*params).tap(&:save)
end
datastore() click to toggle source
# File lib/data_steroid/entity.rb, line 72
def datastore
  @datastore ||= Google::Cloud.new.datastore
end
datastore_entity() click to toggle source
# File lib/data_steroid/entity.rb, line 76
def datastore_entity
  datastore.entity kind
end
gcloud_key() click to toggle source
# File lib/data_steroid/entity.rb, line 27
def gcloud_key
  self.class.gcloud_key(id, parent: parent)
end
persisted?() click to toggle source
# File lib/data_steroid/entity.rb, line 23
def persisted?
  id.present?
end
to_csv() click to toggle source
# File lib/data_steroid/entity.rb, line 42
def to_csv
  values = to_gcloud.sort.to_h.values.map! do |value|
    case value
    when Time
      value.to_formatted_s(:db)
    else
      value.to_s.gsub(',', '')
    end
  end
  values.join(',')
end
to_gcloud() click to toggle source
# File lib/data_steroid/entity.rb, line 36
def to_gcloud
  properties_names.each_with_object({}) do |property, hash|
    hash[property] = type_cast_for_storage send(property)
  end
end
type_cast_for_storage(value) click to toggle source

Based on github.com/rails/rails/blob/v5.0.0.1/activerecord/lib/active_record/type_caster/map.rb

# File lib/data_steroid/entity.rb, line 61
def type_cast_for_storage(value)
  case value
  when Symbol
    value.to_s
  else
    value
  end
end