# add some search paths to ironruby # this first one adds the path with the assemblies # this enables us not to have to specify a path to the assemblies everywhere. $: << File.dirname(__FILE__) + "/bin" # adds the path to the caricature library. $: << File.dirname(__FILE__) + "/../lib" # load the caricature library require "caricature" require 'rubygems' # load the bacon library require 'bacon' # load the assembly with the C# code require 'ClrModels.dll' if defined? IRONRUBY_VERSION class Soldier def initialize @life = 10 end def name "Tommy Boy" end def to_s "I'm a soldier" end def attack(target, weapon) weapon.attack(target) end def is_killed_by?(weapon) weapon.damage > 3 end def survive_attack_with(weapon) @life - weapon.damage end end class SoldierWithClassMembers def initialize @life = 10 end def name "Tommy Boy" end def to_s "I'm a soldier" end def attack(target, weapon) weapon.attack(target) end def is_killed_by?(weapon) weapon.damage > 3 end def survive_attack_with(weapon) @life - weapon.damage end def self.class_name "DaggerWithClassMembers" end end class Dagger def damage 2 end def attack(target) target.survive_attack_with self end end class DaggerWithClassMembers def damage 2 end def attack(target) target.survive_attack_with self end def self.class_name "DaggerWithClassMembers" end end class WithClassMethods def hello_world "Hello World!" end def self.good_bye_world "Goodbye world!" end end class Sheath attr_reader :dagger def initialize(dagger) @dagger = dagger end def insert(dagger) raise "There is already a dagger in here" if @dagger @dagger = dagger end def draw raise "Dagger is nowhere to be found" unless @dagger d = @dagger @dagger = nil d end end if defined? IRONRUBY_VERSION module Caricature module InterfaceIncludingModule include ClrModels::IWarrior end module PureRubyModule end module RubyModuleIncludingModule include PureRubyModule end module InterfaceUpTheWazoo include InterfaceIncludingModule end class InterfaceIncludingClass include ClrModels::IWarrior end class SubClassingClrClass < ClrModels::Ninja end class InterfaceUpTheWazooClass include InterfaceUpTheWazoo end class SubclassingRubyClass < Soldier end class ModuleIncludingClass include RubyModuleIncludingModule end end end