class Service

Twitter APIとmikutterプラグインのインターフェイス

Attributes

twitter[R]

MikuTwitter のインスタンス

Public Class Methods

__destroy_e3de__(service)
Alias for: destroy
add_service(token, secret) click to toggle source

新しくサービスを認証する

# File core/service.rb, line 67
def add_service(token, secret)
  type_strict token => String, secret => String

  twitter = MikuTwitter.new
  twitter.consumer_key = Environment::TWITTER_CONSUMER_KEY
  twitter.consumer_secret = Environment::TWITTER_CONSUMER_SECRET
  twitter.a_token = token
  twitter.a_secret = secret

  (twitter/:account/:verify_credentials).user.next { |user|
    id = "twitter#{user.id}".to_sym
    accounts = Service::SaveData.accounts
    if accounts.is_a? Hash
      accounts = accounts.melt
    else
      accounts = {} end
    Service::SaveData.account_register id, {
      provider: :twitter,
      slug: id,
      token: token,
      secret: secret,
      user: {
        id: user[:id],
        idname: user[:idname],
        name: user[:name],
        profile_image_url: user[:profile_image_url] } }
    service = Service[id]
    Plugin.call(:service_registered, service)
    service } end
define_postal(method, twitter_method = method, &wrap) click to toggle source

なんかコールバック機能つける Deferred返すから無くてもいいんだけどねー

# File core/service.rb, line 177
def self.define_postal(method, twitter_method = method, &wrap)
  function = lambda{ |api, options, &callback|
    if(callback)
      callback.call(:start, options)
      callback.call(:try, options)
      api.call(options).next{ |res|
        callback.call(:success, res)
        res
      }.trap{ |exception|
        callback.call(:err, exception)
        callback.call(:fail, exception)
        callback.call(:exit, nil)
        Deferred.fail(exception)
      }.next{ |val|
        callback.call(:exit, nil)
        val }
    else
      api.call(options) end }
  if block_given?
    define_method(method){ |*args, &callback|
      wrap.call(lambda{ |options|
             function.call(twitter.method(twitter_method), options, &callback) }, self, *args) }
  else
    define_method(method){ |options, &callback| function.call(twitter.method(twitter_method), options, &callback) } end
end
destroy(service) click to toggle source
# File core/service.rb, line 98
def destroy(service)
  type_strict service => Service
  Service::SaveData.account_destroy service.name
  __destroy_e3de__("twitter#{service.user_obj.id}".to_sym)
  Plugin.call(:service_destroyed, service) end
Also aliased as: __destroy_e3de__
each(*args, &proc) click to toggle source

Service.instances.eachと同じ

# File core/service.rb, line 30
def each(*args, &proc)
  instances.each(*args, &proc) end
new(name) click to toggle source

プラグインには、必要なときにはこのインスタンスが渡るようになっているので、インスタンスを 新たに作る必要はない

Calls superclass method
# File core/service.rb, line 109
def initialize(name)
  super
  account = Service::SaveData.account_data name
  @twitter = MikuTwitter.new
  @twitter.consumer_key = Environment::TWITTER_CONSUMER_KEY
  @twitter.consumer_secret = Environment::TWITTER_CONSUMER_SECRET
  @twitter.a_token = account[:token]
  @twitter.a_secret = account[:secret]
  user_initialize
end
primary() click to toggle source

現在アクティブになっているサービスを返す。 基本的に、あるアクションはこれが返すServiceに対して行われなければならない。

Return

アクティブなServiceか、存在しない場合はnil

# File core/service.rb, line 37
def primary
  if @primary
    @primary
  elsif services.empty?
    nil
  else
    set_primary(services.first)
    @primary end end
Also aliased as: primary_service
primary!() click to toggle source

現在アクティブになっているサービスを返す。 ::primary とちがって、サービスが一つも登録されていない時、例外を発生させる。

Exceptions

Service::NotExistError

(選択されている)Serviceが存在しない

Return

アクティブなService

# File core/service.rb, line 53
def primary!
  result = primary
  raise Service::NotExistError, 'Services does not exists.' unless result
  result end
primary_service()
Alias for: primary
remove_service(service) click to toggle source
# File core/service.rb, line 103
def remove_service(service)
  destroy(service) end
services_refresh() click to toggle source
# File core/service.rb, line 20
def services_refresh
  SaveData.accounts.keys.each do |account|
    Service[account] end
  @primary = (UserConfig[:primary_account] and Service[UserConfig[:primary_account]]) or instances.first end
set_primary(service) click to toggle source
# File core/service.rb, line 58
def set_primary(service)
  type_strict service => Service
  before_primary = @primary
  return self if before_primary != @primary || @primary == service
  @primary = service
  Plugin.call(:primary_service_changed, service)
  self end

Public Instance Methods

call_api(api, args = {}, &proc) click to toggle source

scanと同じだが、別スレッドで問い合わせをするのでブロッキングしない。 レスポンスが帰ってきたら、渡されたブロックが呼ばれる。 ブロックは、必ずメインスレッドで実行されることが保証されている。 Deferredを返す。 0.1: このメソッドはObsoleteです

# File core/service.rb, line 164
def call_api(api, args = {}, &proc)
  __send__(api, args).next &proc end
idname()
Alias for: user
inspect() click to toggle source
# File core/service.rb, line 248
def inspect
  "#<Service #{idname}>" end
method_missing(method_name, *args) click to toggle source
# File core/service.rb, line 251
def method_missing(method_name, *args)
  result = twitter.__send__(method_name, *args)
  (class << self; self end).__send__(:define_method, method_name, &twitter.method(method_name))
  result end
scan(kind=:friends_timeline, args={}) click to toggle source

サービスにクエリ kind を投げる。 レスポンスを受け取るまでブロッキングする。 レスポンスを返す。失敗した場合は、apifailイベントを発生させてnilを返す。 0.1: このメソッドはObsoleteです

# File core/service.rb, line 150
def scan(kind=:friends_timeline, args={})
  no_mainthread
  wait = Queue.new
  __send__(kind, args).next{ |res|
    wait.push res
  }.terminate.trap{
    wait.push nil }
  wait.pop end
service() click to toggle source

selfを返す

# File core/service.rb, line 143
def service
  self end
set_token_secret(token, secret) click to toggle source

アクセストークンとアクセスキーを再設定する

# File core/service.rb, line 121
def set_token_secret(token, secret)
  Service::SaveData.account_modify name, {token: token, secret: secret}
  @twitter.a_token = token
  @twitter.a_secret = secret
  self
end
streaming(method = :userstream, *args, &proc) click to toggle source

Streaming APIに接続する

# File core/service.rb, line 168
def streaming(method = :userstream, *args, &proc)
  twitter.__send__(method, *args, &proc) end
to_user()
Alias for: user_obj
user() click to toggle source

自分のユーザ名を返す。初回はサービスに問い合せてそれを返す。

# File core/service.rb, line 134
def user
  @user_obj[:idname] end
Also aliased as: idname
user_by_cache() click to toggle source

userと同じだが、サービスに問い合わせずにnilを返すのでブロッキングが発生しない

# File core/service.rb, line 139
def user_by_cache
  @user_idname end
user_obj() click to toggle source

自分のUserを返す。初回はサービスに問い合せてそれを返す。

# File core/service.rb, line 129
def user_obj
  @user_obj end
Also aliased as: to_user