Lingr APIで何か作る日記

Lingr APIを使って何か面白いものが作れないかと試行錯誤する日記です。
 | 

2007-02-09

session.createセッションを作る  session.createでセッションを作る - Lingr APIで何か作る日記 を含むブックマーク はてなブックマーク -  session.createでセッションを作る - Lingr APIで何か作る日記  session.createでセッションを作る - Lingr APIで何か作る日記 のブックマークコメント

まずはセッションからです。セッションが無いと何もできません。Railsのgenerateを使ってSessionモデルを作ります。Railsバージョンは1.2.1です。

$ script/generate model Session name:string readonly:boolean created_on:date

Sessionが持つ属性は以下の通りです。

readonlyは、そのセッションを使って発言できるかどうかです。発言できるかどうかは、session.create時に指定するAPIキーで決まります。APIキーを作るときに、Permissionをobserve and speakとすれば発言可、observe onlyとすれば発言不可です(まだ試していませんが、きっとそうでしょう)。

2種類のAPIキーを取得し、config/environment.rbに書いておきます。

module Lingr
  API_KEY = 'observe and speakのAPIキー'
  API_KEY_READONLY = 'observe onlyのAPIキー'
end

Sessionモデルはこう書きました。Rails暦が浅いのでもっといい書き方があるかもしれません。

class Session < ActiveRecord::Base
  has_many :occupants, :dependent=>:destroy
  validates_presence_of :name

  def before_validation_on_create
    api_key = self.readonly ? Lingr::API_KEY_READONLY : Lingr::API_KEY
    api = Lingr::ApiClient.new(api_key)
    response = api.create_session
    unless response[:succeeded]
      error = response[:response]['error']
      message = "#{error['message']} (#{error['code']})"
      raise StandardError.new(message)
    end
    self.name = response[:response]['session']
  end
end

has_manyで複数のOccupantモデルと関連付けています。一つのセッションで複数のRoomに入ることを想定しています。

Lingr APIを使ってセッションIDを取得するのは、Sessionモデルを保存する直前 (before_validation_on_create) です。readonlyかどうかで、使用するAPIキーを切り替えています。無事にセッションIDを取得できたら、self.nameに代入します。エラーが起きれば例外を投げます。

試しに使ってみます。

$ script/console
Loading development environment.
>> Session.create    # セッションを生成
>> session = Session.new
>> session.readonly = true
>> session.save      # readonly のセッションを生成
>> puts session.name
"8kymI9MU5fZ"

無事にセッションIDが取得できたようです。

本当はsession.destroyにも対応させた方がいいのですが、とりあえず先に進みます。

 |