lib/thousand_island/utilities/utilities.rb in thousand_island-0.0.1 vs lib/thousand_island/utilities/utilities.rb in thousand_island-0.1.0

- old
+ new

@@ -1,56 +1,88 @@ module ThousandIsland module Utilities module DeepMerge - #Take a number of hashes and merge them into one, respecting - # the structure and nesting according to the pdf options hash. - # Hashes work in order of precedence, the first in the array - # overrides, the second, etc. - # - # @param hashes [*Hash] A number of hashes to merge, in the order of precedence - # - # @return [Hash] the merged values - def self.merge_options(*hashes) - hashes.reverse! + def merge_for_key_and_nested_keys(key, keys, *hashes) + temp = {} merged = {} - footer = merge_footer(*hashes) - header = merge_header(*hashes) - body = merge_body(*hashes) hashes.each do |h| - merged.merge!(h) + keys.each do |k| + temp[k] = {} unless temp.has_key? k + temp[k].merge!(h[key][k]) if h[key] && h[key][k] + end + merged.merge!(h[key]) if h[key] end - merged[:footer] = footer - merged[:header] = header - merged[:body] = body - merged + merged.merge(temp) end - def self.merge_footer(*hashes) - keys = [:numbering_options, :style] - merge_for_key_and_nested_keys(:footer, keys, *hashes) - end + module TemplateOptions + extend ::ThousandIsland::Utilities::DeepMerge - def self.merge_header(*hashes) - merge_for_key_and_nested_keys(:header, [], *hashes) - end + # Take a number of hashes used for Template Options and merge them + # into one, respecting the structure and nesting according to + # the pdf options hash. Hashes work in order of precedence, the + # first in the array overrides, the second, etc. + # + # @param hashes [*Hash] A number of hashes to merge, in the order of precedence + # + # @return [Hash] the merged values + def self.merge_options(*hashes) + hashes.reverse! + merged = {} + footer = merge_footer(*hashes) + header = merge_header(*hashes) + body = merge_body(*hashes) + hashes.each do |h| + merged.merge!(h) + end + merged[:footer] = footer + merged[:header] = header + merged[:body] = body + merged + end - def self.merge_body(*hashes) - merge_for_key_and_nested_keys(:body, [], *hashes) + def self.merge_footer(*hashes) + keys = [:numbering_options, :style] + merge_for_key_and_nested_keys(:footer, keys, *hashes) + end + + def self.merge_header(*hashes) + merge_for_key_and_nested_keys(:header, [], *hashes) + end + + def self.merge_body(*hashes) + merge_for_key_and_nested_keys(:body, [], *hashes) + end end - def self.merge_for_key_and_nested_keys(key, keys, *hashes) - temp = {} - merged = {} - hashes.each do |h| - keys.each do |k| - temp[k] = {} unless temp.has_key? k - temp[k].merge!(h[key][k]) if h[key] && h[key][k] + module TableOptions + extend ::ThousandIsland::Utilities::DeepMerge + + #Take a number of hashes used for Table Options and merge them + # into one, respecting the structure and nesting according to + # the pdf options hash. Hashes work in order of precedence, the + # first in the array overrides, the second, etc. + # + # @param hashes [*Hash] A number of hashes to merge, in the order of precedence + # + # @return [Hash] the merged values + def self.merge_options(*hashes) + hashes.reverse! + merged = {} + footer_format = merge_for_key_and_nested_keys(:footer_format, [], *hashes) + header_format = merge_for_key_and_nested_keys(:header_format, [], *hashes) + cell_style = merge_for_key_and_nested_keys(:cell_style, [], *hashes) + hashes.each do |h| + merged.merge!(h) end - merged.merge!(h[key]) if h[key] + merged[:footer_format] = footer_format + merged[:header_format] = header_format + merged[:cell_style] = cell_style + merged end - merged.merge(temp) + end end end \ No newline at end of file