annotate 1-Ruby/acts_as_csv_module.rb @ 24:cd874e58dbc5

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