24
|
1 #---
|
|
2 # Excerpted from "Seven Languages in Seven Weeks",
|
|
3 # published by The Pragmatic Bookshelf.
|
|
4 # Copyrights apply to this code. It may not be used to create training material,
|
|
5 # courses, books, articles, and the like. Contact us if you are in doubt.
|
|
6 # We make no guarantees that this code is fit for any purpose.
|
|
7 # Visit http://www.pragmaticprogrammer.com/titles/btlang for more book information.
|
|
8 #---
|
|
9 module ActsAsCsv
|
|
10 def self.included(base)
|
|
11 base.extend ClassMethods
|
|
12 end
|
|
13
|
|
14 module ClassMethods
|
|
15 def acts_as_csv
|
|
16 include InstanceMethods
|
|
17 end
|
|
18 end
|
|
19
|
|
20 module InstanceMethods
|
|
21 def read
|
|
22 @csv_contents = []
|
|
23 filename = self.class.to_s.downcase + '.txt'
|
|
24 file = File.new(filename)
|
|
25 @headers = file.gets.chomp.split(', ')
|
|
26
|
|
27 file.each do |row|
|
|
28 @csv_contents << row.chomp.split(', ')
|
|
29 end
|
|
30 end
|
|
31
|
|
32 attr_accessor :headers, :csv_contents
|
|
33 def initialize
|
|
34 read
|
|
35 end
|
|
36 end
|
|
37 end
|
|
38
|
|
39 class RubyCsv # no inheritance! You can mix it in
|
|
40 include ActsAsCsv
|
|
41 acts_as_csv
|
|
42 end
|
|
43
|
|
44 m = RubyCsv.new
|
|
45 puts m.headers.inspect
|
|
46 puts m.csv_contents.inspect
|
|
47
|