Module: CsvFind::ClassMethods
- Includes:
- Enumerable
- Defined in:
- lib/csv_find/csv_find.rb
Overview
:nodoc:
Instance Attribute Summary collapse
-
#file ⇒ Object
readonly
Returns the value of attribute file.
-
#file_options ⇒ Object
readonly
Returns the value of attribute file_options.
-
#first_line ⇒ Object
readonly
Returns the value of attribute first_line.
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
-
#last_line ⇒ Object
readonly
Returns the value of attribute last_line.
-
#middle_line ⇒ Object
readonly
Returns the value of attribute middle_line.
Instance Method Summary collapse
- #all ⇒ Object
- #csv_file(file_name, options = {}) ⇒ Object
- #define_accessors ⇒ Object
- #each ⇒ Object
- #find(line_number) ⇒ Object
- #find_all_by(key_val_pair) ⇒ Object
- #find_by(key_val_pair) ⇒ Object
- #first ⇒ Object
- #last ⇒ Object
- #where(key_val_pair) ⇒ Object
Instance Attribute Details
#file ⇒ Object (readonly)
Returns the value of attribute file.
41 42 43 |
# File 'lib/csv_find/csv_find.rb', line 41 def file @file end |
#file_options ⇒ Object (readonly)
Returns the value of attribute file_options.
41 42 43 |
# File 'lib/csv_find/csv_find.rb', line 41 def @file_options end |
#first_line ⇒ Object (readonly)
Returns the value of attribute first_line.
41 42 43 |
# File 'lib/csv_find/csv_find.rb', line 41 def first_line @first_line end |
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
41 42 43 |
# File 'lib/csv_find/csv_find.rb', line 41 def headers @headers end |
#last_line ⇒ Object (readonly)
Returns the value of attribute last_line.
41 42 43 |
# File 'lib/csv_find/csv_find.rb', line 41 def last_line @last_line end |
#middle_line ⇒ Object (readonly)
Returns the value of attribute middle_line.
41 42 43 |
# File 'lib/csv_find/csv_find.rb', line 41 def middle_line @middle_line end |
Instance Method Details
#all ⇒ Object
62 63 64 65 |
# File 'lib/csv_find/csv_find.rb', line 62 def all rewind file.map { |row| build_instance(row, file.lineno) } end |
#csv_file(file_name, options = {}) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/csv_find/csv_find.rb', line 44 def csv_file(file_name, = {}) @file_options = .merge() @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 @headers = extract_headers(file_name, ) define_accessors end |
#define_accessors ⇒ Object
56 57 58 59 60 |
# File 'lib/csv_find/csv_find.rb', line 56 def define_accessors headers.each do |header| send(:attr_accessor, header) end end |
#each ⇒ Object
102 103 104 105 106 107 |
# File 'lib/csv_find/csv_find.rb', line 102 def each rewind (first_line..last_line).each do |line_number| yield find(line_number) if block_given? end end |
#find(line_number) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/csv_find/csv_find.rb', line 80 def find(line_number) row = if (first_line..middle_line).include?(line_number) front_find(line_number, file.path) else back_find(line_number, file.path) end row.nil? ? row : build_instance(row, line_number) end |
#find_all_by(key_val_pair) ⇒ Object
76 77 78 |
# File 'lib/csv_find/csv_find.rb', line 76 def find_all_by(key_val_pair) where(key_val_pair) end |
#find_by(key_val_pair) ⇒ Object
71 72 73 74 |
# File 'lib/csv_find/csv_find.rb', line 71 def find_by(key_val_pair) row = search(key_val_pair).last row.nil? ? nil : build_instance(row, row[:line_number]) end |
#first ⇒ Object
91 92 93 94 |
# File 'lib/csv_find/csv_find.rb', line 91 def first rewind build_instance(file.first, first_line) end |
#last ⇒ Object
96 97 98 99 100 |
# File 'lib/csv_find/csv_find.rb', line 96 def last command = `head -n 1 #{file.path} && tail -n 1 #{file.path}` last_row = CSV.new(command, **).first build_instance(last_row, last_line) end |
#where(key_val_pair) ⇒ Object
67 68 69 |
# File 'lib/csv_find/csv_find.rb', line 67 def where(key_val_pair) search(key_val_pair).map { |row| build_instance(row, row[:line_number]) } end |