[#70464] ljust, rjust... — "Chris Pine" <nemo@...>

Just thought I would run these ideas by everyone:

11 messages 2003/05/01

[#70502] temporary redirection of stdout — Andrew Walrond <andrew@...>

I'm new to ruby, so forgive any obvious stupididity, but can anyone

20 messages 2003/05/02

[#70535] SWIG on Solaris problem — Jim Freeze <jim@...>

Hi folks.

14 messages 2003/05/02

[#70594] Why is PHP so popular? What can we learn from the PHP camp? — ptkwt@...1.aracnet.com (Phil Tomson)

....and what can we learn from PHP's rapid rise to success?

99 messages 2003/05/05
[#70641] Re: Why is PHP so popular? What can we learn from the PHP camp? — Andreas Schwarz <usenet@...> 2003/05/05

Aredridel wrote:

[#70652] A wishlist for a "Ruby Standard Library" — Aredridel <aredridel@...> 2003/05/05

A wishlsit for a "Ruby Standard Library":

[#70655] Re: A wishlist for a "Ruby Standard Library" — Brian Candler <B.Candler@...> 2003/05/05

On Tue, May 06, 2003 at 07:39:54AM +0900, Aredridel wrote:

[#70673] Re: A wishlist for a "Ruby Standard Library" — Mark Wilson <mwilson13@...> 2003/05/06

[snipped many wonderful things.]

[#70759] Testing for a class existence — "Gennady" <gfb@...>

Does anybody know an easy way to test for a class/module existence in =

15 messages 2003/05/06

[#70770] capture output — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

I have seen much talking about this topic, but no working code!

68 messages 2003/05/06
[#70929] Re: IO.pipe + thread = hangs (was: Re: capture output) — "Robert Klemme" <bob.news@...> 2003/05/08

[#71741] Named Pipes — Mark Firestone <nedry@...> 2003/05/19

What is the recommended procedure for using named pipes in Ruby. Does one

[#71745] Re: Named Pipes — Brian Candler <B.Candler@...> 2003/05/19

On Mon, May 19, 2003 at 06:33:17PM +0900, Mark Firestone wrote:

[#70842] Symbiosis offer: trade Ruby for German :-) — Mauricio Fern疣dez <batsman.geo@...>

17 messages 2003/05/07

[#70865] access a variables name? — "meinrad.recheis" <my.name.here@...>

is it possible to access the variable-name of an object?

14 messages 2003/05/07

[#70891] Syck 0.25 + YAML.rb -- Objects in plain-text — why the lucky stiff <ruby-talk@...>

..my faithful friends..

20 messages 2003/05/07

[#70919] petition for raa-install to be included in 1.8 — ptkwt@...1.aracnet.com (Phil Tomson)

Similar to the YamlInRuby petition which has now closed.

14 messages 2003/05/08
[#70920] Re: petition for raa-install to be included in 1.8 — Sam Roberts <sroberts@...> 2003/05/08

I just looked again, and remember why I don't know anything about

[#70921] Re: petition for raa-install to be included in 1.8 — why the lucky stiff <ruby-talk@...> 2003/05/08

You can find a tutorial on using raa-install (as well as its API) at:

[#70985] Can a global be a constant? — Jim Freeze <jim@...>

Hi

36 messages 2003/05/08
[#71001] Re: Can a global be a constant? — "Hal E. Fulton" <hal9000@...> 2003/05/08

----- Original Message -----

[#71003] Re: Can a global be a constant? — Jim Freeze <jim@...> 2003/05/08

On Friday, 9 May 2003 at 8:23:52 +0900, Hal E. Fulton wrote:

[#71007] Re: Can a global be a constant? — dblack@... 2003/05/08

Hi --

[#71036] Re: Regexp: why does (re)* return only last repetition? — "Robert Klemme" <bob.news@...>

21 messages 2003/05/09
[#71209] Re: Regexp: why does (re)* return only last repetition? — "Robert Klemme" <bob.news@...> 2003/05/12

[#71225] Re: Regexp: why does (re)* return only last repetition? — Austin Ziegler <austin@...> 2003/05/12

On Mon, 12 May 2003 17:39:19 +0900, Robert Klemme wrote:

[#71229] Re: Regexp: why does (re)* return only last repetition? — Brian Candler <B.Candler@...> 2003/05/12

On Mon, May 12, 2003 at 10:18:00PM +0900, Austin Ziegler wrote:

[#71266] Re: Regexp: why does (re)* return only last repetition? — Austin Ziegler <austin@...> 2003/05/12

On Mon, 12 May 2003 23:51:44 +0900, Brian Candler wrote:

[#71042] TCP Sockets — Dominik Werder <dwerder@...>

Hi there,

28 messages 2003/05/09
[#71089] Re: TCP Sockets — Tom Felker <tcfelker@...> 2003/05/09

On Fri, 2003-05-09 at 05:40, Dominik Werder wrote:

[#71543] Re: TCP Sockets — Dominik Werder <dwerder@...> 2003/05/16

>> How can I tell how many bytes can be read from an IO object without

[#71547] Re: TCP Sockets — Brian Candler <B.Candler@...> 2003/05/16

On Fri, May 16, 2003 at 05:14:17PM +0900, Dominik Werder wrote:

[#71550] Re: TCP Sockets — Dominik Werder <dwerder@...> 2003/05/16

my problem is not the http protocol itself (not at this time :) but the IO-

[#71551] Re: TCP Sockets — Brian Candler <B.Candler@...> 2003/05/16

On Fri, May 16, 2003 at 07:20:30PM +0900, Dominik Werder wrote:

[#71553] Re: TCP Sockets — Dominik Werder <dwerder@...> 2003/05/16

> Maybe, but threads are really the "ruby way" to solve this problem.

[#71557] Re: TCP Sockets — Brian Candler <B.Candler@...> 2003/05/16

On Fri, May 16, 2003 at 07:53:39PM +0900, Dominik Werder wrote:

[#71562] Re: TCP Sockets — Dominik Werder <dwerder@...> 2003/05/16

> That would mean mixing the binary streams in a non-deterministic way,

[#71107] RCR for child execution — Brian Candler <B.Candler@...>

Looking on RubyGarden it seems that the RCR process there is "resting", so

99 messages 2003/05/10
[#71122] Re: RCR for child execution — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/10

On Sun, 11 May 2003 01:50:49 +0900, Brian Candler wrote:

[#71126] Re: RCR for child execution — Brian Candler <B.Candler@...> 2003/05/10

On Sun, May 11, 2003 at 01:27:31AM +0900, Simon Strandgaard wrote:

[#71364] Re: RCR for child execution — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/13

On Tue, 13 May 2003 21:11:08 +0000, ahoward wrote:

[#71385] Re: RCR for child execution — matz@... (Yukihiro Matsumoto) 2003/05/14

Hi,

[#71152] Is Rubygarden's wiki restricted to English? — Mauricio Fern疣dez <batsman.geo@...>

20 messages 2003/05/11
[#71160] Re: Is Rubygarden's wiki restricted to English? — "Hal E. Fulton" <hal9000@...> 2003/05/11

----- Original Message -----

[#71165] Re: Is Rubygarden's wiki restricted to English? — Mauricio Fern疣dez <batsman.geo@...> 2003/05/11

On Mon, May 12, 2003 at 12:40:26AM +0900, Hal E. Fulton wrote:

[#71189] efficiency advice needed — "meinrad.recheis" <my.name.here@...>

hi,

12 messages 2003/05/11

[#71297] State Pattern Implementation — "Robert Klemme" <bob.news@...>

22 messages 2003/05/13

[#71361] Objects VS Datastructures — Simon Vandemoortele <deliriousREMOVEUPPERCASETEXTTOREPLY@...>

19 messages 2003/05/13

[#71447] Embedding/GC/heap corruption problem — "Jan Bernhardt" <j.bernhardt@...>

Hi,

22 messages 2003/05/14

[#71488] Test::Unit sequencing — Brian Candler <B.Candler@...>

A question for more experienced Test::Unit users.

23 messages 2003/05/15
[#71492] Re: Test::Unit sequencing — Anders Bengtsson <ndrsbngtssn@...> 2003/05/15

--- Brian Candler <B.Candler@pobox.com> wrote:

[#71508] Re: Test::Unit sequencing — ahoward <ahoward@...> 2003/05/15

On Thu, 15 May 2003, [iso-8859-1] Anders Bengtsson wrote:

[#71510] RCR: $INCLUDED global var — martindemello@... (Martin DeMello)

$INCLUDED = (__FILE__ != $0)

25 messages 2003/05/15
[#71515] Re: RCR: $INCLUDED global var — matz@... (Yukihiro Matsumoto) 2003/05/15

Hi,

[#71525] Re: RCR: $INCLUDED global var — ahoward <ahoward@...> 2003/05/15

On Fri, 16 May 2003, Yukihiro Matsumoto wrote:

[#71520] public/protected/private syntax — Guillaume Marcais <guslist@...>

I tend to find the public/protected/private keywords in Ruby a little odd.

27 messages 2003/05/15
[#71540] Re: public/protected/private syntax — "Robert Klemme" <bob.news@...> 2003/05/16

[#71573] Re: public/protected/private syntax — Guillaume Marcais <guillaume.marcais@...> 2003/05/16

On Friday 16 May 2003 03:38 am, you wrote:

[#71595] Re: public/protected/private syntax — Austin Ziegler <austin@...> 2003/05/16

On Fri, 16 May 2003 23:33:21 +0900, Guillaume Marcais wrote:

[#71560] gzip cgi compression — Dominik Werder <dwerder@...>

Is zlib compatible with HTTP-gzip-output-compression?

14 messages 2003/05/16

[#71636] select strange behavier — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

'select' is suppose to watch some file-descriptors and when an event

22 messages 2003/05/17

[#71673] An Object Going Out Of Scope — "vinita Papur" <gkapur@...>

A quick question. How can one discern when an object goes out of scope?

46 messages 2003/05/18
[#71678] Re: An Object Going Out Of Scope — "MikkelFJ" <mikkelfj-anti-spam@...> 2003/05/18

[#71680] Re: An Object Going Out Of Scope — Mauricio Fern疣dez <batsman.geo@...> 2003/05/18

On Sun, May 18, 2003 at 06:08:43PM +0900, MikkelFJ wrote:

[#71681] ruby garbage collection — "Gaffer" <gaffer@...> 2003/05/18

i need this for a realtime game application which has embedded ruby -- after

[#71683] Re: ruby garbage collection — Mauricio Fern疣dez <batsman.geo@...> 2003/05/18

On Sun, May 18, 2003 at 08:35:11PM +0900, Gaffer wrote:

[#71685] Re: ruby garbage collection — "Gaffer" <gaffer@...> 2003/05/18

strange, i found the rb_gc call on my own and called that to good effect

[#71688] Re: ruby garbage collection — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/18

On Sun, 18 May 2003 22:10:18 +0900, Gaffer wrote:

[#71689] Re: ruby garbage collection — "Gaffer" <gaffer@...> 2003/05/18

i think its actually the GC cleaning up matrix and vector classes (my own

[#71691] Re: ruby garbage collection — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/18

On Sun, 18 May 2003 22:39:17 +0900, Gaffer wrote:

[#71692] Re: ruby garbage collection — "Gaffer" <gaffer@...> 2003/05/18

i'm pretty sure i've tracked down the cause, this is my first time embedding

[#71695] Re: ruby garbage collection — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/18

On Sun, 18 May 2003 23:48:28 +0900, Gaffer wrote:

[#71948] How I'd like method-wrapping to work... — "Hal E. Fulton" <hal9000@...>

OK, I read Matz's blog entries as well as I could.

16 messages 2003/05/21

[#72030] why is "does" missing from this sub!-stitution? — Dave Oshel <dcoshel@...>

[~/Desktop] dave$ cat foobar.rb ; foobar.rb

19 messages 2003/05/22
[#72037] Re: why is "does" missing from this sub!-stitution? — Dave Oshel <dcoshel@...> 2003/05/22

In article <20030522202818.GA24497@student.ei.uni-stuttgart.de>,

[#72056] Naive CGI question — "Hal E. Fulton" <hal9000@...>

I'm betting this is either impossible

15 messages 2003/05/23

[#72134] Problem compiling extension on Solaris — "Tim Hunter" <cyclists@...>

I have an user who is trying to build RMagick on Solaris with Ruby 1.6.8.

22 messages 2003/05/25
[#72262] Re: Problem compiling extension on Solaris — Daniel Berger <djberge@...> 2003/05/27

[#72150] Binary Tree vs. Hash — Xiangrong Fang <xrfang@...>

Hi ruby fans,

47 messages 2003/05/26

[#72184] Project Directory Structure — Jim Freeze <jim@...>

Hi:

47 messages 2003/05/26
[#72218] Re: Project Directory Structure — "MikkelFJ" <mikkelfj-anti-spam@...> 2003/05/26

[#72222] Re: Project Directory Structure — Jim Freeze <jim@...> 2003/05/26

Thanks everyone for your input so far.

[#72244] Re: Project Directory Structure — Robert Feldt <feldt@...> 2003/05/27

On Tue, 27 May 2003, Jim Freeze wrote:

[#72260] Re: Project Directory Structure — Jim Freeze <jim@...> 2003/05/27

On Tuesday, 27 May 2003 at 18:26:53 +0900, Robert Feldt wrote:

[#72265] Re: Project Directory Structure — Jim Freeze <jim@...> 2003/05/27

Thanks for all the input. A description of the Project

[#72269] Re: Project Directory Structure — Robert Feldt <feldt@...> 2003/05/27

On Wed, 28 May 2003, Jim Freeze wrote:

[#72274] RCR: unpack/pack Bignum — Robert Feldt <feldt@...>

I'm sure this has been discussed before and maybe there are good reasons

27 messages 2003/05/27
[#72375] Re: RCR: unpack/pack Bignum — Robert Feldt <feldt@...> 2003/05/28

No one seems to be interested in this issue so I'll have to reply to

[#72381] Re: RCR: unpack/pack Bignum — nobu.nokada@... 2003/05/28

Hi,

[#72394] Re: RCR: unpack/pack Bignum — Robert Feldt <feldt@...> 2003/05/29

On Thu, 29 May 2003 nobu.nokada@softhome.net wrote:

[#72403] Re: RCR: unpack/pack Bignum — nobu.nokada@... 2003/05/29

Hi,

[#72600] What is BER compression? (was RCR: unpack/pack Bignum) — Sam Roberts <sroberts@...> 2003/05/31

Is it documented anywhere, what this 'w' template is useful for?

[#72371] Windows Installer for Ruby 1.8.0 (CVS) — Andrew Hunt <andy@...>

Hi all,

16 messages 2003/05/28

[#72388] Array.extend versus instance.extend — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

I want to install 'shift_until_kind_of' in the global Array class

18 messages 2003/05/29

[#72420] Metakit for Ruby - Would you want it? — bobx@... (Bob)

I have a gentleman in England who I have been talking with who is

23 messages 2003/05/29

[#72439] Iteration - last detection — "Orion Hunter" <orion2480@...>

Is there any built in functionality for iteration that will allow me to

41 messages 2003/05/29
[#72510] Re: Iteration - last detection — Carlos <angus@...> 2003/05/30

> Is there any built in functionality for iteration that will allow me to

[#72577] IF statement in ruby 1.8.0 (2003-05-26) [i386-mswin32] — "Shashank Date" <sdate@...>

Just when I thought that I had perfectly understood the IF statement in

14 messages 2003/05/31

Re: How I'd like method-wrapping to work...

From: "Robert Klemme" <bob.news@...>
Date: 2003-05-22 09:01:20 UTC
List: ruby-talk #71984
"Hal E. Fulton" <hal9000@hypermetrics.com> schrieb im Newsbeitrag
news:0d1f01c31fed$2b5978e0$0300a8c0@austin.rr.com...
> ----- Original Message ----- 
> From: "Robert" <bob.news@gmx.net>
> Newsgroups: comp.lang.ruby
> To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
> Sent: Wednesday, May 21, 2003 5:39 PM
> Subject: Re: How I'd like method-wrapping to work...
>
>
> > That's no fantasy.  Dreams come true...
>
> The plane, the plane! (Sorry, showing my age...)
> (For non-Americans and/or people under 35: A reference
> to the TV show _Fantasy Island_.)

I just know a hit by, I think it was "Tight Fit" with the same name.  The
80's...

> Thanks for this fascinating reply...

You're welcome!  I'm always amazed what can be done with Ruby, it's really
a jewel.  Sometimes it's even scaring...

> > > 3. I've probably overlooked a lot of issues. Please
> > > educate me (Matz, Guy, Dave, David, others...)
>
> > Although not listed this bugged me.  See what I came up with
(attached).
>
> Not listed? :)
>
>   others.include?(Robert)     # true

Oooops, my implementation of include? seems to be broken.  Thank's for the
fix.  :-)

> > Cons:
> >   - 'this' had to be introduced since I found no way to
> >     rebind the proc (even if there were a way we had
> >     to deal with multiple concurrent invocations).  The
> >     deeper reason for this problem is, that the block
> >     comes into existence in class context but should be
> >     evaluated in instance context later.
>
> I was having a hard time with that, too, and I wasn't
> even worrying about threads.

That's the single biggest problem for the hook approach with blocks.  If
that could be solved, maybe by a method Proc#rebind( binding ) => Proc
returning a new proc with the given binding we had the perfect solution.
I think there were discussions about rebinding somethread else.

> >   - Argument lists have to be doubled for the block
>
> Hmm, not sure what you mean here. But I am going to
> play with this a little.

If you want to access method arguments in the block you have to include
them like I did in the second test script (attached).

> > Pros:
> >  - It nearly looks like what you asked for.
> >  - Return values work reasonably.
>
> By "reasonably" do you mean that the return value of
> prior will be used even if that call is not the last
> one inside the hook block? Ideally we shouldn't have
> to do the "val" stuff that I do. I'll test.

No, I meant, that you can decide whether you want to propagate them or
override them.  But it can be fixed to always return the original.  Lemme
see...  Done.  If I find some time I might even include a test for
duplicate prior calls from the same block.  Oops, that was easy.  I'll
have to stop that...  Please don't come up with further feature requests.
:-))

> >  - It even works for nested invocations, i.e. recursion
> >  - It works with several instances in the call chain
>
> This is essential if I understand you rightly. It's also
> one reason we need this -- methods are sometimes aliased
> more than once, e.g., in a library and in your own code.

Yep, that was what I suspected was the typical case.  You don't want to
worry whether someone else hooked a method already.

> >  - You can exactly do what you put in <fantasy>
>
> So I can! I see that the code in hook_test is line for line
> the same as mine.

Si!

> However, on 1.7.3 on Windows I got a syntax error on
> line 40 of hooks.rb (had to remove the "proc &"). Not
> sure what the issue is here -- assume it worked for you
> that way?

Strange, I got no error with 1.7.3 on Win.  Need to investigate this.  The
version I have here at work complains, too.

> Thanks for a quick reply...

Oh, I took some detours in between... (I dropped a version with a String
instead a block.)

> this is another bit of code
> that I'll certainly save.

That's very kind of you.

> I do hope the discussion continues, though...

Of course!  There's always room for improvement (see attached :-))

Kind regards

    robert

Attachments (3)

hooks.rb (1.62 KB, text/x-ruby)
class Object
  private
    def prior
      thr = Thread.current
      raise "Just one invocation of prior allowed!" if thr[ :__hook_prior ]
      thr[ :__hook_prior ] = true
      ths = thr[ :__hook_self ]
      sym = thr[ :__hook_next ]
      raise "No more methods in chain" unless sym

      begin
        puts '>>> nest' if $VERBOSE
        result = ths.send( sym, *(thr[ :__hook_args ]))
        puts '<<< unnest' if $VERBOSE
        thr[ :__hook_result ] = result
        return result
      ensure
        thr[ :__hook_next ]= sym
        thr[ :__hook_self ]= ths
      end
    end

    def this
      Thread.current[ :__hook_self ]
    end
end

class Module
  private
    def set_hook_proc( key, pr )
      (@hook_procs ||= {})[ key ]= pr
    end

  public
    def get_hook_proc( key )
      (@hook_procs ||= {})[ key ]
    end

    def define_hook( symbol, &block )
      al = generate_hook_alias symbol

      set_hook_proc( al, proc )

      x = <<-"EO_HOOK"
        alias #{al} #{symbol}
        def #{symbol}(*args)
          thr = Thread.current
          thr[ :__hook_self ]= self
          thr[ :__hook_args ]= args
          thr[ :__hook_next ]= :#{al}
          thr[ :__hook_prior ]= false
          result = #{self}.get_hook_proc( "#{al}" ).call( *args )
          thr.key?( :__hook_result ) ? thr[ :__hook_result ] : result
        end
      EO_HOOK

      # puts x
      self.class_eval x

      # p @hook_procs
    end

  private
    def generate_hook_alias( symbol )
      im = instance_methods

      count = 0

      begin
        s = "__hook__#{symbol}_#{count}"
        count += 1
      end while im.include? s

      s
    end

end

another_test.rb (733 Bytes, text/x-ruby)
require 'hooks.rb'

class Foo
  attr :len, true

  def initialize; @len = 0; end

  def bar
    puts "bar: #{self.len}"
    "bar!"
  end

  define_hook :bar do
    puts "hook 1: #{this.len}"
    this.len += 1
    prior
  end

  define_hook :bar do
    puts "hook 2: #{this.len}"
    this.len += 1

    puts "prior 1"
    prior
    puts "prior 2"
    prior

    "gotcha!"
  end

  def foo(x)
    p this
    puts "foo #{x}"
    Foo.new.foo nil if x
    "foo!"
  end

  define_hook :foo do |x|
    puts "hook foo 1: #{this.len}"
    puts "hook foo 1: x=#{x}"
    this.len += 1
    prior
  end

end

f = Foo.new

["__hook__bar_0", "__hook__bar_1", "bar"].each do |m|
  puts "calling #{m}"
  p f.send( m )
  puts ""
end

p f.foo("xxx")

hook_test.rb (414 Bytes, text/x-ruby)
require 'hooks.rb'

class String

  define_hook(:length) do
    puts "I'm calculating the length"
    prior
  end

  define_hook(:upcase) do
    prior
    puts "I just did an upcase operation"
  end

  define_hook(:reverse) do
    puts "I'm about to do a reverse operation"
    prior
    puts "I just did a reverse"
  end

end

str = "abcde"

x = str.length
puts x

y = str.upcase
puts y

z = str.reverse
puts z

In This Thread