Class: DataMapper::Adapters::FilemakerAdapter
- Inherits:
-
AbstractAdapter
- Object
- AbstractAdapter
- DataMapper::Adapters::FilemakerAdapter
- Defined in:
- lib/dm-filemaker-adapter/adapter.rb
Defined Under Namespace
Modules: ModelMethods, ResourceMethods
Constant Summary collapse
- VERSION =
DataMapper::FilemakerAdapter::VERSION
Class Attribute Summary collapse
-
.fmresultset_template_path ⇒ Object
Returns the value of attribute fmresultset_template_path.
Instance Method Summary collapse
-
#aggregate(query) ⇒ Object
Takes a query and returns number of matched records.
-
#create(resources) ⇒ Integer
Persists one or many new resources.
-
#delete(collection) ⇒ Integer
Deletes one or many existing resources.
-
#layout(model) ⇒ Object
Create fmp layout object from model object.
-
#read(query) ⇒ Enumerable<Hash>
Reads one or many resources from a datastore.
-
#update(attributes, collection) ⇒ Integer
Updates one or many existing resources.
Class Attribute Details
.fmresultset_template_path ⇒ Object
Returns the value of attribute fmresultset_template_path.
38 39 40 |
# File 'lib/dm-filemaker-adapter/adapter.rb', line 38 def fmresultset_template_path @fmresultset_template_path end |
Instance Method Details
#aggregate(query) ⇒ Object
Takes a query and returns number of matched records. An empty query will return the total record count
120 121 122 123 124 125 126 127 128 129 |
# File 'lib/dm-filemaker-adapter/adapter.rb', line 120 def aggregate(query) #query.model.last_query = query #y query _layout = layout(query.model) opts = (query) opts[:template] = self.class.fmresultset_template_path prms = fmp_query(query.conditions) #.to_set.first) #[prms.empty? ? _layout.all(:max_records=>0).foundset_count : _layout.count(prms)] [prms.empty? ? _layout.view.total_count : _layout.count(prms)] end |
#create(resources) ⇒ Integer
Persists one or many new resources
Adapters provide specific implementation of this method
76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/dm-filemaker-adapter/adapter.rb', line 76 def create(resources) #resources[0].model.last_query = resources counter = 0 resources.each do |resource| fm_params = fmp_attributes resource.dirty_attributes rslt = layout(resource.model).create(fm_params, :template=>self.class.fmresultset_template_path) merge_fmp_response(resource, rslt[0]) counter +=1 end counter end |
#delete(collection) ⇒ Integer
Deletes one or many existing resources
Adapters provide specific implementation of this method
174 175 176 177 178 179 180 181 |
# File 'lib/dm-filemaker-adapter/adapter.rb', line 174 def delete(collection) counter = 0 collection.each do |resource| rslt = layout(resource.model).delete(resource.record_id, :template=>self.class.fmresultset_template_path) counter +=1 end counter end |
#layout(model) ⇒ Object
Create fmp layout object from model object.
188 189 190 191 |
# File 'lib/dm-filemaker-adapter/adapter.rb', line 188 def layout(model) #Rfm.layout(model.storage_name, options.symbolize_keys) #query.repository.adapter.options.symbolize_keys) model.layout end |
#read(query) ⇒ Enumerable<Hash>
Reads one or many resources from a datastore
Adapters provide specific implementation of this method
def read(query)
raise NotImplementedError, "#{self.class}#read not implemented"
end
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/dm-filemaker-adapter/adapter.rb', line 106 def read(query) #query.model.last_query = query #y query _layout = layout(query.model) opts = (query) opts[:template] = self.class.fmresultset_template_path prms = fmp_query(query.conditions) #.to_set.first) rslt = prms.empty? ? _layout.all(opts) : _layout.find(prms, opts) rslt.dup.each_with_index(){|r, i| rslt[i] = r.to_h} rslt end |
#update(attributes, collection) ⇒ Integer
Updates one or many existing resources
Adapters provide specific implementation of this method
147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/dm-filemaker-adapter/adapter.rb', line 147 def update(attributes, collection) #collection[0].model.last_query = [attributes, collection] fm_params = fmp_attributes(attributes) counter = 0 collection.each do |resource| rslt = layout(resource.model).edit(resource.record_id, fm_params, :template=>self.class.fmresultset_template_path) merge_fmp_response(resource, rslt[0]) resource.persistence_state = DataMapper::Resource::PersistenceState::Clean.new resource counter +=1 end counter end |