Permalink
Browse files

Ruby solution for the UnicodeFileToHtmlTextConverter problem

  • Loading branch information...
1 parent f1f84cb commit ccc1cc6ed923fbe48a7fe15300f170601b1b8acc @Sam-Serpoosh Sam-Serpoosh committed Sep 12, 2012
View
30 ...-Serpoosh/code/unicode_file_to_html_text_converter/unicode_file_to_html_text_converter.rb
@@ -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
View
33 ...spec/unicode_file_to_html_text_converter_spec/unicode_file_to_html_text_converter_spec.rb
@@ -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
View
BIN TDDMicroExercises.YoursSolutions/Sam-Serpoosh/code/telemetry_system/.telemetry_client.rb.swp
Binary file not shown.
View
BIN ...s.YoursSolutions/Sam-Serpoosh/code/telemetry_system/.telemetry_diagnostic_controls.rb.swp
Binary file not shown.

0 comments on commit ccc1cc6

Please sign in to comment.