Forum: Ruby Initialization using the Singleton design pattern

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9d4ec8946f933a18a1d15b094cc3c425?d=identicon&s=25 Jonathan Leighton (Guest)
on 2006-01-05 19:57
(Received via mailing list)
Hi,

I have a singleton class, as in one that does "include Singleton". I
want to run a few methods when the instance is created. Usually one
would do that in initialize(), but obviously I can't do that here. This
is what I've thought of but it raises an error which says "super: no
superclass method `instance'"

class SingletonClass < ParentClass
  include Singleton

  def self.instance
    super
    # initialization code here
  end
end

What am I doing wrong?

Cheers
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2006-01-07 13:37
(Received via mailing list)
On Jan 5, 2006, at 12:19 PM, Jonathan Leighton wrote:

> Hi,
>
> I have a singleton class, as in one that does "include Singleton". I
> want to run a few methods when the instance is created. Usually one
> would do that in initialize(), but obviously I can't do that here.

Why not?  The object is still constructed:

 >> require "singleton"
=> true
 >> class JustOne
 >>   def initialize
 >>     puts "initialize() called"
 >>   end
 >>   include Singleton
 >> end
=> JustOne
 >> JustOne.instance
initialize() called
=> #<JustOne:0x32321c>
 >> JustOne.instance
=> #<JustOne:0x32321c>

James Edward Gray II
31ab75f7ddda241830659630746cdd3a?d=identicon&s=25 Austin Ziegler (Guest)
on 2006-01-07 13:37
(Received via mailing list)
On 05/01/06, Jonathan Leighton <lists@turnipspatch.com> wrote:
> I have a singleton class, as in one that does "include Singleton". I
> want to run a few methods when the instance is created. Usually one
> would do that in initialize(), but obviously I can't do that here. This
> is what I've thought of but it raises an error which says "super: no
> superclass method `instance'"

Right. Just use #initialize as normal, though.

-austin
9d4ec8946f933a18a1d15b094cc3c425?d=identicon&s=25 Jonathan Leighton (Guest)
on 2006-01-07 13:37
(Received via mailing list)
On Fri, 2006-01-06 at 03:47 +0900, James Edward Gray II wrote:
>  >> require "singleton"
> => #<JustOne:0x32321c>
>  >> JustOne.instance
> => #<JustOne:0x32321c>

Okay thanks, I've got it sorted now. I had tried using initialize()
previously but I guess I got put off as what I was doing raised an
exception -- so I assumed you weren't supposed to use initialize()
without thinking about it any harder.

Cheers
This topic is locked and can not be replied to.