diff options
author | Toshiaki Asai <qtoship@gmail.com> | 2013-02-28 21:09:21 +0900 |
---|---|---|
committer | Toshiaki Asai <qtoship@gmail.com> | 2013-02-28 23:29:47 +0900 |
commit | 9da9e70f328a018c38f495c5a20467148e74e145 (patch) | |
tree | d91ad7a0269e9b359814ddf20def9ada4dc65785 | |
parent | dc5c3cf1316505dd014ffe94b48517e993e1624d (diff) | |
download | mikutter-9da9e70f328a018c38f495c5a20467148e74e145.tar.gz |
MikuTwitterができるだけTypedArrayを使って値を返すようにした
-rw-r--r-- | core/lib/mikutwitter/api_call_support.rb | 27 | ||||
-rw-r--r-- | core/lib/mikutwitter/api_shortcuts.rb | 2 | ||||
-rw-r--r-- | core/plugin/profile/profile.rb | 2 | ||||
-rw-r--r-- | core/plugin/streaming/streamer.rb | 8 | ||||
-rw-r--r-- | core/service.rb | 4 | ||||
-rw-r--r-- | core/user.rb | 8 |
6 files changed, 21 insertions, 30 deletions
diff --git a/core/lib/mikutwitter/api_call_support.rb b/core/lib/mikutwitter/api_call_support.rb index e22c4f1e..f40f2000 100644 --- a/core/lib/mikutwitter/api_call_support.rb +++ b/core/lib/mikutwitter/api_call_support.rb @@ -36,12 +36,12 @@ module MikuTwitter::ApiCallSupport # ==== Args # [uni] 名前(単数形) # [multi] 名前(複数形) - def self.defparser(uni, multi = :"#{uni}s", defaults = {}) + def self.defparser(uni, multi = :"#{uni}s", container = Array, defaults = {}) parser = lazy{ MikuTwitter::ApiCallSupport::Request::Parser.method(uni) } define_method(multi){ |options = {}| type_strict options => Hash json(defaults.merge(options)).next{ |node| - Thread.new{ node.map(&parser) } } } + Thread.new{ container.new(node.map(&parser)).freeze } } } define_method(uni){ |options = {}| type_strict options => Hash @@ -73,16 +73,12 @@ module MikuTwitter::ApiCallSupport twitter.api(api, options, force_oauth).next{ |res| Thread.new{ JSON.parse(res.body).symbolize } } end - defparser :user - defparser :message, :messages + defparser :user, :users, Users + defparser :message, :messages, Messages defparser :list defparser :id defparser :direct_message - def messages(options = {}) - type_strict options => Hash - json(options).next{ |m| Thread.new{ Parser.messages m } } end - def friendship(options = {}) type_strict options => Hash json(options).next{ |res| @@ -97,14 +93,14 @@ module MikuTwitter::ApiCallSupport json(options).next{ |res| Thread.new { Parser.messages res[:statuses] } } end - def inspect - "#<#{MikuTwitter::ApiCallSupport::Request}: #{@api}>" - end + def inspect + "#<#{MikuTwitter::ApiCallSupport::Request}: #{@api}>" + end module Parser extend Parser - def message(msg, appear = true) + def message(msg) cnv = msg.convert_key(:text => :message, :in_reply_to_user_id => :receiver, :in_reply_to_status_id => :replyto) @@ -117,14 +113,9 @@ module MikuTwitter::ApiCallSupport message end def messages(msgs) - result = msgs.map{ |msg| message(msg, false) } - result end + Messages.new msgs.map{ |msg| message(msg) } end def user(u) - if u.is_a? Array - p u - abort - end cnv = u.convert_key(:screen_name =>:idname, :url => :url) cnv[:created] = Time.parse(u[:created_at]) cnv[:detail] = u[:description] diff --git a/core/lib/mikutwitter/api_shortcuts.rb b/core/lib/mikutwitter/api_shortcuts.rb index 21b8538b..1012d51b 100644 --- a/core/lib/mikutwitter/api_shortcuts.rb +++ b/core/lib/mikutwitter/api_shortcuts.rb @@ -36,8 +36,6 @@ module MikuTwitter::APIShortcuts defshortcut :favorites, 'favorites', :message defshortcut :search, 'search/tweets', :search - # def search(args = {}) - # (self/:search).search({host: 'search.twitter.com'}.merge(args)) end defshortcut :trends, :trends, :json diff --git a/core/plugin/profile/profile.rb b/core/plugin/profile/profile.rb index f61cec47..f9f6aebe 100644 --- a/core/plugin/profile/profile.rb +++ b/core/plugin/profile/profile.rb @@ -188,7 +188,7 @@ Plugin.create :profile do followbutton.sensitive = false event = following ? :followings_destroy : :followings_created me.__send__(following ? :unfollow : :follow, user).next{ |msg| - Plugin.call(event, me, [user]) + Plugin.call(event, me, Users.new([user])) followbutton.sensitive = true unless followbutton.destroyed? }. terminate.trap{ followbutton.sensitive = true unless followbutton.destroyed? } diff --git a/core/plugin/streaming/streamer.rb b/core/plugin/streaming/streamer.rb index efb8f895..ee549745 100644 --- a/core/plugin/streaming/streamer.rb +++ b/core/plugin/streaming/streamer.rb @@ -108,14 +108,14 @@ module ::Plugin::Streaming Plugin.activity :system, "unsupported event:\n" + YAML.dump(json) end end end defevent(:update, true) do |data| - events = {update: [], mention: [], mypost: []} + events = {update: Messages.new, mention: Messages.new, mypost: Messages.new} data.each { |json| msg = MikuTwitter::ApiCallSupport::Request::Parser.message(json.symbolize) events[:update] << msg events[:mention] << msg if msg.to_me? events[:mypost] << msg if msg.from_me? } events.each{ |event_name, data| - Plugin.call(event_name, @service, data) } end + Plugin.call(event_name, @service, data.freeze) } end defevent(:direct_message, true) do |data| Plugin.call(:direct_messages, @service, data.map{ |datum| MikuTwitter::ApiCallSupport::Request::Parser.direct_message(datum.symbolize) }) end @@ -136,9 +136,9 @@ module ::Plugin::Streaming source = MikuTwitter::ApiCallSupport::Request::Parser.user(json['source'].symbolize) target = MikuTwitter::ApiCallSupport::Request::Parser.user(json['target'].symbolize) if(target.is_me?) - Plugin.call(:followers_created, @service, [source]) + Plugin.call(:followers_created, @service, Users.new([source])) elsif(source.is_me?) - Plugin.call(:followings_created, @service, [target]) end end + Plugin.call(:followings_created, @service, Users.new([target])) end end defevent(:list_member_added) do |json| target_user = MikuTwitter::ApiCallSupport::Request::Parser.user(json['target'].symbolize) # リストに追加されたユーザ diff --git a/core/service.rb b/core/service.rb index 6a52f2d4..69ba9069 100644 --- a/core/service.rb +++ b/core/service.rb @@ -252,8 +252,8 @@ class Service front = id.to_a.slice(0, 100) remain = id.to_a.slice(100,id.size) messages = @post.scan(:user_lookup, :id => front.join(',')) - messages = [] if not messages.is_a? Array - messages.concat(findbyid(remain)) if remain and not remain.empty? + messages = Messages.new if not messages.is_a? Array + messages += findbyid(remain) if remain and not remain.empty? messages else @post.scan(@api, :id => id) end end end diff --git a/core/user.rb b/core/user.rb index ac262077..e8b1d131 100644 --- a/core/user.rb +++ b/core/user.rb @@ -2,6 +2,8 @@ require File.expand_path('utils') miquire :core, 'retriever', 'skin' +miquire :lib, 'typed-array' + class User < Retriever::Model @@users_id = WeakStorage.new(String, User) # {idname => User} @@ -138,6 +140,6 @@ class User < Retriever::Model end end -# ~> -:44: syntax error, unexpected kEND, expecting '}' -# ~> -:98: class definition in method body -# ~> -:115: syntax error, unexpected kEND, expecting '}' + +class Users < TypedArray(User) +end |