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