Module: Mercadona::Entity
- Defined in:
- lib/mercadona/entity/base.rb,
lib/mercadona/entity/order_item.rb,
lib/mercadona/entity/discount_rule.rb
Defined Under Namespace
Classes: Base
Constant Summary collapse
- OrderItem =
Mercadona::Entity::Base.new(:product_code, :name, :price, keyword_init: true) do # Understanding Ruby's floating-point precision issues for money calculations, # let's use whole numbers instead of floats. def price_in_fractional_currency (price.to_f * 100).to_i end end
- DiscountRule =
Mercadona::Entity::Base.new(:type, :condition, :quantity, :discount, keyword_init: true) do def initialize(type:, condition:, **args) validate_sensitive_args(type, condition) super end def amount_with_discount(order_item, order_item_quantity) type.call(self, order_item, order_item_quantity) end private def discount_class_valid?(discount_class) discount_class.respond_to?(:call) end def comparison_operator_valid?(comparison_operator) Mercadona::ALLOWED_COMPARISON_OPERATORS.include?(comparison_operator) end def validate_sensitive_args(discount_class, comparison_operator) raise Mercadona::Error::Argument, Mercadona::Error::Argument::DISCOUNT_CLASS unless discount_class_valid?(discount_class) raise Mercadona::Error::Argument, Mercadona::Error::Argument::COMPARISON_OPERATOR unless comparison_operator_valid?(comparison_operator) end end