rfilemaker

Heavily inspired by lardawge-rfm, see github.com/lardawge/rfm.

This library parses a Filemaker Pro FMPXMLRESULT type document, nothing more, nothing less

Installation

Easy, just use:

gem install rfilemaker

Usage

To parse a Filemaker Pro export file named ‘export.xml’, use:

RFilemaker.parse('export.xml')

This returns an array of hashes, each of which represent a row in your Filemaker database. Fields are automatically converted to their ruby types.

For instance, parsing the following XML export:

<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
  <ERRORCODE>0</ERRORCODE> 
  <PRODUCT BUILD="5/23/2002" NAME="FileMaker Pro"
  VERSION="7.0"/> 
  <DATABASE DATEFORMAT="MM/dd/yy" LAYOUT="summary"
  NAME="Employees.fp7" RECORDS="23" TIMEFORMAT="hh:mm:ss"/>
  <METADATA>
    <FIELD EMPTYOK="NO" MAXREPEAT="1" NAME="First Name" TYPE="TEXT"/>
    <FIELD EMPTYOK="NO" MAXREPEAT="1" NAME="Last Name" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Department" TYPE="TEXT"/>
  </METADATA>
  <RESULTSET FOUND="2">
    <ROW MODID="47" RECORDID="34"> 
      <COL>
        <DATA>Joe</DATA>
      </COL>
      <COL>
        <DATA>Smith</DATA>
      </COL>
      <COL>
        <DATA>Engineering</DATA>
      </COL>
    </ROW>
    <ROW MODID="89" RECORDID="78">
      <COL> 
        <DATA>Susan</DATA>
      </COL>
      <COL>
        <DATA>Jones</DATA>
      </COL>
      <COL>
        <DATA>Marketing</DATA>
      </COL>
    </ROW>
  </RESULTSET>
</FMPXMLRESULT>

gives this Ruby hash:

[{"last name"=>"Smith", "department"=>"Engineering", "first name"=>"Joe"},
 {"last name"=>"Jones", "department"=>"Marketing", "first name"=>"Susan"}]

The resulting hash is case-insensitive, so keys can be looked up in any given case.

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.