lib/physical/box.rb in physical-0.4.4 vs lib/physical/box.rb in physical-0.4.5

- old
+ new

@@ -11,20 +11,34 @@ :inner_length, :inner_width, :inner_height, :max_weight - def initialize(inner_dimensions: [], max_weight: Measured::Weight(DEFAULT_MAX_WEIGHT, :g), **args) - super args + def initialize(**args) + inner_dimensions = args.delete(:inner_dimensions) || [] + max_weight = args.delete(:max_weight) || Measured::Weight(DEFAULT_MAX_WEIGHT, :g) + super(**args) @inner_dimensions = fill_dimensions(Types::Dimensions[inner_dimensions]) @inner_length, @inner_width, @inner_height = *@inner_dimensions @max_weight = Types::Weight[max_weight] end def inner_volume Measured::Volume( inner_dimensions.map { |d| d.convert_to(:cm).value }.reduce(1, &:*), :ml ) + end + + # @param [Physical::Item] item + # @return [Boolean] + def item_fits?(item) + return false if item.weight > max_weight + + box_dimensions = inner_dimensions.sort + item.dimensions.sort.each.with_index do |axis, index| + return false if axis >= box_dimensions[index] + end + true end end end