This articles was published on 2013-05-22
MATSUMOTO Ryosuke just published some hours ago his new GEM mruby-config. He wrote also an article about what it is.
With mruby we continuously switching between Ruby and C code. mruby-config gives you an easy way to maintain configuration values on both sides.
An example Ruby configuration could look likes this:
add_config( "Listen" => 80, "DocumentRoot" => "/var/www/html", "ExtendedStatus" => nil, "User" => "apache", "Group" => "apache", ) if get_config("Version").to_i < 2 add_config "ExtendedStatus" => "Off" else add_config "ExtendedStatus" => "On" end
If we assume that this file was saved under the name mruby.conf
the corresponding C code to read the configuration values in C could look like this:
#include <mruby.h> static mrb_value get_config_value(mrb_state *mrb, char *key) { return mrb_funcall(mrb, mrb_top_self(mrb), "get_config", 1, mrb_str_new_cstr(mrb, key)); } int main() { FILE *fp; if ((fp = fopen("./mruby.conf", "r")) == NULL) return 1; mrb_state* mrb = mrb_open(); mrb_load_file(mrb, fp); mrb_value listen_port = get_config_value(mrb, "Listen"); mrb_value document_root = get_config_value(mrb, "DocumentRoot"); mrb_value extend_status = get_config_value(mrb, "ExtendedStatus"); mrb_value user = get_config_value(mrb, "User"); mrb_value group = get_config_value(mrb, "Group"); mrb_close(mrb); return 0; }
To work on Ruby side with these values you can, add a new configuration value:
add_config "ExtendedStatus" => "On"
Delete configuration values:
del_config "ExtendedStatus"
Read out a configuration values:
get_config "ExtendedStatus"
Have a look at the source and the examples. The implementation is quite straight forward.