fast_ignore 0.8.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9218ac549a0d5f73ff24a656320561307b89c7137f105e2921d4adb81074bcd8
4
- data.tar.gz: 6ed5b5a316d48e7a10bd87b3159fa61f750154c7614c9ad11a1ceb992df0bace
3
+ metadata.gz: 55e2502678383f7dec077fb00816f754ca795d6de214ae2950fd2343852e450b
4
+ data.tar.gz: ef25eca3ec9c85578f4c74a808f5865d5586d2ce5919b976013723f6d17beedc
5
5
  SHA512:
6
- metadata.gz: 366a9500c6a9e1b725bb7fcb691040bbd0385b20f4e8e496f7199f4640c05bbc51de4593a634f82166ec81d5c9a1fd2251c38a1bfc37a5bacf06934154965c94
7
- data.tar.gz: 11b0afcc962cd225be140384dd3dc3e61c4006c699b22b1016e6b339b11fae26f30a59f4f98740ad46769653761850b4385b04e9c62b53457a1244075dec8dbe
6
+ metadata.gz: 7dbfbe53878ac26d8b857647da3356b47c687f081f5369270d41576b71b414fc5b6417d8ed0b7c9d72a7bd65e1c727760573586a223c23a16126ad64ac72a099
7
+ data.tar.gz: 761d4d757d5660058be97dff4809415070bf610c8c5aa000e71bec1d36c3b7fcfdfe35e8ab1daf4586154d34d341a93dcf76f9055f942465bc7ae6a7cc280e9d
data/.simplecov CHANGED
@@ -1,6 +1,10 @@
1
1
  SimpleCov.start do
2
2
  add_filter '/backports'
3
3
  add_filter '/spec/'
4
- enable_coverage(:branch)
5
- minimum_coverage 100
4
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5')
5
+ enable_coverage(:branch)
6
+ minimum_coverage line: 100, branch: 100
7
+ else
8
+ minimum_coverage 100
9
+ end
6
10
  end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # v0.9.0
2
+ - speed improvements, which may break things (Specifically, only using relative paths internally, is about 30% faster (depending on root depth))
3
+ - using a `ignore_files:` or `include_files:` that are outside the `root: (default $PWD)` will now raise an error.
4
+ - remove deprecated `gitignore:` a path (e.g. `gitignore: '/path/to/gitignore'`). please use `gitignore: false, ignore_files: '/path/to/gitignore'` instead.
5
+
1
6
  # v0.8.3
2
7
  - fix `ignore_rules` not matching directories when using `include_shebangs:`
3
8
 
