def script_extensions(name, *args, &block)
catch(:no_match) { super if defined? super }
if !args.empty? || block
throw :no_match
end
case name.to_s
when /^(\w+)_reader$/
name = $1.to_sym
if reader = data_readers[name]
return reader[1]
else
raise NoMethodError, "no data reader called #{name} defined: got #{data_readers.keys.map(&:inspect).join(", ")}"
end
when /^(\w+)_writer$/
name = $1.to_sym
if writer = data_writers[name]
return writer[1]
else
raise NoMethodError, "has no data writer called #{name} defined: got #{data_writers.keys.map(&:inspect).join(", ")}"
end
when /^write_(\w+)$/
name = $1.to_sym
if writer = data_writers[name]
writer[1].write(writer[2])
else
raise NoMethodError, "no data writer called #{name} defined: got #{data_writers.keys.map(&:inspect).join(", ")}"
end
else
if reader = data_readers[name]
value = reader[1].read
return value
elsif writer = data_writers[name]
return writer[2]
else
throw :no_match
end
end
end