lib/regexp-examples/constants.rb in regexp-examples-1.3.2 vs lib/regexp-examples/constants.rb in regexp-examples-1.4.0
- old
+ new
@@ -1,50 +1,66 @@
# :nodoc:
module RegexpExamples
# Configuration settings to limit the number/length of Regexp examples generated
- class ResultCountLimiters
+ class Config
+ class << self
+ def with_configuration(**new_config)
+ original_config = config.dup
+
+ begin
+ self.config = new_config
+ result = yield
+ ensure
+ self.config = original_config
+ end
+
+ result
+ end
+
+ # Thread-safe getters and setters
+ %i[max_repeater_variance max_group_results max_results_limit].each do |m|
+ define_method(m) do
+ config[m]
+ end
+ define_method("#{m}=") do |value|
+ config[m] = value
+ end
+ end
+
+ private
+
+ def config=(**args)
+ Thread.current[:regexp_examples_config].merge!(args)
+ end
+
+ def config
+ Thread.current[:regexp_examples_config] ||= {
+ max_repeater_variance: MAX_REPEATER_VARIANCE_DEFAULT,
+ max_group_results: MAX_GROUP_RESULTS_DEFAULT,
+ max_results_limit: MAX_RESULTS_LIMIT_DEFAULT
+ }
+ end
+ end
# The maximum variance for any given repeater, to prevent a huge/infinite number of
- # examples from being listed. For example, if @@max_repeater_variance = 2 then:
+ # examples from being listed. For example, if self.max_repeater_variance = 2 then:
# .* is equivalent to .{0,2}
# .+ is equivalent to .{1,3}
# .{2,} is equivalent to .{2,4}
# .{,3} is equivalent to .{0,2}
# .{3,8} is equivalent to .{3,5}
MAX_REPEATER_VARIANCE_DEFAULT = 2
# Maximum number of characters returned from a char set, to reduce output spam
- # For example, if @@max_group_results = 5 then:
+ # For example, if self.max_group_results = 5 then:
# \d is equivalent to [01234]
# \w is equivalent to [abcde]
MAX_GROUP_RESULTS_DEFAULT = 5
# Maximum number of results to be generated, for Regexp#examples
# This is to prevent the system "freezing" when given instructions like:
# /[ab]{30}/.examples
# (Which would attempt to generate 2**30 == 1073741824 examples!!!)
MAX_RESULTS_LIMIT_DEFAULT = 10_000
- class << self
- attr_reader :max_repeater_variance, :max_group_results, :max_results_limit
- def configure!(max_repeater_variance: nil,
- max_group_results: nil,
- max_results_limit: nil)
- @max_repeater_variance = (max_repeater_variance || MAX_REPEATER_VARIANCE_DEFAULT)
- @max_group_results = (max_group_results || MAX_GROUP_RESULTS_DEFAULT)
- @max_results_limit = (max_results_limit || MAX_RESULTS_LIMIT_DEFAULT)
- end
- end
- end
-
- def self.max_repeater_variance
- ResultCountLimiters.max_repeater_variance
- end
-
- def self.max_group_results
- ResultCountLimiters.max_group_results
- end
-
- def self.max_results_limit
- ResultCountLimiters.max_results_limit
end
# Definitions of various special characters, used in regular expressions.
# For example, `/\h/.examples` will return the value of `Hex` in this module
module CharSets