Module: Filemaker::Model::ClassMethods

Defined in:
lib/filemaker/model.rb

Instance Method Summary collapse

Instance Method Details

#database(db) ⇒ Object



72
73
74
75
76
# File 'lib/filemaker/model.rb', line 72

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]



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

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

#layout(lay) ⇒ Object



78
79
80
81
82
# File 'lib/filemaker/model.rb', line 78

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.



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

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

#registerObject



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

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

#registry(name) ⇒ Object



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

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.



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/filemaker/model.rb', line 113

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