mustermann 1.0.0 → 1.0.1

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
  SHA1:
3
- metadata.gz: 1dcbbae7585845981a56f957deb4b729d311ffab
4
- data.tar.gz: 5c446520da882ed59f6fa38304343c10b7b67dab
3
+ metadata.gz: 8c1952019b943fa6b499465e215a4b7ba68c3cbd
4
+ data.tar.gz: e390428040cf68a16dea8367d87417bf921bd0c3
5
5
  SHA512:
6
- metadata.gz: d5c237bc73e1cfd18d923ba55514ffc66a575f81086f935eec4aa6831554f57ac955aad122cb169f09693c3265d544a6d32cbcb60557c64fe93582586ee98975
7
- data.tar.gz: a6e0cda3b4b51c0b914806b86467374d7222e026b9be9d5f4a43e09a7acbd25d736e1075b13dee2c864750e16b55c1ccb7b3d74d1e6de23440879f31b381e972
6
+ metadata.gz: b6abd1d958db391ebea46b12e16f151473a73f25eb684614fc2a87f8f0b72c7facf344b0b0ce0ee1feb58d3397f816b41b217d654cb5d537b02cb9c20404b662
7
+ data.tar.gz: '09be3f684228b37319fd48eff0d119350a71f9d1d558b89266b78a9cd0510dd9852c4454e0e3b4fda5e848dd3190208795f3b8c2e489c3962e2987f9fd615d7e'
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
  module Mustermann
3
- Error ||= Class.new(StandardError) # Raised if anything goes wrong while generating a {Pattern}.
4
- CompileError ||= Class.new(Error) # Raised if anything goes wrong while compiling a {Pattern}.
5
- ParseError ||= Class.new(Error) # Raised if anything goes wrong while parsing a {Pattern}.
6
- ExpandError ||= Class.new(Error) # Raised if anything goes wrong while expanding a {Pattern}.
3
+ unless defined?(Mustermann::Error)
4
+ Error = Class.new(StandardError) # Raised if anything goes wrong while generating a {Pattern}.
5
+ CompileError = Class.new(Error) # Raised if anything goes wrong while compiling a {Pattern}.
6
+ ParseError = Class.new(Error) # Raised if anything goes wrong while parsing a {Pattern}.
7
+ ExpandError = Class.new(Error) # Raised if anything goes wrong while expanding a {Pattern}.
8
+ end
7
9
  end
@@ -21,6 +21,7 @@ module Mustermann
21
21
  # @see (see Mustermann::Pattern#initialize)
22
22
  def initialize(string, check_anchors: true, **options)
23
23
  string = $1 if string.to_s =~ /\A\(\?\-mix\:(.*)\)\Z/ && string.inspect == "/#$1/"
24
+ string = string.source.gsub!(/(?<!\\)(?:\s|#.*$)/, '') if extended_regexp?(string)
24
25
  @check_anchors = check_anchors
25
26
  super(string, **options)
26
27
  end
@@ -40,6 +41,10 @@ module Mustermann
40
41
  raise CompileError, "regular expression should not contain %s: %p" % [illegal.to_s, @string]
41
42
  end
42
43
 
43
- private :compile, :check_anchors
44
+ def extended_regexp?(string)
45
+ not (Regexp.new(string).options & Regexp::EXTENDED).zero?
46
+ end
47
+
48
+ private :compile, :check_anchors, :extended_regexp?
44
49
  end
45
50
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Mustermann
3
- VERSION ||= '1.0.0'
3
+ VERSION ||= '1.0.1'
4
4
  end
data/mustermann.gemspec CHANGED
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  s.authors = ["Konstantin Haase", "Zachary Scott"]
8
8
  s.email = "sinatrarb@googlegroups.com"
9
9
  s.homepage = "https://github.com/sinatra/mustermann"
10
- s.summary = %q{use patterns like regular expressions}
11
- s.description = %q{library implementing patterns that behave like regular expressions}
10
+ s.summary = %q{Your personal string matching expert.}
11
+ s.description = %q{A library implementing patterns that behave like regular expressions.}
12
12
  s.license = 'MIT'
13
13
  s.required_ruby_version = '>= 2.2.0'
14
14
  s.files = `git ls-files`.split("\n")
data/spec/regular_spec.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'support'
3
+ require 'timeout'
3
4
  require 'mustermann/regular'
4
5
 
5
6
  describe Mustermann::Regular do
@@ -38,6 +39,22 @@ describe Mustermann::Regular do
38
39
  it { should match('/foo%2Fbar') .capturing foo: 'foo%2Fbar' }
39
40
  end
40
41
 
42
+
43
+ context 'with Regexp::EXTENDED' do
44
+ let(:pattern) {
45
+ %r{
46
+ \/compare\/ # match any URL beginning with \/compare\/
47
+ (.+) # extract the full path (including any directories)
48
+ \/ # match the final slash
49
+ ([^.]+) # match the first SHA1
50
+ \.{2,3} # match .. or ...
51
+ (.+) # match the second SHA1
52
+ }x
53
+ }
54
+ example { expect { Timeout.timeout(1){ Mustermann::Regular.new(pattern) }}.not_to raise_error(Timeout::Error) }
55
+ it { expect(Mustermann::Regular.new(pattern)).to match('/compare/foo/bar..baz') }
56
+ end
57
+
41
58
  describe :check_achnors do
42
59
  context 'raises on anchors' do
43
60
  example { expect { Mustermann::Regular.new('^foo') }.to raise_error(Mustermann::CompileError) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mustermann
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Haase
@@ -9,9 +9,9 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-03-04 00:00:00.000000000 Z
12
+ date: 2017-08-26 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: library implementing patterns that behave like regular expressions
14
+ description: A library implementing patterns that behave like regular expressions.
15
15
  email: sinatrarb@googlegroups.com
16
16
  executables: []
17
17
  extensions: []
@@ -92,8 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  version: '0'
93
93
  requirements: []
94
94
  rubyforge_project:
95
- rubygems_version: 2.5.1
95
+ rubygems_version: 2.6.11
96
96
  signing_key:
97
97
  specification_version: 4
98
- summary: use patterns like regular expressions
98
+ summary: Your personal string matching expert.
99
99
  test_files: []