Lingr APIで何か作る日記

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

2007-02-09

セッションを使ってroom.enterでルームに入る (その2) セッションを使ってroom.enterでルームに入る (その2)  - Lingr APIで何か作る日記 を含むブックマーク はてなブックマーク - セッションを使ってroom.enterでルームに入る (その2)  - Lingr APIで何か作る日記 セッションを使ってroom.enterでルームに入る (その2)  - Lingr APIで何か作る日記 のブックマークコメント

セッションと部屋が出来たので、Occupantモデルを作って入室できるようにします。

$ script/generate model Occupant session_id:integer \
room_id:integer name:string nickname:string ticket:string

Occupantモデルには以下の属性を作りました。

ソースコードはこんな感じです。

class Occupant < ActiveRecord::Base
  belongs_to :session
  belongs_to :room
  validates_presence_of :name
  validates_presence_of :session
  validates_presence_of :room

  def before_validation_on_create
    return unless session && room
    api = Lingr::ApiClient.new(nil)
    api.session = session.name
    response = api.enter_room(self.room.link, self.nickname, self.room.password)
    unless response[:succeeded]
      error = response[:response]['error']
      message = "#{error['message']} (#{error['code']})"
      raise StandardError.new(message)
    end
    self.ticket = response[:response]['ticket']
    self.name = response[:response]['occupant_id']
    self.room.name = response[:response]['room']['name']
    self.room.save
  end
end                                                                                  

Sessionモデルと同じく、データベースに保存する直前にLingr APIを使って入室します。使い方の例です。

$ script/console
Loading development environment.
>> occupant = Occupant.create(:session => Session.create, :room => Room.find(1))
>> occupant.name
=> "krP8HBJumjA"
>> occupant.ticket
=> "a-r-fwjry8ziju8-2xpbRozJWb1"

新しいセッションを作って、先ほど登録したRoomに入室します。もちろん、以前のセッションを使いまわすこともできます。

occupant.nameでoccupant_idが、occupant.ticketで発言のためのチケットが取得できました。(微妙属性名が分かりにくい気がしますが…)

 |