Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save rinaldifonseca/ecbd0bf9520f165db120cbbe9294ca56 to your computer and use it in GitHub Desktop.
Save rinaldifonseca/ecbd0bf9520f165db120cbbe9294ca56 to your computer and use it in GitHub Desktop.
PayRoll application, embedded in Rails, borrowing from Use Case Driven Architecture and DCI
# payroll gem
module PayRoll
class PayDayService < Service
def initialize(date=Date.now, options={})
@date = date
options[:employees] ||= datastore.find_all_active_employees
@employees = options[:employees].each{|e| e.extend(Employee) }
end
def execute
@employees.each do |e|
if e.pay_date?(@date)
pc = PayCheck.new(e.calculate_pay(@date))
e.send_pay(pc)
end
end
end
end
module PayableEmployee
def pay_date?(date)
# ...
end
def send_pay(pay_check)
# ...
end
end
end
# Rails application, pay_day_controller.rb
class PayDayController < ApplicationController
def create
PayRoll::PayDayService.new(Employee.all).execute
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment