mustermann19 0.3.1 → 0.3.1.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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +4 -3
  3. data/README.md +680 -376
  4. data/lib/mustermann/ast/compiler.rb +13 -7
  5. data/lib/mustermann/ast/expander.rb +11 -5
  6. data/lib/mustermann/ast/node.rb +27 -1
  7. data/lib/mustermann/ast/param_scanner.rb +20 -0
  8. data/lib/mustermann/ast/parser.rb +131 -12
  9. data/lib/mustermann/ast/pattern.rb +45 -6
  10. data/lib/mustermann/ast/template_generator.rb +28 -0
  11. data/lib/mustermann/ast/validation.rb +5 -3
  12. data/lib/mustermann/composite.rb +103 -0
  13. data/lib/mustermann/expander.rb +1 -1
  14. data/lib/mustermann/express.rb +34 -0
  15. data/lib/mustermann/flask.rb +204 -0
  16. data/lib/mustermann/identity.rb +54 -0
  17. data/lib/mustermann/pattern.rb +186 -12
  18. data/lib/mustermann/pattern_cache.rb +49 -0
  19. data/lib/mustermann/pyramid.rb +25 -0
  20. data/lib/mustermann/regexp_based.rb +18 -1
  21. data/lib/mustermann/regular.rb +1 -1
  22. data/lib/mustermann/shell.rb +8 -0
  23. data/lib/mustermann/simple.rb +1 -1
  24. data/lib/mustermann/simple_match.rb +5 -0
  25. data/lib/mustermann/sinatra.rb +19 -5
  26. data/lib/mustermann/string_scanner.rb +314 -0
  27. data/lib/mustermann/template.rb +10 -0
  28. data/lib/mustermann/to_pattern.rb +11 -6
  29. data/lib/mustermann/version.rb +1 -1
  30. data/lib/mustermann.rb +52 -3
  31. data/mustermann.gemspec +1 -1
  32. data/spec/composite_spec.rb +147 -0
  33. data/spec/expander_spec.rb +15 -0
  34. data/spec/express_spec.rb +209 -0
  35. data/spec/flask_spec.rb +361 -0
  36. data/spec/flask_subclass_spec.rb +368 -0
  37. data/spec/identity_spec.rb +44 -0
  38. data/spec/mustermann_spec.rb +14 -0
  39. data/spec/pattern_spec.rb +7 -3
  40. data/spec/pyramid_spec.rb +101 -0
  41. data/spec/rails_spec.rb +76 -2
  42. data/spec/regular_spec.rb +25 -0
  43. data/spec/shell_spec.rb +33 -0
  44. data/spec/simple_spec.rb +25 -0
  45. data/spec/sinatra_spec.rb +184 -9
  46. data/spec/string_scanner_spec.rb +271 -0
  47. data/spec/support/expand_matcher.rb +7 -5
  48. data/spec/support/generate_template_matcher.rb +27 -0
  49. data/spec/support/pattern.rb +3 -0
  50. data/spec/support/scan_matcher.rb +63 -0
  51. data/spec/support.rb +2 -1
  52. data/spec/template_spec.rb +22 -0
  53. data/spec/to_pattern_spec.rb +49 -0
  54. metadata +47 -61
  55. data/internals.md +0 -64
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mustermann19
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
5
- prerelease:
4
+ version: 0.3.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Konstantin Haase
@@ -10,76 +9,53 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-09-23 00:00:00.000000000 Z
12
+ date: 2014-11-23 00:00:00.000000000 Z
14
13
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: enumerable-lazy
17
- requirement: !ruby/object:Gem::Requirement
18
- none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ! '>='
29
- - !ruby/object:Gem::Version
30
- version: '0'
31
14
  - !ruby/object:Gem::Dependency
32
15
  name: rspec
33
16
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
17
  requirements:
36
- - - ! '>='
18
+ - - '>='
37
19
  - !ruby/object:Gem::Version
38
20
  version: '0'
39
21
  type: :development
40
22
  prerelease: false
41
23
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
24
  requirements:
44
- - - ! '>='
25
+ - - '>='
45
26
  - !ruby/object:Gem::Version
46
27
  version: '0'
47
28
  - !ruby/object:Gem::Dependency
48
29
  name: rspec-its
49
30
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
31
  requirements:
52
- - - ! '>='
32
+ - - '>='
53
33
  - !ruby/object:Gem::Version
54
34
  version: '0'
55
35
  type: :development
56
36
  prerelease: false
57
37
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
38
  requirements:
60
- - - ! '>='
39
+ - - '>='
61
40
  - !ruby/object:Gem::Version
62
41
  version: '0'
63
42
  - !ruby/object:Gem::Dependency
64
43
  name: addressable
65
44
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
45
  requirements:
68
- - - ! '>='
46
+ - - '>='
69
47
  - !ruby/object:Gem::Version
70
48
  version: '0'
71
49
  type: :development
72
50
  prerelease: false
73
51
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
52
  requirements:
76
- - - ! '>='
53
+ - - '>='
77
54
  - !ruby/object:Gem::Version
78
55
  version: '0'
79
56
  - !ruby/object:Gem::Dependency
80
57
  name: sinatra
81
58
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
59
  requirements:
84
60
  - - ~>
85
61
  - !ruby/object:Gem::Version
@@ -87,7 +63,6 @@ dependencies:
87
63
  type: :development
88
64
  prerelease: false
89
65
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
66
  requirements:
92
67
  - - ~>
93
68
  - !ruby/object:Gem::Version
@@ -95,81 +70,71 @@ dependencies:
95
70
  - !ruby/object:Gem::Dependency
96
71
  name: rack-test
97
72
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
73
  requirements:
100
- - - ! '>='
74
+ - - '>='
101
75
  - !ruby/object:Gem::Version
102
76
  version: '0'
103
77
  type: :development
104
78
  prerelease: false
105
79
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
80
  requirements:
108
- - - ! '>='
81
+ - - '>='
109
82
  - !ruby/object:Gem::Version
110
83
  version: '0'
111
84
  - !ruby/object:Gem::Dependency
112
85
  name: rake
113
86
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
87
  requirements:
116
- - - ! '>='
88
+ - - '>='
117
89
  - !ruby/object:Gem::Version
118
90
  version: '0'
119
91
  type: :development
120
92
  prerelease: false
121
93
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
94
  requirements:
124
- - - ! '>='
95
+ - - '>='
125
96
  - !ruby/object:Gem::Version
126
97
  version: '0'
127
98
  - !ruby/object:Gem::Dependency
128
99
  name: yard
129
100
  requirement: !ruby/object:Gem::Requirement
130
- none: false
131
101
  requirements:
132
- - - ! '>='
102
+ - - '>='
133
103
  - !ruby/object:Gem::Version
134
104
  version: '0'
135
105
  type: :development
136
106
  prerelease: false
137
107
  version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
108
  requirements:
140
- - - ! '>='
109
+ - - '>='
141
110
  - !ruby/object:Gem::Version
142
111
  version: '0'
143
112
  - !ruby/object:Gem::Dependency
144
113
  name: simplecov
145
114
  requirement: !ruby/object:Gem::Requirement
146
- none: false
147
115
  requirements:
148
- - - ! '>='
116
+ - - '>='
149
117
  - !ruby/object:Gem::Version
150
118
  version: '0'
151
119
  type: :development
152
120
  prerelease: false
153
121
  version_requirements: !ruby/object:Gem::Requirement
154
- none: false
155
122
  requirements:
156
- - - ! '>='
123
+ - - '>='
157
124
  - !ruby/object:Gem::Version
158
125
  version: '0'
159
126
  - !ruby/object:Gem::Dependency
160
127
  name: coveralls
161
128
  requirement: !ruby/object:Gem::Requirement
162
- none: false
163
129
  requirements:
164
- - - ! '>='
130
+ - - '>='
165
131
  - !ruby/object:Gem::Version
166
132
  version: '0'
167
133
  type: :development
168
134
  prerelease: false
169
135
  version_requirements: !ruby/object:Gem::Requirement
170
- none: false
171
136
  requirements:
172
- - - ! '>='
137
+ - - '>='
173
138
  - !ruby/object:Gem::Version
174
139
  version: '0'
175
140
  description: library implementing patterns that behave like regular expressions for
@@ -179,7 +144,6 @@ executables: []
179
144
  extensions: []
180
145
  extra_rdoc_files:
181
146
  - README.md
182
- - internals.md
183
147
  files:
184
148
  - .gitignore
185
149
  - .rspec
@@ -193,25 +157,31 @@ files:
193
157
  - bench/regexp.rb
194
158
  - bench/simple_vs_sinatra.rb
195
159
  - bench/template_vs_addressable.rb
196
- - internals.md
197
160
  - lib/mustermann.rb
198
161
  - lib/mustermann/ast/compiler.rb
199
162
  - lib/mustermann/ast/expander.rb
200
163
  - lib/mustermann/ast/node.rb
164
+ - lib/mustermann/ast/param_scanner.rb
201
165
  - lib/mustermann/ast/parser.rb
202
166
  - lib/mustermann/ast/pattern.rb
167
+ - lib/mustermann/ast/template_generator.rb
203
168
  - lib/mustermann/ast/transformer.rb
204
169
  - lib/mustermann/ast/translator.rb
205
170
  - lib/mustermann/ast/tree_renderer.rb
206
171
  - lib/mustermann/ast/validation.rb
207
172
  - lib/mustermann/caster.rb
173
+ - lib/mustermann/composite.rb
208
174
  - lib/mustermann/equality_map.rb
209
175
  - lib/mustermann/error.rb
210
176
  - lib/mustermann/expander.rb
