2016年4月4日月曜日

開発環境

7つの言語 7つの世界 (Bruce A. Tate (著)、まつもとゆきひろ (監訳)、田和 勝 (翻訳)、オーム社)の第2章(Ruby)、2.4(3日目: 真剣な変更)、セルフスタディ3日目を取り組んでみる。

セルフスタディ3日目

コード(Emacs)

#!/usr/bin/env ruby2.3
# -*- coding: utf-8 -*-

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 = []
      @csv_rows = []
      filename = self.class.to_s.downcase + '.txt'
      file = File.new(filename)
      @headers = file.gets.chomp.split(', ')
      file.each do |row|
        csv_row = CsvRow.new(@headers, row.chomp.split(', '))
        @csv_rows << csv_row
      end
    end
  end

  def each
    @csv_rows.each do |row|
      yield row
    end
  end

  attr_accessor :headers, :csv_contents

  def initialize
    read
  end
end

class CsvRow
  def initialize headers, csv_contents
    @headers = headers
    @csv_contents = csv_contents
  end  
  def method_missing name, *args
    @csv_contents[@headers.index(name.to_s)]
  end    
end

class RubyCsv
  include ActsAsCsv
  acts_as_csv
end

csv = RubyCsv.new
csv.each do |row|
  puts row.one
end

入出力結果(Terminal, irb)

$ ./sample.rb
lions
$

0 コメント:

コメントを投稿