summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2013-09-25 19:37:41 -0600
committermo khan <mo@mokhan.ca>2013-09-25 19:37:41 -0600
commit84b4177390f370d895f7640a8364d0c87cf413ff (patch)
tree00f46f69226eb635dd895f4bdc837d9eb4de4c90
parent5be0beb85001b2029c083f10d18b5e251c1d73c4 (diff)
parent1acc2841a2c470960ec6ae8dd063c670e6657881 (diff)
Merge branch 'master' of github.com:mokhan/bootcamp
-rw-r--r--readme.md8
-rw-r--r--spec/review01_spec.rb159
2 files changed, 167 insertions, 0 deletions
diff --git a/readme.md b/readme.md
index 005fd28..682eed3 100644
--- a/readme.md
+++ b/readme.md
@@ -6,6 +6,14 @@
* receiver vs message
* instance variables
+# lesson two
+
+* default parameters
+* named parameters
+* symbols
+* hashes
+* object references
+
# todo
* encapsulation
diff --git a/spec/review01_spec.rb b/spec/review01_spec.rb
new file mode 100644
index 0000000..d8d5fde
--- /dev/null
+++ b/spec/review01_spec.rb
@@ -0,0 +1,159 @@
+
+require 'spec_helper'
+
+describe "review lesseon 1" do
+ context "strings" do
+ it "review" do
+ puts 'blah #{DateTime.now}'
+ puts "blah #{DateTime.now}"
+ puts String.new("hello")
+ # puts String.public_methods
+ end
+ end
+
+ class Person
+ # attr_reader :first_name
+ # attr_writer :first_name
+ attr_accessor :first_name
+
+ def initialize(first_name = "no name")
+ @first_naem = first_name
+ end
+
+ # def first_name
+ # @first_name
+ # end
+
+ # def first_name=(new_name)
+ # @first_name = new_name
+ # end
+
+ def change_address(street_address, city = "Calgary")
+ @street_address = street_address
+ @city = city
+ end
+
+ def change_clothes(pants: "jeans", shirt: "t-shirt")
+ puts "PANTS: #{pants}"
+ puts "SHIRT: #{shirt}"
+ end
+ end
+
+ class CoffeeShop
+ def initialize(defaults = {size: "regular", type: "espresso", strength: nil, room: false})
+ @defaults = defaults
+ end
+
+ # def serve_me(size: "regular", type: "espresso", strength: nil, room: false)
+ def serve_me(options = {})
+ order = @defaults.merge(options)
+ coffee = "Here's your"
+ [:strength, :size, :type].each do |key|
+ coffee += (order[key] ? " #{order[key]}" : "")
+ end
+ coffee += (order[:room] ? " with room" : "")
+ coffee += "."
+ coffee
+ end
+ end
+
+ class Movies
+ def initialize()
+ @movies = ["jurassic park", "rocky", "rocky II"]
+ end
+
+ def accept(visitor)
+ size = @movies.size
+ until i > size
+ movie = @movies[i]
+ visitor.visit(movie)
+ i=i+1
+ end
+ end
+ end
+
+ class LoggingVisitor
+ def visit(item)
+ puts item
+ end
+ end
+
+ class TotalCount
+ attr_reader :total
+
+ def initialize
+ @total = 0
+ end
+
+ def visit(item)
+ @total = @total + 1
+ end
+ end
+
+ context "visitor" do
+ it "can visit each movie" do
+ movies = Movies.new
+ visitor = LoggingVisitor.new
+ total_movies = TotalCount.new
+
+ movies.accept(visitor)
+ movies.accept(total_movies)
+
+ puts total_movies
+
+ [1, 3, 4].each do |x|
+ puts x * x
+ end
+
+ [1, 2, 4].map do |x|
+ return x *x
+ end
+
+ end
+ end
+
+
+ context "objects" do
+ it "review" do
+ person = Person.new("mo")
+ # person.full_name # instance method
+ person.first_name = 'mo'
+
+ # person.first_name=('mo')
+ # other_person = Person.create # class method (singleton method)
+ puts person.object_id
+
+ end
+
+ it "can use a default parameter" do
+ mo = Person.new("mo")
+ mo.change_address("1737 23 ave nw")
+ end
+
+ it "can use named parameters" do
+ mo = Person.new("mo")
+ mo.change_clothes(shirt: "bunny hug", pants: "none")
+ end
+ end
+
+ context "CoffeeShop" do
+ def shop
+ CoffeeShop.new
+ end
+
+ it "can serve a coffee the way I like it" do
+ coffee = shop.serve_me(size: "medium", type: "dark roast")
+ coffee.should == "Here's your medium dark roast."
+ end
+
+ it "should serve a coffee with the correct strength" do
+ coffee = shop.serve_me(size: "large", type: "light roast", strength: 'single')
+ coffee.should == "Here's your single large light roast."
+ end
+
+ it "should specify the room" do
+ coffee = shop.serve_me(size: "small", room: true)
+ coffee.should == "Here's your small espresso with room."
+ end
+ end
+end \ No newline at end of file