Module: Filemaker::Model::ClassMethods

Defined in:
lib/filemaker/model.rb

Instance Method Summary collapse

Instance Method Details

#database(db) ⇒ Object



64
65
66
67
68
# File 'lib/filemaker/model.rb', line 64

def database(db)
  self.db = db
  self.registry_name ||= 'default' unless lay.blank?
  register
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]



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

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

#layout(lay) ⇒ Object



70
71
72
73
74
# File 'lib/filemaker/model.rb', line 70

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.



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

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

#registerObject



81
82
83
84
# File 'lib/filemaker/model.rb', line 81

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

#registry(name) ⇒ Object



76
77
78
79
# File 'lib/filemaker/model.rb', line 76

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.



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/filemaker/model.rb', line 105

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