Skip to content

Commit

Permalink
reorganized koans and cleaned up permutations
Browse files Browse the repository at this point in the history
  • Loading branch information
ryankinderman committed Apr 23, 2007
1 parent 8844956 commit 8733a10
Show file tree
Hide file tree
Showing 12 changed files with 133 additions and 93 deletions.
6 changes: 6 additions & 0 deletions metakoans-ryan/knowledge_for_koan_01_0.rb
@@ -0,0 +1,6 @@
module MetaKoans

class SomeClass
end

end
7 changes: 6 additions & 1 deletion metakoans-ryan/knowledge_for_koan_01_1.rb
@@ -1,7 +1,12 @@
module MetaKoans

class SomeClass
def self.attribute; end
def self.attribute
end

def a?
false
end
end

end
9 changes: 7 additions & 2 deletions metakoans-ryan/knowledge_for_koan_01_2.rb
@@ -1,11 +1,16 @@
module MetaKoans

class SomeClass
def self.attribute; end

def self.attribute
end

def a?
false
end

def a=(value)
@val = value
end
end

end
11 changes: 8 additions & 3 deletions metakoans-ryan/knowledge_for_koan_01_3.rb
@@ -1,14 +1,19 @@
module MetaKoans

class SomeClass
def self.attribute; end

def self.attribute
end

def a?
false
end

def a=(value)
@a = value
@val = value
end

def a
@val
end
end

Expand Down
11 changes: 6 additions & 5 deletions metakoans-ryan/knowledge_for_koan_01_4.rb
@@ -1,18 +1,19 @@
module MetaKoans

class SomeClass
def self.attribute; end

def self.attribute
end

def a?
false
!@val.nil?
end

def a=(value)
@a = value
@val = value
end

def a
@a
@val
end
end

Expand Down
32 changes: 0 additions & 32 deletions metakoans-ryan/knowledge_for_koan_01_5.rb

This file was deleted.

20 changes: 10 additions & 10 deletions metakoans-ryan/knowledge_for_koan_02_0.rb
@@ -1,19 +1,19 @@
module MetaKoans

class SomeClass
def self.attribute(name='a'); end

def a?
!@a.nil?
end

def a
@a
def self.attribute(name='a')
define_method name + "?" do
!@val.nil?
end
define_method name + "=" do |value|
@val = value
end
define_method name do
@val
end
end

def a=(value)
@a = value
end
end

end
12 changes: 0 additions & 12 deletions metakoans-ryan/knowledge_for_koan_02_1.rb

This file was deleted.

24 changes: 18 additions & 6 deletions metakoans-ryan/knowledge_for_koan_03_0.rb
@@ -1,21 +1,33 @@
module MetaKoans

class SomeClass

class << self
def self.attribute(name='a')
attr_accessor name
define_method name + "?" do
!send(name).nil?
!@val.nil?
end
define_method name + "=" do |value|
@val = value
end
end
define_method name do
@val
end
end
end

def self.attribute(name='a')
attr_accessor name
define_method name + "?" do
!send(name).nil?
!@val.nil?
end
end
define_method name + "=" do |value|
@val = value
end
define_method name do
@val
end
end

end

end
15 changes: 10 additions & 5 deletions metakoans-ryan/knowledge_for_koan_03_1.rb
Expand Up @@ -2,18 +2,23 @@ module MetaKoans

module Attributable
def attribute(name='a')
attr_accessor name
define_method name + "?" do
!send(name).nil?
!@val.nil?
end
end
define_method name + "=" do |value|
@val = value
end
define_method name do
@val
end
end
end

class SomeClass
extend Attributable
class << self
extend Attributable
end
extend Attributable
end
end

end
24 changes: 24 additions & 0 deletions metakoans-ryan/knowledge_for_koan_04_0.rb
@@ -0,0 +1,24 @@
module MetaKoans

module Attributable
def attribute(name='a')
define_method name + "?" do
!@val.nil?
end
define_method name + "=" do |value|
@val = value
end
define_method name do
@val
end
end
end

class SomeClass
end

end

class Class
include MetaKoans::Attributable
end
55 changes: 38 additions & 17 deletions metakoans-ryan/metakoans.rb
Expand Up @@ -100,15 +100,16 @@ def self::method_missing m, *a, &b


# knowledge = ARGV.shift or abort "#{ $0 } knowledge.rb"
student = MetaStudent.new 'knowledge_for_koan_03_1'
student = MetaStudent.new 'knowledge_for_koan_04_0'


module MetaKoans

#
# 'attribute' must provide getter, setter, and query to instances
#
def koan_01
SomeClass.instance_eval do
attribute
end
SomeClass.attribute

o = SomeClass.new

Expand All @@ -117,34 +118,54 @@ def koan_01
assert{ o.a == 42 }
assert{ o.a? }
end

def koan_02
SomeClass.instance_eval do
attribute 'b'
end
SomeClass.attribute 'b'

o = SomeClass.new

assert{ not o.b? }
assert{ o.b = 42 }
assert{ o.b == 42 }
assert{ o.b = 41 }
assert{ o.b == 41 }
assert{ o.b? }
end

SomeClass.instance_eval do
attribute 'c'
end

o = SomeClass.new

assert{ not o.c? }
assert{ o.c = 40 }
assert{ o.c == 40 }
assert{ o.c? }
end

def koan_03
SomeClass.instance_eval do
class << self
attribute 'b'
attribute 'd'
end
end

assert{ not SomeClass.b? }
assert{ SomeClass.b = 42 }
assert{ SomeClass.b == 42 }
assert{ SomeClass.b? }
assert{ not SomeClass.d? }
assert{ SomeClass.d = 39 }
assert{ SomeClass.d == 39 }
assert{ SomeClass.d? }
end


def koan_04
c = Class.new do
attribute 'a'
end

o = c.new

assert{ not o.a? }
assert{ o.a = 42 }
assert{ o.a == 42 }
assert{ o.a? }
end

#
# 'attribute' must provide getter, setter, and query to instances
Expand Down

0 comments on commit 8733a10

Please sign in to comment.