lib/bmg/support/output_preferences.rb in bmg-0.21.2 vs lib/bmg/support/output_preferences.rb in bmg-0.21.3
- old
+ new
@@ -1,10 +1,11 @@
module Bmg
class OutputPreferences
DEFAULT_PREFS = {
attributes_ordering: nil,
+ tuple_ordering: nil,
extra_attributes: :after
}
def initialize(options)
@options = DEFAULT_PREFS.merge(options)
@@ -15,21 +16,46 @@
return arg if arg.is_a?(OutputPreferences)
arg = {} if arg.nil?
new(arg)
end
+ def tuple_ordering
+ return nil unless to = options[:tuple_ordering]
+
+ @tuple_ordering = Ordering.new(to)
+ end
+
def attributes_ordering
options[:attributes_ordering]
end
def extra_attributes
options[:extra_attributes]
end
+ def grouping_attributes
+ options[:grouping_attributes]
+ end
+
+ def erase_redundance_in_group(before, current)
+ return [nil, current] unless ga = grouping_attributes
+ return [current, current] unless before
+
+ new_before, new_current = current.dup, current.dup
+ ga.each do |attr|
+ return [new_before, new_current] unless before[attr] == current[attr]
+ new_current[attr] = nil
+ end
+ [new_before, new_current]
+ end
+
def order_attrlist(attrlist)
return attrlist if attributes_ordering.nil?
+
index = Hash[attributes_ordering.each_with_index.to_a]
- attrlist.sort{|a,b|
+ base = attrlist
+ base = attrlist & attributes_ordering if extra_attributes == :ignored
+ base.sort{|a,b|
ai, bi = index[a], index[b]
if ai && bi
ai <=> bi
elsif ai
extra_attributes == :after ? -1 : 1