23tux
23tux

Reputation: 14736

Ruby glob: Exclude dir and file

For the import of my Sass files, I use sass-rails' (https://github.com/rails/sass-rails) glob feature. It says

Any valid ruby glob may be used

I want to exclude a directory and a file when using @import. Any ruby code using blocks don't work in this scenario. But even trying to exclude a single file doesn't work the way I want.

Consider this tree structure

/_bar.scss
/_foo.scss
/all.scss

For example, I want to exclude the file _foo.scss. I read here https://stackoverflow.com/a/27707682/228370, using a ! you can negate a pattern.

I tried the following:

Dir["{[!_foo]}*.scss"]
=> ["all.scss"]

But this skips _bar.scss. When looking into the glob reference of Ruby (http://ruby-doc.org/core-2.2.0/Dir.html#method-c-glob) it becomes clear why:

[set] Matches any one character in set. Behaves exactly like character sets in Regexp, including set negation ([^a-z]).

(apparently, negation can be achieved with ! AND ^)

Because we have an underscore in our pattern, every file with an underscore gets excluded.

But what would be the solution, to exclude a fixed file?

Upvotes: 0

Views: 1155

Answers (1)

Some Guy
Some Guy

Reputation: 1511

There's probably a regex way of doing it. But if you're talking about one specific file, it might be easier to just do:

Dir["*.scss"].reject { |i| i == '_foo.scss' }

Upvotes: 1

Related Questions