module Diva::Model::PhotoMixin

begin rdoc

画像リソースを扱うModelのためのmix-in。 これをincludeすると、画像データを保存するblobフィールドが追加される。

このmoduleをincludeしたクラスは、必要に応じて download_routine をオーバライドする

end

Constants

DownloadThread

Public Class Methods

included(klass) click to toggle source
# File core/lib/diva_hacks/mixin/photo_mixin.rb, line 15
def self.included(klass)
  klass.field.string :blob
end
new(*rest) click to toggle source
Calls superclass method
# File core/lib/diva_hacks/mixin/photo_mixin.rb, line 19
def initialize(*rest)
  super
  @read_count = 0
  @cached = false
  @forget = nil
end

Public Instance Methods

completed?() click to toggle source

画像のダウンロードが終わっていれば真を返す。 真を返す時、 blob には完全な画像の情報が存在している

# File core/lib/diva_hacks/mixin/photo_mixin.rb, line 53
def completed?
  @state == :complete
end
download(width: nil, height: nil) { |part| ... } click to toggle source

画像をダウンロードする。 partialを指定すると、ダウンロードの進捗があれば、前回呼び出されたときから ダウンロードできた内容を引数に呼び出される。 既にダウンロードが終わっていれば、 blob の戻り値がそのまま渡される。 このメソッドは、複数回呼び出されても画像のダウンロードを一度しか行わない。 widthとheightは、画像のサイズが複数ある場合に、ダウンロードする画像を決めるために使う。リサイズされるわけではない。

Args

width:

ヒントとして提供する幅(px)

height:

ヒントとして提供する高さ(px)

&partial_callback

現在ダウンロードできたデータの一部(String)

Return

Delayer::Deferred::Deferredable

ダウンロードが完了したらselfを引数に呼び出される

# File core/lib/diva_hacks/mixin/photo_mixin.rb, line 38
def download(width: nil, height: nil, &partial_callback)      # :yield: part
  increase_read_count
  case @state
  when :complete
    partial_callback.(blob) if block_given?
    Delayer::Deferred.new.next{ self }
  when :download
    append_download_queue(&partial_callback)
  else
    download!(&partial_callback)
  end
end
downloading?() click to toggle source

画像をダウロード中なら真

# File core/lib/diva_hacks/mixin/photo_mixin.rb, line 58
def downloading?
  @state == :download
end
inspect() click to toggle source
# File core/lib/diva_hacks/mixin/photo_mixin.rb, line 67
def inspect
  if @state == :complete
    "#<#{self.class}: #{uri} (state: #{@state}, #{self.blob.size} bytes cached)>"
  else
    "#<#{self.class}: #{uri} (state: #{@state})>"
  end
end
ready?() click to toggle source

ダウンロードが始まっていなければ真

# File core/lib/diva_hacks/mixin/photo_mixin.rb, line 63
def ready?
  !@state
end