Forum: Ruby invoke base class nested method

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.
F09f7d15d9fefc2cf68c4057694c8930?d=identicon&s=25 aidy (Guest)
on 2007-04-03 21:41
(Received via mailing list)
Hi,

I have an ObjectMap class that contains other classes. I inherit from
the base class.Could someone tell me how I can run a nested class
method from the inherited class?

Here is the code:


<snip>
class ObjectMap
   @@ie = Watir::IE.new
   #each page has a class where objects of that class are mapped
   class Login
     def username;@@ie.text_field(:name, 'user_name');end
     def password;@@ie.text_field(:name, 'password');end
     def remember_me;@@ie.checkbox(:name, 'remember_me');end
     def sign_in;@@ie.button(:value, 'Sign in');end
   end
   class DashBoard
       #more methods
   end
end

class A_Test < ObjectMap

    @@ie.goto('www.updatelog.com')
    @@ie.maximize
    #how do I run the username method?

end
<snip>

Need to, for example, run the username method?

Thanks

aidy
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2007-04-03 22:02
(Received via mailing list)
On Wed, 4 Apr 2007, aidy wrote:

> class ObjectMap
>   end
>
> Need to, for example, run the username method?
>
> Thanks
>
> aidy

many ways.  make it easy on yourself though

class ObjectMap
   def self.login() Login end
end

class A_Test < ObjectMap

    @@ie.goto('www.updatelog.com')
    @@ie.maximize
    #how do I run the username method?

    login.username

end


-a
F09f7d15d9fefc2cf68c4057694c8930?d=identicon&s=25 aidy (Guest)
on 2007-04-03 22:46
(Received via mailing list)
Hi,

Could I do something like this?

$ie = Watir::IE.new
$ie.goto('www.updatelog.com')
class ObjectMap
   def self.login()
    username = $ie.text_field(:name, 'user_name')
  end
end


class A_Test < ObjectMap

    login.username.set('aidy')
end

I am not so sure why you have used a self prefix before the login
method.

Thanks

Aidy
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2007-04-03 22:51
(Received via mailing list)
On Wed, 4 Apr 2007, aidy wrote:

> end
if you're a fan of debugging code with lots of global variables - sure.

> class A_Test < ObjectMap
>
>    login.username.set('aidy')
> end
>
> I am not so sure why you have used a self prefix before the login
> method.

it's a class method.

-a
F09f7d15d9fefc2cf68c4057694c8930?d=identicon&s=25 aidy (Guest)
on 2007-04-03 23:21
(Received via mailing list)
Thanks for your advice.

What I mean to ask is that once I have entered the class method
(self.login()) can I
then assign

username=ie.text_field(:name, 'user_name')


and invoke this assignment in the sub class

class A_Test < ObjectMap

    login.username


end

?

Or something like that

cheers

aidy
8f6f95c4bd64d5f10dfddfdcd03c19d6?d=identicon&s=25 Rick Denatale (rdenatale)
on 2007-04-06 15:15
(Received via mailing list)
On 4/3/07, aidy <aidy.rutter@gmail.com> wrote:
> class ObjectMap
>    end
>
> Need to, for example, run the username method?

Same way you'd do it from the superclass:

class A_Test < ObjectMap
     Login.new.username
end


Note that username is not a method of ObjectMap but of the nested
class ObjectMap::Login

You could also do this from outside ObjectMap and it's subclasses like
so:

ObjectMap::Login.new.username

If you made login and it's brethren class methods:

class Login
       def self.username;@@ie.text_field(:name, 'user_name');end
       def self password;@@ie.text_field(:name, 'password');end
       def self.remember_me;@@ie.checkbox(:name, 'remember_me');end
       def sign_in;@@ie.button(:value, 'Sign in');end
end

Then the above would be

class A_Test < ObjectMap
     Login..username
end

or from outside:

   ObjectMap::Login.username

Lacking more information about what you are really trying to
accomplish, your code looks a little odd to my eye.

ObjectMap seems like it really should be a module rather than a class
since from what you've shown it's really acting as what looks like a
name space.

You're using class variables which always raises a yellow flag in my
mind.

Of course some of this could be Watir practice and I've never used
Watir.

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/
This topic is locked and can not be replied to.