Skip to content

Commit 29413c7

Browse files
author
Morgan Jézéquel
committed
feat: Add ignored columns reporting
This commit introduces a new feature that provides reporting of ignored columns when the corresponding option is enabled. A new option, `report_ignored_columns`, has been added to the `Sheetah::Template` initialization. It works in conjunction with the existing `ignore_unspecified_columns` option, which must also be enabled for the reporting to take effect.
1 parent 96386a2 commit 29413c7

File tree

4 files changed

+41
-4
lines changed

4 files changed

+41
-4
lines changed

lib/sheetah/headers.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ def add_ensure_column_is_specified(header, column)
7272
@messenger.error("invalid_header", header.value)
7373
end
7474

75+
@messenger.warn("ignored_header", header.value) if @specification.report_ignored_columns?
76+
7577
false
7678
end
7779

lib/sheetah/specification.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ class MutablePatternError < Errors::SpecError
1313
class DuplicatedPatternError < Errors::SpecError
1414
end
1515

16-
def initialize(ignore_unspecified_columns: false)
16+
def initialize(ignore_unspecified_columns: false, report_ignored_columns: false)
1717
@column_by_pattern = {}
1818
@ignore_unspecified_columns = ignore_unspecified_columns
19+
@report_ignored_columns = report_ignored_columns
1920
end
2021

2122
def set(pattern, column)
@@ -56,6 +57,10 @@ def ignore_unspecified_columns?
5657
@ignore_unspecified_columns
5758
end
5859

60+
def report_ignored_columns?
61+
@report_ignored_columns
62+
end
63+
5964
def freeze
6065
@column_by_pattern.freeze
6166
super

lib/sheetah/template.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,17 @@ module Sheetah
2626
# specification, and composite attributes will produce as many columns as
2727
# required by the number of scalar values they hold.
2828
class Template
29-
def initialize(attributes:, ignore_unspecified_columns: false)
29+
def initialize(attributes:, ignore_unspecified_columns: false, report_ignored_columns: false)
3030
@attributes = build_attributes(attributes)
3131
@ignore_unspecified_columns = ignore_unspecified_columns
32+
@report_ignored_columns = ignore_unspecified_columns && report_ignored_columns
3233
end
3334

3435
def apply(config)
35-
specification = Specification.new(ignore_unspecified_columns: @ignore_unspecified_columns)
36+
specification = Specification.new(
37+
ignore_unspecified_columns: @ignore_unspecified_columns,
38+
report_ignored_columns: @report_ignored_columns
39+
)
3640

3741
@attributes.each do |attribute|
3842
attribute.each_column(config) do |column|

spec/sheetah/headers_spec.rb

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
instance_double(
1212
Sheetah::Specification,
1313
required_columns: [],
14-
ignore_unspecified_columns?: false
14+
ignore_unspecified_columns?: false,
15+
report_ignored_columns?: false
1516
)
1617
end
1718

@@ -106,6 +107,31 @@ def stub_specification(column_by_header)
106107
]
107108
)
108109
end
110+
111+
context "when the ignored columns reporting is enabled" do
112+
let(:specification) do
113+
instance_double(
114+
Sheetah::Specification,
115+
required_columns: [],
116+
ignore_unspecified_columns?: true,
117+
report_ignored_columns?: true
118+
)
119+
end
120+
121+
it "messages a warning" do
122+
expect(messenger.messages).to eq(
123+
[
124+
Sheetah::Messaging::Message.new(
125+
severity: "WARN",
126+
code: "ignored_header",
127+
code_data: sheet_headers[4].value,
128+
scope: "COL",
129+
scope_data: { col: sheet_headers[4].col }
130+
),
131+
]
132+
)
133+
end
134+
end
109135
end
110136

111137
context "when there is a duplicate" do

0 commit comments

Comments
 (0)