Module: CsvClassMaker::CsvFind::ClassMethods

Defined in:
lib/csv_class_maker/csv_find.rb

Instance Method Summary collapse

Instance Method Details

#allObject



55
56
57
58
# File 'lib/csv_class_maker/csv_find.rb', line 55

def all
  rewind
  file.map { |row| build_instance(row, file.lineno) }
end

#csv_file(file_name, options = {}) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/csv_class_maker/csv_find.rb', line 29

def csv_file(file_name, options = {})
  @@file_options = options
  @@file = CSV.new(File.open(file_name, 'r'), @@file_options)
  @@first_line = 2
  @@last_line = `wc -l #{file_name}`.split(' ').first.to_i
  @@middle_line = (@@last_line/2)+1
  @line_number = nil
  extract_headers(file_name, options)
  define_accessors
end

#define_accessorsObject



47
48
49
50
51
52
53
# File 'lib/csv_class_maker/csv_find.rb', line 47

def define_accessors
  headers.each do |header|
    self.send(:attr_accessor, header)
  end

  # self.send(:attr_accessor, :line_number)
end

#eachObject



90
91
92
93
94
95
# File 'lib/csv_class_maker/csv_find.rb', line 90

def each
  rewind
  (first_line..last_line).each do |line_number|
    yield find(line_number)
  end
end

#fileObject



41
# File 'lib/csv_class_maker/csv_find.rb', line 41

def file; return @@file; end

#file_optionsObject



45
# File 'lib/csv_class_maker/csv_find.rb', line 45

def file_options; return @@file_options; end

#find(line_number) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/csv_class_maker/csv_find.rb', line 69

def find(line_number)
  row = if (first_line..last_line).include? line_number
    front_find(line_number, file.path)
  elsif (middle_line..last_line).include? line_number
    back_find(line_number, file.path)
  end

  row.nil? ? row : build_instance(row, line_number)
end

#find_all_by(key_val_pair) ⇒ Object



65
66
67
# File 'lib/csv_class_maker/csv_find.rb', line 65

def find_all_by(key_val_pair)
  search(key_val_pair).map { |row| build_instance(row, row[:line_number]) }
end

#find_by(key_val_pair) ⇒ Object



60
61
62
63
# File 'lib/csv_class_maker/csv_find.rb', line 60

def find_by(key_val_pair)
  row = search(key_val_pair).last
  build_instance(row, row[:line_number])
end

#firstObject



79
80
81
82
# File 'lib/csv_class_maker/csv_find.rb', line 79

def first
  rewind
  build_instance(file.first, first_line)
end

#first_lineObject



42
# File 'lib/csv_class_maker/csv_find.rb', line 42

def first_line; return @@first_line; end

#headersObject



40
# File 'lib/csv_class_maker/csv_find.rb', line 40

def headers; return @@headers; end

#lastObject



84
85
86
87
88
# File 'lib/csv_class_maker/csv_find.rb', line 84

def last
  command = `head -n 1 #{file.path} && tail -n 1 #{file.path}`
  last_row = CSV.new(command, file_options).first
  build_instance(last_row, last_line)
end

#last_lineObject



44
# File 'lib/csv_class_maker/csv_find.rb', line 44

def last_line; return @@last_line; end

#middle_lineObject



43
# File 'lib/csv_class_maker/csv_find.rb', line 43

def middle_line; return @@middle_line; end