I need to use Ruby to process performance data and calculate performance
metrics. What I have is a Hash that contains event_name => event_value
mappings. What I want to do is calculating metrics in a elegant style.
for example:
events = Hash.new
# reading the raw data.
# code omitted here.
# now I get the basic events, like
# events["event_A"] = 123.456
# events["event_B"] = 456.789
# the normal way looks like:
events["metric_A"] = events["event_A"] * 64 / events["event_B"]
# but what I am wondering if I can do it in an elegant way, like:
metric_A = event_A * 64 / event_B
You can have a file with only the block for instance_eval for your
users to type, with just an extra little bit of work.
Jesus.
···
On Mon, Dec 20, 2010 at 8:22 AM, Zd Yu <zdyu2000@gmail.com> wrote:
I need to use Ruby to process performance data and calculate performance
metrics. What I have is a Hash that contains event_name => event_value
mappings. What I want to do is calculating metrics in a elegant style.
for example:
events = Hash.new
# reading the raw data.
# code omitted here.
# now I get the basic events, like
# events["event_A"] = 123.456
# events["event_B"] = 456.789
# the normal way looks like:
events["metric_A"] = events["event_A"] * 64 / events["event_B"]
# but what I am wondering if I can do it in an elegant way, like:
metric_A = event_A * 64 / event_B
"Jesús Gabriel y Galán" <jgabrielygalan@gmail.com> wrote in post #969520:
you can do that easily with method_missing
Thanks. it looks like a promising solution. but I have two more
requirements:
1. what if the event name includes a dot '.'?
2. I also want the left value of the equation (metric_A in the example)
to be added into the Hash, because it is possible that a new metric
needs to be calculated based on the existing metric.
"Jesús Gabriel y Galán" <jgabrielygalan@gmail.com> wrote in post #969520:
you can do that easily with method_missing
Thanks. it looks like a promising solution. but I have two more
requirements:
1. what if the event name includes a dot '.'?
You have two event names and you need to clarify: the key in the hash, or the "variable" used in the DSL?
If the former, you probably want to munge the names as they come in.
If the latter, you probably want to munge what you wind up instance eval'ing.
If neither, you're probably doing it as a scoping mechanism of some sort and you probably need to build a hierarchy in @events and change method missing to do a proper hierarchical lookup (probably recursively, passing down to subsequent sub-EventData's).
2. I also want the left value of the equation (metric_A in the example)
to be added into the Hash, because it is possible that a new metric
needs to be calculated based on the existing metric.
Then chuck the hash entirely and use local variables. This will probably collide with the above suggestion for namespacing... so munging the input script is a better route.