data/README.md CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  [![travis](https://travis-ci.org/robotdana/fast_ignore.svg?branch=master)](https://travis-ci.org/robotdana/fast_ignore)
4
4
 
5
+ This started as a way to quickly and natively ruby-ly parse gitignore files and find matching files.
6
+ It's now gained an equivalent includes file functionality, ARGV awareness, and some shebang matching, while still being extremely fast, to be a one-stop file-list for your linter.
7
+
5
8
  Filter a directory tree using a .gitignore file. Recognises all of the [gitignore rules](https://www.git-scm.com/docs/gitignore#_pattern_format) ([except one](#known-issues))
6
9
 
7
10
  ```ruby
@@ -43,6 +46,12 @@ By default, FastIgnore will return full paths. To return paths relative to the c
43
46
  FastIgnore.new(relative: true).to_a
44
47
  ```
45
48
 
49
+ By default, FastIgnore will look at the current working directory (PWD) for looking for .gitignore files, handling array rules, and the path that relative returns.
50
+ To use a different directory:
51
+ ```ruby
52
+ FastIgnore.new(root: '/absolute/path/to/root').to_a
53
+ ```
54
+
46
55
  You can specify other gitignore-style files to ignore as well. Missing files will raise an `Errno::ENOENT` error.
47
56
 
48
57
  ```ruby
@@ -59,11 +68,11 @@ FastIgnore.new(ignore_rules: ['.git', '.gitkeep']).to_a
59
68
 
60
69
  To use only another ignore file or an array of rules, and not even try to load a gitignore file:
61
70
  ```ruby
62
- FastIgnore.new(ignore_files: '/absolute/path/to/my/ignore/file', gitignore: false)
63
- FastIgnore.new(ignore_rules: %w{my*rule /and/another !rule}, gitignore: false)
71
+ FastIgnore.new(ignore_files: '/absolute/path/to/my/ignore/file', gitignore: false).to_a
72
+ FastIgnore.new(ignore_rules: %w{my*rule /and/another !rule}, gitignore: false).to_a
64
73
  ```
65
74
 
66
- By default, FastIgnore will look in the directory the script is run in (`PWD`) for a gitignore file. If it's somewhere else:
75
+ By default, FastIgnore will look in the root directory for a gitignore file. If it's somewhere else:
67
76
  ```ruby
68
77
  FastIgnore.new(ignore_file: '/absolute/path/to/.gitignore', gitignore: false).to_a
69
78
  ```
@@ -108,14 +117,14 @@ fo*
108
117
 
109
118
  These can be passed either as files or as an array or string rules
110
119
  ```ruby
111
- FastIgnore.new(include_files: '/absolute/path/to/my/include/file', gitignore: false)
112
- FastIgnore.new(include_rules: %w{my*rule /and/another !rule}, gitignore: false)
120
+ FastIgnore.new(include_files: '/absolute/path/to/my/include/file', gitignore: false).to_a
121
+ FastIgnore.new(include_rules: %w{my*rule /and/another !rule}, gitignore: false).to_a
113
122
  ```
114
123
 
115
124
  There is an additional argument meant for dealing with humans and `ARGV` values.
116
125
 
117
126
  ```ruby
118
- FastIgnore.new(argv_rules: ['./a/pasted/path', '/or/a/path/from/stdin', 'an/argument', '*.txt'])
127
+ FastIgnore.new(argv_rules: ['./a/pasted/path', '/or/a/path/from/stdin', 'an/argument', '*.txt']).to_a
119
128
  ```
120
129
 
121
130
  It resolves absolute paths, and paths beginning with `~`, `../` and `./` (with and without `!`)
@@ -130,13 +139,13 @@ In the simplest case a file must be allowed by each ignore file, each include fi
130
139
  To combine files using `OR`, that is, a file may be included by either file it doesn't have to be referred to in both:
131
140
 
132
141
  ```ruby
133
- FastIgnore.new(include_files: StringIO.new([File.read('/my/path'), File.read('/another/path')]).join("\n"))
142
+ FastIgnore.new(include_files: StringIO.new([File.read('/my/path'), File.read('/another/path')]).join("\n")).to_a
134
143
  ```
135
144
 
136
145
  To use the additional ARGV handling rules mentioned above for files
137
146
 
138
147
  ```ruby
139
- FastIgnore.new(argv_rules: ["my/rule", File.read('/my/path')])
148
+ FastIgnore.new(argv_rules: ["my/rule", File.read('/my/path')]).to_a
140
149
  ```
141
150
 
142
151
  ## Known issues
data/lib/fast_ignore.rb CHANGED
@@ -8,6 +8,8 @@ require_relative './fast_ignore/rule_set'
8
8
  require_relative './fast_ignore/rule'
9
9
 
10
10
  class FastIgnore
11
+ class Error < StandardError; end
12
+
11
13
  include ::Enumerable
12
14
 
13
15
  # :nocov:
@@ -20,34 +22,25 @@ class FastIgnore
20
22
  end
21
23
  # :nocov:
22
24
 
23
- def initialize( # rubocop:disable Metrics/ParameterLists, Metrics/MethodLength
25
+ def initialize(
24
26
  relative: false,
25
27
  root: ::Dir.pwd,
26
- ignore_rules: nil,
27
- ignore_files: nil,
28
- gitignore: :auto,
29
- include_rules: nil,
30
- include_files: nil,
31
28
  include_shebangs: nil,
32
- argv_rules: nil
29
+ **rule_set_builder_args
33
30
  )
34
- @root = root.delete_suffix('/')
35
- @root_trailing_slash = "#{@root}/"
31
+ @root = root.end_with?('/') ? root : "#{root}/"
36
32
  @shebang_pattern = prepare_shebang_pattern(include_shebangs)
37
33
 
38
34
  rule_sets = ::FastIgnore::RuleSetBuilder.from_args(
39
35
  root: @root,
40
- ignore_rules: ignore_rules,
41
- ignore_files: ignore_files,
42
- gitignore: gitignore,
43
- include_rules: include_rules,
44
- include_files: include_files,
45
- argv_rules: argv_rules
36
+ **rule_set_builder_args
46
37
  )
47
38
 
48
39
  @include_rule_sets, @ignore_rule_sets = rule_sets.partition(&:allow?)
49
40
  @has_include_rule_sets = !@include_rule_sets.empty?
50
41
  @relative = relative
42
+
43
+ freeze
51
44
  end
52
45
 
53
46
  def each(&block)
@@ -58,53 +51,55 @@ class FastIgnore
58
51
  end
59
52
  end
60
53
 
61
- def allowed?(path)
62
- path = ::File.expand_path(path)
63
- dir = ::File.stat(path).directory? # equivalent to directory? and exist?
54
+ def allowed?(path) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
55
+ full_path = ::File.expand_path(path, @root)
56
+ return false unless full_path.start_with?(@root)
57
+
58
+ dir = ::File.stat(full_path).directory? # shortcut for exists? && directory?
64
59
 
65
60
  return false if dir
66
- return false unless @ignore_rule_sets.all? { |r| r.allowed_recursive?(path, dir) }
67
- return @include_rule_sets.all? { |r| r.allowed_recursive?(path, dir) } unless @shebang_pattern
61
+
62
+ relative_path = full_path.delete_prefix(@root)
63
+
64
+ return false unless @ignore_rule_sets.all? { |r| r.allowed_recursive?(relative_path, dir) }
65
+ return @include_rule_sets.all? { |r| r.allowed_recursive?(relative_path, dir) } unless @shebang_pattern
68
66
 
69
67
  (@has_include_rule_sets &&
70
- @include_rule_sets.all? { |r| r.allowed_unrecursive?(path, false) }) ||
71
- match_shebang?(path, ::File.basename(path))
72
- rescue Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP, Errno::ENAMETOOLONG
68
+ @include_rule_sets.all? { |r| r.allowed_unrecursive?(relative_path, false) }) ||
69
+ match_shebang?(full_path, ::File.basename(relative_path))
70
+ rescue ::Errno::ENOENT, ::Errno::EACCES, ::Errno::ENOTDIR, ::Errno::ELOOP, ::Errno::ENAMETOOLONG
73
71
  false
74
72
  end
75
73
 
76
74
  private
77
75
 
78
- def prepare_path(path)
79
- @relative ? path.delete_prefix(@root_trailing_slash) : path
80
- end
81
-
82
- def each_allowed(path = @root_trailing_slash, &block) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
83
- Dir.each_child(path) do |basename|
76
+ def each_allowed(full_path = @root, relative_path = '', &block) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
77
+ ::Dir.each_child(full_path) do |basename|
84
78
  begin
85
- child = path + basename
86
- dir = ::File.stat(child).directory? # equivalent to directory? and exist?
79
+ full_child = full_path + basename
80
+ relative_child = relative_path + basename
81
+ dir = ::File.directory?(full_child)
87
82
 
88
- next unless @ignore_rule_sets.all? { |r| r.allowed_unrecursive?(child, dir) }
83
+ next unless @ignore_rule_sets.all? { |r| r.allowed_unrecursive?(relative_child, dir) }
89
84
 
90
85
  if dir
91
- next unless @shebang_pattern || @include_rule_sets.all? { |r| r.allowed_unrecursive?(child, dir) }
86
+ next unless @shebang_pattern || @include_rule_sets.all? { |r| r.allowed_unrecursive?(relative_child, dir) }
92
87
 
93
- each_allowed("#{child}/", &block)
88
+ each_allowed("#{full_child}/", "#{relative_child}/", &block)
94
89
  else
95
90
  if @shebang_pattern
96
91
  unless (@has_include_rule_sets &&
97
- @include_rule_sets.all? { |r| r.allowed_unrecursive?(child, dir) }) ||
98
- match_shebang?(child, basename)
92
+ @include_rule_sets.all? { |r| r.allowed_unrecursive?(relative_child, dir) }) ||
93
+ match_shebang?(full_child, basename)
99
94
  next
100
95
  end
101
96
  else
102
- next unless @include_rule_sets.all? { |r| r.allowed_unrecursive?(child, dir) }
97
+ next unless @include_rule_sets.all? { |r| r.allowed_unrecursive?(relative_child, dir) }
103
98
  end
104
99
 
105
- yield prepare_path(child)
100
+ yield(@relative ? relative_child : full_child)
106
101
  end
107
- rescue Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP, Errno::ENAMETOOLONG
102
+ rescue ::Errno::ENOENT, ::Errno::EACCES, ::Errno::ENOTDIR, ::Errno::ELOOP, ::Errno::ENAMETOOLONG
108
103
  nil
109
104
  end
110
105
  end
@@ -118,7 +113,7 @@ class FastIgnore
118
113
  # i can't imagine a shebang being longer than 20 characters, lets multiply that by 10 just in case.
119
114
  fragment = f.sysread(256)
120
115
  f.close
121
- rescue SystemCallError, EOFError
116
+ rescue ::SystemCallError, ::EOFError
122
117
  return false
123
118
  end
124
119
 
@@ -2,7 +2,11 @@
2
2
 
3
3
  class FastIgnore
4
4
  class Rule
5
- FNMATCH_OPTIONS = (::File::FNM_DOTMATCH | ::File::FNM_PATHNAME | ::File::FNM_CASEFOLD).freeze # = 14
5
+ # FNMATCH_OPTIONS = (
6
+ # ::File::FNM_DOTMATCH |
7
+ # ::File::FNM_PATHNAME |
8
+ # ::File::FNM_CASEFOLD
9
+ # ).freeze # = 14
6
10
 
7
11
  attr_reader :negation
8
12
  alias_method :negation?, :negation
@@ -15,6 +19,8 @@ class FastIgnore
15
19
  @rule = rule
16
20
  @dir_only = dir_only
17
21
  @negation = negation
22
+
23
+ freeze
18
24
  end
19
25
 
20
26
  # :nocov:
@@ -11,74 +11,77 @@ class FastIgnore
11
11
 
12
12
  # rule or nil
13
13
  class << self
14
- def new_rule(rule, root:, rule_set:, allow: false, expand_path: false) # rubocop:disable Metrics/MethodLength
15
- rule = strip(rule)
16
- rule, dir_only = extract_dir_only(rule)
14
+ def new_rule(rule, rule_set:, allow: false, expand_path: false, file_root: nil) # rubocop:disable Metrics/MethodLength
15
+ rule = rule.dup
16
+ strip(rule)
17
+ dir_only = extract_dir_only(rule)
17
18
 
18
19
  return if skip?(rule)
19
20
 
20
- rule, negation = extract_negation(rule, allow)
21
- rule = expand_path(rule, root) if expand_path
21
+ negation = extract_negation(rule, allow)
22
22
 
23
- anchored, prefix = prefix(rule)
23
+ expand_rule_path(rule, expand_path) if expand_path
24
+ anchored = anchored?(rule)
25
+ rule.delete_prefix!('/')
24
26
 
25
- rule = "#{root}#{prefix}#{rule}"
27
+ rule.prepend("#{file_root}#{'**/' unless anchored}") if file_root || (not anchored)
28
+
29
+ rule.freeze
26
30
 
27
31
  rule_set.append_rules(
28
32
  anchored,
29
- rules(rule, allow, root, dir_only, negation)
33
+ rules(rule, allow, dir_only, negation)
30
34
  )
31
35
  end
32
36
 
33
37
  private
34
38
 
35
- def rules(rule, allow, root, dir_only, negation)
39
+ DOT = '.'
40
+ def rules(rule, allow, dir_only, negation)
36
41
  rules = [::FastIgnore::Rule.new(rule, dir_only, negation)]
37
42
  return rules unless allow
38
43
 
39
44
  rules << ::FastIgnore::Rule.new("#{rule}/**/*", false, negation)
40
45
  parent = File.dirname(rule)
41
- while parent != root
42
- rules << ::FastIgnore::Rule.new(parent, true, true)
46
+ while parent != DOT
47
+ rules << ::FastIgnore::Rule.new(parent.freeze, true, true)
43
48
  parent = File.dirname(parent)
44
49
  end
45
50
  rules
46
51
  end
47
52
 
48
53
  def extract_negation(rule, allow)
49
- return [rule, allow] unless rule.start_with?('!')
54
+ return allow unless rule.start_with?('!')
55
+
56
+ rule.slice!(0)
50
57
 
51
- [rule[1..-1], !allow]
58
+ !allow
52
59
  end
53
60
 
54
61
  def extract_dir_only(rule)
55
- return [rule, false] unless rule.end_with?('/')
62
+ return false unless rule.end_with?('/')
63
+
64
+ rule.chop!
56
65
 
57
- [rule[0..-2], true]
66
+ true
58
67
  end
59
68
 
60
69
  def strip(rule)
61
- rule = rule.chomp
62
- rule = rule.rstrip unless rule.end_with?('\\ ')
63
- rule
70
+ rule.chomp!
71
+ rule.rstrip! unless rule.end_with?('\\ ')
64
72
  end
65
73
 
66
- def prefix(rule)
67
- if rule.start_with?('/')
68
- [true, '']
69
- elsif rule.end_with?('/**') || rule.include?('/**/')
70
- [true, '/']
71
- else
72
- [false, '/**/']
73
- end
74
+ def anchored?(rule)
75
+ rule.start_with?('/') ||
76
+ rule.end_with?('/**') ||
77
+ rule.include?('/**/')
74
78
  end
75
79
 
76
- def expand_path(rule, root)
77
- rule = ::File.expand_path(rule).delete_prefix(root) if rule.match?(%r{^(?:[~/]|\.{1,2}/)})
78
-
79
- rule = "/#{rule}" unless rule.start_with?('*') || rule.start_with?('/')
80
-
81
- rule
80
+ EXPAND_PATH_RE = %r{^(?:[~/]|\.{1,2}/)}.freeze
81
+ def expand_rule_path(rule, root)
82
+ rule.replace(::File.expand_path(rule)) if rule.match?(EXPAND_PATH_RE)
83
+ rule.delete_prefix!(root)
84
+ rule.prepend('/') unless rule.start_with?('*') || rule.start_with?('/')
82
85
  end
83
86
 
84
87
  def skip?(rule)
@@ -6,18 +6,22 @@ class FastIgnore
6
6
  attr_reader :allow
7
7
  alias_method :allow?, :allow
8
8
 
9
- def initialize(project_root: Dir.pwd, allow: false)
9
+ def initialize(allow: false)
10
10
  @dir_rules = []
11
11
  @file_rules = []
12
- @project_root = project_root
13
-
12
+ @allowed_recursive = { '.' => true }
14
13
  @any_not_anchored = false
15
14
  @allow = allow
16
- @default = true unless allow
15
+ end
16
+
17
+ def freeze
18
+ @dir_rules.freeze
19
+ @file_rules.freeze
20
+
21
+ super
17
22
  end
18
23
 
19
24
  def allowed_recursive?(path, dir)
20
- @allowed_recursive ||= { @project_root => true }
21
25
  @allowed_recursive.fetch(path) do
22
26
  @allowed_recursive[path] =
23
27
  allowed_recursive?(::File.dirname(path), true) && allowed_unrecursive?(path, dir)
@@ -2,8 +2,15 @@
2
2
 
3
3
  class FastIgnore
4
4
  class RuleSetBuilder
5
+ # :nocov:
6
+ if ::FastIgnore::Backports.ruby_version_less_than?(2, 5)
7
+ require_relative 'backports/delete_prefix_suffix'
8
+ using ::FastIgnore::Backports::DeletePrefixSuffix
9
+ end
10
+ # :nocov:
11
+
5
12
  def self.from_args( # rubocop:disable Metrics/ParameterLists, Metrics/MethodLength
6
- root: Dir.pwd,
13
+ root:,
7
14
  ignore_rules: nil,
8
15
  ignore_files: nil,
9
16
  gitignore: :auto,
@@ -12,13 +19,13 @@ class FastIgnore
12
19
  argv_rules: nil
13
20
  )
14
21
  rule_sets = [
15
- from_array(ignore_rules, root: root),
22
+ from_array(ignore_rules),
16
23
  *from_files(ignore_files, project_root: root),
17
- from_array('.git', root: root),
18
- from_gitignore_arg(gitignore, root: root),
19
- from_array(include_rules, root: root, allow: true),
24
+ from_array('.git'),
25
+ from_gitignore_arg(gitignore, project_root: root),
26
+ from_array(include_rules, allow: true),
20
27
  *from_files(include_files, allow: true, project_root: root),
21
- from_array(argv_rules, root: root, allow: true, expand_path: true)
28
+ from_array(argv_rules, allow: true, expand_path: root)
22
29
  ]
23
30
 
24
31
  rule_sets.compact!
@@ -27,62 +34,58 @@ class FastIgnore
27
34
  rule_sets
28
35
  end
29
36
 
30
- def self.from_file(filename, allow: false, project_root: Dir.pwd)
31
- filename = ::File.expand_path(filename)
32
- root = ::File.dirname(filename)
33
- rule_set = ::FastIgnore::RuleSet.new(project_root: project_root, allow: allow)
37
+ def self.from_file(filename, project_root:, allow: false)
38
+ filename = ::File.expand_path(filename, project_root)
39
+ raise FastIgnore::Error, "#{filename} is not within #{project_root}" unless filename.start_with?(project_root)
40
+
41
+ file_root = "#{::File.dirname(filename)}/".delete_prefix(project_root)
42
+ rule_set = ::FastIgnore::RuleSet.new(allow: allow)
34
43
 
35
44
  ::IO.foreach(filename) do |rule_string|
36
- parse_rules(rule_string, allow: allow, rule_set: rule_set, root: root)
45
+ parse_rules(rule_string, allow: allow, rule_set: rule_set, file_root: file_root)
37
46
  end
38
47
 
39
- rule_set
48
+ rule_set.freeze
40
49
  end
41
50
 
42
- def self.from_files(files, allow: false, project_root: Dir.pwd)
51
+ def self.from_files(files, project_root:, allow: false)
43
52
  Array(files).map do |file|
44
53
  from_file(file, allow: allow, project_root: project_root)
45
54
  end
46
55
  end
47
56
 
48
- def self.from_gitignore_arg(gitignore, root: Dir.pwd) # rubocop:disable Metrics/MethodLength
49
- default_path = ::File.join(root, '.gitignore')
57
+ def self.from_gitignore_arg(gitignore, project_root:)
58
+ default_path = ::File.join(project_root, '.gitignore')
50
59
  case gitignore
51
60
  when :auto
52
- from_file(default_path, project_root: root) if ::File.exist?(default_path)
61
+ from_file(default_path, project_root: project_root) if ::File.exist?(default_path)
53
62
  when true
54
- from_file(default_path, project_root: root)
55
- when false
56
- nil
57
- else
58
- warn 'Deprecation warning! supplying gitignore file path directly is deprecated. '\
59
- 'Please use gitignore: false and add your path to the ignore_files array'
60
- from_file(gitignore, project_root: root)
63
+ from_file(default_path, project_root: project_root)
61
64
  end
62
65
  end
63
66
 
64
- def self.from_array(rules, allow: false, expand_path: false, root: Dir.pwd)
67
+ def self.from_array(rules, allow: false, expand_path: false)
65
68
  rules = Array(rules)
66
69
  return if rules.empty?
67
70
 
68
- rule_set = ::FastIgnore::RuleSet.new(project_root: root, allow: allow)
71
+ rule_set = ::FastIgnore::RuleSet.new(allow: allow)
69
72
 
70
73
  rules.each do |rule_string|
71
74
  rule_string.to_s.each_line do |rule_line|
72
- parse_rules(rule_line, rule_set: rule_set, allow: allow, root: root, expand_path: expand_path)
75
+ parse_rules(rule_line, rule_set: rule_set, allow: allow, expand_path: expand_path)
73
76
  end
74
77
  end
75
78
 
76
- rule_set
79
+ rule_set.freeze
77
80
  end
78
81
 
79
- def self.parse_rules(rule_line, rule_set:, allow: false, root: Dir.pwd, expand_path: false)
82
+ def self.parse_rules(rule_line, rule_set:, allow: false, expand_path: false, file_root: nil)
80
83
  ::FastIgnore::RuleParser.new_rule(
81
84
  rule_line,
82
85
  rule_set: rule_set,
83
86
  allow: allow,
84
- root: root,
85
- expand_path: expand_path
87
+ expand_path: expand_path,
88
+ file_root: file_root
86
89
  )
87
90
  end
88
91
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class FastIgnore
4
- VERSION = '0.8.3'
4
+ VERSION = '0.9.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_ignore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dana Sherson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-18 00:00:00.000000000 Z
11
+ date: 2020-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler