Guest User

Untitled

a guest
Jun 18th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. require "rspec"
  2.  
  3. class String
  4. def integer?
  5. return true if self =~ /^[1-9]\d*(\.\d+)?$/
  6. false
  7. end
  8. end
  9.  
  10. module Tippy
  11. class Builder
  12. def initialize total:, gratuity:
  13. @total = total
  14. @gratuity = gratuity
  15. end
  16.  
  17. def generate
  18. return calculation if number_input
  19. string_input
  20. end
  21.  
  22. def number_input
  23. (@gratuity.is_a? Numeric) || (@gratuity.integer?)
  24. end
  25.  
  26. def string_input
  27. case @gratuity.downcase
  28. when 'high' then calculation 25
  29. when 'standard' then calculation 18
  30. when 'low' then calculation 15
  31. end
  32. end
  33.  
  34. def calculation gratuity = @gratuity
  35. @total += @total * (gratuity.to_f / 100)
  36. end
  37. end
  38. end
  39. #Tests
  40. describe 'Tip Generator' do
  41. it 'Accurately generates a tip given string or integer input' do
  42. test_1 = Tippy::Builder.new(total: 100, gratuity: '23.5').generate
  43. test_2 = Tippy::Builder.new(total: 100, gratuity: 'high').generate
  44. test_3 = Tippy::Builder.new(total: 100, gratuity: 'LOW').generate
  45. test_4 = Tippy::Builder.new(total: 100, gratuity: 'standard').generate
  46. test_5 = Tippy::Builder.new(total: 100, gratuity: '18').generate
  47. test_6 = Tippy::Builder.new(total: 100, gratuity: 20).generate
  48. test_7 = Tippy::Builder.new(total: 100, gratuity: 0).generate
  49. test_8 = Tippy::Builder.new(total: 100, gratuity: 'jlkdjfdjsl').generate
  50. test_9 = Tippy::Builder.new(total: 100, gratuity: 45.555).generate
  51.  
  52. expect(test_1).to eq(123.5)
  53. expect(test_2).to eq(125.0)
  54. expect(test_3).to eq(115.0)
  55. expect(test_4).to eq(118.0)
  56. expect(test_5).to eq(118.0)
  57. expect(test_6).to eq(120.0)
  58. expect(test_7).to eq(100.0)
  59. expect(test_8).to eq(nil)
  60. expect(test_9).to eq(145.555)
  61. end
  62. end
Add Comment
Please, Sign In to add comment