Last active
December 11, 2016 13:07
-
-
Save cfc1020/678c2cda1246102700d4252ec38191ee to your computer and use it in GitHub Desktop.
Need to write a good RSpec unit test for this small class(probably thinking about TDD&BDD first). And how could you improve this report class? Let's go :)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class OrderReporter | |
attr_reader :order | |
attr_reader :report | |
def initialize(order) | |
@order = order | |
end | |
def call | |
return generate_empty_report if order_items_blank? | |
generate_order_report | |
end | |
private | |
attr_writer :report | |
def order_items_blank? | |
order.items.blank? | |
end | |
def generate_empty_report | |
self.report = [ | |
error: 'The order has no items!' | |
] | |
end | |
def generate_order_report | |
self.report = {} | |
order.items.each { |order_item| self.report[order_item.number] = generate_item_report(order_item) } | |
report | |
end | |
def generate_item_report(order_item) | |
order_item_reporter.call(order_item) | |
end | |
def order_item_reporter | |
@order_item_reporter ||= OrderItemReporter.new | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment