aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorToshiaki Asai <qtoship@gmail.com>2013-02-28 21:09:21 +0900
committerToshiaki Asai <qtoship@gmail.com>2013-02-28 23:29:47 +0900
commit9da9e70f328a018c38f495c5a20467148e74e145 (patch)
treed91ad7a0269e9b359814ddf20def9ada4dc65785
parentdc5c3cf1316505dd014ffe94b48517e993e1624d (diff)
downloadmikutter-9da9e70f328a018c38f495c5a20467148e74e145.tar.gz
MikuTwitterができるだけTypedArrayを使って値を返すようにした
-rw-r--r--core/lib/mikutwitter/api_call_support.rb27
-rw-r--r--core/lib/mikutwitter/api_shortcuts.rb2
-rw-r--r--core/plugin/profile/profile.rb2
-rw-r--r--core/plugin/streaming/streamer.rb8
-rw-r--r--core/service.rb4
-rw-r--r--core/user.rb8
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