Permalink
Browse files

Merge pull request #14 from Sam-Serpoosh/master

Ruby version of UnicodeFileToHtmlTextConverter both original problem and tested and refactored solution
  • Loading branch information...
2 parents bcad52d + ccc1cc6 commit 428078bba771925324d6ca8b123f672aacf38e60 @lucaminudel committed Sep 12, 2012
@@ -0,0 +1,30 @@
+class UnicodeFileToHtmTextConverter
+ def initialize(full_file_name_with_path)
+ @full_file_name_with_path = full_file_name_with_path
+ @html = ""
+ end
+
+ def convert_to_html
+ text = read_content
+ text.each_line { |line| @html += to_html(line) }
+
+ @html
+ end
+
+ private
+ def read_content
+ FileReader.read_content(@full_file_name_with_path)
+ end
+
+ def to_html(text)
+ converted = HttpUtility.html_encode(text)
+ converted += "<br />"
+ end
+end
+
+class FileReader
+ def self.read_content(file_path)
+ text = File.open(file_path).read # Not exactly the same thing as the # CShapr code but same functionality!
+ text.gsub!(/\r\n?/, "\n")
+ end
+end
@@ -0,0 +1,33 @@
+require_relative "../../code/unicode_file_to_html_text_converter/unicode_file_to_html_text_converter"
+
+class HttpUtility; end
+
+describe UnicodeFileToHtmTextConverter do
+ let(:file_path) { stub }
+ let(:foobar) { "foobar" }
+
+ before do
+ @converter = UnicodeFileToHtmTextConverter.new(file_path)
+ end
+
+ it "reads the file content" do
+ FileReader.should_receive(:read_content).with(file_path).
+ and_return(foobar)
+ HttpUtility.stub(:html_encode => foobar)
+
+ @converter.convert_to_html
+ end
+
+ it "converts to html on a line basis" do
+ FileReader.stub(:read_content => foobar)
+ HttpUtility.should_receive(:html_encode).and_return("<b>foobar</b>")
+
+ html = @converter.convert_to_html
+ html.should == "<b>foobar</b><br />"
+ end
+end
+
+# Another way of doing this which specially more suitable for
+# statically typed languages is inject the FileReader &
+# HttpUtility through the constructor according to
+# Dependency Inversion Principle
@@ -0,0 +1,18 @@
+class UnicodeFileToHtmTextConverter
+ def initialize(full_file_name_with_path)
+ @full_file_name_with_path = full_file_name_with_path
+ end
+
+ def convert_to_html
+ html = ""
+
+ text = File.open(@full_file_name_with_path).read # Not exactly the same code in CSharp but same functionality!
+ text.gsub!(/\r\n?/, "\n")
+ text.each_line do |line|
+ html += HttpUtility.html_encode(line)
+ html += "<br />"
+ end
+
+ return html
+ end
+end

0 comments on commit 428078b

Please sign in to comment.