lib/intent/commands/inventory.rb in intent-0.7.0 vs lib/intent/commands/inventory.rb in intent-0.7.1

- old
+ new

@@ -33,44 +33,56 @@ end private def inventory_tree - pastel = Pastel.new + color = ::Intent::UI::TermColor.new root = {} documents.inventory.boxes.each do |box| color_code = case box.tags[:id][0].downcase.to_sym when :g then :green when :y then :yellow when :b then :blue when :r then :red else :white end - box_key = "#{pastel.decorate(box.tags[:id], :bold, color_code)} #{box.text}" + box_key = "#{color.bold.decorate(box.tags[:id], color_code)} #{box.text}" child_items = documents.inventory.items_in(box.tags[:id]).map do |item| - "#{pastel.decorate(item.tags[:id], :bold, color_code)} #{item.text}" + "#{color.bold.decorate(item.tags[:id], color_code)} #{item.text}" end root[box_key] = child_items end root end + # ui format reader def inventory_units_of(type) documents.inventory.units_of(type).map do |unit| [unit.text, unit.tags[:sku]] end.to_h end + # ui format reader def inventory_unassigned_folders folder_types = documents.inventory.units_of(:folder) documents.inventory.unassigned_folders.map do |folder| unit_label = folder_types.find { |f| f.tags[:sku] == folder.tags[:sku] } ["#{folder.text} #{folder.tags[:id]} (#{unit_label.text})", folder.tags[:id]] end.to_h end + # ui format reader + def inventory_assigned_boxes + box_types = documents.inventory.units_of(:box) + documents.inventory.assigned_boxes.map do |box| + unit_label = box_types.find { |f| f.tags[:sku] == box.tags[:sku] } + ["#{box.text} #{box.tags[:id]} (#{unit_label.text})", box.tags[:id]] + end.to_h + end + + # ui format reader def inventory_unassigned_boxes box_types = documents.inventory.units_of(:box) documents.inventory.unassigned_boxes.map do |box| unit_label = box_types.find { |f| f.tags[:sku] == box.tags[:sku] } ["#{box.text} #{box.tags[:id]} (#{unit_label.text})", box.tags[:id]] @@ -96,23 +108,47 @@ end end def add_folder(args, output) skus = inventory_units_of(:folder) + projects = documents.projects.all_tokens prompt = TTY::Prompt.new ref = self item = prompt.collect do key(:sku).select('sku:', skus, filter: true) key(:id).ask('id:', default: ref.generate_id) key(:label).ask('label:', default: '[Unlabelled Folder]') - key(:active).yes?('is active:') end - - label = item[:active] ? "#{item[:label]} @active" : item[:label] - documents.inventory.add_folder!(label, item[:id], item[:sku]) + should_assign_projects = prompt.yes?('assign to projects:') + + if should_assign_projects + assigned_projects = prompt.multi_select('projects:', projects, filter: true) + label = "#{item[:label]} #{assigned_projects.join(' ')}" + else + label = item[:label] + end + + should_file_in = prompt.select('file in:', { + "Active, not in box" => :active, + "Unassigned box" => :unassigned, + "Assigned project box" => :assigned + }) + + case should_file_in + when :active + label << " @active" + in_box = nil + when :unassigned + in_box = prompt.select('box', inventory_unassigned_boxes) + when :assigned + # TODO: filter on selected projects only + in_box = prompt.select('box:', inventory_assigned_boxes) + end + + documents.inventory.add_folder!(label, item[:id], item[:sku], in_box) end def add_box(args, output) skus = inventory_units_of(:box) prompt = TTY::Prompt.new @@ -123,10 +159,10 @@ key(:id).ask('id:', default: ref.generate_id) key(:label).ask('label:', default: '[Unlabelled Box]') end # Repository write pattern - documents.inventory.add_box!(label, item[:id], item[:sku]) + documents.inventory.add_box!(item[:label], item[:id], item[:sku]) # Alternative design # noun = create_noun(:box, label, tags) # Add.invoke(:append, documents.inventory, noun) end \ No newline at end of file