Module: Filemaker::Model::ClassMethods

Defined in:
lib/filemaker/model.rb

Instance Method Summary collapse

Instance Method Details

#database(db) ⇒ Object



83
84
85
86
87
# File 'lib/filemaker/model.rb', line 83

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

#default_per_pageObject



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

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]



118
119
120
# File 'lib/filemaker/model.rb', line 118

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

#layout(lay) ⇒ Object



89
90
91
92
93
# File 'lib/filemaker/model.rb', line 89

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.



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

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

#registerObject



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

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

#registry(name) ⇒ Object



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

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

#with_model_fields(criterion, coerce = 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.



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/filemaker/model.rb', line 128

def with_model_fields(criterion, coerce = 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 << (coerce ? field.coerce(v) : v)
      end

      accepted_fields[field.fm_name] = temp
    else
      accepted_fields[field.fm_name] = \
        coerce ? field.coerce(value) : value
    end
  end

  accepted_fields
end