diff options
author | toshi <toshi@03aab468-d3d2-4883-8b12-f661bbf03fa8> | 2010-05-15 03:50:34 +0000 |
---|---|---|
committer | toshi <toshi@03aab468-d3d2-4883-8b12-f661bbf03fa8> | 2010-05-15 03:50:34 +0000 |
commit | 8da13bac561e89e737b0cfc37f9c57e18f0584c2 (patch) | |
tree | 68b0215b08c376204ba29de26903e5ea281cd504 /core/messageconverters.rb | |
parent | 400379bd5bdcf3e28057f14f7120209e66cc0b8a (diff) | |
download | mikutter-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.rb | 56 |
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 |