annotate 1-Ruby/acts_as_csv_module.rb @ 26:d50ff917c163

Change function calls so methods get patched in anyway
author IBBoard <dev@ibboard.co.uk>
date Fri, 20 Jan 2017 21:03:13 +0000
parents cd874e58dbc5
children 2ea3b5e9b41b
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
26
d50ff917c163 Change function calls so methods get patched in anyway
IBBoard <dev@ibboard.co.uk>
parents: 24
diff changeset
12 # The book doesn't do this, but it is possible to add the methods
d50ff917c163 Change function calls so methods get patched in anyway
IBBoard <dev@ibboard.co.uk>
parents: 24
diff changeset
13 # without having the inheriting class call a second function to do it
d50ff917c163 Change function calls so methods get patched in anyway
IBBoard <dev@ibboard.co.uk>
parents: 24
diff changeset
14 base.acts_as_csv
24
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 module ClassMethods
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 def acts_as_csv
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 include InstanceMethods
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 module InstanceMethods
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 def read
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 @csv_contents = []
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 filename = self.class.to_s.downcase + '.txt'
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 file = File.new(filename)
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 @headers = file.gets.chomp.split(', ')
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 file.each do |row|
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31 @csv_contents << row.chomp.split(', ')
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 attr_accessor :headers, :csv_contents
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 def initialize
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 read
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
41
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42 class RubyCsv # no inheritance! You can mix it in
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43 include ActsAsCsv
26
d50ff917c163 Change function calls so methods get patched in anyway
IBBoard <dev@ibboard.co.uk>
parents: 24
diff changeset
44 # Also, nothing to do beyond the "include" - it automatically defines the methods!
24
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 end
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 m = RubyCsv.new
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
48 puts m.headers.inspect
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 puts m.csv_contents.inspect
cd874e58dbc5 Add code from book
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50