class MikuTwitter::ApiCallSupport::Request

Attributes

api[R]
force_oauth[RW]

このリクエストにOAuthを使用することを強制する。 OAuthなしでも使えるが、OAuthトークンを用いてリクエストした時に 追加の情報が得られ、それが欲しい場合に使う

twitter[R]

Public Class Methods

defparser(uni, multi = :" click to toggle source
  • 複数の同種のオブジェクトが配列で返ってくることを想定したパーサ

  • オブジェクトが一つだけ返ってくることを想定したパーサ

  • 同種のオブジェクトが大量に返ってくるが、cursorを使ってページが分かれているデータ用のパーサ

の3つを定義する。 メソッドの名前は上から順番に、 multi, uni, paged_#{multi} になる。

Args

uni

名前(単数形)

multi

名前(複数形)

# File core/lib/mikutwitter/api_call_support.rb, line 40
def self.defparser(uni, multi = :"#{uni}s", container = Array, defaults = {})
  parser = lazy{ MikuTwitter::ApiCallSupport::Request::Parser.method(uni) }
  defaults.freeze
  define_method(multi){ |options = {}|
    type_strict options => Hash
    json(defaults.merge(options)).next{ |node|
      Thread.new{ container.new(node.map(&parser)).freeze } } }

  define_method(uni){ |options = {}|
    type_strict options => Hash
    json(defaults.merge(options)).next{ |node|
      Thread.new{ parser.call(node) } } }

  define_method(:"paged_#{multi}"){ |options|
    type_strict options => Hash
    json(defaults.merge(options)).next{ |node = {}|
      Thread.new {
        node[multi] = node[multi].map(&parser)
        node } } } end
new(api, twitter) click to toggle source
# File core/lib/mikutwitter/api_call_support.rb, line 60
def initialize(api, twitter)
  @api, @twitter, @force_oauth = api, twitter, false end

Public Instance Methods

/(nex) click to toggle source
# File core/lib/mikutwitter/api_call_support.rb, line 63
def /(nex)
  result = Request.new("#{@api}/#{nex}", twitter)
  result.force_oauth = force_oauth
  result end
friendship(options = {}) click to toggle source
# File core/lib/mikutwitter/api_call_support.rb, line 84
def friendship(options = {})
  type_strict options => Hash
  json(options).next{ |res|
    relationship = res[:relationship]
    { following: relationship[:source][:following],     # 自分がフォローしているか
      followed_by: relationship[:source][:followed_by], # 相手にフォローされているか
      user: User.new_ifnecessary(idname: relationship[:target][:screen_name], # 相手
                                 id: relationship[:target][:id]) } } end
inspect() click to toggle source
# File core/lib/mikutwitter/api_call_support.rb, line 98
def inspect
  "#<#{MikuTwitter::ApiCallSupport::Request}: #{@api}>"
end
json(options) click to toggle source

APIリクエストを実際に発行する

Args

options

API引数(Hash)

Return

Deferredのインスタンス

# File core/lib/mikutwitter/api_call_support.rb, line 73
def json(options)
  type_strict options => Hash
  twitter.api(api, options, force_oauth).next{ |res|
    Thread.new{ JSON.parse(res.body).symbolize } } end