177
+ - lib/mustermann/express.rb
211
178
  - lib/mustermann/extension.rb
179
+ - lib/mustermann/flask.rb
212
180
  - lib/mustermann/identity.rb
213
181
  - lib/mustermann/mapper.rb
214
182
  - lib/mustermann/pattern.rb
183
+ - lib/mustermann/pattern_cache.rb
184
+ - lib/mustermann/pyramid.rb
215
185
  - lib/mustermann/rails.rb
216
186
  - lib/mustermann/regexp_based.rb
217
187
  - lib/mustermann/regular.rb
@@ -222,16 +192,22 @@ files:
222
192
  - lib/mustermann/simple.rb
223
193
  - lib/mustermann/simple_match.rb
224
194
  - lib/mustermann/sinatra.rb
195
+ - lib/mustermann/string_scanner.rb
225
196
  - lib/mustermann/template.rb
226
197
  - lib/mustermann/to_pattern.rb
227
198
  - lib/mustermann/version.rb
228
199
  - mustermann.gemspec
200
+ - spec/composite_spec.rb
229
201
  - spec/expander_spec.rb
202
+ - spec/express_spec.rb
230
203
  - spec/extension_spec.rb
204
+ - spec/flask_spec.rb
205
+ - spec/flask_subclass_spec.rb
231
206
  - spec/identity_spec.rb
232
207
  - spec/mapper_spec.rb
233
208
  - spec/mustermann_spec.rb
234
209
  - spec/pattern_spec.rb
210
+ - spec/pyramid_spec.rb
235
211
  - spec/rails_spec.rb
236
212
  - spec/regexp_based_spec.rb
237
213
  - spec/regular_spec.rb
@@ -241,46 +217,53 @@ files:
241
217
  - spec/simple_match_spec.rb
242
218
  - spec/simple_spec.rb
243
219
  - spec/sinatra_spec.rb
220
+ - spec/string_scanner_spec.rb
244
221
  - spec/support.rb
245
222
  - spec/support/coverage.rb
246
223
  - spec/support/env.rb
247
224
  - spec/support/expand_matcher.rb
225
+ - spec/support/generate_template_matcher.rb
248
226
  - spec/support/match_matcher.rb
249
227
  - spec/support/pattern.rb
228
+ - spec/support/scan_matcher.rb
250
229
  - spec/template_spec.rb
251
230
  - spec/to_pattern_spec.rb
252
231
  homepage: https://github.com/namusyaka/mustermann
253
232
  licenses:
254
233
  - MIT
234
+ metadata: {}
255
235
  post_install_message:
256
236
  rdoc_options: []
257
237
  require_paths:
258
238
  - lib
259
239
  required_ruby_version: !ruby/object:Gem::Requirement
260
- none: false
261
240
  requirements:
262
- - - ! '>='
241
+ - - '>='
263
242
  - !ruby/object:Gem::Version
264
243
  version: 1.9.2
265
244
  required_rubygems_version: !ruby/object:Gem::Requirement
266
- none: false
267
245
  requirements:
268
- - - ! '>='
246
+ - - '>='
269
247
  - !ruby/object:Gem::Version
270
248
  version: '0'
271
249
  requirements: []
272
250
  rubyforge_project:
273
- rubygems_version: 1.8.23.2
251
+ rubygems_version: 2.0.14
274
252
  signing_key:
275
- specification_version: 3
253
+ specification_version: 4
276
254
  summary: use patterns like regular expressions
277
255
  test_files:
256
+ - spec/composite_spec.rb
278
257
  - spec/expander_spec.rb
258
+ - spec/express_spec.rb
279
259
  - spec/extension_spec.rb
260
+ - spec/flask_spec.rb
261
+ - spec/flask_subclass_spec.rb
280
262
  - spec/identity_spec.rb
281
263
  - spec/mapper_spec.rb
282
264
  - spec/mustermann_spec.rb
283
265
  - spec/pattern_spec.rb
266
+ - spec/pyramid_spec.rb
284
267
  - spec/rails_spec.rb
285
268
  - spec/regexp_based_spec.rb
286
269
  - spec/regular_spec.rb
@@ -290,12 +273,15 @@ test_files:
290
273
  - spec/simple_match_spec.rb
291
274
  - spec/simple_spec.rb
292
275
  - spec/sinatra_spec.rb
276
+ - spec/string_scanner_spec.rb
293
277
  - spec/support.rb
294
278
  - spec/support/coverage.rb
295
279
  - spec/support/env.rb
296
280
  - spec/support/expand_matcher.rb
281
+ - spec/support/generate_template_matcher.rb
297
282
  - spec/support/match_matcher.rb
298
283
  - spec/support/pattern.rb
284
+ - spec/support/scan_matcher.rb
299
285
  - spec/template_spec.rb
300
286
  - spec/to_pattern_spec.rb
301
287
  has_rdoc:
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
- ...