Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ source "https://rubygems.org"
gem "rspec", "~> 3.12"

gem "simplecov", "~> 0.22.0"

gem "simplecov-console", "~> 0.9.1"
9 changes: 9 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
GEM
remote: https://rubygems.org/
specs:
ansi (1.5.0)
diff-lcs (1.5.0)
docile (1.4.0)
rspec (3.12.0)
Expand All @@ -20,15 +21,23 @@ GEM
docile (~> 1.1)
simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1)
simplecov-console (0.9.1)
ansi
simplecov
terminal-table
simplecov-html (0.12.3)
simplecov_json_formatter (0.1.4)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
unicode-display_width (2.4.2)

PLATFORMS
arm64-darwin-22

DEPENDENCIES
rspec (~> 3.12)
simplecov (~> 0.22.0)
simplecov-console (~> 0.9.1)

BUNDLED WITH
2.4.18
10 changes: 3 additions & 7 deletions lib/brie_updater.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
# frozen_string_literal: true

require_relative 'updater'

class BrieUpdater < Updater
def self.handles?(item)
class BrieUpdater
def handles?(item)
item.name == 'Aged Brie'
end

Updater.register(self)

def update
def update(item)
item.sell_in -= 1
return if item.quality >= 50

Expand Down
10 changes: 3 additions & 7 deletions lib/conjured_updater.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
# frozen_string_literal: true

require_relative 'updater'

class ConjuredUpdater < Updater
def self.handles?(item)
class ConjuredUpdater
def handles?(item)
item.name.start_with?('Conjured')
end

Updater.register(self)

def update
def update(item)
item.sell_in -= 1
return if item.quality <= 0

Expand Down
21 changes: 18 additions & 3 deletions lib/gilded_rose.rb
Original file line number Diff line number Diff line change
@@ -1,20 +1,35 @@
# frozen_string_literal: true

require_relative 'item'
require_relative 'updater'
require_relative 'normal_updater'
require_relative 'brie_updater'
require_relative 'pass_updater'
require_relative 'sulfuras_updater'
require_relative 'conjured_updater'

DEFAULT_UPDATERS = [
ConjuredUpdater.new,
BrieUpdater.new,
PassUpdater.new,
SulfurasUpdater.new,
NormalUpdater.new
].freeze

class GildedRose
def initialize(items)
def initialize(items, updaters = DEFAULT_UPDATERS)
@items = items
@updaters = updaters
end

def update_quality
@items.each do |item|
Updater.for(item).update
find_updater_for(item).update(item)
end
end

private

def find_updater_for(item)
@updaters.find { |updater| updater.handles?(item) }
end
end
15 changes: 15 additions & 0 deletions lib/normal_updater.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# frozen_string_literal: true

class NormalUpdater
def handles?(item)
true
end

def update(item)
item.sell_in -= 1
return if item.quality <= 0

item.quality -= 1
item.quality -= 1 if item.sell_in <= 0 && item.quality > 0
end
end
10 changes: 3 additions & 7 deletions lib/pass_updater.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
# frozen_string_literal: true

require_relative 'updater'

class PassUpdater < Updater
def self.handles?(item)
class PassUpdater
def handles?(item)
item.name.start_with?('Backstage pass')
end

Updater.register(self)

def update
def update(item)
item.sell_in -= 1
return item.quality = 0 if item.sell_in.negative?
return if item.quality >= 50
Expand Down
10 changes: 3 additions & 7 deletions lib/sulfuras_updater.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
# frozen_string_literal: true

require_relative 'updater'

class SulfurasUpdater < Updater
def self.handles?(item)
class SulfurasUpdater
def handles?(item)
item.name == 'Sulfuras, Hand of Ragnaros'
end

Updater.register(self)

def update; end
def update(item); end
end
36 changes: 0 additions & 36 deletions lib/updater.rb

This file was deleted.