Ginjo-Rfm 2.0のActiveModel互換機能を確認するには

2012年2月4日現在、OS X Lion Serverの最新バージョンは10.7.3、Ruby on Railsの最新バージョンは3.2.1です。ここではRails 3.2.1とGinjo-Rfm 2.0をOS X Lion Server v10.7.3にインストールする手順を説明し、後半でGinjo-Rfm 2.0のActiveModel互換機能について簡単に確認します。なお、あらかじめFileMaker Server 11.0v4をインストールしておく前提として説明を進めます(この資料はRfm Code Reading #15用に書かれたものです)。

Xcodeをインストールする

Mac App StoreからLion用のXcodeをダウンロードおよびインストールを行います(Lion用のXcodeは現在無料です)。Xcodeのダウンロードには時間がかかり、ダウンロードが完了してもインストール作業は完了していないので注意してください。ダウンロード後にアプリケーションフォルダにあるInstall Xcode.appを起動して、Xcodeのインストールを行う必要があります。

Rails 3.2.1をインストールする

Snow LeopardではRailsがあらかじめインストールされていましたが、LionにはRailsが入っていません。Rails 3.2.1をインストールする場合には、インターネットに接続している状態で「ターミナル」アプリケーションを起動して、「sudo gem install --version 3.2.1 rails --no-ri --no-rdoc」とコマンドを入力します。

$ sudo gem install --version 3.2.1 rails --no-ri --no-rdoc
Password:
Depending on your version of ruby, you may need to install ruby rdoc/ri data:<= 1.8.6 : unsupported
= 1.8.7 : gem install rdoc-data; rdoc-data --install
= 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
Successfully installed i18n-0.6.0
Successfully installed multi_json-1.0.4
Successfully installed activesupport-3.2.1
Successfully installed activemodel-3.2.1
Successfully installed rack-1.4.1
Successfully installed rack-cache-1.1
Successfully installed rack-test-0.6.1
Successfully installed journey-1.0.1
Successfully installed hike-1.2.1
Successfully installed sprockets-2.1.2
Successfully installed erubis-2.7.0
Successfully installed actionpack-3.2.1
Successfully installed arel-3.0.0
Successfully installed tzinfo-0.3.31
Successfully installed activerecord-3.2.1
Successfully installed activeresource-3.2.1
Successfully installed mime-types-1.17.2
Successfully installed polyglot-0.3.3
Successfully installed treetop-1.4.10
Successfully installed mail-2.4.1
Successfully installed actionmailer-3.2.1
Successfully installed rake-0.9.2.2
Successfully installed thor-0.14.6
Successfully installed rack-ssl-1.3.2
Successfully installed rdoc-3.12
Successfully installed railties-3.2.1
Successfully installed rails-3.2.1
27 gems installed

インストール完了後に、改めてRailsのバージョンを確認してみます。

$ rails -v
Rails 3.2.1

Ginjo-Rfm 2.0をインストールする

Ginjo-Rfm 2.0をインストールするには、いつものようにgemコマンドを使用します。

$ sudo gem install ginjo-rfm --no-ri --no-rdoc
Password:
Successfully installed ginjo-rfm-2.0.0
1 gem installed

アプリケーションを新規に作成する

ターミナルで適当な作業場所に移動し、「rails new sample」を実行してアプリケーションを新規に作成します。

$ cd ~/Desktop/
$ rails new sample
create
create README.rdoc
create Rakefile
create config.ru
create .gitignore
create Gemfile
create app
create app/assets/images/rails.png
create app/assets/javascripts/application.js
create app/assets/stylesheets/application.css
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create app/mailers
create app/models
create app/views/layouts/application.html.erb
create app/mailers/.gitkeep
create app/models/.gitkeep
create config
create config/routes.rb
create config/application.rb
create config/environment.rb
create config/environments
create config/environments/development.rb
create config/environments/production.rb
create config/environments/test.rb
create config/initializers
create config/initializers/backtrace_silencers.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/secret_token.rb
create config/initializers/session_store.rb
create config/initializers/wrap_parameters.rb
create config/locales
create config/locales/en.yml
create config/boot.rb
create config/database.yml
create db
create db/seeds.rb
create doc
create doc/README_FOR_APP
create lib
create lib/tasks
create lib/tasks/.gitkeep
create lib/assets
create lib/assets/.gitkeep
create log
create log/.gitkeep
create public
create public/404.html
create public/422.html
create public/500.html
create public/favicon.ico
create public/index.html
create public/robots.txt
create script
create script/rails
create test/fixtures
create test/fixtures/.gitkeep
create test/functional
create test/functional/.gitkeep
create test/integration
create test/integration/.gitkeep
create test/unit
create test/unit/.gitkeep
create test/performance/browsing_test.rb
create test/test_helper.rb
create tmp/cache
create tmp/cache/assets
create vendor/assets/javascripts
create vendor/assets/javascripts/.gitkeep
create vendor/assets/stylesheets
create vendor/assets/stylesheets/.gitkeep
create vendor/plugins
create vendor/plugins/.gitkeep
run bundle install
Fetching source index for https://rubygems.org/
Using rake (0.9.2.2)
Using i18n (0.6.0)
Using multi_json (1.0.4)
Using activesupport (3.2.1)
Using builder (3.0.0)
Using activemodel (3.2.1)
Using erubis (2.7.0)
Using journey (1.0.1)
Using rack (1.4.1)
Using rack-cache (1.1)
Using rack-test (0.6.1)
Using hike (1.2.1)
Installing tilt (1.3.3)
Using sprockets (2.1.2)
Using actionpack (3.2.1)
Using mime-types (1.17.2)
Using polyglot (0.3.3)
Using treetop (1.4.10)
Using mail (2.4.1)
Using actionmailer (3.2.1)
Using arel (3.0.0)
Using tzinfo (0.3.31)
Using activerecord (3.2.1)
Using activeresource (3.2.1)
Using bundler (1.0.0)
Installing coffee-script-source (1.2.0)
Installing execjs (1.3.0)
Installing coffee-script (2.2.0)
Using rack-ssl (1.3.2)
Installing json (1.6.5) with native extensions
Using rdoc (3.12)
Using thor (0.14.6)
Using railties (3.2.1)
Installing coffee-rails (3.2.2)
Installing jquery-rails (2.0.0)
Using rails (3.2.1)
Installing sass (3.1.13)
Installing sass-rails (3.2.4)
Installing sqlite3 (1.3.5) with native extensions
Installing uglifier (1.2.3)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

$ cd sample

Ginjo-Rfm 2.0のREADMEを参考にしてGemfileに下記の行を追加します。

gem 'ginjo-rfm'

READMEの記述を参考に一応「bundle install」を実行します。

$ bundle install
Using rake (0.9.2.2)
Using i18n (0.6.0)
Using multi_json (1.0.4)
Using activesupport (3.2.1)
Using builder (3.0.0)
Using activemodel (3.2.1)
Using erubis (2.7.0)
Using journey (1.0.1)
Using rack (1.4.1)
Using rack-cache (1.1)
Using rack-test (0.6.1)
Using hike (1.2.1)
Using tilt (1.3.3)
Using sprockets (2.1.2)
Using actionpack (3.2.1)
Using mime-types (1.17.2)
Using polyglot (0.3.3)
Using treetop (1.4.10)
Using mail (2.4.1)
Using actionmailer (3.2.1)
Using arel (3.0.0)
Using tzinfo (0.3.31)
Using activerecord (3.2.1)
Using activeresource (3.2.1)
Using bundler (1.0.0)
Using coffee-script-source (1.2.0)
Using execjs (1.3.0)
Using coffee-script (2.2.0)
Using rack-ssl (1.3.2)
Using json (1.6.5)
Using rdoc (3.12)
Using thor (0.14.6)
Using railties (3.2.1)
Using coffee-rails (3.2.2)
Using ginjo-rfm (2.0.0)
Using jquery-rails (2.0.0)
Using rails (3.2.1)
Using sass (3.1.13)
Using sass-rails (3.2.4)
Using sqlite3 (1.3.5)
Using uglifier (1.2.3)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

コントローラーの雛形を作成します。

$ rails g controller art list
create app/controllers/art_controller.rb
route get "art/list"
invoke erb
create app/views/art
create app/views/art/list.html.erb
invoke test_unit
create test/functional/art_controller_test.rb
invoke helper
create app/helpers/art_helper.rb
invoke test_unit
create test/unit/helpers/art_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/art.js.coffee
invoke scss
create app/assets/stylesheets/art.css.scss


app/controllers/art_controller.rbを編集します。ここでは以前のバージョンで使用していたサンプルアプリケーションの一部をそのまま使います。

require "rfm"

class ArtController < ApplicationController

  # This action finds all the records using a List layout. See view/art/list.rhtml 
  # to see how the data from this aciton is rendered to the page
  def list
    
    # Create a server object using our config (from environment.rb)
    fm = Rfm::Server.new(FM_CONFIG)
    
    # if we were passed an :id param, it is the sort field, otherwise we find with no sort
    # because we store the results (an Rfm::RecordSet object) in an instance variable
    # (@records) they will be available on the web page.
    if params[:id] != nil
      @records = fm[FM_CONFIG[:database]]["English_List_View"].all(:sort_field => params[:id])
    else
      @records = fm[FM_CONFIG[:database]]["English_List_View"].all
    end
  end
end

app/views/art/list.html.erbを編集します。ここでは以前のバージョンで使用していたサンプルアプリケーションのビューファイルをそのまま使います。

<%
# this page renders the list of records
%>

<table cellspacing="0">
	<tr>
		<% sort_label = "(sort)" %>
		
		<th>Title
			<small><%= link_to_if(params[:id] != "Title", sort_label, :id => "Title") %></small></th>
		
		<th>Cover Photo Credit
			<small><%= link_to_if(params[:id] != "Cover Photo Credit", sort_label, :id => "Cover Photo Credit") %></small></th>

		<th>Status
			<small><%= link_to_if(params[:id] != "Status", sort_label, :id => "Status") %></small></th>

		<th class="center">Quantity in Stock
			<small><%= link_to_if(params[:id] != "Quantity in Stock", sort_label, :id => "Quantity in Stock") %></small></th>
	</tr>

    <%
	# Here, we loop through all the found records, spitting out a table row for each one
	%>
	<% @records.each_index do |i| %>
	<tr<%= i % 2 == 1 ? ' class="odd"' : '' %>>
		<% record = @records[i] %>
		<td><%= link_to(h(record["Title"]), :action => :detail, :id => record.record_id) %></td>
		<td><%= h record["Cover Photo Credit"] %></td>
		<td><%= h record["Status"] %></td>
		<td class="center"><%= h record["Quantity in Stock"].to_i %></td>
	</tr>
	<% end %>
</table>

config/environment.rbを編集して下記の設定を追加します(旧バージョンのRfmとの互換性確認用です)。

# FileMaker Server Object config
FM_CONFIG = {
:host => "127.0.0.1",
:port => 16014,
:account_name => "",
:password => "",
:database => "FMServer_Sample",
:ssl => false,
}

Railsを起動します。

$ rails s

http://localhost:3000/art/listにアクセスして、FileMakerデータベースのレコードが表示されることを確認します。

次にActiveModel互換について確認するために、モデルの雛形を作成します。

$ rails g model art
invoke active_record
create db/migrate/20120203235539_create_arts.rb
create app/models/art.rb
invoke test_unit
create test/unit/art_test.rb
create test/fixtures/arts.yml

いったんRailsを終了し、app/models/art.rbを編集します。

(編集前)

class Art < ActiveRecord::Base
end


(編集後)

require 'active_model'

class Art < Rfm::Base
  config :layout => 'English_List_View', :host => "127.0.0.1", :port => 16014, :account_name => "", :password => "", :database => "FMServer_Sample", :ssl => false
end


art_controller.rbにおいて「@records = fm[FM_CONFIG[:database]]["English_List_View"].all」を「@records = Art.all」に変更し、Railsを起動します。

$ rails s

http://localhost:3000/art/listにアクセスして、FileMakerデータベースのレコードが表示されることを確認します。