uri_template 0.0.1 → 0.0.2
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.
- data/CHANGELOG +6 -0
- data/lib/uri_template/draft7.rb +54 -32
- data/uri_template.gemspec +3 -3
- metadata +7 -6
data/CHANGELOG
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
# 0.0.2 - 1.11.2011
|
2
|
+
* BUGFIX: Concatenating empty sections no more leads to catch-all templates, when an emtpy template was appreciated.
|
3
|
+
+ The extracted variables now contains the keys :suffix and :prefix if the match didn't consume the whole uri.
|
4
|
+
|
5
|
+
# 0.0.1 - 30.10.2011
|
6
|
+
Initial version
|
data/lib/uri_template/draft7.rb
CHANGED
@@ -130,19 +130,22 @@ __REGEXP__
|
|
130
130
|
end
|
131
131
|
|
132
132
|
# @private
|
133
|
-
class
|
134
|
-
|
133
|
+
class Terminal
|
135
134
|
def expand(*_)
|
136
135
|
''
|
137
136
|
end
|
138
137
|
|
139
|
-
def to_r_source(*_)
|
140
|
-
'^'
|
141
|
-
end
|
142
|
-
|
143
138
|
def size
|
144
139
|
0
|
145
140
|
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# @private
|
144
|
+
class LeftBound < Terminal
|
145
|
+
|
146
|
+
def to_r_source(*_)
|
147
|
+
'^'
|
148
|
+
end
|
146
149
|
|
147
150
|
def to_s
|
148
151
|
''
|
@@ -151,20 +154,12 @@ __REGEXP__
|
|
151
154
|
end
|
152
155
|
|
153
156
|
# @private
|
154
|
-
class RightBound
|
155
|
-
|
156
|
-
def expand(*_)
|
157
|
-
''
|
158
|
-
end
|
157
|
+
class RightBound < Terminal
|
159
158
|
|
160
159
|
def to_r_source(*_)
|
161
160
|
'$'
|
162
161
|
end
|
163
162
|
|
164
|
-
def size
|
165
|
-
0
|
166
|
-
end
|
167
|
-
|
168
163
|
def to_s
|
169
164
|
''
|
170
165
|
end
|
@@ -172,16 +167,12 @@ __REGEXP__
|
|
172
167
|
end
|
173
168
|
|
174
169
|
# @private
|
175
|
-
class Open
|
176
|
-
|
177
|
-
''
|
178
|
-
end
|
170
|
+
class Open < Terminal
|
171
|
+
|
179
172
|
def to_r_source(*_)
|
180
173
|
''
|
181
174
|
end
|
182
|
-
|
183
|
-
0
|
184
|
-
end
|
175
|
+
|
185
176
|
def to_s
|
186
177
|
"\u2026"
|
187
178
|
end
|
@@ -712,6 +703,12 @@ __REGEXP__
|
|
712
703
|
return nil
|
713
704
|
else
|
714
705
|
result = extract_matchdata(m)
|
706
|
+
if m.pre_match and m.pre_match.size > 0
|
707
|
+
result.unshift( [:prefix, m.pre_match] )
|
708
|
+
end
|
709
|
+
if m.post_match and m.post_match.size > 0
|
710
|
+
result.push( [:suffix, m.post_match] )
|
711
|
+
end
|
715
712
|
if post_processing.include? :convert_values
|
716
713
|
result.map!{|k,v| [k, Utils.pair_array_to_hash(v)] }
|
717
714
|
end
|
@@ -775,8 +772,8 @@ __REGEXP__
|
|
775
772
|
# end
|
776
773
|
# return "not found"
|
777
774
|
# end
|
778
|
-
# route( 'app_a/do_something' ) #=> "app_a: do_something with {}"
|
779
|
-
# route( 'app_b/1337/something_else' ) #=> "app_b: something_else with {\"x\"=>\"1337\"}"
|
775
|
+
# route( 'app_a/do_something' ) #=> "app_a: do_something with {:suffix=>\"do_something\"}"
|
776
|
+
# route( 'app_b/1337/something_else' ) #=> "app_b: something_else with {\"x\"=>\"1337\", :suffix=>\"something_else\"}"
|
780
777
|
# route( 'bla' ) #=> 'not found'
|
781
778
|
#
|
782
779
|
class Section < self
|
@@ -800,16 +797,40 @@ __REGEXP__
|
|
800
797
|
#
|
801
798
|
# @example
|
802
799
|
# sect = URITemplate::Draft7::Section.new('/prefix…')
|
803
|
-
# sect >> '…/mid…' >> '…/end'
|
800
|
+
# sect >> '…/mid…' >> '…/end' #=> URITemplate::Draft7::Section.new('/prefix/mid/end')
|
801
|
+
#
|
802
|
+
# @example
|
803
|
+
# sect = URITemplate::Draft7::Section.new('/prefix…')
|
804
|
+
# sect >> '……' #=> sect
|
805
|
+
#
|
806
|
+
# @example Just ellipsis has a special syntax to allow empty matches.
|
807
|
+
# sect = URITemplate::Draft7::Section.new('…')
|
808
|
+
# combo = sect >> '…'
|
809
|
+
# combo.pattern #=> ""
|
810
|
+
# combo === "" #=> true
|
811
|
+
# combo === "/foo" #=> false
|
804
812
|
#
|
805
813
|
# @return Section
|
806
814
|
def >>(other)
|
807
815
|
o = self.class.try_convert(other)
|
808
816
|
if o.kind_of? Section
|
809
|
-
if !self.right_bound?
|
810
|
-
|
817
|
+
if !self.right_bound?
|
818
|
+
if o.pattern == ELLIPSIS
|
819
|
+
return self.class.new("", o.options)
|
820
|
+
elsif !o.left_bound?
|
821
|
+
#if self.tokens.size == 1
|
822
|
+
# return o
|
823
|
+
#end
|
824
|
+
tkns = self.tokens[0..-2] + o.tokens[1..-1]
|
825
|
+
unless tkns.first.kind_of? Terminal
|
826
|
+
tkns.unshift(LeftBound.new)
|
827
|
+
end
|
828
|
+
unless tkns.last.kind_of? Terminal
|
829
|
+
tkns.push(RightBound.new)
|
830
|
+
end
|
831
|
+
return self.class.new(tkns, o.options)
|
832
|
+
end
|
811
833
|
end
|
812
|
-
else
|
813
834
|
raise ArgumentError, "Expected something that could be converted to a URITemplate section, but got #{other.inspect}"
|
814
835
|
end
|
815
836
|
end
|
@@ -818,11 +839,12 @@ __REGEXP__
|
|
818
839
|
# @private
|
819
840
|
def tokenize!
|
820
841
|
pat = pattern
|
821
|
-
if pat == ELLIPSIS
|
822
|
-
return [Open.new]
|
842
|
+
if pat == ELLIPSIS # just ellipsis
|
843
|
+
return [LeftBound.new, Open.new]
|
844
|
+
else
|
845
|
+
lb = (pat[0] != ELLIPSIS)
|
846
|
+
rb = (pat[-1] != ELLIPSIS)
|
823
847
|
end
|
824
|
-
lb = (pat[0] != ELLIPSIS)
|
825
|
-
rb = (pat[-1] != ELLIPSIS)
|
826
848
|
pat = pat[ (lb ? 0 : 1)..(rb ? -1 : -2) ]
|
827
849
|
[lb ? LeftBound.new : Open.new] + Tokenizer.new(pat).to_a + [rb ? RightBound.new : Open.new]
|
828
850
|
end
|
data/uri_template.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'uri_template'
|
3
|
-
s.version = '0.0.
|
4
|
-
s.date = '2011-
|
3
|
+
s.version = '0.0.2'
|
4
|
+
s.date = '2011-11-01'
|
5
5
|
s.authors = ["HannesG"]
|
6
6
|
s.email = %q{hannes.georg@googlemail.com}
|
7
7
|
s.summary = 'A templating system for URIs.'
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
|
11
11
|
s.require_paths = ['lib']
|
12
12
|
|
13
|
-
s.files = Dir.glob('lib/**/**/*.rb') + ['uri_template.gemspec', 'README']
|
13
|
+
s.files = Dir.glob('lib/**/**/*.rb') + ['uri_template.gemspec', 'README', 'CHANGELOG']
|
14
14
|
|
15
15
|
s.add_development_dependency 'rspec'
|
16
16
|
s.add_development_dependency 'yard'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uri_template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-01 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &22417520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *22417520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yard
|
27
|
-
requirement: &
|
27
|
+
requirement: &22415680 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *22415680
|
36
36
|
description: ! 'A templating system for URIs, which implements http://tools.ietf.org/html/draft-gregorio-uritemplate-07
|
37
37
|
. An implementation of an older version of that spec is known as addressable. This
|
38
38
|
system however is intended to be extended when newer specs evolve. For now only
|
@@ -48,6 +48,7 @@ files:
|
|
48
48
|
- lib/uri_template/utils.rb
|
49
49
|
- uri_template.gemspec
|
50
50
|
- README
|
51
|
+
- CHANGELOG
|
51
52
|
homepage: http://github.com/hannesg/uri_template
|
52
53
|
licenses: []
|
53
54
|
post_install_message:
|