Sha256: 57568c55e9719f26aa980e43212e9dd687a5462e3334a50177ca6129712a5a34
Contents?: true
Size: 1.87 KB
Versions: 2
Compression:
Stored size: 1.87 KB
Contents
module Stockman module Logic class Summary attr_reader :data def self.from_hash(hash) data = transform_values(hash, &Utils.method(:deserialize_amount)) new(data) end 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 def initialize(data) @data = data end def total_physical_amount data[:physical_amount] end def total_allocated_amount data[:allocated_amount] end def total_available_amount data[:available_amount] end def warehouses data[:warehouses] end def to_hash self.class.transform_values(data, &Utils.method(:serialize_amount)) end def to_json(_ = nil) JSON.generate(to_hash) end private 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 end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
stockman-logic-0.1.1 | lib/stockman/logic/summary.rb |
stockman-logic-0.1.0 | lib/stockman/logic/summary.rb |