Skip to content

Commit 16a249d

Browse files
committed
Moved class resolution from an eval to a const_get enabling global traits/smarts.
1 parent 4a296fb commit 16a249d

File tree

5 files changed

+50
-38
lines changed

5 files changed

+50
-38
lines changed

lib/example.rb

+36-28
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,27 @@ def read(source)
1111
end
1212
end
1313

14-
class ExampleStringWriter < Writer
15-
def initialize(target)
16-
end
17-
def start
18-
end
19-
def finish
20-
'Example' # this isnt a proper Writer implementation, just an Example.
14+
class Example
15+
class StringWriter < Writer
16+
def initialize(target)
17+
end
18+
def start
19+
end
20+
def finish
21+
'Example' # this isnt a proper Writer implementation, just an Example.
22+
end
2123
end
2224
end
2325

24-
class ExampleStringReader < Reader
25-
def initialize(source)
26-
end
27-
def start
28-
end
29-
def finish
30-
Example.new # this isnt a proper Reader implementation, just an Example.
26+
class Example
27+
class StringReader < Reader
28+
def initialize(source)
29+
end
30+
def start
31+
end
32+
def finish
33+
Example.new # this isnt a proper Reader implementation, just an Example.
34+
end
3135
end
3236
end
3337

@@ -37,13 +41,15 @@ def print(source)
3741
end
3842
end
3943

40-
class ExampleStringPrinter < Printer
41-
def initialize(source)
42-
end
43-
def start
44-
end
45-
def finish
46-
'an Example' # this isnt a proper Printer implementation, just an Example.
44+
class Example
45+
class StringPrinter < Printer
46+
def initialize(source)
47+
end
48+
def start
49+
end
50+
def finish
51+
'an Example' # this isnt a proper Printer implementation, just an Example.
52+
end
4753
end
4854
end
4955

@@ -53,12 +59,14 @@ def convert(source)
5359
end
5460
end
5561

56-
class ExampleStringConverter < Converter
57-
def initialize(source)
58-
end
59-
def start
60-
end
61-
def finish
62-
'an Example' # this isnt a proper Converter implementation, just an Example.
62+
class Example
63+
class StringConverter < Converter
64+
def initialize(source)
65+
end
66+
def start
67+
end
68+
def finish
69+
'an Example' # this isnt a proper Converter implementation, just an Example.
70+
end
6371
end
6472
end

lib/smarts/persistence.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ module Writing
77
include Support
88

99
def store_on(target)
10-
writer_class_name = name_for(:writing, self.class, target)
11-
writer_class = eval(writer_class_name)
10+
writer_class_name = name_for(:writing, target)
11+
writer_class = resolve_for(writer_class_name, self.class)
1212
writer = writer_class.new(target)
1313
with(writer, :write)
1414
end
@@ -20,8 +20,8 @@ module Reading
2020
include Support
2121

2222
def from(source)
23-
reader_class_name = name_for(:reading, self, source)
24-
reader_class = eval(reader_class_name)
23+
reader_class_name = name_for(:reading, source)
24+
reader_class = resolve_for(reader_class_name, self)
2525
reader = reader_class.new(source)
2626
with(reader, :read)
2727
end

lib/smarts/representation.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ module Printing
77
include Support
88

99
def print_on(target)
10-
printer_class_name = name_for(:printing, self.class, target)
11-
printer_class = eval(printer_class_name)
10+
printer_class_name = name_for(:printing, target)
11+
printer_class = resolve_for(printer_class_name, self.class)
1212
printer = printer_class.new(target)
1313
with(printer, :print)
1414
end

lib/smarts/support.rb

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ module Support
22

33
private
44

5-
def name_for(action, source, target)
6-
"::#{source.name}#{target.class.name}#{to_verb(action)}"
5+
def name_for(action, target)
6+
"#{target.class.name}#{to_verb(action)}"
7+
end
8+
9+
def resolve_for(aClassName, aClass)
10+
Module.const_get(aClass.name).const_get(aClassName)
711
end
812

913
def to_verb(action)

lib/smarts/transformation.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ module Converting
77
include Support
88

99
def convert_to(target)
10-
converter_class_name = name_for(:converting, self.class, target)
11-
converter_class = eval(converter_class_name)
10+
converter_class_name = name_for(:converting, target)
11+
converter_class = resolve_for(converter_class_name, self.class)
1212
converter = converter_class.new(target)
1313
with(converter, :convert)
1414
end

0 commit comments

Comments
 (0)