lib/defmastership/export/csv/formatter.rb in defmastership-1.1.1 vs lib/defmastership/export/csv/formatter.rb in defmastership-1.2.0
- old
+ new
@@ -30,10 +30,42 @@
end
end
private
+ # Helper functions
+ module Helper
+ # @return [Array<Symbol>] the array of methods for columns inclusion
+ #
+ # @param column_spec [MethodSpec] the method to include or not with its guard
+ # @param doc [Document] the Document to export
+ def self.column_method(column_spec, doc)
+ column_spec.guard.call(doc) ? [column_spec.column_method] : []
+ end
+
+ # 2-uplet with one method to include or not depending of a lambda guard
+ MethodSpec = Struct.new(:column_method, :guard)
+ public_constant :MethodSpec
+ end
+ private_constant :Helper
+
+ COLUMNS_METHODS_SPECIFICATIONS =
+ [
+ Helper::MethodSpec.new(:type, ->(_) { true }),
+ Helper::MethodSpec.new(:reference, ->(_) { true }),
+ Helper::MethodSpec.new(:summary, lambda(&:summaries?)),
+ Helper::MethodSpec.new(:value, ->(_) { true }),
+ Helper::MethodSpec.new(:checksum, ->(_) { true }),
+ Helper::MethodSpec.new(:wrong_explicit_checksum, lambda(&:wrong_explicit_checksum?)),
+ Helper::MethodSpec.new(:explicit_version, lambda(&:explicit_version?)),
+ Helper::MethodSpec.new(:labels, ->(doc) { !doc.labels.empty? }),
+ Helper::MethodSpec.new(:eref, ->(doc) { !doc.eref.empty? }),
+ Helper::MethodSpec.new(:iref, lambda(&:iref)),
+ Helper::MethodSpec.new(:attributes, ->(doc) { !doc.attributes.empty? })
+ ].freeze
+ private_constant :COLUMNS_METHODS_SPECIFICATIONS
+
def export_definitions_in(csv, column_list)
@doc.definitions.each { |definition| csv << body(definition, column_list) }
end
def header(column_list)
@@ -47,17 +79,12 @@
body_line = column_list.map { |part| body_formatter.public_send(part) }
body_line.flatten
end
def build_column_list
- [
- [:wrong_explicit_checksum, @doc.wrong_explicit_checksum?],
- [:explicit_version, @doc.explicit_version?],
- [:labels, !@doc.labels.empty?],
- [:eref, !@doc.eref.empty?],
- [:iref, @doc.iref],
- [:attributes, !@doc.attributes.empty?]
- ].reduce([:fixed]) { |acc, elem| acc + (elem.fetch(1) ? [elem.first] : []) }
+ COLUMNS_METHODS_SPECIFICATIONS.reduce([]) do |acc, column|
+ acc + Helper.column_method(column, @doc)
+ end
end
end
end
end
end