class Warehouse::List
Attributes
items[RW]
Public Class Methods
new(items=nil)
click to toggle source
# File lib/warehouse/list.rb, line 21 def initialize(items=nil) self.items = (items || []) end
none()
click to toggle source
# File lib/warehouse/list.rb, line 16 def none new end
Public Instance Methods
*(qty)
click to toggle source
把料號 * 數量 (Clone List
)
# File lib/warehouse/list.rb, line 70 def *(qty) Warehouse::List.new.tap do |list| items!.each do |item| list.items << item.deep_dup.tap { |i| i.qty = i.qty * qty } end end end
+(item)
click to toggle source
把料號加入到清單內 (Clone List
)
# File lib/warehouse/list.rb, line 53 def +(item) case item when Warehouse::Item::Code, Warehouse::Item::Barcode add_item(item) when Warehouse::Item::Random # 隨機抽一個 add_item(item.fetch!) when Warehouse::List list = deep_dup item.each do |target| list += target end list end end
deep_dup()
click to toggle source
# File lib/warehouse/list.rb, line 78 def deep_dup Warehouse::List.new(items.map { |item| item.deep_dup }) end
find(code, type: nil)
click to toggle source
找到此清單底下料號 (同樣 object_id)
# File lib/warehouse/list.rb, line 26 def find(code, type: nil) case type when :code items.detect { |item| item.code? && item.code == code } when :barcode items.detect { |item| item.barcode? && item.barcode == code } else items.detect do |item| (item.code? && item.code == code) || (item.barcode? && item.barcode == code) end end end
items!()
click to toggle source
解開隨機料號 (New List
)
# File lib/warehouse/list.rb, line 40 def items! list = Warehouse::List.new items.each do |item| extra_items = item.is_a?(Warehouse::Item::Random) ? item.fetch! : [ item ] extra_items.each do |item| list.items << item end end list end
to_a()
click to toggle source
# File lib/warehouse/list.rb, line 91 def to_a items.map(&:to_h) end
to_h()
click to toggle source
# File lib/warehouse/list.rb, line 82 def to_h items.map do |item| [ (item.code? ? item.code : item.barcode), item.qty ] end.to_h end
Protected Instance Methods
add_item(item)
click to toggle source
# File lib/warehouse/list.rb, line 97 def add_item(item) list = deep_dup # 找到 barcode or code item target = if item.code? list.find(item.code, type: :code) else list.find(item.barcode, type: :barcode) end if target.present? target.qty = (target.qty + item.qty) else list.items << item.deep_dup end list end