mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-01 02:03:22 +00:00
Introduce FeatureToggle for columns logic
Key is `report_inverse_columns_logic`
This commit is relative to 985893667 commit
This commit is contained in:
@@ -4,12 +4,19 @@ module Reporting
|
||||
class ReportHeadersBuilder
|
||||
attr_reader :report
|
||||
|
||||
def initialize(report)
|
||||
def initialize(report, current_user)
|
||||
@report = report
|
||||
@current_user = current_user
|
||||
end
|
||||
|
||||
def table_headers
|
||||
report.columns.keys.filter{ |key| key.in?(fields_to_show) }.map do |key|
|
||||
filter = if OpenFoodNetwork::FeatureToggle.enabled?(:report_inverse_columns_logic,
|
||||
@current_user)
|
||||
proc { |key| key.in?(fields_to_show) }
|
||||
else
|
||||
proc { |key| !key.in?(fields_to_hide) }
|
||||
end
|
||||
report.columns.keys.filter { |key| filter.call(key) }.map do |key|
|
||||
translate_header(key)
|
||||
end
|
||||
end
|
||||
@@ -18,6 +25,14 @@ module Reporting
|
||||
report.columns.keys.map { |key| [translate_header(key), key] }
|
||||
end
|
||||
|
||||
def fields_to_hide
|
||||
if report.display_header_row?
|
||||
report.formatted_rules.map { |rule| rule[:fields_used_in_header] }.flatten.reject(&:blank?)
|
||||
else
|
||||
[]
|
||||
end.concat(params_fields_to_hide)
|
||||
end
|
||||
|
||||
def fields_to_show
|
||||
fields_in_headers = if report.display_header_row?
|
||||
report.formatted_rules.map { |rule|
|
||||
@@ -41,6 +56,10 @@ module Reporting
|
||||
Spree::Money.currency_symbol
|
||||
end
|
||||
|
||||
def params_fields_to_hide
|
||||
report.params[:fields_to_hide]&.map(&:to_sym) || []
|
||||
end
|
||||
|
||||
def params_fields_to_show
|
||||
report.params[:fields_to_show]&.map(&:to_sym) || report.columns.keys
|
||||
end
|
||||
|
||||
@@ -7,8 +7,9 @@ module Reporting
|
||||
|
||||
attr_reader :report
|
||||
|
||||
def initialize(report)
|
||||
def initialize(report, current_user)
|
||||
@report = report
|
||||
@current_user = current_user
|
||||
end
|
||||
|
||||
# Compute the query result item into a result row
|
||||
@@ -27,7 +28,12 @@ module Reporting
|
||||
end
|
||||
|
||||
def slice_and_format_row(row)
|
||||
result = row.to_h.select { |k, _v| k.in?(report.fields_to_show) }
|
||||
result = if OpenFoodNetwork::FeatureToggle.enabled?(:report_inverse_columns_logic,
|
||||
@current_user)
|
||||
row.to_h.select { |k, _v| k.in?(report.fields_to_show) }
|
||||
else
|
||||
row.to_h.reject { |k, _v| k.in?(report.fields_to_hide) }
|
||||
end
|
||||
unless report.raw_render?
|
||||
result = result.map { |k, v| [k, format_cell(v, k)] }.to_h
|
||||
end
|
||||
|
||||
@@ -4,9 +4,9 @@ module Reporting
|
||||
class ReportRowsBuilder
|
||||
attr_reader :report
|
||||
|
||||
def initialize(report)
|
||||
def initialize(report, current_user)
|
||||
@report = report
|
||||
@builder = ReportRowBuilder.new(report)
|
||||
@builder = ReportRowBuilder.new(report, current_user)
|
||||
end
|
||||
|
||||
# Structured data by groups. This tree is used to render
|
||||
|
||||
@@ -9,7 +9,8 @@ module Reporting
|
||||
delegate :raw_render?, :html_render?, :display_header_row?, :display_summary_row?, to: :renderer
|
||||
|
||||
delegate :rows, :table_rows, :grouped_data, to: :rows_builder
|
||||
delegate :available_headers, :table_headers, :fields_to_show, to: :headers_builder
|
||||
delegate :available_headers, :table_headers, :fields_to_hide, :fields_to_show,
|
||||
to: :headers_builder
|
||||
|
||||
delegate :formatted_rules, :header_option?, :summary_row_option?, to: :ruler
|
||||
|
||||
@@ -104,11 +105,11 @@ module Reporting
|
||||
end
|
||||
|
||||
def rows_builder
|
||||
@rows_builder ||= ReportRowsBuilder.new(self)
|
||||
@rows_builder ||= ReportRowsBuilder.new(self, @user)
|
||||
end
|
||||
|
||||
def headers_builder
|
||||
@headers_builder ||= ReportHeadersBuilder.new(self)
|
||||
@headers_builder ||= ReportHeadersBuilder.new(self, @user)
|
||||
end
|
||||
|
||||
def ruler
|
||||
|
||||
@@ -101,7 +101,28 @@ module Reporting
|
||||
check_report
|
||||
end
|
||||
|
||||
describe "fields_to_hide" do
|
||||
before do
|
||||
allow(OpenFoodNetwork::FeatureToggle).to receive(:enabled?).with(
|
||||
:report_inverse_columns_logic, anything
|
||||
).and_return(false)
|
||||
end
|
||||
|
||||
let(:params) { { fields_to_hide: [:product] } }
|
||||
|
||||
it "works" do
|
||||
@expected_headers = ['Hub', 'Price']
|
||||
check_report
|
||||
end
|
||||
end
|
||||
|
||||
describe "fields_to_show" do
|
||||
before do
|
||||
allow(OpenFoodNetwork::FeatureToggle).to receive(:enabled?).with(
|
||||
:report_inverse_columns_logic, anything
|
||||
).and_return(true)
|
||||
end
|
||||
|
||||
let(:params) { { fields_to_show: [:hub, :price] } }
|
||||
|
||||
it "works" do
|
||||
@@ -263,13 +284,26 @@ module Reporting
|
||||
}]
|
||||
end
|
||||
|
||||
let(:params) { { fields_to_show: [:hub, :quantity], report_format: 'json' } }
|
||||
describe "for fields_to_show" do
|
||||
let(:params) { { fields_to_show: [:hub, :quantity], report_format: 'json' } }
|
||||
|
||||
it "works" do
|
||||
@expetec_rows = [
|
||||
{ hub: "Hub 1", quantity: 4 }
|
||||
]
|
||||
check_report
|
||||
it "works" do
|
||||
@expetec_rows = [
|
||||
{ hub: "Hub 1", quantity: 4 }
|
||||
]
|
||||
check_report
|
||||
end
|
||||
end
|
||||
|
||||
describe "for fields_to_hide" do
|
||||
let(:params) { { fields_to_hide: [:customer], report_format: 'json' } }
|
||||
|
||||
it "works" do
|
||||
@expetec_rows = [
|
||||
{ hub: "Hub 1", quantity: 4 }
|
||||
]
|
||||
check_report
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user