aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorToshiaki Asai <toshi.alternative@gmail.com>2016-09-11 07:52:40 +0900
committerToshiaki Asai <toshi.alternative@gmail.com>2016-10-03 00:19:03 +0900
commita4c8a984acbc38f8be9ad37f7b47c58387c6f06e (patch)
tree6e8e5bccbfe50433a306aebe013cfa0f3000e474 /core
parent579d9e80db1abb67e2101fd651acb855f6921ebc (diff)
downloadmikutter-a4c8a984acbc38f8be9ad37f7b47c58387c6f06e.tar.gz
Retriever::Model.handle を実装 refs #866
Diffstat (limited to 'core')
-rw-r--r--core/lib/retriever/model.rb30
-rw-r--r--core/message.rb2
-rw-r--r--core/user.rb4
3 files changed, 35 insertions, 1 deletions
diff --git a/core/lib/retriever/model.rb b/core/lib/retriever/model.rb
index c4c6964b..9b8ba1e5 100644
--- a/core/lib/retriever/model.rb
+++ b/core/lib/retriever/model.rb
@@ -147,7 +147,7 @@ class Retriever::Model
reply: reply,
myself: myself
}.freeze
- Plugin.create(:"retriever_#{@slug}") do
+ plugin do
filter_retrievers do |retrievers|
retrievers << retriever_spec
[retrievers]
@@ -159,6 +159,34 @@ class Retriever::Model
Retriever::FieldGenerator.new(self)
end
+ # あるURIが、このModelを示すものであれば真を返す条件 _condition_ を設定する。
+ # ==== Args
+ # [condition] 正規表現など、URIにマッチするもの
+ # ==== Return
+ # self
+ def handle(condition)
+ model = self
+ plugin do
+ filter_model_of_uri do |uri, models|
+ if condition === uri
+ models << model
+ end
+ [uri, models]
+ end
+ end
+ end
+
+ def plugin
+ if not @slug
+ raise Retriever::RetrieverError, "`#{self.class}'.slug is not set."
+ end
+ if block_given?
+ Plugin.create(:"retriever_model_#{@slug}", &Proc.new)
+ else
+ Plugin.create(:"retriever_model_#{@slug}")
+ end
+ end
+
# Modelが生成・更新された時に呼ばれるコールバックメソッドです
def store_datum(retriever); end
diff --git a/core/message.rb b/core/message.rb
index ddc4678e..221a5aa2 100644
--- a/core/message.rb
+++ b/core/message.rb
@@ -60,6 +60,8 @@ class Message < Retriever::Model
entity_class Retriever::Entity::TwitterEntity
+ handle PermalinkMatcher
+
def self.container_class
Messages end
diff --git a/core/user.rb b/core/user.rb
index 5802b09e..918b0a3d 100644
--- a/core/user.rb
+++ b/core/user.rb
@@ -8,6 +8,8 @@ class User < Retriever::Model
extend Gem::Deprecate
include Retriever::Model::Identity
+ register :twitter_user, name: "Twitter User"
+
# args format
# key | value
# --------+-----------
@@ -31,6 +33,8 @@ class User < Retriever::Model
field.int :statuses_count
field.int :friends_count
+ handle %r[\Ahttps?://twitter.com/[a-zA-Z0-9_]+/?\Z].freeze
+
def self.system
Mikutter::System::User.system end