ext/capng/capability.c in capng_c-0.2.0 vs ext/capng/capability.c in capng_c-0.2.1
- old
+ new
@@ -115,19 +115,41 @@
rb_raise(rb_eArgError, "Expected a String or a Symbol instance");
}
return INT2NUM(capability);
}
+/*
+ * Obtain capability code and name pairs with enumerable.
+ *
+ * @yield [Integer, String]
+ * @return [nil]
+ *
+ */
+static VALUE
+rb_capng_capability_each(VALUE self)
+{
+ RETURN_ENUMERATOR(self, 0, 0);
+
+ for (int i = 0; capabilityInfoTable[i].name != NULL; i++) {
+ rb_yield_values(2,
+ INT2NUM(capabilityInfoTable[i].code),
+ rb_str_new2(capabilityInfoTable[i].name));
+ }
+
+ return Qnil;
+}
+
void
Init_capng_capability(VALUE rb_cCapNG)
{
VALUE rb_cCapability = rb_define_class_under(rb_cCapNG, "Capability", rb_cObject);
rb_define_alloc_func(rb_cCapability, rb_capng_capability_alloc);
rb_define_method(rb_cCapability, "initialize", rb_capng_capability_initialize, 0);
rb_define_method(rb_cCapability, "to_name", rb_capng_capability_to_name, 1);
rb_define_method(rb_cCapability, "from_name", rb_capng_capability_from_name, 1);
+ rb_define_method(rb_cCapability, "each", rb_capng_capability_each, 0);
// Capability constants.
/* Make arbitrary changes to file UIDs and GIDs (see chown(2)). */
rb_define_const(rb_cCapability, "CHOWN", INT2NUM(CAP_CHOWN));