mustermann 0.3.1 → 0.4.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 +4 -4
- data/README.md +429 -672
- data/lib/mustermann.rb +95 -20
- data/lib/mustermann/ast/boundaries.rb +44 -0
- data/lib/mustermann/ast/compiler.rb +13 -7
- data/lib/mustermann/ast/expander.rb +22 -12
- data/lib/mustermann/ast/node.rb +69 -5
- data/lib/mustermann/ast/param_scanner.rb +20 -0
- data/lib/mustermann/ast/parser.rb +138 -19
- data/lib/mustermann/ast/pattern.rb +59 -7
- data/lib/mustermann/ast/template_generator.rb +28 -0
- data/lib/mustermann/ast/transformer.rb +2 -2
- data/lib/mustermann/ast/translator.rb +20 -0
- data/lib/mustermann/ast/validation.rb +4 -3
- data/lib/mustermann/composite.rb +101 -0
- data/lib/mustermann/expander.rb +2 -2
- data/lib/mustermann/identity.rb +56 -0
- data/lib/mustermann/pattern.rb +185 -10
- data/lib/mustermann/pattern_cache.rb +49 -0
- data/lib/mustermann/regexp.rb +1 -0
- data/lib/mustermann/regexp_based.rb +18 -1
- data/lib/mustermann/regular.rb +4 -1
- data/lib/mustermann/simple_match.rb +5 -0
- data/lib/mustermann/sinatra.rb +22 -5
- data/lib/mustermann/to_pattern.rb +11 -6
- data/lib/mustermann/version.rb +1 -1
- data/mustermann.gemspec +1 -14
- data/spec/ast_spec.rb +14 -0
- data/spec/composite_spec.rb +147 -0
- data/spec/expander_spec.rb +15 -0
- data/spec/identity_spec.rb +44 -0
- data/spec/mustermann_spec.rb +17 -2
- data/spec/pattern_spec.rb +7 -3
- data/spec/regular_spec.rb +25 -0
- data/spec/sinatra_spec.rb +184 -9
- data/spec/to_pattern_spec.rb +49 -0
- metadata +15 -180
- data/.gitignore +0 -18
- data/.rspec +0 -2
- data/.travis.yml +0 -4
- data/.yardopts +0 -1
- data/Gemfile +0 -2
- data/LICENSE +0 -22
- data/Rakefile +0 -6
- data/internals.md +0 -64
- data/lib/mustermann/ast/tree_renderer.rb +0 -29
- data/lib/mustermann/rails.rb +0 -17
- data/lib/mustermann/shell.rb +0 -29
- data/lib/mustermann/simple.rb +0 -35
- data/lib/mustermann/template.rb +0 -47
- data/spec/rails_spec.rb +0 -521
- data/spec/shell_spec.rb +0 -108
- data/spec/simple_spec.rb +0 -236
- data/spec/support.rb +0 -5
- data/spec/support/coverage.rb +0 -16
- data/spec/support/env.rb +0 -16
- data/spec/support/expand_matcher.rb +0 -27
- data/spec/support/match_matcher.rb +0 -39
- data/spec/support/pattern.rb +0 -39
- data/spec/template_spec.rb +0 -814
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mustermann
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Konstantin Haase
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tool
|
@@ -24,220 +24,63 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.2'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec-its
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: addressable
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: sinatra
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.4'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.4'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rack-test
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rake
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: yard
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: redcarpet
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: simplecov
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: coveralls
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
27
|
description: library implementing patterns that behave like regular expressions
|
168
28
|
email: konstantin.mailinglists@googlemail.com
|
169
29
|
executables: []
|
170
30
|
extensions: []
|
171
|
-
extra_rdoc_files:
|
172
|
-
- README.md
|
173
|
-
- internals.md
|
31
|
+
extra_rdoc_files: []
|
174
32
|
files:
|
175
|
-
- ".gitignore"
|
176
|
-
- ".rspec"
|
177
|
-
- ".travis.yml"
|
178
|
-
- ".yardopts"
|
179
|
-
- Gemfile
|
180
|
-
- LICENSE
|
181
33
|
- README.md
|
182
|
-
- Rakefile
|
183
34
|
- bench/capturing.rb
|
184
35
|
- bench/regexp.rb
|
185
36
|
- bench/simple_vs_sinatra.rb
|
186
37
|
- bench/template_vs_addressable.rb
|
187
|
-
- internals.md
|
188
38
|
- lib/mustermann.rb
|
39
|
+
- lib/mustermann/ast/boundaries.rb
|
189
40
|
- lib/mustermann/ast/compiler.rb
|
190
41
|
- lib/mustermann/ast/expander.rb
|
191
42
|
- lib/mustermann/ast/node.rb
|
43
|
+
- lib/mustermann/ast/param_scanner.rb
|
192
44
|
- lib/mustermann/ast/parser.rb
|
193
45
|
- lib/mustermann/ast/pattern.rb
|
46
|
+
- lib/mustermann/ast/template_generator.rb
|
194
47
|
- lib/mustermann/ast/transformer.rb
|
195
48
|
- lib/mustermann/ast/translator.rb
|
196
|
-
- lib/mustermann/ast/tree_renderer.rb
|
197
49
|
- lib/mustermann/ast/validation.rb
|
198
50
|
- lib/mustermann/caster.rb
|
51
|
+
- lib/mustermann/composite.rb
|
199
52
|
- lib/mustermann/error.rb
|
200
53
|
- lib/mustermann/expander.rb
|
201
54
|
- lib/mustermann/extension.rb
|
202
55
|
- lib/mustermann/identity.rb
|
203
56
|
- lib/mustermann/mapper.rb
|
204
57
|
- lib/mustermann/pattern.rb
|
205
|
-
- lib/mustermann/
|
58
|
+
- lib/mustermann/pattern_cache.rb
|
59
|
+
- lib/mustermann/regexp.rb
|
206
60
|
- lib/mustermann/regexp_based.rb
|
207
61
|
- lib/mustermann/regular.rb
|
208
62
|
- lib/mustermann/router.rb
|
209
63
|
- lib/mustermann/router/rack.rb
|
210
64
|
- lib/mustermann/router/simple.rb
|
211
|
-
- lib/mustermann/shell.rb
|
212
|
-
- lib/mustermann/simple.rb
|
213
65
|
- lib/mustermann/simple_match.rb
|
214
66
|
- lib/mustermann/sinatra.rb
|
215
|
-
- lib/mustermann/template.rb
|
216
67
|
- lib/mustermann/to_pattern.rb
|
217
68
|
- lib/mustermann/version.rb
|
218
69
|
- mustermann.gemspec
|
70
|
+
- spec/ast_spec.rb
|
71
|
+
- spec/composite_spec.rb
|
219
72
|
- spec/expander_spec.rb
|
220
73
|
- spec/extension_spec.rb
|
221
74
|
- spec/identity_spec.rb
|
222
75
|
- spec/mapper_spec.rb
|
223
76
|
- spec/mustermann_spec.rb
|
224
77
|
- spec/pattern_spec.rb
|
225
|
-
- spec/rails_spec.rb
|
226
78
|
- spec/regexp_based_spec.rb
|
227
79
|
- spec/regular_spec.rb
|
228
80
|
- spec/router/rack_spec.rb
|
229
81
|
- spec/router/simple_spec.rb
|
230
|
-
- spec/shell_spec.rb
|
231
82
|
- spec/simple_match_spec.rb
|
232
|
-
- spec/simple_spec.rb
|
233
83
|
- spec/sinatra_spec.rb
|
234
|
-
- spec/support.rb
|
235
|
-
- spec/support/coverage.rb
|
236
|
-
- spec/support/env.rb
|
237
|
-
- spec/support/expand_matcher.rb
|
238
|
-
- spec/support/match_matcher.rb
|
239
|
-
- spec/support/pattern.rb
|
240
|
-
- spec/template_spec.rb
|
241
84
|
- spec/to_pattern_spec.rb
|
242
85
|
homepage: https://github.com/rkh/mustermann
|
243
86
|
licenses:
|
@@ -251,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
251
94
|
requirements:
|
252
95
|
- - ">="
|
253
96
|
- !ruby/object:Gem::Version
|
254
|
-
version: 2.
|
97
|
+
version: 2.1.0
|
255
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
99
|
requirements:
|
257
100
|
- - ">="
|
@@ -259,32 +102,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
102
|
version: '0'
|
260
103
|
requirements: []
|
261
104
|
rubyforge_project:
|
262
|
-
rubygems_version: 2.
|
105
|
+
rubygems_version: 2.4.3
|
263
106
|
signing_key:
|
264
107
|
specification_version: 4
|
265
108
|
summary: use patterns like regular expressions
|
266
109
|
test_files:
|
110
|
+
- spec/ast_spec.rb
|
111
|
+
- spec/composite_spec.rb
|
267
112
|
- spec/expander_spec.rb
|
268
113
|
- spec/extension_spec.rb
|
269
114
|
- spec/identity_spec.rb
|
270
115
|
- spec/mapper_spec.rb
|
271
116
|
- spec/mustermann_spec.rb
|
272
117
|
- spec/pattern_spec.rb
|
273
|
-
- spec/rails_spec.rb
|
274
118
|
- spec/regexp_based_spec.rb
|
275
119
|
- spec/regular_spec.rb
|
276
120
|
- spec/router/rack_spec.rb
|
277
121
|
- spec/router/simple_spec.rb
|
278
|
-
- spec/shell_spec.rb
|
279
122
|
- spec/simple_match_spec.rb
|
280
|
-
- spec/simple_spec.rb
|
281
123
|
- spec/sinatra_spec.rb
|
282
|
-
- spec/support.rb
|
283
|
-
- spec/support/coverage.rb
|
284
|
-
- spec/support/env.rb
|
285
|
-
- spec/support/expand_matcher.rb
|
286
|
-
- spec/support/match_matcher.rb
|
287
|
-
- spec/support/pattern.rb
|
288
|
-
- spec/template_spec.rb
|
289
124
|
- spec/to_pattern_spec.rb
|
290
125
|
has_rdoc:
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
data/.yardopts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
- README.md internals.md
|
data/Gemfile
DELETED
data/LICENSE
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2013 Konstantin Haase
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person
|
4
|
-
obtaining a copy of this software and associated documentation
|
5
|
-
files (the "Software"), to deal in the Software without
|
6
|
-
restriction, including without limitation the rights to use,
|
7
|
-
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
-
copies of the Software, and to permit persons to whom the
|
9
|
-
Software is furnished to do so, subject to the following
|
10
|
-
conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be
|
13
|
-
included in all copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
-
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
-
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
-
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
-
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
-
OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
DELETED
data/internals.md
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
# Internal API
|
2
|
-
|
3
|
-
This document describes how to use [Mustermann](README.md)'s internal API.
|
4
|
-
|
5
|
-
It is a secondary goal to keep the internal API as stable as possible, in a state where it would well be possible to interface with it.
|
6
|
-
However, the internal API is not covered by Semantic Versioning. As a rule of thumb, no backwards incompatible changes should be introduced to the API in minor releases (starting from 1.0.0).
|
7
|
-
|
8
|
-
Should the internal API gain widespread/production use, we might consider moving parts of it over into the public API.
|
9
|
-
|
10
|
-
Here is a quick example of what you can do with this:
|
11
|
-
|
12
|
-
``` ruby
|
13
|
-
require 'mustermann/ast/pattern'
|
14
|
-
|
15
|
-
class MyPattern < Mustermann::AST::Pattern
|
16
|
-
on("~") { |c| node(:capture, buffer[1]) if expect(/\{(\w+)\}/) }
|
17
|
-
on("+") { |c| node(:named_splat, buffer[1]) if expect(/\{(\w+)\}/) }
|
18
|
-
on("?") { |c| node(:optional, node(:capture, buffer[1])) if expect(/\{(\w+)\}/) }
|
19
|
-
end
|
20
|
-
|
21
|
-
pattern = MyPattern.new("/+{prefix}/~{page}/?{optional}")
|
22
|
-
pattern.params("/a/") # => nil
|
23
|
-
pattern.params("/a/b/") # => { "prefix" => "a", "page" => "b", "optional" => nil }
|
24
|
-
pattern.params("/a/b/c") # => { "prefix" => "a", "page" => "b", "optional" => "c" }
|
25
|
-
pattern.params("/a/b/c/") # => { "prefix" => "a/b", "page" => "c", "optional" => nil }
|
26
|
-
|
27
|
-
pattern.expand(prefix: "a", page: "foo") # => "/a/foo/"
|
28
|
-
pattern.expand(prefix: "a/b", page: "c/d") # => "/a/b/c%2Fd/"
|
29
|
-
|
30
|
-
require 'mustermann'
|
31
|
-
Mustermann.register(:my_pattern, MyPattern, load: false)
|
32
|
-
Mustermann.new('/+{prefix}/~{page}/?{optional}', type: :my_pattern) # => #<MyPattern:"/+{prefix}/~{page}/?{optional}">
|
33
|
-
|
34
|
-
require 'sinatra/base'
|
35
|
-
class MyApp < Sinatra::Base
|
36
|
-
register Mustermann
|
37
|
-
set :pattern, type: :my_pattern
|
38
|
-
|
39
|
-
get '/hello/~{name}' do
|
40
|
-
"Hello #{params[:name].capitalize}!"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
require 'mustermann/ast/tree_renderer'
|
45
|
-
ast = MyPattern::Parser.parse(pattern.to_s)
|
46
|
-
puts Mustermann::AST::TreeRenderer.render(ast)
|
47
|
-
|
48
|
-
```
|
49
|
-
|
50
|
-
## Pattern Registration
|
51
|
-
|
52
|
-
...
|
53
|
-
|
54
|
-
## Build Your Own Pattern
|
55
|
-
|
56
|
-
...
|
57
|
-
|
58
|
-
## Patterns Based on Regular Expressions
|
59
|
-
|
60
|
-
...
|
61
|
-
|
62
|
-
## AST-Based Patterns
|
63
|
-
|
64
|
-
...
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'mustermann/ast/translator'
|
2
|
-
|
3
|
-
module Mustermann
|
4
|
-
module AST
|
5
|
-
# Turns an AST into a human readable string.
|
6
|
-
# @!visibility private
|
7
|
-
class TreeRenderer < Translator
|
8
|
-
# @example
|
9
|
-
# Mustermann::AST::TreeRenderer.render Mustermann::Sinatra::Parser.parse('/foo')
|
10
|
-
#
|
11
|
-
# @!visibility private
|
12
|
-
def self.render(ast)
|
13
|
-
new.translate(ast)
|
14
|
-
end
|
15
|
-
|
16
|
-
translate(Object) { inspect }
|
17
|
-
translate(Array) { map { |e| "\n" << t(e) }.join.gsub("\n", "\n ") }
|
18
|
-
translate(:node) { "#{t.type(node)} #{t(payload)}" }
|
19
|
-
translate(:with_look_ahead) { "#{t.type(node)} #{t(head)} #{t(payload)}" }
|
20
|
-
|
21
|
-
# Turns a class name into a node identifier.
|
22
|
-
#
|
23
|
-
# @!visibility private
|
24
|
-
def type(node)
|
25
|
-
node.class.name[/[^:]+$/].split(/(?<=.)(?=[A-Z])/).map(&:downcase).join(?_)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|