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
# 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)

    next unless field

    # 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