I'm reading log file settings from a YAML file. Since Logger.new can
take either an IO object or string, the YAML could look like:
logger:
output: STDOUT
or
logger:
output: /foo/bar
The problem is that the YAML structure is loaded as strings, so if I
specify STDOUT I get a log file named "STDOUT". Is there an elegant way
around this problem? I see two less-elegant ways:
if yaml["logger"]["output"] == "STDOUT" then
log = Logger.new(STDOUT)
else
...
end
I'm reading log file settings from a YAML file. Since Logger.new can
take either an IO object or string, the YAML could look like:
logger:
output: STDOUT
or
logger:
output: /foo/bar
The problem is that the YAML structure is loaded as strings, so if I
specify STDOUT I get a log file named "STDOUT". Is there an elegant way
around this problem? I see two less-elegant ways:
if yaml["logger"]["output"] == "STDOUT" then
log = Logger.new(STDOUT)
else
...
end
I know casting is bad. Any suggestions appreciated. Thanks!
The problem is that you are not casting, you are dealing with
variable names (symbolic names) versus variable contents. In
that light, your solutions are fine unless you have/make a
filesystem file corresponding to STDOUT
The problem is that the YAML structure is loaded as strings, so if I
specify STDOUT I get a log file named "STDOUT". Is there an elegant way
around this problem? I see two less-elegant ways:
[snip]
I know casting is bad. Any suggestions appreciated. Thanks!
<pedant>
This is probably coercion, not casting. The latter I tend to associate with conversion between almost-but-not-quite-compatible and maybe-but-we-can't-tell-until-we-try-compatible types.
</pedant>