Added LmMessageNode::value and value= to ruby bindings
authorMikael Hallendal <micke@imendio.com>
Thu, 10 Apr 2008 13:12:19 +0200
changeset 371 690e27904abd
parent 370 a7181af7497c
child 372 426746d92e77
Added LmMessageNode::value and value= to ruby bindings
bindings/ruby/rblm-message-node.c
bindings/ruby/rblm.c
bindings/ruby/rblm.h
--- a/bindings/ruby/rblm-message-node.c	Thu Apr 10 10:35:20 2008 +0200
+++ b/bindings/ruby/rblm-message-node.c	Thu Apr 10 13:12:19 2008 +0200
@@ -2,6 +2,20 @@
 
 VALUE lm_cMessageNode;
 
+static LmMessageNode *
+rb_lm_message_node_from_ruby_object (VALUE obj)
+{
+	LmMessageNode *node;
+
+	if (!rb_lm__is_kind_of (obj, lm_cMessageNode)) {
+		rb_raise (rb_eTypeError, "not a LmMessageNode");
+	}
+
+	Data_Get_Struct (obj, LmMessageNode, node);
+
+	return node;
+}
+
 void
 msg_node_free (LmMessageNode *node)
 {
@@ -14,6 +28,34 @@
 	return Data_Wrap_Struct (klass, NULL, msg_node_free, NULL);
 }
 
+VALUE
+msg_node_get_value (VALUE self)
+{
+	LmMessageNode *node = rb_lm_message_node_from_ruby_object (self);
+
+	if (lm_message_node_get_value (node)) {
+		return rb_str_new2 (lm_message_node_get_value (node));
+	} 
+
+	return Qnil;
+}
+
+VALUE
+msg_node_set_value (VALUE self, VALUE value)
+{
+	LmMessageNode *node = rb_lm_message_node_from_ruby_object (self);	
+	char          *value_str = NULL;
+	
+	if (!rb_respond_to (value, rb_intern ("to_s"))) {
+		rb_raise (rb_eArgError, "value should respond to to_s");
+	} else {
+		VALUE str_val = rb_funcall (value, rb_intern ("to_s"), 0);
+		value_str = StringValuePtr (str_val);
+	}
+
+	lm_message_node_set_value (node, value_str);
+}
+
 extern void 
 Init_lm_message_node (VALUE lm_mLM)
 {
@@ -21,4 +63,8 @@
 						 rb_cObject);
 
 	rb_define_alloc_func (lm_cMessageNode, msg_node_allocate);
+
+	rb_define_method (lm_cMessageNode, "value", msg_node_get_value, 0);
+	rb_define_method (lm_cMessageNode, "value=", msg_node_set_value, 1);
+
 }	
--- a/bindings/ruby/rblm.c	Thu Apr 10 10:35:20 2008 +0200
+++ b/bindings/ruby/rblm.c	Thu Apr 10 13:12:19 2008 +0200
@@ -9,6 +9,7 @@
 
 	Init_lm_connection (lm_mLM);
 	Init_lm_message (lm_mLM);
+	Init_lm_message_node (lm_mLM);
 	Init_lm_constants (lm_mLM);
 }
 
--- a/bindings/ruby/rblm.h	Thu Apr 10 10:35:20 2008 +0200
+++ b/bindings/ruby/rblm.h	Thu Apr 10 13:12:19 2008 +0200
@@ -8,6 +8,7 @@
 extern void Init_loudmouth          (void);
 extern void Init_lm_connection      (VALUE lm_mLM);
 extern void Init_lm_message         (VALUE lm_mLM);
+extern void Init_lm_message_node    (VALUE lm_mLM);
 extern void Init_lm_constants       (VALUE lm_mLM);
 
 #endif /* __RLM_H__ */