Method_missing

Hi, I have extended BDI::Row as below in order to use dot notation to
retrieve columns values from result rows. It seems however that some methods
like inspect for example now get caught as missing by this hook and are not
found and executed as expected. Could anyone shed any light on this
behaviour please?

class DBI::Row
def method_missing(name, *args)
puts "method missing #{name}"
result = by_field(name)
end
end

simon

Are you talking about Ruby/DBI?

http://ruby-dbi.rubyforge.org/git?p=ruby-dbi.git;a=blob;f=lib/dbi/row.rb;h=dcf40396ee59c6cf36ab9fec937f38f012570e4d;hb=HEAD

DBI::Row uses DelegateClass to delegate some of the behaviour to an
Array. Right now I'm not really sure how DelegateClass works
underneath, but it seems your overriding of method_missing is messing
with it.

Sorry, I don't have a solution right now.

Jesus.

···

On Wed, Sep 29, 2010 at 1:22 PM, Simon Corcoran <seye69@gmail.com> wrote:

Hi, I have extended BDI::Row as below in order to use dot notation to
retrieve columns values from result rows. It seems however that some methods
like inspect for example now get caught as missing by this hook and are not
found and executed as expected. Could anyone shed any light on this
behaviour please?

class DBI::Row
def method_missing(name, *args)
puts "method missing #{name}"
result = by_field(name)
end
end

simon

ahh interesting - i'll look into that, thanks - my first attempt
at meta-programming so still a lot to learn

···

2010/9/29 Jesús Gabriel y Galán <jgabrielygalan@gmail.com>

On Wed, Sep 29, 2010 at 1:22 PM, Simon Corcoran <seye69@gmail.com> wrote:
> Hi, I have extended BDI::Row as below in order to use dot notation to
> retrieve columns values from result rows. It seems however that some
methods
> like inspect for example now get caught as missing by this hook and are
not
> found and executed as expected. Could anyone shed any light on this
> behaviour please?
>
> class DBI::Row
> def method_missing(name, *args)
> puts "method missing #{name}"
> result = by_field(name)
> end
> end
>
> simon
>

Are you talking about Ruby/DBI?

http://ruby-dbi.rubyforge.org/git?p=ruby-dbi.git;a=blob;f=lib/dbi/row.rb;h=dcf40396ee59c6cf36ab9fec937f38f012570e4d;hb=HEAD

DBI::Row uses DelegateClass to delegate some of the behaviour to an
Array. Right now I'm not really sure how DelegateClass works
underneath, but it seems your overriding of method_missing is messing
with it.

Sorry, I don't have a solution right now.

Jesus.

Thanks Jesús, the following seems to work

class DBI::Row
def method_missing(name, *args, &block)
return __getobj__.send(name, *args, &block) if __getobj__.respond_to?(name)
result = by_field(name)
end
end

···

On Wed, Sep 29, 2010 at 12:38 PM, Simon Corcoran <seye69@gmail.com> wrote:

ahh interesting - i'll look into that, thanks - my first attempt
at meta-programming so still a lot to learn

2010/9/29 Jesús Gabriel y Galán <jgabrielygalan@gmail.com>

> On Wed, Sep 29, 2010 at 1:22 PM, Simon Corcoran <seye69@gmail.com> > wrote:
> > Hi, I have extended BDI::Row as below in order to use dot notation to
> > retrieve columns values from result rows. It seems however that some
> methods
> > like inspect for example now get caught as missing by this hook and are
> not
> > found and executed as expected. Could anyone shed any light on this
> > behaviour please?
> >
> > class DBI::Row
> > def method_missing(name, *args)
> > puts "method missing #{name}"
> > result = by_field(name)
> > end
> > end
> >
> > simon
> >
>
> Are you talking about Ruby/DBI?
>
>
>
http://ruby-dbi.rubyforge.org/git?p=ruby-dbi.git;a=blob;f=lib/dbi/row.rb;h=dcf40396ee59c6cf36ab9fec937f38f012570e4d;hb=HEAD
>
> DBI::Row uses DelegateClass to delegate some of the behaviour to an
> Array. Right now I'm not really sure how DelegateClass works
> underneath, but it seems your overriding of method_missing is messing
> with it.
>
> Sorry, I don't have a solution right now.
>
> Jesus.
>
>