From: James O'Brien on
[Note: parts of this message were removed to make it a legal post.]

Yep yep silly me... THANKS everyone!



On Tue, Jul 20, 2010 at 3:52 PM, Rob Biedenharn
<Rob(a)agileconsultingllc.com>wrote:

> On Jul 20, 2010, at 10:08 AM, James O'Brien wrote:
>
> File.open('myfile') do |f|
>> puts f.basename;
>> end
>>
>> myfile exists on the filesystem but this code blows up with
>>
>> undefined method `basename'
>>
>> could someone explain why (given the docs
>> http://ruby-doc.org/core/classes/File.html
>> advertise the basename method)
>>
>> [ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]]
>>
>>
>> Thanks!
>>
>
>
> You're looking at the docs for the class method File.basename, but you're
> calling basename on an instance of File referenced by f
>
> puts File.basename('myfile')
>
> or better:
>
> puts File.basename('/some/long/path/to/myfile')
>
> -Rob
>
> Rob Biedenharn
> Rob(a)AgileConsultingLLC.com http://AgileConsultingLLC.com/
> rab(a)GaslightSoftware.com http://GaslightSoftware.com/
>
>
>

From: Dave Howell on

On Jul 20, 2010, at 8:07 , James O'Brien wrote:

> Yep yep silly me... THANKS everyone!

And THAT is why I personally quit using File a long time ago. I encourage you to take a close look at Pathname, which I found put the various methods where I thought they should have been in the first place.

>> require 'pathname'
>> myFile = Pathname.new("/some/path/to/file.ext")
>> myFile.basename
=> "file.ext"

delete, .dirname, .atime, .executable?, .exists?, .extname, and on and on are properties of specific files, so having the methods on the instance, instead of the class, just makes all kinds of sense to me.

Pathname only has three class methods, including new. Vastly more intuitive to me.





First  |  Prev  | 
Pages: 1 2
Prev: Ruby Shoes tray icon?
Next: unable to locate component