Sha256: acab7b2b4ccab6a54b9d9574be4d5d6fab22a7ec697d89c24be36feda11e7fbf
Contents?: true
Size: 1.62 KB
Versions: 2
Compression:
Stored size: 1.62 KB
Contents
class Warehouse::List attr_accessor :items delegate :empty?, to: :items delegate :length, to: :items delegate :present?, to: :items delegate :each, to: :items delegate :each_with_index, to: :items delegate :map, to: :items delegate :[], to: :items delegate :to_json, to: :items def initialize(items=nil) self.items = (items || []) end class << self def none new end end # 找到此清單底下料號 (同樣 object_id) def find(code) items.detect { |item| item.code == code } end # 解開隨機料號 (New List) def items! list = Warehouse::List.new items.each do |item| extra_items = item.is_a?(Warehouse::Random) ? item.fetch! : [ item ] extra_items.each do |item| list.items << item end end list end # 把料號加入到清單內 (Clone List) def +(item) case item when Warehouse::Item add_item(item) when Warehouse::Random # 隨機抽一個 add_item(item.fetch!) when Warehouse::List list = deep_dup item.each do |target| list += target end list end end # 把料號 * 數量 (Clone List) 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 def deep_dup Warehouse::List.new(items.map { |item| item.deep_dup }) end protected def add_item(item) list = deep_dup target = list.find(item.code) if target.present? target.qty = (target.qty + item.qty) else list.items << item.deep_dup end list end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
warehouse_items-0.1.1 | lib/warehouse/list.rb |
warehouse_items-0.1.0 | lib/warehouse/list.rb |