user1620024
user1620024

Reputation: 123

Ruby, removing parts a file path

$local_path_to_css_file = File.expand_path(filename)

gives me

A/B/C/D/CSS/filename

or

A/B/C/D/CSS/layouts/filename

I want the result to be:

css/filename

or

css/layouts/filename

to remove everything up until css/.

Upvotes: 12

Views: 7829

Answers (2)

halfelf
halfelf

Reputation: 10107

A look-behind pattern will match your need.

def my_path(s)
  s[/(?=CSS).*/]
end

my_path "A/B/C/D/CSS/filename"  # => CSS/filename

Upvotes: 4

Serge Balyuk
Serge Balyuk

Reputation: 3462

You can use Pathname

require 'pathname'

absolute_path = Pathname.new(File.expand_path(filename))
project_root  = Pathname.new("/A/B/C/D") # you can set up root somewhere else, e.g. at point where script starts
relative      = absolute_path.relative_path_from(project_root)

relative.to_s # => "css/filename"

Upvotes: 27

Related Questions