changeset 24:cd874e58dbc5

Add code from book
author IBBoard <dev@ibboard.co.uk>
date Fri, 20 Jan 2017 20:59:01 +0000
parents 720e9201dd98
children e26607247dd2
files 1-Ruby/acts_as_csv_module.rb
diffstat 1 files changed, 47 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/1-Ruby/acts_as_csv_module.rb	Fri Jan 20 20:59:01 2017 +0000
@@ -0,0 +1,47 @@
+#---
+# Excerpted from "Seven Languages in Seven Weeks",
+# published by The Pragmatic Bookshelf.
+# Copyrights apply to this code. It may not be used to create training material, 
+# courses, books, articles, and the like. Contact us if you are in doubt.
+# We make no guarantees that this code is fit for any purpose. 
+# Visit http://www.pragmaticprogrammer.com/titles/btlang for more book information.
+#---
+module ActsAsCsv
+  def self.included(base)
+    base.extend ClassMethods
+  end
+  
+  module ClassMethods
+    def acts_as_csv
+      include InstanceMethods
+    end
+  end
+  
+  module InstanceMethods   
+    def read
+      @csv_contents = []
+      filename = self.class.to_s.downcase + '.txt'
+      file = File.new(filename)
+      @headers = file.gets.chomp.split(', ')
+
+      file.each do |row|
+        @csv_contents << row.chomp.split(', ')
+      end
+    end
+    
+    attr_accessor :headers, :csv_contents
+    def initialize
+      read 
+    end
+  end
+end
+
+class RubyCsv  # no inheritance! You can mix it in
+  include ActsAsCsv
+  acts_as_csv
+end
+
+m = RubyCsv.new
+puts m.headers.inspect
+puts m.csv_contents.inspect
+