Macro rutie::module[][src]

macro_rules! module {
    ($module : ident) => { ... };
}
Expand description

Creates Rust structure for new Ruby module

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

Examples

#[macro_use]
extern crate rutie;

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

module!(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() {
    Module::new("Greeter").define(|klass| {
        klass.def("anonymous_greeting", anonymous_greeting);
        klass.def("friendly_greeting", friendly_greeting);
    });
}

Ruby:

module 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