Class: CSVDiff::CSVSource
- Inherits:
-
Object
- Object
- CSVDiff::CSVSource
- Defined in:
- lib/csv-diff/csv_source.rb
Overview
Represents a CSV input (i.e. the left/from or right/to input) to the diff process.
Instance Attribute Summary collapse
-
#case_sensitive ⇒ Boolean
(also: #case_sensitive?)
readonly
True if the source has been indexed with case- sensitive keys, or false if it has been indexed using upper-case key values.
-
#child_fields ⇒ Array<String>
readonly
The names of the field(s) that distinguish a child of a parent record.
-
#field_names ⇒ Array<String>
readonly
The names of the fields in the source file.
-
#index ⇒ Hash<String,Array<String>>
readonly
A hash containing each parent key, and an Array of the child keys it is a parent of.
-
#key_fields ⇒ Array<String>
readonly
The names of the field(s) that uniquely identify each row.
-
#lines ⇒ Hash<String,Hash>
readonly
A hash containing each line of the source, keyed on the values of the
key_fields. -
#parent_fields ⇒ Array<String>
readonly
The names of the field(s) that identify a common parent of child records.
-
#path ⇒ String
The path to the source file.
-
#trim_whitespace ⇒ Boolean
readonly
True if leading/trailing whitespace should be stripped from fields.
-
#warnings ⇒ Array<String>
readonly
An array of any warnings encountered while processing the source.
Instance Method Summary collapse
-
#[](key) ⇒ Hash
Returns the row in the CSV source corresponding to the supplied key.
-
#initialize(source, options = {}) ⇒ CSVSource
constructor
Creates a new diff source.
Constructor Details
#initialize(source, options = {}) ⇒ CSVSource
Creates a new diff source.
A diff source must contain at least one field that will be used as the key to identify the same record in a different version of this file. If not specified via one of the options, the first field is assumed to be the unique key.
If multiple fields combine to form a unique key, the parent is assumed to be identified by all but the last field of the unique key. If finer control is required, use a combination of the :parent_fields and :child_fields options.
All key options can be specified either by field name, or by field index (0 based).
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/csv-diff/csv_source.rb', line 77 def initialize(source, = {}) if source.is_a?(String) require 'csv' mode_string = [:encoding] ? "r:#{options[:encoding]}" : 'r' = .fetch(:csv_options, {}) @path = source source = CSV.open(@path, mode_string, ).readlines end if kf = .fetch(:key_field, [:key_fields]) @key_fields = [kf].flatten @parent_fields = @key_fields[0...-1] @child_fields = @key_fields[-1..-1] else @parent_fields = [.fetch(:parent_field, [:parent_fields]) || []].flatten @child_fields = [.fetch(:child_field, [:child_fields]) || [0]].flatten @key_fields = @parent_fields + @child_fields end @field_names = [:field_names] @warnings = [] index_source(source, ) end |
Instance Attribute Details
#case_sensitive ⇒ Boolean (readonly) Also known as: case_sensitive?
Returns True if the source has been indexed with case- sensitive keys, or false if it has been indexed using upper-case key values.
23 24 25 |
# File 'lib/csv-diff/csv_source.rb', line 23 def case_sensitive @case_sensitive end |
#child_fields ⇒ Array<String> (readonly)
Returns The names of the field(s) that distinguish a child of a parent record.
19 20 21 |
# File 'lib/csv-diff/csv_source.rb', line 19 def child_fields @child_fields end |
#field_names ⇒ Array<String> (readonly)
Returns The names of the fields in the source file.
10 11 12 |
# File 'lib/csv-diff/csv_source.rb', line 10 def field_names @field_names end |
#index ⇒ Hash<String,Array<String>> (readonly)
Returns A hash containing each parent key, and an Array of the child keys it is a parent of.
33 34 35 |
# File 'lib/csv-diff/csv_source.rb', line 33 def index @index end |
#key_fields ⇒ Array<String> (readonly)
Returns The names of the field(s) that uniquely identify each row.
13 14 15 |
# File 'lib/csv-diff/csv_source.rb', line 13 def key_fields @key_fields end |
#lines ⇒ Hash<String,Hash> (readonly)
Returns A hash containing each line of the source, keyed on the values of the key_fields.
30 31 32 |
# File 'lib/csv-diff/csv_source.rb', line 30 def lines @lines end |
#parent_fields ⇒ Array<String> (readonly)
Returns The names of the field(s) that identify a common parent of child records.
16 17 18 |
# File 'lib/csv-diff/csv_source.rb', line 16 def parent_fields @parent_fields end |
#path ⇒ String
Returns the path to the source file.
8 9 10 |
# File 'lib/csv-diff/csv_source.rb', line 8 def path @path end |
#trim_whitespace ⇒ Boolean (readonly)
Returns True if leading/trailing whitespace should be stripped from fields.
27 28 29 |
# File 'lib/csv-diff/csv_source.rb', line 27 def trim_whitespace @trim_whitespace end |
#warnings ⇒ Array<String> (readonly)
Returns An array of any warnings encountered while processing the source.
36 37 38 |
# File 'lib/csv-diff/csv_source.rb', line 36 def warnings @warnings end |
Instance Method Details
#[](key) ⇒ Hash
Returns the row in the CSV source corresponding to the supplied key.
105 106 107 |
# File 'lib/csv-diff/csv_source.rb', line 105 def [](key) @lines[key] end |