Forum: Ruby DATA.readlines in an inner file

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.
Ff63c03fd68754adbadd2c6314646bef?d=identicon&s=25 Bill Guindon (agorilla)
on 2006-03-23 17:19
(Received via mailing list)
Is there any way to use DATA.readlines to read the data (below
__END__) in a file that's been required/included?  I want the read
code to be inside the included/required file.
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2006-03-23 18:04
(Received via mailing list)
On Fri, 24 Mar 2006, Bill Guindon wrote:

> Is there any way to use DATA.readlines to read the data (below
> __END__) in a file that's been required/included?  I want the read
> code to be inside the included/required file.
>
> --
> Bill Guindon (aka aGorilla)
> The best answer to most questions is "it depends".
>
>

i don't think one can do it directly, but:


     harp:~ > cat b.rb
     require 'dynaload'

     module M
       def your_code_here_as_normal
       end
     end


     #
     # add this to the end of the file
     #
     data = open(__FILE__)
     data.each{|line| break if line =~ /^__END__$/}
     Dynaload::export data, "name" => "DATA"

     __END__
     42



     harp:~ > cat a.rb
     require 'dynaload'

     loaded = Dynaload::dynaload "b.rb"

     obj, desc = loaded.objects.select{|obj, desc| desc['name'] ==
'DATA'}.first

     puts obj.read



     harp:~ > ruby a.rb
     42

regards.

-a
Ff63c03fd68754adbadd2c6314646bef?d=identicon&s=25 Bill Guindon (agorilla)
on 2006-03-23 21:05
(Received via mailing list)
On 3/23/06, ara.t.howard@noaa.gov <ara.t.howard@noaa.gov> wrote:
> >
>
> i don't think one can do it directly, but:
>

Thanks much, was hoping there was a more elegant solution.  I was just
going to use it to avoid a 'here doc' block.  Now, the 'here doc'
doesn't look so bad ;)
This topic is locked and can not be replied to.