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