module Mikutter::DivaHacks::ModelExtend

Public Instance Methods

entity_class(klass=nil) click to toggle source

Entityクラスを設定する。

Args

klass

Class 新しく設定するEntityクラス

Return

Class

セットされた(されている)Entityクラス

# File core/lib/diva_hacks/model.rb, line 62
def entity_class(klass=nil)
  if klass
    @entity_class = klass
  else
    @entity_class ||= Diva::Entity::BlankEntity
  end
end
handle(condition) { |uri| ... } click to toggle source

あるURIが、このModelを示すものであれば真を返す条件 condition を設定する。 condition === uri が実行され、真を返せばそのURIをこのModelで取り扱えるということになる

Args

condition

正規表現など、URIにマッチするもの

Return

self

Block

実際にURIが指し示すリソースの内容を含んだModelを作って返す

Args
uri

URI マッチしたURI

Return
Delayer::Deferred::Deferredable

ネットワークアクセスを行って取得するなど取得に時間がかかる場合

self

すぐにModelを生成できる場合、そのModel

Raise
Diva::ModelNotFoundError

uri に対応するリソースが見つからなかった

# File core/lib/diva_hacks/model.rb, line 87
def handle(condition)       # :yield: uri
  model_slug = self.slug
  plugin do
    if condition.is_a? Regexp
      filter_model_of_uri do |uri, models|
        if condition =~ uri.to_s
          models << model_slug
        end
        [uri, models]
      end
    else
      filter_model_of_uri do |uri, models|
        if condition === uri
          models << model_slug
        end
        [uri, models]
      end
    end
  end
  if block_given?
    class << self
      define_method(:find_by_uri, Proc.new)
    end
  end
end
new_ifnecessary(hash) click to toggle source

まだそのレコードのインスタンスがない場合、それを生成して返します。

# File core/lib/diva_hacks/model.rb, line 114
def new_ifnecessary(hash)
  type_strict hash => tcor(self, Hash)
  result_strict(self) do
    case hash
    when self
      hash
    when Hash
      self.new(hash)
    else
      raise ArgumentError.new("incorrect type #{hash.class} #{hash.inspect}")
    end
  end
end
plugin() click to toggle source
# File core/lib/diva_hacks/model.rb, line 46
def plugin
  if not @slug
    raise Diva::DivaError, "`#{self}'.slug is not set."
  end
  if block_given?
    Plugin.create(:"retriever_model_#{@slug}", &Proc.new)
  else
    Plugin.create(:"retriever_model_#{@slug}")
  end
end
register(new_slug, name: new_slug.to_s, reply: true, myself: true, timeline: false ) click to toggle source

Modelの情報を設定する。 このメソッドを呼ぶと、他のプラグインがこのModelを見つけることができるようになるので、 抽出タブの抽出条件が追加されたり、設定で背景色が指定できるようになる

Args

new_slug

Symbol

name:

String Modelの名前

reply:

bool このModelに、宛先が存在するなら真

myself:

bool このModel、自分のアカウントによって作成できるなら真

timeline:

bool 真ならタイムラインに表示することができる

# File core/lib/diva_hacks/model.rb, line 25
def register(new_slug,
             name: new_slug.to_s,
             reply: true,
             myself: true,
             timeline: false
            )
  @slug = new_slug.to_sym
  spec = @spec = Diva::ModelSpec.new(@slug,
                                          name.to_s.freeze,
                                          !!reply,
                                          !!myself,
                                          !!timeline
                                         ).freeze
  plugin do
    filter_retrievers do |retrievers|
      retrievers << spec
      [retrievers]
    end
  end
end
rewind(args) click to toggle source

deprecate :new_ifnecessary, 'new', 2018, 2

# File core/lib/diva_hacks/model.rb, line 129
def rewind(args)
  type_strict args => Hash
  result_strict(:merge){ new_ifnecessary(args) }.merge(args)
end