aboutsummaryrefslogtreecommitdiffstats
path: root/core/messageconverters.rb
diff options
context:
space:
mode:
authortoshi <toshi@03aab468-d3d2-4883-8b12-f661bbf03fa8>2010-05-15 03:50:34 +0000
committertoshi <toshi@03aab468-d3d2-4883-8b12-f661bbf03fa8>2010-05-15 03:50:34 +0000
commit8da13bac561e89e737b0cfc37f9c57e18f0584c2 (patch)
tree68b0215b08c376204ba29de26903e5ea281cd504 /core/messageconverters.rb
parent400379bd5bdcf3e28057f14f7120209e66cc0b8a (diff)
downloadmikutter-8da13bac561e89e737b0cfc37f9c57e18f0584c2.tar.gz
git-svn-id: svn://toshia.dip.jp/mikutter/trunk@55 03aab468-d3d2-4883-8b12-f661bbf03fa8
Diffstat (limited to 'core/messageconverters.rb')
-rw-r--r--core/messageconverters.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/core/messageconverters.rb b/core/messageconverters.rb
new file mode 100644
index 00000000..bbccc9bf
--- /dev/null
+++ b/core/messageconverters.rb
@@ -0,0 +1,56 @@
+class MessageConverters
+ @@ring = []
+
+ def self.inherited(klass)
+ self.append(klass.new)
+ end
+
+ def self.append(klass)
+ @@ring = @@ring.push(klass)
+ end
+
+ def self.shrink_url_all(text)
+ urls = text.matches(shrinkable_url_regexp)
+ return text if(urls.empty?)
+ table = self.shrink_url(urls)
+ text.gsub(shrinkable_url_regexp){ |k| table[k] } if table
+ end
+
+ def self.shrink_url(url)
+ shrinked, redandancy = *url.partition{ |item|
+ self.shrinked_url?(item) }
+ if not redandancy.empty?
+ @@ring.each{ |shrinker|
+ r = shrinker.shrink_url(redandancy)
+ return r.update(Hash[*shrinked.zip(shrinked)]) if r }
+ end
+ Hash[url.zip(url)]
+ end
+
+ def self.shrinkable_url_regexp
+ URI.regexp(['http','https'])
+ end
+
+ def self.shrinked_url?(url)
+ @@ring.any?{ |shrinker|
+ shrinker.shrinked_url?(url) }
+ end
+
+ def shrink_url(url)
+ nil
+ end
+
+ def shrinked_url?(url)
+ nil
+ end
+
+ # no override follow
+
+ def shrink_url_ifnecessary(url)
+ if shrinked_url?(url)
+ url
+ else
+ shrink_url(url)
+ end
+ end
+end