Skip to content

Commit

Permalink
Replace Method with Method Object.
Browse files Browse the repository at this point in the history
  • Loading branch information
josemotanet committed Jun 4, 2013
1 parent 3ba438c commit 1f5d277
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 1 deletion.
47 changes: 47 additions & 0 deletions replace-method-with-method-object/lib/after.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class TaxAlgorithm
def initialize(income: nil, expenses: 0, type: :dependent_worker)
@income = income
@expenses = expenses
@type = type

@return_value = 0
@number_of_people_under_roof = 1
end

def compute
process_type
process_number_of_people
process_income_expense_difference
deduct_expenses
end

def process_type
if @type == :dependent_worker
@return_value += @income * 0.02
else
@return_value += @income * 0.04
end
end

def process_number_of_people
@return_value *= 1.10 if @number_of_people_under_roof > 2
end

def process_income_expense_difference
@return_value += @expenses * 0.05 if @income - @expenses > @income * 0.05
end

def deduct_expenses
@return_value -= @expenses * 0.30
end
end

class TaxSimulator
def initialize person
@person = person
end

def simulate_return(income: nil, expenses: 0, type: :dependent_worker)
TaxAlgorithm.new(income: income, expenses: expenses, type: type).compute
end
end
26 changes: 26 additions & 0 deletions replace-method-with-method-object/lib/before.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class TaxSimulator
def initialize person
@person = person
end

def simulate_return(income: nil, expenses: 0, type: :dependent_worker)
return_value = 0
number_of_people_under_roof = 1

if type == :dependent_worker
return_value += income * 0.02
else
return_value += income * 0.04
end

if number_of_people_under_roof > 2
return_value *= 1.10
end

if income - expenses > income * 0.05
return_value += expenses * 0.05
end

return_value -= expenses * 0.30
end
end
12 changes: 11 additions & 1 deletion replace-method-with-method-object/test/test.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
require 'minitest/spec'
require 'minitest/autorun'
require 'minitest/spec'

require 'before' if ENV["BEFORE"]
require 'after' unless ENV["BEFORE"]

describe TaxSimulator do
it "simulates tax returns" do
TaxSimulator.new("Jose Mota").simulate_return(
income: 10000,
expenses: 300,
type: :independent_worker
).must_equal 325.0
end
end

0 comments on commit 1f5d277

Please sign in to comment.