class Stockman::Logic::Summary

Attributes

data[R]

Public Class Methods

from_hash(hash) click to toggle source
# File lib/stockman/logic/summary.rb, line 6
def self.from_hash(hash)
  data = transform_values(hash, &Utils.method(:deserialize_amount))

  new(data)
end
from_object(object) click to toggle source
# File lib/stockman/logic/summary.rb, line 12
def self.from_object(object)
  data = {
    physical_amount: object.total_physical_amount,
    allocated_amount: object.total_allocated_amount,
    available_amount: object.total_available_amount,

    warehouses: object.stock_levels.inject({}) do |memo, stock_level|
      memo.merge(
        stock_level.warehouse_id => {
          physical_amount: stock_level.physical_amount,
          allocated_amount: stock_level.allocated_amount,
          available_amount: stock_level.available_amount
        }
      )
    end
  }

  new(data)
end
new(data) click to toggle source
# File lib/stockman/logic/summary.rb, line 32
def initialize(data)
  @data = data
end

Private Class Methods

transform_values(hash) { |data| ... } click to toggle source
# File lib/stockman/logic/summary.rb, line 62
def self.transform_values(hash, &block)
  method = lambda do |memo, data|
    memo.merge data[0] => yield(data[1])
  end

  totals = hash.symbolize_keys.slice(:physical_amount, :allocated_amount, :available_amount)
    .inject({}, &method)

  warehouses = hash.symbolize_keys[:warehouses].inject({}) do |memo, data|
    memo.merge data[0].to_i => data[1].inject({}, &method).symbolize_keys
  end

  totals.merge(warehouses: warehouses)
end

Public Instance Methods

to_hash() click to toggle source
# File lib/stockman/logic/summary.rb, line 52
def to_hash
  self.class.transform_values(data, &Utils.method(:serialize_amount))
end
to_json(_ = nil) click to toggle source
# File lib/stockman/logic/summary.rb, line 56
def to_json(_ = nil)
  JSON.generate(to_hash)
end
total_allocated_amount() click to toggle source
# File lib/stockman/logic/summary.rb, line 40
def total_allocated_amount
  data[:allocated_amount]
end
total_available_amount() click to toggle source
# File lib/stockman/logic/summary.rb, line 44
def total_available_amount
  data[:available_amount]
end
total_physical_amount() click to toggle source
# File lib/stockman/logic/summary.rb, line 36
def total_physical_amount
  data[:physical_amount]
end
warehouses() click to toggle source
# File lib/stockman/logic/summary.rb, line 48
def warehouses
  data[:warehouses]
end