Class: DataMapper::Adapters::DataStoreAdapter

Inherits:
AbstractAdapter
  • Object
show all
Defined in:
lib/dm-datastore-adapter/datastore-adapter.rb

Defined Under Namespace

Modules: DS

Instance Method Summary collapse

Instance Method Details

#aggregate(query) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
# File 'lib/dm-datastore-adapter/datastore-adapter.rb', line 112

def aggregate(query)
  op = query.fields.find{|p| p.kind_of?(DataMapper::Query::Operator)}
  if op.nil?
    raise NotImplementedError, "No operator supplied."
  end
  if respond_to?(op.operator)
    self.send op.operator, query
  else
    raise NotImplementedError, "#{op.operator} is not supported yet."
  end
end

#count(query) ⇒ Object



124
125
126
127
128
# File 'lib/dm-datastore-adapter/datastore-adapter.rb', line 124

def count(query)
  q = build_query(query)
  count = DS::Service.prepare(q).countEntities
  [query.limit ? [count, query.limit].min : count]
end

#create(resources) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/dm-datastore-adapter/datastore-adapter.rb', line 22

def create(resources)
  created = 0
  resources.each do |resource|
    entity = DS::Entity.new(resource.class.name)
    resource.attributes.each do |key, value|
      ds_set(entity, key, value)
    end
    begin
      ds_key = DS::Service.put(entity)
    rescue Exception
    else
      ds_id = ds_key.get_id
      resource.model.key.each do |property|
        resource.attribute_set property.field, ds_id
        ds_set(entity, property.field, ds_id)
      end
      DS::Service.put(entity)
      created += 1
    end
  end
  created
end

#delete(query) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/dm-datastore-adapter/datastore-adapter.rb', line 66

def delete(query)
  deleted = 0
  resources = read_many(query)
  resources.each do |resource|
    begin
      ds_key = ds_key_from_resource(resource)
      DS::Service.delete([ds_key].to_java(DS::Key))
    rescue Exception
    else
      deleted += 1
    end
  end
  deleted
end

#read_many(query) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/dm-datastore-adapter/datastore-adapter.rb', line 81

def read_many(query)
  q = build_query(query)
  fo = build_fetch_option(query)
  iter = if fo
    DS::Service.prepare(q).as_iterable(fo)
  else
    DS::Service.prepare(q).as_iterable
  end
  Collection.new(query) do |collection|
    iter.each do |entity|
      collection.load(query.fields.map do |property|
        property.key? ? entity.key.get_id : ds_get(entity, property.field)
      end)
    end
  end
end

#read_one(query) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/dm-datastore-adapter/datastore-adapter.rb', line 98

def read_one(query)
  q = build_query(query)
  fo = build_fetch_option(query)
  entity = if fo
    DS::Service.prepare(q).as_iterable(fo).map{|i| break i}
  else 
    DS::Service.prepare(q).asSingleEntity
  end
  return nil if entity.blank?
  query.model.load(query.fields.map do |property|
    property.key? ? entity.key.get_id : ds_get(entity, property.field)
  end, query)
end

#update(attributes, query) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/dm-datastore-adapter/datastore-adapter.rb', line 45

def update(attributes, query)
  updated = 0
  resources = read_many(query)
  resources.each do |resource|
    entity = DS::Service.get(ds_key_from_resource(resource))
    resource.attributes.each do |key, value|
      ds_set(entity, key, value)
    end
    begin
      ds_key = DS::Service.put(entity)
    rescue Exception
    else
      resource.model.key.each do |property|
        resource.attribute_set property.field, ds_key.get_id
      end
      updated += 1
    end
  end
  updated
end