Class: NbfTools::Merge
- Inherits:
-
Object
- Object
- NbfTools::Merge
- Defined in:
- lib/nbf_tools/merge.rb
Instance Method Summary collapse
- #choose_latest_element(data_map, key, new_element) ⇒ Object
- #flat_folder_and_link_map(data, link_map, folder_map) ⇒ Object
-
#initialize(data) ⇒ Merge
constructor
A new instance of Merge.
- #to_a ⇒ Object
Constructor Details
#initialize(data) ⇒ Merge
Returns a new instance of Merge.
7 8 9 10 11 |
# File 'lib/nbf_tools/merge.rb', line 7 def initialize(data) @data = data @link_map = {} @folder_map = {} end |
Instance Method Details
#choose_latest_element(data_map, key, new_element) ⇒ Object
49 50 51 52 53 54 55 56 57 58 |
# File 'lib/nbf_tools/merge.rb', line 49 def choose_latest_element(data_map, key, new_element) if data_map.key?(new_element[key]) old_e = data_map[new_element[key]] if [new_element["add_date"].to_i, new_element["last_modified"].to_i].max > [old_e["add_date"].to_i, old_e["last_modified"].to_i].max data_map[new_element[key]] = new_element.except("items") end else data_map[new_element[key]] = new_element.except("items") end end |
#flat_folder_and_link_map(data, link_map, folder_map) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/nbf_tools/merge.rb', line 37 def flat_folder_and_link_map(data, link_map, folder_map) data.map do |e| case e["type"] when NbfTools::Type::LINK choose_latest_element(link_map, "href", e) when NbfTools::Type::FOLDER choose_latest_element(folder_map, "path", e) flat_folder_and_link_map(e["items"], link_map, folder_map) end end end |
#to_a ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/nbf_tools/merge.rb', line 13 def to_a @data.each do |file_data| flat_folder_and_link_map(file_data, @link_map, @folder_map) end @link_map.values.each do |e| folder = @folder_map[e["path"]] next if folder.nil? folder["items"] ||= [] folder["items"] << e @folder_map[e["path"]] = folder end @folder_map.values.each do |e| parent_path = e["path"].split("/")[0..-2].join("/") folder = @folder_map[parent_path] next if folder.nil? folder["items"] ||= [] folder["items"] << e @folder_map[parent_path] = folder end @folder_map.values.select { |e| e["path"].count("/") < 2 } + @link_map.values.select { |e| e["path"] == "/" } end |