Class: WRuby::ModuleDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/wruby.old/lib/module_definition.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ ModuleDefinition

Returns a new instance of ModuleDefinition.



6
7
8
9
10
11
# File 'lib/wruby.old/lib/module_definition.rb', line 6

def initialize(data) 
    @name = data.require("name", "Module definition requires a name")
    @methods = data["methods"]
    @methods&.map!{|e| MethodDefinition.new(e)}
    @free_method = data["free"]
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



5
6
7
# File 'lib/wruby.old/lib/module_definition.rb', line 5

def name
  @name
end

Instance Method Details

#qualified_nameObject



19
20
21
# File 'lib/wruby.old/lib/module_definition.rb', line 19

def qualified_name
    return "m#{@name}"
end

#render_definitions(module_name) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/wruby.old/lib/module_definition.rb', line 23

def render_definitions(module_name)
    module_def = "VALUE #{qualified_name} = rb_define_module"
    module_def += module_name.nil? ? "(" : "_under(#{module_name}, "
    module_def += "\"#{@name}\");\n"

    definitions = @methods.map do |m|
        rb_method = case m.method_type 
        when "singleton"
            "rb_define_singleton_method"
        else
            "rb_define_method"
        end
        rb_method += "(#{qualified_name}, \"#{m.name}\", #{m.qualified_name(qualified_name)}, #{m.param_count});"
        if m.aliased? && m.method_type != "singleton"
            rb_method += "\nrb_define_alias(#{qualified_name}, \"#{m.alias}\", \"#{m.name}\""
        end

        rb_method;
    end.join("\n")

    module_def + definitions
end

#render_methodsObject



13
14
15
16
17
# File 'lib/wruby.old/lib/module_definition.rb', line 13

def render_methods
    @methods.map do |m|
        m.render_signature(qualified_name)
    end.join("\n\n")
end