mirror of
https://github.com/edgecase/ruby_koans.git
synced 2026-04-15 07:23:19 -04:00
64 lines
1.2 KiB
Ruby
64 lines
1.2 KiB
Ruby
require File.expand_path(File.dirname(__FILE__) + '/edgecase')
|
|
|
|
class AboutModules < EdgeCase::Koan
|
|
module Nameable
|
|
def set_name(new_name)
|
|
@name = new_name
|
|
end
|
|
|
|
def here
|
|
:in_module
|
|
end
|
|
end
|
|
|
|
def test_cant_instantiate_modules
|
|
assert_raise(___(NoMethodError)) do
|
|
Nameable.new
|
|
end
|
|
end
|
|
|
|
# ------------------------------------------------------------------
|
|
|
|
class Dog
|
|
include Nameable
|
|
|
|
attr_reader :name
|
|
|
|
def initialize
|
|
@name = "Fido"
|
|
end
|
|
|
|
def bark
|
|
"WOOF"
|
|
end
|
|
|
|
def here
|
|
:in_object
|
|
end
|
|
end
|
|
|
|
def test_normal_methods_are_available_in_the_object
|
|
fido = Dog.new
|
|
assert_equal __("WOOF"), fido.bark
|
|
end
|
|
|
|
def test_module_methods_are_also_available_in_the_object
|
|
fido = Dog.new
|
|
assert_nothing_raised(Exception) do # __
|
|
fido.set_name("Rover")
|
|
end
|
|
end
|
|
|
|
def test_module_methods_can_affect_instance_variables_in_the_object
|
|
fido = Dog.new
|
|
assert_equal __("Fido"), fido.name
|
|
fido.set_name("Rover")
|
|
assert_equal __("Rover"), fido.name
|
|
end
|
|
|
|
def test_classes_can_override_module_methods
|
|
fido = Dog.new
|
|
assert_equal __(:in_object), fido.here
|
|
end
|
|
end
|