Class: Physical::Package
- Inherits:
-
Object
- Object
- Physical::Package
- Extended by:
- Forwardable
- Defined in:
- lib/physical/package.rb
Instance Attribute Summary collapse
-
#container ⇒ Object
readonly
Returns the value of attribute container.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#items ⇒ Object
readonly
Returns the value of attribute items.
-
#void_fill_density ⇒ Object
readonly
Returns the value of attribute void_fill_density.
Instance Method Summary collapse
- #<<(item) ⇒ Object (also: #add)
- #>>(item) ⇒ Object (also: #delete)
- #density ⇒ Object
-
#initialize(id: nil, container: nil, items: [], void_fill_density: Measured::Density(0, :g_ml), dimensions: nil, weight: nil, properties: {}) ⇒ Package
constructor
A new instance of Package.
- #remaining_volume ⇒ Object
- #void_fill_weight ⇒ Object
- #weight ⇒ Object
Constructor Details
#initialize(id: nil, container: nil, items: [], void_fill_density: Measured::Density(0, :g_ml), dimensions: nil, weight: nil, properties: {}) ⇒ Package
Returns a new instance of Package.
8 9 10 11 12 13 |
# File 'lib/physical/package.rb', line 8 def initialize(id: nil, container: nil, items: [], void_fill_density: Measured::Density(0, :g_ml), dimensions: nil, weight: nil, properties: {}) @id = id || SecureRandom.uuid @void_fill_density = Types::Density[void_fill_density] @container = container || Physical::Box.new(dimensions: dimensions || [], weight: weight || Measured::Weight(0, :g), properties: properties) @items = Set[*items] end |
Instance Attribute Details
#container ⇒ Object (readonly)
Returns the value of attribute container.
6 7 8 |
# File 'lib/physical/package.rb', line 6 def container @container end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
6 7 8 |
# File 'lib/physical/package.rb', line 6 def id @id end |
#items ⇒ Object (readonly)
Returns the value of attribute items.
6 7 8 |
# File 'lib/physical/package.rb', line 6 def items @items end |
#void_fill_density ⇒ Object (readonly)
Returns the value of attribute void_fill_density.
6 7 8 |
# File 'lib/physical/package.rb', line 6 def void_fill_density @void_fill_density end |
Instance Method Details
#<<(item) ⇒ Object Also known as: add
17 18 19 |
# File 'lib/physical/package.rb', line 17 def <<(item) @items.add(item) end |
#>>(item) ⇒ Object Also known as: delete
22 23 24 |
# File 'lib/physical/package.rb', line 22 def >>(item) @items.delete(item) end |
#density ⇒ Object
41 42 43 44 45 |
# File 'lib/physical/package.rb', line 41 def density return Measured::Density(Float::INFINITY, :g_ml) if container.volume.value.zero? return Measured::Density(0.0, :g_ml) if container.volume.value.infinite? Measured::Density(weight.convert_to(:g).value / container.volume.convert_to(:ml).value, :g_ml) end |
#remaining_volume ⇒ Object
31 32 33 |
# File 'lib/physical/package.rb', line 31 def remaining_volume container.inner_volume - items.map(&:volume).reduce(Measured::Volume(0, :ml), &:+) end |
#void_fill_weight ⇒ Object
35 36 37 38 39 |
# File 'lib/physical/package.rb', line 35 def void_fill_weight return Measured::Weight(0, :g) if container.volume.value.infinite? Measured::Weight(void_fill_density.convert_to(:g_ml).value * remaining_volume.convert_to(:ml).value, :g) end |
#weight ⇒ Object
27 28 29 |
# File 'lib/physical/package.rb', line 27 def weight container.weight + items.map(&:weight).reduce(Measured::Weight(0, :g), &:+) + void_fill_weight end |