Macro rutie::class[][src]

macro_rules! class {
    ($class: ident) => { ... };
}

Creates Rust structure for new Ruby class

This macro does not define an actual Ruby class. It only creates structs for using the class in Rust. To define the class in Ruby, use Class structure.

Examples

#[macro_use]
extern crate rutie;

use rutie::{Class, RString, Object, VM};

class!(Greeter);

methods!(
    Greeter,
    rtself,

    fn anonymous_greeting() -> RString {
        RString::new_utf8("Hello stranger!")
    }

    fn friendly_greeting(name: RString) -> RString {
        let name = name
            .map(|name| name.to_string())
            .unwrap_or("Anonymous".to_string());

        let greeting = format!("Hello dear {}!", name);

        RString::new_utf8(&greeting)
    }
);

fn main() {
    Class::new("Greeter", None).define(|klass| {
        klass.def("anonymous_greeting", anonymous_greeting);
        klass.def("friendly_greeting", friendly_greeting);
    });
}

Ruby:

class Greeter
  def anonymous_greeting
    'Hello stranger!'
  end

  def friendly_greeting(name)
    default_name = 'Anonymous'

    name = defaut_name unless name.is_a?(String)

    "Hello dear #{name}"
  end
end