Module: Filemaker::Model::ClassMethods
- Defined in:
- lib/filemaker/model.rb
Instance Method Summary collapse
- #database(db) ⇒ Object
- #default_per_page ⇒ Object
-
#fm_fields ⇒ Array
Make use of -view to return an array of [name, data_type] for this model from FileMaker.
- #layout(lay) ⇒ Object
-
#paginates_per(value) ⇒ Object
A chance for the model to set it’s per_page.
- #register ⇒ Object
- #registry(name) ⇒ Object
- #with_model_fields_for_creation(criterion) ⇒ Object
-
#with_model_fields_for_query(criterion) ⇒ Object
Filter out any fields that do not match model’s fields.
- #with_model_fields_for_update(criterion) ⇒ Object
Instance Method Details
#database(db) ⇒ Object
91 92 93 94 95 |
# File 'lib/filemaker/model.rb', line 91 def database(db) self.db = db self.registry_name ||= 'default' unless lay.blank? register end |
#default_per_page ⇒ Object
118 119 120 |
# File 'lib/filemaker/model.rb', line 118 def default_per_page per_page end |
#fm_fields ⇒ Array
Make use of -view to return an array of [name, data_type] for this model from FileMaker.
126 127 128 |
# File 'lib/filemaker/model.rb', line 126 def fm_fields api.view.fields.values.map { |field| [field.name, field.data_type] } end |
#layout(lay) ⇒ Object
97 98 99 100 101 |
# File 'lib/filemaker/model.rb', line 97 def layout(lay) self.lay = lay self.registry_name ||= 'default' unless db.blank? register end |
#paginates_per(value) ⇒ Object
A chance for the model to set it’s per_page.
114 115 116 |
# File 'lib/filemaker/model.rb', line 114 def paginates_per(value) self.per_page = value.to_i end |
#register ⇒ Object
108 109 110 111 |
# File 'lib/filemaker/model.rb', line 108 def register self.server = Filemaker.registry[registry_name] self.api = server.db[db][lay] if server && db && lay end |
#registry(name) ⇒ Object
103 104 105 106 |
# File 'lib/filemaker/model.rb', line 103 def registry(name) self.registry_name = (name || 'default').to_s register end |
#with_model_fields_for_creation(criterion) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/filemaker/model.rb', line 158 def with_model_fields_for_creation(criterion) accepted_fields = {} criterion.each_pair do |key, value| field = find_field_by_name(key) # Do not process nil value next unless field && value # We do not serialize at this point, as we are still in Ruby-land. # Filemaker::Server will help us serialize into FileMaker format. if value.is_a?(Array) field.max_repeat.times do |idx| index = idx + 1 repeated_fm_name = "#{field.fm_name}(#{index})" accepted_fields[repeated_fm_name] = field.serialize_for_update(value[idx]) end else accepted_fields[field.fm_name] = field.serialize_for_update(value) end end accepted_fields end |
#with_model_fields_for_query(criterion) ⇒ Object
Filter out any fields that do not match model’s fields.
A testing story to tell: when working on in query, we have value that is an array. Without the test and expectation setup, debugging the output will take far longer to realise. This reinforce the belief that TDD is in fact a valuable thing to do.
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/filemaker/model.rb', line 136 def with_model_fields_for_query(criterion) accepted_fields = {} criterion.each_pair do |key, value| field = find_field_by_name(key) # Do not process nil value, but empty string is ok in order to reset # some fields. next unless field && value # We do not serialize at this point, as we are still in Ruby-land. # Filemaker::Server will help us serialize into FileMaker format. if value.is_a?(Array) accepted_fields[field.fm_name] = value.map { |v| field.serialize_for_query(v) } else accepted_fields[field.fm_name] = field.serialize_for_query(value) end end accepted_fields end |
#with_model_fields_for_update(criterion) ⇒ Object
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/filemaker/model.rb', line 183 def with_model_fields_for_update(criterion) accepted_fields = {} criterion.each_pair do |key, value| field = find_field_by_name(key) next unless field # Able to process nil value only for update # We do not serialize at this point, as we are still in Ruby-land. # Filemaker::Server will help us serialize into FileMaker format. if value.is_a?(Array) field.max_repeat.times do |idx| index = idx + 1 repeated_fm_name = "#{field.fm_name}(#{index})" accepted_fields[repeated_fm_name] = field.serialize_for_update(value[idx]) end else accepted_fields[field.fm_name] = field.serialize_for_update(value) end end accepted_fields end |