From 6809f8530650be59cf42fb1b2ab41a9d72ce41a9 Mon Sep 17 00:00:00 2001 From: mattdavids Date: Thu, 8 Mar 2018 23:20:03 -0600 Subject: [PATCH] Completed Commit --- .gitignore | 3 +-- lib/desugaring.rb | 25 ++++++++++++++------- lib/retail_transaction.rb | 4 ++++ test/retail_transaction_test.rb | 40 +++++++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index daee7e0..88c645a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -*.DS_Store -.idea +rsapass* diff --git a/lib/desugaring.rb b/lib/desugaring.rb index 8d52908..10e26be 100644 --- a/lib/desugaring.rb +++ b/lib/desugaring.rb @@ -21,7 +21,9 @@ def all_the_sugar(recipients, event, message) # Copy the contents of the previous method here and remove this sugar. # def desugared_poetry(recipients, event, message) - implement_me! + mail(message, + to: recipients.map(&:email), + subject: "You’re invited to #{event.title} on #{event.date}") end # Ruby allows you to pass arguments identified by name instead of just by position. They are really just @@ -36,7 +38,8 @@ def desugared_poetry(recipients, event, message) # Copy the contents of the previous method here and remove this sugar. # def desugared_named_args(recipients, event, message) - implement_me! + mail(message,{to: recipients.map(&:email), + subject: "You’re invited to #{event.title} on #{event.date}"}) end # Ruby’s general syntax for hashes is `{key => value, key => value, ...}`. Because it is so common to use @@ -51,7 +54,8 @@ def desugared_named_args(recipients, event, message) # Copy the contents of the previous method here and remove this sugar. # def desugared_symbol_keys(recipients, event, message) - implement_me! + mail(message,{:to => recipients.map(&:email), + :subject => "You’re invited to #{event.title} on #{event.date}"}) end # You may be wondering how `map(&:email)` works. When you precede the last argument of a method call with @@ -70,7 +74,8 @@ def desugared_symbol_keys(recipients, event, message) # Copy the contents of the previous method here and remove this sugar. # def desugared_attr_proc(recipients, event, message) - implement_me! + mail(message,{:to => recipients.map{ |person| person.email }, + :subject => "You’re invited to #{event.title} on #{event.date}"}) end # You may recall from the Ruby koans that when you put `#{something}` in a `"`-delimited string, Ruby will @@ -88,7 +93,8 @@ def desugared_attr_proc(recipients, event, message) # Copy the contents of the previous method here and remove this sugar. # def desugared_interpolation(recipients, event, message) - implement_me! + mail(message,{:to => recipients.map{ |person| person.email }, + :subject => "You’re invited to " + event.title.to_s + ' on ' + event.date.to_s}) end # Ruby tracks local variables lexically at compile time. Wherever you say `x = y`, the compiler assumes that @@ -110,7 +116,8 @@ def desugared_interpolation(recipients, event, message) # (Think: which names are local variables, and which are not?) # def desugared_implicit_self(recipients, event, message) - implement_me! + self.mail(message,{:to => recipients.map{ |person| person.email }, + :subject => "You’re invited to " + event.title.to_s + ' on ' + event.date.to_s}) end # In Ruby, unlike Python, there are no properties distinct from method calls. When you say `x.y`, you are @@ -131,7 +138,8 @@ def desugared_implicit_self(recipients, event, message) # but structurally quite similar! # def desugared_implicit_parens(recipients, event, message) - implement_me! + self.mail(message,{:to => recipients.map{ |person| person.email() }, + :subject => "You’re invited to " + event.title.to_s() + ' on ' + event.date.to_s()}) end # In Ruby, every value is an object and every action is a method call. That includes operators. A binary @@ -153,7 +161,8 @@ def desugared_implicit_parens(recipients, event, message) # get added before the things on the right. (a + b + c) means ((a + b) + c), NOT (a + (b + c)). # def desugared_operators(recipients, event, message) - implement_me! + self.mail(message,{:to => recipients.map{ |person| person.email() }, + :subject => ((("You’re invited to ".+(event.title.to_s())).+(' on ')).+(event.date.to_s()))}) end # Compare that to the version at the top. diff --git a/lib/retail_transaction.rb b/lib/retail_transaction.rb index 1bfa0e3..658c526 100644 --- a/lib/retail_transaction.rb +++ b/lib/retail_transaction.rb @@ -39,6 +39,7 @@ def paid? state :processing_payment state :payment_declined state :settled + state :refunded event :check_out do transitions from: :ringing_up, to: :collecting_payment, @@ -61,5 +62,8 @@ def paid? event :payment_declined do transitions from: :processing_payment, to: :payment_declined end + event :refund do + transitions from: :settled, to: :refunded + end end end diff --git a/test/retail_transaction_test.rb b/test/retail_transaction_test.rb index 823cbfe..5f7e190 100644 --- a/test/retail_transaction_test.rb +++ b/test/retail_transaction_test.rb @@ -48,6 +48,10 @@ tx.check_out! end + it "cannot be refunded" do + assert_invalid_transition { tx.refund! } + end + it "cannot add more items" do assert_raises do tx.add_item("roller skates") @@ -74,6 +78,10 @@ tx.process_payment! end + it "cannot be refunded" do + assert_invalid_transition { tx.refund! } + end + it "cannot add more items" do assert_raises do tx.add_item("roller skates") @@ -149,8 +157,40 @@ tx.payment_authorized! end + it "cannot be reopened" do + assert_invalid_transition { tx.reopen! } + end + it "can be refunded" do + tx.refund! + assert_equal true, tx.refunded? + end + end + + describe "that is refunded" do + before(:each) do + tx.add_item("bobcat") + tx.check_out! + tx.payment_info = "15 cents and a nail" + tx.process_payment! + tx.payment_authorized! + tx.refund! + end + + it "cannot be refunded a second time" do + assert_invalid_transition { tx.refund! } + end + it "cannot be reopened" do assert_invalid_transition { tx.reopen! } end end end + + + + + + + + +