# Can't include System

**URL:** <https://www.ruby-forum.com/t/cant-include-system/179261>\
**Category:** IronRuby\
**Created:** [November 20, 2009, 4:39pm UTC](https://www.ruby-forum.com/t/cant-include-system/179261 "2009-11-20T16:39:43Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Patrick\_Brown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e9a140/32.png) [@Patrick\_Brown](https://www.ruby-forum.com/u/Patrick_Brown)\
**Post date:** [November 20, 2009, 4:39pm UTC](https://www.ruby-forum.com/t/cant-include-system/179261/1 "2009-11-20T16:39:43Z")

</div>

Hello

Can anyone see why I can’t include System in this little script? If  
I do  
I get an exception ‘Converter is not a class (TypeError)’. If I skip  
the  
include and fully qualify the classes in that namespace this works  
perfectly.

Thanks for your time and ideas,  
Patrick

require ‘System, Version=2.0.0.0, Culture=neutral,  
PublicKeyToken=b77a5c561934e089’  
require ‘Microsoft.Office.Interop.Word, Version=12.0.0.0,  
Culture=neutral,  
PublicKeyToken=71e9bce111e9429c’

include System  
include Microsoft:🏢:Interop::Word

class Converter  
def Convert(inputDirectories, outputDirectory)  
word = ApplicationClass.new

inputDirectories.each {|inputDirectory|  
Directory.GetFiles(inputDirectory, ‘\*.doc’).each { |file|  
documentPath = System::IO::Path.Combine(outputDirectory,  
Path.GetFileNameWithoutExtension(file) + “.xps”)

```
word.Documents.Open(file)
word.ActiveDocument.SaveAs(documentPath, WdSaveFormat.wdFormatXPS)
word.ActiveDocument.Close()

```

}

word.Quit()  
}  
end  
end

---

<div class="post-metadata">

**Author:** ![Patrick\_Brown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e9a140/32.png) [@Patrick\_Brown](https://www.ruby-forum.com/u/Patrick_Brown)\
**Post date:** [November 20, 2009, 4:52pm UTC](https://www.ruby-forum.com/t/cant-include-system/179261/2 "2009-11-20T16:52:35Z")

</div>

Converter is a static class and those are mapped to modules

module Converter  
def self.convert(inputDirectories, outputDirectory)  
…  
end  
end

puts System::Converter.class #=\> Module

* * *

Met vriendelijke groeten - Best regards - Salutations  
Ivan Porto C.  
Blog: [http://flanders.co.nz](http://flanders.co.nz)  
Google Wave: removed\_email\_address@domain.invalid  
Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim)  
Author of IronRuby in Action ([http://manning.com/carrero](http://manning.com/carrero))

---

<div class="post-metadata">

**Author:** ![Patrick\_Brown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e9a140/32.png) [@Patrick\_Brown](https://www.ruby-forum.com/u/Patrick_Brown)\
**Post date:** [November 20, 2009, 4:57pm UTC](https://www.ruby-forum.com/t/cant-include-system/179261/3 "2009-11-20T16:57:16Z")

</div>

Converter is a \*delegate \*type in the System namespace (it comes from  
mscorlib.dll, not System.dll). You should probably put your class in a  
custom namespace like so:

module MyModule  
class Converter  
…  
end  
end

---

<div class="post-metadata">

**Author:** ![Patrick\_Brown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e9a140/32.png) [@Patrick\_Brown](https://www.ruby-forum.com/u/Patrick_Brown)\
**Post date:** [November 20, 2009, 5:23pm UTC](https://www.ruby-forum.com/t/cant-include-system/179261/4 "2009-11-20T17:23:37Z")

</div>

Hi

It is funny how obvious some of these things turn out to be.

Thanks,  
Patrick

---

<div class="post-metadata">

**Author:** ![Patrick\_Brown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e9a140/32.png) [@Patrick\_Brown](https://www.ruby-forum.com/u/Patrick_Brown)\
**Post date:** [November 20, 2009, 7:57pm UTC](https://www.ruby-forum.com/t/cant-include-system/179261/5 "2009-11-20T19:57:33Z")

</div>

Actually, System::Converter is a generic type definition for a delegate  
class. Generic type definitions are mapped to Ruby modules. These  
modules are included in all instantiations of the generic type.

> > > load\_assembly ‘System’  
> > > =\> true  
> > > System::Converter  
> > > =\> System::Converter[TInput, TOutput]  
> > > module System::Converter  
> > > … def foo  
> > > … puts ‘foo’  
> > > … end  
> > > … end  
> > > =\> nil  
> > > c = System::Converter[Fixnum, String].new { |i| i.to\_s }  
> > > =\> System.Converter`2[System.Int32,IronRuby.Builtins.MutableString]  
> > > c.foo  
> > > Foo  
> > > System::Converter[Array, Hash].ancestors  
> > > =\> [System::Converter[Array, Hash], System::Converter[TInput, TOutput],  
> > > System::MulticastDelegate, System::Delegate, System::ICloneable,  
> > > System::Runtime::Serialization::ISerializable, Object, Kernel]

Tomas

From: removed\_email\_address@domain.invalid  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Patrick Brown  
Sent: Friday, November 20, 2009 8:15 AM  
To: removed\_email\_address@domain.invalid  
Subject: Re: [Ironruby-core] can’t include System

Hi

It is funny how obvious some of these things turn out to be.

Thanks,  
Patrick  
On Fri, Nov 20, 2009 at 10:49 AM, Ivan Porto C.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
Converter is a static class and those are mapped to modules

module Converter  
def self.convert(inputDirectories, outputDirectory)  
…  
end  
end

puts System::Converter.class #=\> Module

* * *

Met vriendelijke groeten - Best regards - Salutations  
Ivan Porto C.  
Blog: [http://flanders.co.nz](http://flanders.co.nz)[http://flanders.co.nz/](http://flanders.co.nz/)  
Google Wave:  
removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim)  
Author of IronRuby in Action ([http://manning.com/carrero](http://manning.com/carrero))

On Fri, Nov 20, 2009 at 4:39 PM, Patrick Brown  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
Hello

Can anyone see why I can’t include System in this little script? If  
I do I get an exception ‘Converter is not a class (TypeError)’. If I  
skip the include and fully qualify the classes in that namespace this  
works perfectly.

Thanks for your time and ideas,  
Patrick

require ‘System, Version=2.0.0.0, Culture=neutral,  
PublicKeyToken=b77a5c561934e089’  
require ‘Microsoft.Office.Interop.Word, Version=12.0.0.0,  
Culture=neutral, PublicKeyToken=71e9bce111e9429c’

include System  
include Microsoft:🏢:Interop::Word

class Converter  
def Convert(inputDirectories, outputDirectory)  
word = ApplicationClass.new

inputDirectories.each {|inputDirectory|  
Directory.GetFiles(inputDirectory, ‘\*.doc’).each { |file|  
documentPath = System::IO::Path.Combine(outputDirectory,  
Path.GetFileNameWithoutExtension(file) + “.xps”)

```
word.Documents.Open(file)
word.ActiveDocument.SaveAs(documentPath, WdSaveFormat.wdFormatXPS)
word.ActiveDocument.Close()

```

}

word.Quit()  
}  
end  
end

* * *

Ironruby-core mailing list  
removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[http://rubyforge.org/mailman/listinfo/ironruby-core](http://rubyforge.org/mailman/listinfo/ironruby-core)
