Class: DataMapper::Types::Key

Inherits:
Type
  • Object
show all
Defined in:
lib/dm-appengine/types.rb

Class Method Summary collapse

Class Method Details

.dump(value, property) ⇒ Object



122
123
124
# File 'lib/dm-appengine/types.rb', line 122

def self.dump(value, property)
  property.typecast(value)
end

.kind(property) ⇒ Object



162
163
164
# File 'lib/dm-appengine/types.rb', line 162

def self.kind(property)
  property.model.repository.adapter.kind(property.model)
end

.load(value, property) ⇒ Object



126
127
128
# File 'lib/dm-appengine/types.rb', line 126

def self.load(value, property)
  value
end

.typecast(value, property) ⇒ Object



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/dm-appengine/types.rb', line 130

def self.typecast(value, property)
  case value
  when AppEngine::Datastore::Key, NilClass
    value
  when Integer, String
    AppEngine::Datastore::Key.from_path(kind(property), value)
  when Symbol
    AppEngine::Datastore::Key.from_path(kind(property), value.to_s)
  when Hash
    parent = property.typecast(value[:parent])
    id = value[:id]
    name = value[:name]
    if id
      id_or_name = id.to_i
    elsif name
      id_or_name = name.to_s
    end
    if parent
      if id_or_name || (!property.key?)
        parent.getChild(kind(property), id_or_name)
      else
        # TODO: is it sane to not typecast this?
        value
      end
    else
      property.typecast(id_or_name)
    end
  else
    raise ArgumentError, "Unsupported key value #{value.inspect} (a #{value.class})"
  end
end