Kouhei Sutou
null+****@clear*****
Tue Dec 31 22:46:21 JST 2013
Kouhei Sutou 2013-12-31 22:46:21 +0900 (Tue, 31 Dec 2013) New Revision: 1ebaf2de735467fc3f47cc8bb229887da3e45310 https://github.com/ranguba/chupa-text/commit/1ebaf2de735467fc3f47cc8bb229887da3e45310 Message: Add decomposer Copied files: lib/chupa-text/decomposer.rb (from lib/chupa-text.rb) Modified files: lib/chupa-text.rb lib/chupa-text/data.rb lib/chupa-text/feeder.rb test/test-feeder.rb Modified: lib/chupa-text.rb (+1 -0) =================================================================== --- lib/chupa-text.rb 2013-12-31 22:20:25 +0900 (4d43e44) +++ lib/chupa-text.rb 2013-12-31 22:46:21 +0900 (d90b8c9) @@ -17,3 +17,4 @@ require "chupa-text/version" require "chupa-text/feeder" +require "chupa-text/decomposer" Modified: lib/chupa-text/data.rb (+6 -0) =================================================================== --- lib/chupa-text/data.rb 2013-12-31 22:20:25 +0900 (5fcc544) +++ lib/chupa-text/data.rb 2013-12-31 22:46:21 +0900 (aca6518) @@ -65,6 +65,12 @@ module ChupaText self["content-type"] = type end + # @return [Bool] true if content-type is "text/plain", false + # otherwise. + def text? + content_type == "text/plain" + end + private def read_body return nil if****@path*****? Copied: lib/chupa-text/decomposer.rb (+9 -2) 86% =================================================================== --- lib/chupa-text.rb 2013-12-31 22:20:25 +0900 (4d43e44) +++ lib/chupa-text/decomposer.rb 2013-12-31 22:46:21 +0900 (ba73c6d) @@ -14,6 +14,13 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -require "chupa-text/version" +module ChupaText + class Decomposer + def target?(data) + false + end -require "chupa-text/feeder" + def decompose(data) + end + end +end Modified: lib/chupa-text/feeder.rb (+24 -4) =================================================================== --- lib/chupa-text/feeder.rb 2013-12-31 22:20:25 +0900 (f0b6ebf) +++ lib/chupa-text/feeder.rb 2013-12-31 22:46:21 +0900 (c4a5d50) @@ -18,11 +18,31 @@ require "chupa-text/data" module ChupaText class Feeder + def initialize + @decomposers = [] + end + + def add_decomposer(decomposer) + @decomposers << decomposer + end + def feed(data) - extracted = Data.new - extracted.content_type = "text/plain" - extracted.body = data.body - yield(extracted) + loop do + if data.text? + yield(data) + return + end + decomposer = find_decomposer(data) + return if decomposer.nil? + data = decomposer.decompose(data) + end + end + + private + def find_decomposer(data) + @decomposers.find do |decomposer| + decomposer.target?(data) + end end end end Modified: test/test-feeder.rb (+8 -1) =================================================================== --- test/test-feeder.rb 2013-12-31 22:20:25 +0900 (ccf01ff) +++ test/test-feeder.rb 2013-12-31 22:46:21 +0900 (fca81a5) @@ -29,13 +29,20 @@ class TestFeeder < Test::Unit::TestCase texts end - sub_test_case("text") do + sub_test_case("no decomposers") do def test_text data = ChupaText::Data.new data.content_type = "text/plain" data.body = "Hello" assert_equal(["Hello"], feed(data)) end + + def test_not_text + data = ChupaText::Data.new + data.content_type = "text/html" + data.body = "<html><body>Hello</body></html>" + assert_equal([], feed(data)) + end end end end -------------- next part -------------- HTML����������������������������...Download