Project

General

Profile

Feature #7361

Adding Pathname#touch

Added by Alexander E. Fischer over 3 years ago. Updated 10 days ago.

Status:
Rejected
Priority:
Normal
Assignee:
[ruby-core:49374]

Description

Pathname has an #mkdir method to create a directory at the path, but does not have a #touch method to create an empty file at that path.

There were numerous cases where I had to fallback to using

new_file = Pathname.new('location/for/new/file')
FileUtils.touch(new_file)

instead of simply being able to use:

new_file.touch

I would like to add this method. If you like it, let me know. I will provide a patch then.


Related issues

Related to Ruby trunk - Feature #7378: Adding Pathname#write Closed 06/02/2012

History

#1 [ruby-core:49952] Updated by Yusuke Endoh over 3 years ago

  • Target version set to next minor
  • Status changed from Open to Assigned
  • Assignee set to Akira Tanaka

#2 [ruby-core:67757] Updated by Ben Rexin over 1 year ago

Any way i can help?

#3 [ruby-core:67796] Updated by Daniel Berger over 1 year ago

I'm a little surprise there isn't an option for this in FileUtils. Something like FileUtils.touch('/location/for/new', :force => true). I'd be in favor of adding that, or an option to FileUtils.mkpath.

#4 [ruby-core:74844] Updated by Dominic Sisneros 4 months ago

Any update on this

class Pathname

  def touch(options={})
    FileUtils.touch(@path, options)
  end

end

Pathname('test.pdf').touch(mtime: 1.hour.ago)

"#mkpath" almost works but doesn't have the mtime option

#5 [ruby-core:74922] Updated by Akira Tanaka 4 months ago

  • Status changed from Assigned to Rejected

I don't like the method name "touch".

"touch" command has multiple features:
create empty file, update mtime.
So, the intent of touch method is ambiguous.

#6 [ruby-core:76451] Updated by Naja Melan 11 days ago

I prefer something like (warning, untested code):

def touch( subPath = '', **options )

    path = @path
    ret  = self

    if directory?

        ret  = join subPath
        path = ret.to_path

    end

    FileUtils.touch( path, **options )

    ret

end

lets you do:

mydir.touch 'somefile'

I think touch is a good name because everybody already knows it and it's what people will try out spontaneously before even looking in the docs why it doesn't work. Joel Spolsky explains quite well why this is a good thing.

#7 [ruby-core:76455] Updated by Shyouhei Urabe 10 days ago

We don't always blindly import broken designs; for instance Ruby do not have creat(2) equivalent method. "Everybody knows it" is (definitely a good property but) not enough.

When it comes to touch, there already is FileUtils.touch so your urgent needs are already satisfied I believe. Here on Pathname let us consider a clearer design.

Also available in: Atom PDF