Forum: Ruby temporary require ,is it possible?

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.
gpy g. (Guest)
on 2007-05-24 13:03
I have a idea,it is "temporary require"
[code]
module Find
 # my define
end

tmp_require("find"){
 #do something with "Find.find" method,temporary!!
}

puts Find # my define,no "Find.find" method
[/code]
Is it possible?
Brian C. (Guest)
on 2007-05-24 13:54
(Received via mailing list)
On Thu, May 24, 2007 at 06:03:22PM +0900, Gpy Good wrote:
> puts Find # my define,no "Find.find" method
> [/code]
> Is it possible?

Hmm, I was thinking of

  temp = load("find.rb", true)
  temp::Find.find(...)

but unfortunately load returns true, not the module object :-(

Here's a messy way:

  require 'find'  # the _old_ implementation of find

  #require 'new_find'  # contains the following:
  module NewStuff
  module Find
    def self.find
      puts "hello"
    end
  end
  end

  # Main program
  old_find = Find rescue nil
  begin
    Find = NewStuff::Find
    Find.find  # this is the code to be executed
  ensure
    Find = old_find
  end

  Find.find(".") { |f| puts f }

?
barjunk (Guest)
on 2007-05-24 22:51
(Received via mailing list)
On May 24, 1:52 am, Brian C. <removed_email_address@domain.invalid> wrote:
> On Thu, May 24, 2007 at 06:03:22PM +0900, Gpy Good wrote:
> > I have a idea,it is "temporary require"
> > [code]
> > module Find
<snip>

Maybe I'm missing the OP's goal, but wouldn't you just use a module
reference directly to get the same result?  What's the benefit of
having a "temporary" require?

Mike B.
Joel VanderWerf (Guest)
on 2007-05-24 23:40
(Received via mailing list)
Brian C. wrote:
>>
>> puts Find # my define,no "Find.find" method
>> [/code]
>> Is it possible?
>
> Hmm, I was thinking of
>
>   temp = load("find.rb", true)
>   temp::Find.find(...)
>
> but unfortunately load returns true, not the module object :-(

There's a way around that. See

http://redshift.sourceforge.net/script/

No magic, just module_eval.

(I'm not sure it solves the OP's problem, though.)
Axel E. (Guest)
on 2007-05-25 00:18
(Received via mailing list)
Maybe this can help to address the OP's question:

http://raa.ruby-lang.org/gonzui/markup/unrequireab...

Best regards,

Axel
Rick D. (Guest)
on 2007-05-25 00:22
(Received via mailing list)
On 5/24/07, Joel VanderWerf <removed_email_address@domain.invalid> wrote:
> >> }
> > but unfortunately load returns true, not the module object :-(
>
> There's a way around that. See
>
> http://redshift.sourceforge.net/script/
>
> No magic, just module_eval.
>
> (I'm not sure it solves the OP's problem, though.)

Somehow this smells to me like a job for Why's sandbox.
http://code.whytheluckystiff.net/sandbox/
--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/
ara.t.howard (Guest)
on 2007-05-25 00:45
(Received via mailing list)
On May 24, 2007, at 3:03 AM, Gpy Good wrote:

> puts Find # my define,no "Find.find" method
> [/code]
> Is it possible?
>
> --
> Posted via http://www.ruby-forum.com/.
>

why not simply fork and do something?

-a
gpy g. (Guest)
on 2007-05-25 07:00
Axel E. wrote:
> Maybe this can help to address the OP's question:
>
> http://raa.ruby-lang.org/gonzui/markup/unrequireab...
>
> Best regards,
>
> Axel
Thanks,It seems that my need.
And,but...
[code]
def tmp_require(name)
  require 'unrequireable'
  Object::unrequireable!

  require name
  yield
  unrequire name

end

module Find
 def self.info
   "my define"
 end
end

tmp_require("find"){
 Find.find("."){}#should work,need it temporary
}

puts Find.info #my define
Find.find("."){} #should not work(because I dont define it,and not need
it now ),but it worked
[/code]
It's my goal.^_^
This topic is locked and can not be replied to.