# Creating ruby-serialport singleton object breaks

**URL:** <https://www.ruby-forum.com/t/creating-ruby-serialport-singleton-object-breaks/69474>\
**Category:** Ruby\
**Created:** [September 21, 2006, 8:30am UTC](https://www.ruby-forum.com/t/creating-ruby-serialport-singleton-object-breaks/69474 "2006-09-21T08:30:55Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![adambeazley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/5f9b8f/32.png) [@adambeazley](https://www.ruby-forum.com/u/adambeazley)\
**Post date:** [September 21, 2006, 8:30am UTC](https://www.ruby-forum.com/t/creating-ruby-serialport-singleton-object-breaks/69474/1 "2006-09-21T08:30:55Z")

</div>

I’m trying to create a singleton serial port class with the following  
code:

require ‘serialport’ # version 0.6  
require ‘singleton’

class SerialConnection \< SerialPort  
include Singleton

def initialize  
sp = super("/dev/tty.KeySerial1", 9600, 8, 1, 0)  
end  
end

But when I try to create the instance it breaks:

irb(main):009:0\> sp = SerialConnection.instance  
ArgumentError: wrong number of arguments (0 for 1)  
from (irb):8:in `new' from (irb):8:in`new’  
from /usr/local/lib/ruby/1.8/singleton.rb:95:in `instance’  
from (irb):9

But this works fine:

irb(main):010:0\> sp = SerialPort.new("/dev/tty.KeySerial1", 9600, 8, 1,  
0)  
=\> #SerialPort:0x3251fc

Any ideas? This used to work, but now it doesn’t, and I can’t for the  
life of me figure out what changed.

Thanks!

/afb

---

<div class="post-metadata">

**Author:** ![adambeazley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/5f9b8f/32.png) [@adambeazley](https://www.ruby-forum.com/u/adambeazley)\
**Post date:** [September 21, 2006, 9:09am UTC](https://www.ruby-forum.com/t/creating-ruby-serialport-singleton-object-breaks/69474/2 "2006-09-21T09:09:54Z")

</div>

Also, my ruby version is:

ruby 1.8.4 (2005-12-24) [i686-darwin8.7.3]

---

<div class="post-metadata">

**Author:** ![adambeazley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/5f9b8f/32.png) [@adambeazley](https://www.ruby-forum.com/u/adambeazley)\
**Post date:** [September 21, 2006, 9:57am UTC](https://www.ruby-forum.com/t/creating-ruby-serialport-singleton-object-breaks/69474/3 "2006-09-21T09:57:00Z")

</div>

Adam B. schrieb:

> ```
> sp = super("/dev/tty.KeySerial1", 9600, 8, 1, 0)
> from (irb):9
> 
> ```

Adam, the problem is that SerialPort.new requires at least one argument,  
but Singleton.instance calls new without any arguments. You supply the  
missing arguments in SerialConnection#initialize, but this is too late,  
because SerialPort.new is called before SerialConnection#initialize.  
Change your code to

class SerialConnection \< SerialPort  
def self.new  
super("/dev/tty.KeySerial1", 9600, 8, 1, 0)  
end

```
 include Singleton

```

end

and it should work. Note: in order to avoid a warning about redefining  
SerialConnection.new, you have to include Singleton _after_ defining the  
method.

Regards,  
Pit

---

<div class="post-metadata">

**Author:** ![adambeazley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/5f9b8f/32.png) [@adambeazley](https://www.ruby-forum.com/u/adambeazley)\
**Post date:** [September 21, 2006, 4:37pm UTC](https://www.ruby-forum.com/t/creating-ruby-serialport-singleton-object-breaks/69474/4 "2006-09-21T16:37:49Z")

</div>

Pit C. wrote:

> class SerialConnection \< SerialPort  
> def self.new  
> super("/dev/tty.KeySerial1", 9600, 8, 1, 0)  
> end
> 
> ```
> include Singleton
> 
> ```
> 
> end

Pit: Thanks so much. It worked perfectly.

/afb
