main
1
2require 'spec_helper'
3
4describe "review lesseon 1" do
5 context "strings" do
6 it "review" do
7 puts 'blah #{DateTime.now}'
8 puts "blah #{DateTime.now}"
9 puts String.new("hello")
10 # puts String.public_methods
11 end
12 end
13
14 class Person
15 # attr_reader :first_name
16 # attr_writer :first_name
17 attr_accessor :first_name
18
19 def initialize(first_name = "no name")
20 @first_naem = first_name
21 end
22
23 # def first_name
24 # @first_name
25 # end
26
27 # def first_name=(new_name)
28 # @first_name = new_name
29 # end
30
31 def change_address(street_address, city = "Calgary")
32 @street_address = street_address
33 @city = city
34 end
35
36 def change_clothes(pants: "jeans", shirt: "t-shirt")
37 puts "PANTS: #{pants}"
38 puts "SHIRT: #{shirt}"
39 end
40 end
41
42 class CoffeeShop
43 def initialize(defaults = {size: "regular", type: "espresso", strength: nil, room: false})
44 @defaults = defaults
45 end
46
47 # def serve_me(size: "regular", type: "espresso", strength: nil, room: false)
48 def serve_me(options = {})
49 order = @defaults.merge(options)
50 coffee = "Here's your"
51 [:strength, :size, :type].each do |key|
52 coffee += (order[key] ? " #{order[key]}" : "")
53 end
54 coffee += (order[:room] ? " with room" : "")
55 coffee += "."
56 coffee
57 end
58 end
59
60 class Movies
61 def initialize()
62 @movies = ["jurassic park", "rocky", "rocky II"]
63 end
64
65 def accept(visitor)
66 @movies.each do |movie|
67 visitor.visit(movie)
68 end
69 end
70 end
71
72 class LoggingVisitor
73 def visit(item)
74 puts item
75 end
76 end
77
78 class TotalCount
79 attr_reader :total
80
81 def initialize
82 @total = 0
83 end
84
85 def visit(item)
86 @total = @total + 1
87 end
88 end
89
90 context "visitor" do
91 it "can visit each movie" do
92 movies = Movies.new
93 visitor = LoggingVisitor.new
94 total_movies = TotalCount.new
95
96 movies.accept(visitor)
97 movies.accept(total_movies)
98
99 puts total_movies
100
101 [1, 3, 4].each do |x|
102 puts x * x
103 end
104
105 [1, 2, 4].map do |x|
106 puts x * x
107 end
108
109 end
110 end
111
112
113 context "objects" do
114 it "review" do
115 person = Person.new("mo")
116 # person.full_name # instance method
117 person.first_name = 'mo'
118
119 # person.first_name=('mo')
120 # other_person = Person.create # class method (singleton method)
121 puts person.object_id
122
123 end
124
125 it "can use a default parameter" do
126 mo = Person.new("mo")
127 mo.change_address("1737 23 ave nw")
128 end
129
130 it "can use named parameters" do
131 mo = Person.new("mo")
132 mo.change_clothes(shirt: "bunny hug", pants: "none")
133 end
134 end
135
136 context "CoffeeShop" do
137 def shop
138 CoffeeShop.new
139 end
140
141 it "can serve a coffee the way I like it" do
142 coffee = shop.serve_me(size: "medium", type: "dark roast")
143 coffee.should == "Here's your medium dark roast."
144 end
145
146 it "should serve a coffee with the correct strength" do
147 coffee = shop.serve_me(size: "large", type: "light roast", strength: 'single')
148 coffee.should == "Here's your single large light roast."
149 end
150
151 it "should specify the room" do
152 coffee = shop.serve_me(size: "small", room: true)
153 coffee.should == "Here's your small espresso with room."
154 end
155 end
156end