40 lines
1.3 KiB
Ruby
40 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'bundler/gem_tasks'
|
|
require 'rspec/core/rake_task'
|
|
require 'planet_express'
|
|
|
|
RSpec::Core::RakeTask.new(:spec)
|
|
|
|
task default: :spec
|
|
|
|
task :process, [:input_file] do |t, args|
|
|
file = File.open(args.input_file, 'r')
|
|
|
|
shipping_option_repository = PlanetExpress::ShippingOptionRepository.new()
|
|
shipment_repository = PlanetExpress::ShipmentRepository.new(data: [])
|
|
discount_budget_for_month_repository = PlanetExpress::DiscountBudgetForMonthRepository.new
|
|
|
|
shipment_reader = PlanetExpress::ShipmentReader.new(file, shipping_option_repository)
|
|
shipment_formatter = PlanetExpress::ShipmentFormatter.new
|
|
|
|
rules = [
|
|
PlanetExpress::SShipmentDiscountRule.new(
|
|
discount_budget_for_month_repository: discount_budget_for_month_repository,
|
|
shipping_option_repository: shipping_option_repository,
|
|
shipment_repository: shipment_repository),
|
|
PlanetExpress::LShipmentDiscountRule.new(
|
|
discount_budget_for_month_repository: discount_budget_for_month_repository,
|
|
shipping_option_repository: shipping_option_repository,
|
|
shipment_repository: shipment_repository)
|
|
]
|
|
|
|
PlanetExpress::ShipmentDiscountCalculator.new(
|
|
shipment_repository: shipment_repository,
|
|
rules: rules).run(shipment_reader)
|
|
|
|
shipment_repository.each do |shipment|
|
|
puts shipment_formatter.format(shipment)
|
|
end
|
|
end
|