diff --git a/replace-type-code-with-module-extension/lib/after.rb b/replace-type-code-with-module-extension/lib/after.rb index e69de29..c82eea4 100644 --- a/replace-type-code-with-module-extension/lib/after.rb +++ b/replace-type-code-with-module-extension/lib/after.rb @@ -0,0 +1,37 @@ +class Employee + def initialize(type: :regular) + @type = type + end + + def base_salary + 500.0 + end + + def salary + base_salary + bonus + end + + def self.build(type: :regular) + instance = new + instance.extend const_get(type.capitalize) + end + +end + +module Regular + def bonus + 0 + end +end + +module Manager + def bonus + 800 + end +end + +module Boss + def bonus + 1500 + end +end diff --git a/replace-type-code-with-module-extension/lib/before.rb b/replace-type-code-with-module-extension/lib/before.rb index e69de29..20b81b5 100644 --- a/replace-type-code-with-module-extension/lib/before.rb +++ b/replace-type-code-with-module-extension/lib/before.rb @@ -0,0 +1,28 @@ +class Employee + def initialize(type: :regular) + @type = type + end + + def base_salary + 500.0 + end + + def salary + base_salary + bonus + end + + private + + def self.build(type: :regular) + new type: type + end + + def bonus + value = case @type + when :regular then 0 + when :boss then 1500.0 + when :manager then 800.0 + end + end + +end diff --git a/replace-type-code-with-module-extension/test/test.rb b/replace-type-code-with-module-extension/test/test.rb index a8f6974..4b3a8ff 100644 --- a/replace-type-code-with-module-extension/test/test.rb +++ b/replace-type-code-with-module-extension/test/test.rb @@ -3,3 +3,22 @@ require 'before' if ENV["BEFORE"] require 'after' unless ENV["BEFORE"] + +describe Employee do + describe "a regular one" do + it "has a salary" do + Employee.build.salary.must_equal 500.0 + end + end + + describe "a boss" do + it "has a salary" do + Employee.build(type: :boss).salary.must_equal 2000.0 + end + end + describe "a manager" do + it "has a salary" do + Employee.build(type: :manager).salary.must_equal 1300.0 + end + end +end