Forum: Ruby on Rails Can you set Base class attributes from a subclass?

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.
Clem R. (Guest)
on 2009-06-04 06:39
Hello,
   I'm overriding the initialize method of a base class and I'm trying
to set a Base class variable in the overridden method and have it
register in the Base class (hope that makes sense).

Here's my code:

[code]

in Rails::Generator::Base:


class Base
  include Options
  class_inheritable_accessor :spec

  def initialize(runtime_args, runtime_options = {})
    @args = runtime_args
    parse!(@args, runtime_options)

    # Derive source and destination paths.
    @source_root = options[:source] || File.join(spec.path, 'templates')
  end
end

class MediaModuleGenerator < Rails::Generator::Base
  def initialize(runtime_args, runtime_options = {})
     self.spec.path = File.dirname(__FILE__) +
'/generators/media_module'
     super
  end
end

[/code]

I should mention that spec is a module w/in the Rails framework IE:
Rails::Generator::Spec

When I run my generator, I get this error:

You have a nil object when you didn't expect it! (NoMethodError) The
error occurred while evaluating nil.path

So when I set the self.spec.path var to  File.dirname(__FILE__) +
'/generators/media_module', it's not registering in the base class.

Any ideas?
Conrad T. (Guest)
on 2009-06-04 06:59
(Received via mailing list)
On Wed, Jun 3, 2009 at 7:39 PM, Clem R.
<removed_email_address@domain.invalid>wrote:

> in Rails::Generator::Base:
>    # Derive source and destination paths.
> end
>

If you're overriding the initialize method, then you should be
calling super before any other expression.  This isn't necessary
in regards to subclasses who parent is Object.

-Conrad
Conrad T. (Guest)
on 2009-06-04 07:03
(Received via mailing list)
On Wed, Jun 3, 2009 at 7:58 PM, Conrad T. <removed_email_address@domain.invalid>
wrote:

>>
>>    @args = runtime_args
>> '/generators/media_module'
>>     super
>>  end
>> end
>>
>
> If you're overriding the initialize method, then you should be
> calling super before any other expression.  This isn't necessary
> in regards to subclasses who parent is Object.
>

You should have an expression like this in your subclass:

super( runtime_args, runtime_options )

If you need further details, please consult the PixAxe book.

-Conrad
Clem R. (Guest)
on 2009-06-04 08:08
I tried adding

super( runtime_args, runtime_options )

and still got this error:

rails_generator/base.rb:107:in `initialize': You have a nil object when
you didn't expect it!

my overidden initialize method now looks like this:


def initialize(runtime_args, runtime_options = {})
  super( runtime_args, runtime_options )
end



Conrad T. wrote:
> On Wed, Jun 3, 2009 at 7:58 PM, Conrad T. <removed_email_address@domain.invalid>
> wrote:
>
>>>
>>>    @args = runtime_args
>>> '/generators/media_module'
>>>     super
>>>  end
>>> end
>>>
>>
>> If you're overriding the initialize method, then you should be
>> calling super before any other expression.  This isn't necessary
>> in regards to subclasses who parent is Object.
>>
>
> You should have an expression like this in your subclass:
>
> super( runtime_args, runtime_options )
>
> If you need further details, please consult the PixAxe book.
>
> -Conrad
Conrad T. (Guest)
on 2009-06-04 08:45
(Received via mailing list)
On Wed, Jun 3, 2009 at 9:08 PM, Clem R.
<removed_email_address@domain.invalid>wrote:

> my overidden initialize method now looks like this:
> > wrote:
> >> calling super before any other expression.  This isn't necessary
>
What's on line 107 that's generating the error message?

-Conrad
Clem R. (Guest)
on 2009-06-04 09:38
this is line 107:

@source_root = options[:source] || File.join(spec.path, 'templates')





Conrad T. wrote:
> On Wed, Jun 3, 2009 at 9:08 PM, Clem R.
> <removed_email_address@domain.invalid>wrote:
>
>> my overidden initialize method now looks like this:
>> > wrote:
>> >> calling super before any other expression.  This isn't necessary
>>
> What's on line 107 that's generating the error message?
>
> -Conrad
Conrad T. (Guest)
on 2009-06-04 10:24
(Received via mailing list)
What's the value of spec.path?

On Wed, Jun 3, 2009 at 10:38 PM, Clem R.
<removed_email_address@domain.invalid
Clem R. (Guest)
on 2009-06-04 15:54
spec.path is nil.path - that's the whole problem - I'm trying to set the
spec.path = File.dirname(__FILE__) + '/generators/media_module' in my
overidden initialize method and I can't seem to send that value to the
Base class.





 Conrad T. wrote:
> What's the value of spec.path?
>
> On Wed, Jun 3, 2009 at 10:38 PM, Clem R.
> <removed_email_address@domain.invalid
This topic is locked and can not be replied to.