Convinius
Convenience library for Rubinius-only projects.
Use require 'convinius'
to get all features.
Installation:
gem install convinius
Running tests:
gem install rspec
rspec spec
Subclassing from arbitrary Objects
in: convinius/to_class
If you subclass from an object, first call to_class
on that object and
subclass the result instead:
RandomClass = Object.new
def RandomClass.to_class
[Hash, Object, Set].at rand(3)
end
class Foo < RandomClass
puts superclass
end
A more realistic example:
module Awesome
def self.to_class
Class.new { include Awesome }
end
end
class Foo < Awesome
end
class Bar < Something
include Awesome
end
Convenience for Rubinius::Generator
in: convinius/generator
Method for generating tuples (like make_array
):
class MyNode < Rubinius::AST::Node
def bytecode(g)
(1..5).each { |i| g.push i }
g.make_tuple 5
end
end
Byte Code Generator DSL
in: convinius/asm
Example:
include Convinius::ASM
compiled = asm do
push 1
push 2
send :+, 1
end
p compiled.call
If block takes an argument, it won't use instance_eval
:
Convinius::ASM.new do |g|
g.push 1
g.push 2
g.send :+, 1
end