Module: Filemaker::Model::ClassMethods

Defined in:
lib/filemaker/model.rb

Instance Method Summary collapse

Instance Method Details

#database(db) ⇒ Object



87
88
89
90
91
# File 'lib/filemaker/model.rb', line 87

def database(db)
  self.db = db
  self.registry_name ||= 'default' unless lay.blank?
  register
end

#default_per_pageObject



114
115
116
# File 'lib/filemaker/model.rb', line 114

def default_per_page
  per_page
end

#fm_fieldsArray

Make use of -view to return an array of [name, data_type] for this model from FileMaker.

Returns:

  • (Array)

    array of [name, data_type]



122
123
124
# File 'lib/filemaker/model.rb', line 122

def fm_fields
  api.view.fields.values.map { |field| [field.name, field.data_type] }
end

#layout(lay) ⇒ Object



93
94
95
96
97
# File 'lib/filemaker/model.rb', line 93

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.



110
111
112
# File 'lib/filemaker/model.rb', line 110

def paginates_per(value)
  self.per_page = value.to_i
end

#registerObject



104
105
106
107
# File 'lib/filemaker/model.rb', line 104

def register
  self.server = Filemaker.registry[registry_name]
  self.api = server.db[db][lay] if server && db && lay
end

#registry(name) ⇒ Object



99
100
101
102
# File 'lib/filemaker/model.rb', line 99

def registry(name)
  self.registry_name = (name || 'default').to_s
  register
end

#with_model_fields(criterion, use_query: true) ⇒ 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.



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
161
162
163
164
165
# File 'lib/filemaker/model.rb', line 132

def with_model_fields(criterion, use_query: true)
  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
      temp = []
      value.each do |v|
        temp << if use_query
                  field.serialize_for_query(v)
                else
                  field.serialize_for_update(v)
                end
      end

      accepted_fields[field.fm_name] = temp
    else
      accepted_fields[field.fm_name] = if use_query
                                         field.serialize_for_query(value)
                                       else
                                         field.serialize_for_update(value)
                                       end
    end
  end

  accepted_fields
end