From 9c7818942e76662bc68d43d0c6a61d23024880b0 Mon Sep 17 00:00:00 2001 From: mesmerize Date: Wed, 6 Oct 2021 21:01:18 +0200 Subject: [PATCH] builder solution? --- lib/rental_plan.rb | 33 +++++++++++++++++++++++++++++++++ lib/rental_plan/day_range.rb | 18 ++++++++++++++++++ lib/rental_plan/hour_range.rb | 7 +++++++ lib/rental_plan/metadata.rb | 6 ++++++ spec/anything_spec.rb | 4 ++-- 5 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 lib/rental_plan.rb create mode 100644 lib/rental_plan/day_range.rb create mode 100644 lib/rental_plan/hour_range.rb create mode 100644 lib/rental_plan/metadata.rb diff --git a/lib/rental_plan.rb b/lib/rental_plan.rb new file mode 100644 index 0000000..2093ebf --- /dev/null +++ b/lib/rental_plan.rb @@ -0,0 +1,33 @@ +require 'rental_plan/metadata' +require 'rental_plan/day_range' +require 'rental_plan/hour_range' + +class RentalPlan + def self.build(name) + build_metadata name + build_ranges + + new(@metadata, @ranges) + end + + def self.build_metadata(name) + @metadata = Metadata.new(name) + end + + def self.build_ranges + @ranges = [DayRange.build] + end + + def initialize(metadata, ranges) + @metadata = metadata + @ranges = ranges + end + + def name + @metadata.name + end + + def ranges + @ranges + end +end diff --git a/lib/rental_plan/day_range.rb b/lib/rental_plan/day_range.rb new file mode 100644 index 0000000..2068df6 --- /dev/null +++ b/lib/rental_plan/day_range.rb @@ -0,0 +1,18 @@ +class DayRange + def self.build(start=1, finish=9999) + build_hour_ranges + + new(@hour_ranges, start, finish) + end + + def self.build_hour_ranges + @hour_ranges = [HourRange.new] + end + + attr_reader :start, :finish, :hour_ranges + def initialize(hour_ranges, start=1, finish=9999) + @start = start + @finish = finish + @hour_ranges = hour_ranges + end +end diff --git a/lib/rental_plan/hour_range.rb b/lib/rental_plan/hour_range.rb new file mode 100644 index 0000000..ac7c991 --- /dev/null +++ b/lib/rental_plan/hour_range.rb @@ -0,0 +1,7 @@ +class HourRange + attr_reader :start, :finish + def initialize(start=1, finish=24) + @start = start + @finish = finish + end +end diff --git a/lib/rental_plan/metadata.rb b/lib/rental_plan/metadata.rb new file mode 100644 index 0000000..ed65360 --- /dev/null +++ b/lib/rental_plan/metadata.rb @@ -0,0 +1,6 @@ +class Metadata + attr_reader :name + def initialize(name) + @name = name + end +end diff --git a/spec/anything_spec.rb b/spec/anything_spec.rb index 4f1e8d8..231b8bd 100644 --- a/spec/anything_spec.rb +++ b/spec/anything_spec.rb @@ -4,7 +4,7 @@ require 'rental_plan' describe RentalPlan do - let(:plan) { RentalPlan.new 'My rental plan' } + let(:plan) { RentalPlan.build 'My rental plan' } it 'it has metadata' do expect(plan.name).to eq('My rental plan') @@ -12,7 +12,7 @@ it 'has list of day ranges' do expect(plan.ranges).to be_a(Array) - expect(plan.sample.start).to eq(1) + expect(plan.ranges.sample.start).to eq(1) end describe 'each day range' do