Class: Regexp::MatchLength
- Inherits:
 - 
      Object
      
        
- Object
 - Regexp::MatchLength
 
 
- Includes:
 - Enumerable
 
- Defined in:
 - lib/regexp_parser/expression/methods/match_length.rb
 
Class Method Summary collapse
Instance Method Summary collapse
- #each(opts = {}) ⇒ Object
 - #endless_each ⇒ Object
 - #fixed? ⇒ Boolean
 - #include?(length) ⇒ Boolean
 - 
  
    
      #initialize(exp, opts = {})  ⇒ MatchLength 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of MatchLength.
 - #inspect ⇒ Object
 - #max ⇒ Object
 - #min ⇒ Object
 - #minmax ⇒ Object
 - #to_re ⇒ Object
 
Constructor Details
#initialize(exp, opts = {}) ⇒ MatchLength
Returns a new instance of MatchLength.
      9 10 11 12 13 14 15 16 17 18 19 20 21 22  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 9 def initialize(exp, opts = {}) self.exp_class = exp.class self.min_rep = exp.repetitions.min self.max_rep = exp.repetitions.max if (base = opts[:base]) self.base_min = base self.base_max = base self.reify = ->{ '.' * base } else self.base_min = opts.fetch(:base_min) self.base_max = opts.fetch(:base_max) self.reify = opts.fetch(:reify) end end  | 
  
Class Method Details
Instance Method Details
#each(opts = {}) ⇒ Object
      24 25 26 27 28 29 30 31 32 33  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 24 def each(opts = {}) return enum_for(__method__, opts) unless block_given? limit = opts[:limit] || 1000 yielded = 0 (min..max).each do |num| next unless include?(num) yield(num) break if (yielded += 1) >= limit end end  | 
  
#endless_each ⇒ Object
      35 36 37 38  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 35 def endless_each return enum_for(__method__) unless block_given? (min..max).each { |num| yield(num) if include?(num) } end  | 
  
#fixed? ⇒ Boolean
      44 45 46  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 44 def fixed? min == max end  | 
  
#include?(length) ⇒ Boolean
      40 41 42  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 40 def include?(length) test_regexp.match?('X' * length) end  | 
  
#inspect ⇒ Object
      60 61 62 63  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 60 def inspect type = exp_class.name.sub('Regexp::Expression::', '') "#<#{self.class}<#{type}> min=#{min} max=#{max}>" end  | 
  
#max ⇒ Object
      52 53 54  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 52 def max max_rep * base_max end  | 
  
#min ⇒ Object
      48 49 50  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 48 def min min_rep * base_min end  | 
  
#minmax ⇒ Object
      56 57 58  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 56 def minmax [min, max] end  | 
  
#to_re ⇒ Object
      65 66 67  | 
    
      # File 'lib/regexp_parser/expression/methods/match_length.rb', line 65 def to_re "(?:#{reify.call}){#{min_rep},#{max_rep unless max_rep == Float::INFINITY}}" end  |