Skip to content

Instantly share code, notes, and snippets.

@cfc1020
Last active December 11, 2016 13:07
Show Gist options
  • Save cfc1020/678c2cda1246102700d4252ec38191ee to your computer and use it in GitHub Desktop.
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 :)
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