※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

技術評論社のチュートリアルをedgeで。

http://gihyo.jp/dev/serial/01/waves

第1回

サクっと省略

第2回

サクっと省略

第2.5回

edgeのための準備:

  • githubをgem レポジトリに追加

(gem のバージョンが1.1.1以上が必要)

gem update --system
gem source -a http://gems.github.com/
  • autocodeをupdate
gem install dyoder-autocode
gems/autocode/lib/autocode.rbをリネーム(old_autocode.rbとか)
dyoder-autocode/lib/autocode.rb を gems/autocode/lib/autocode.rb にコピー
  • rubywaves を edge に
http://github.com/dyoder/waves/tree/master から最新の waves をダウンロード
ダウンロードしたファイルを解凍。
gems/waves-0.7.3配下をばっさり削除。
解凍したファイルのdyoder-waves-<ハッシュ>配下を gems/waves-0.7.3配下にコピー

第3回

  • アプリケーションの雛形を作成
> waves tw
  • バグ対応。textileメソッドの日本語対応以外は直っている
  • テーブル作成
tw/configurations/development.rb を編集
 :database => 'tw' を 'db/tw.sqlite' に。dbディレクトリ作成する。
firefoxのSQLiteManagerが便利。
 New Database tw/db/tw.sqlite になるように。
  • マイグレーション
tw> rake schema:migration name=initial_schema
マイグレーションファイル編集
tw> rake schema:migrate
  • waves-console で動作確認する。
tw> waves-console
created_on と updated_on と両方とも nil になってる。?
!null があると変な動きになる!
  • モデルのデフォルト動作を変更する。
created_on と updated_on が null になるのを何とかする。
rake generate:model name=word が出来ない。 (model/default.rb がないから。)
default動作をどこで規定しているか不明なので、modelを作る。
<tw/models/word.rb>
module Tw
  module Models
    class Word < Default
      after_create do
        update_values(:created_on => Time.now)
      end
      before_save do
        update_values(:updated_on => Time.now)
      end
    end
  end
end

Sequel::Model#set が deprecated。sequel 2.0 で削除らしい。かわりに #update_values を使うこと。


  • view を作成する。
tw/template/word/list.mab
tw/template/word/summary.mab
  • テスト実行する。
tw> waves-server
http://127.0.0.1:3000/wordsにアクセス
  • エントリ追加のためにマッピングを変更する。
 Waves::Mapping をextend するようになっている。
 use が resource に変更になっている。
 contoroller の記述方法が変更になっている?

 <tw/configurations/mapping.rb>に追加

     extend Waves::Mapping
     path %r(^/words/?$), :method=>:post do
       resource(:word) do
         controller { word = create; redirect('/words') }
       end
     end


  • コントローラのデフォルト動作を変更する。
tw> rake generate:controller name=word が出来ない。 (controller/default.rb がないから。)
default動作をどこで規定しているか不明なので、controllerを作る。
name カラムは作ってないので、rails っぽく id でアクセスするようにする。
model[ :id => name ] の :id をアクセスしたいカラム名に変更すればそのカラムでのキーになる。
<tw/controllers/word.rb>を作成
module Tw
  module Controllers
    class Word < Default
      def find( name ); model[ :id => name ] or not_fount; end
    end
  end
end
http://127.0.0.1:3000/word/1 にアクセスして確認。

第4回

  • mapping ルールの説明
  • Userモデル作成
tw> rake schema:migration name=add_user
マイグレーションファイル編集
tw> rake schema:migrate
  • User と Word を関連付け
<tw/models/word.rb>に追加
     many_to_one :user, :class=>Tw::Models::User
if columns.include? をcreated_on updated_on メソッドに条件追加
<tw/models/user.rb>を作成
module Tw
  module Models
    class User < Default
     one_to_many :word, :class=>Tw::Models::Word
    end
  end
end

  • Rack の Basic 認証を設定
<tw/configurations/development.rb>
application do に追加
       use Rack::Auth::Basic do |username, password|
         u = Tw::Models::User.find(:name=>usernam)
         u && u.password == password
       end
  • Static ファイルの設定
<tw/configurations/development.rb>
application do に追加
       use Rack::Static, :urls => ['/css', 'javascript'], :root => 'public'
  • サーバ再起動(configurationファイルを変更したので)
tw> waves-server
  • テンプレート修正
<tw/templates/word/list.mab>
<tw/templates/word/summary.mab>
  • Users テーブルにユーザを追加する。
insert into Users values (1,'admin','admin');
  • words テーブルの user_id カラムがnullだと変な動きをするので、先ほど作ったユーザのidで埋める。
update Words set user_id = 1;

第5回