Class: DataMapper::Adapters::DataStoreAdapter
- Inherits:
-
AbstractAdapter
- Object
- AbstractAdapter
- DataMapper::Adapters::DataStoreAdapter
- Defined in:
- lib/dm-datastore-adapter/datastore-adapter.rb
Defined Under Namespace
Modules: DS
Instance Method Summary collapse
- #aggregate(query) ⇒ Object
- #count(query) ⇒ Object
- #create(resources) ⇒ Object
- #delete(query) ⇒ Object
- #read_many(query) ⇒ Object
- #read_one(query) ⇒ Object
- #update(attributes, query) ⇒ Object
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 |