uri_template 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/lib/uri_template.rb +27 -0
- data/lib/uri_template/draft7.rb +18 -37
- data/uri_template.gemspec +2 -2
- metadata +6 -6
data/CHANGELOG
CHANGED
data/lib/uri_template.rb
CHANGED
@@ -245,5 +245,32 @@ module URITemplate
|
|
245
245
|
def static_characters
|
246
246
|
@static_characters ||= tokens.select(&:literal?).map{|t| t.string.size }.inject(0,:+)
|
247
247
|
end
|
248
|
+
|
249
|
+
# Returns whether this uri-template is absolute.
|
250
|
+
# This is detected by checking for "://".
|
251
|
+
#
|
252
|
+
def absolute?
|
253
|
+
read_chars = ""
|
254
|
+
|
255
|
+
tokens.each do |token|
|
256
|
+
if token.expression?
|
257
|
+
read_chars << "x"
|
258
|
+
elsif token.literal?
|
259
|
+
read_chars << token.string
|
260
|
+
end
|
261
|
+
if read_chars =~ /^[a-z]+:\/\//i
|
262
|
+
return true
|
263
|
+
elsif read_chars =~ /(?<!:|\/)\/(?!\/)/
|
264
|
+
return false
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
return false
|
269
|
+
end
|
270
|
+
|
271
|
+
# Opposite of {#absolute?}
|
272
|
+
def relative?
|
273
|
+
!absolute?
|
274
|
+
end
|
248
275
|
|
249
276
|
end
|
data/lib/uri_template/draft7.rb
CHANGED
@@ -832,47 +832,32 @@ __REGEXP__
|
|
832
832
|
# so we can strip one '/'
|
833
833
|
return self.class.new( self.tokens[0..-2] + [ Literal.new(self.tokens.last.string[0..-2]) ] + other.tokens )
|
834
834
|
end
|
835
|
+
elsif other.tokens.first.kind_of? Literal
|
836
|
+
# okay, this template does not end with /, but the next starts with a literal => merge them!
|
837
|
+
if other.tokens.first.string[0] == '/'
|
838
|
+
return self.class.new( self.tokens[0..-2] + [Literal.new(self.tokens.last.string + other.tokens.first.string)] + other.tokens[1..-1] )
|
839
|
+
else
|
840
|
+
return self.class.new( self.tokens[0..-2] + [Literal.new(self.tokens.last.string + '/' + other.tokens.first.string)] + other.tokens[1..-1] )
|
841
|
+
end
|
835
842
|
end
|
836
843
|
end
|
837
|
-
|
844
|
+
|
845
|
+
if other.tokens.first.kind_of?(Literal)
|
846
|
+
if other.tokens.first.string[0] == '/'
|
847
|
+
return self.class.new( self.tokens + other.tokens )
|
848
|
+
else
|
849
|
+
return self.class.new( self.tokens + [Literal.new('/' + other.tokens.first.string)]+ other.tokens[1..-1] )
|
850
|
+
end
|
851
|
+
elsif other.tokens.first.kind_of?(Expression::Path)
|
838
852
|
return self.class.new( self.tokens + other.tokens )
|
839
853
|
else
|
840
854
|
return self.class.new( self.tokens + [Literal.new('/')] + other.tokens )
|
841
855
|
end
|
842
856
|
end
|
843
857
|
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
# xxx ...
|
848
|
-
# {xxx}x ...
|
849
|
-
#
|
850
|
-
# should not be relative:
|
851
|
-
# {proto}:// ...
|
852
|
-
# http:// ...
|
853
|
-
# http{ssl}:// ...
|
854
|
-
#
|
855
|
-
def absolute?
|
856
|
-
read_chars = ""
|
857
|
-
|
858
|
-
tokens.each do |token|
|
859
|
-
if token.kind_of? Expression
|
860
|
-
if token.class::OPERATOR == ''
|
861
|
-
read_chars << "x"
|
862
|
-
else
|
863
|
-
return false
|
864
|
-
end
|
865
|
-
elsif token.kind_of? Literal
|
866
|
-
read_chars << token.string
|
867
|
-
end
|
868
|
-
if read_chars =~ /^[a-z]+:\/\//i
|
869
|
-
return true
|
870
|
-
elsif read_chars =~ /(?<!:|\/)\/(?!\/)/
|
871
|
-
return false
|
872
|
-
end
|
873
|
-
end
|
874
|
-
|
875
|
-
return false
|
858
|
+
# Returns an array containing a the template tokens.
|
859
|
+
def tokens
|
860
|
+
@tokens ||= tokenize!
|
876
861
|
end
|
877
862
|
|
878
863
|
protected
|
@@ -881,10 +866,6 @@ protected
|
|
881
866
|
Tokenizer.new(pattern).to_a
|
882
867
|
end
|
883
868
|
|
884
|
-
def tokens
|
885
|
-
@tokens ||= tokenize!
|
886
|
-
end
|
887
|
-
|
888
869
|
# @private
|
889
870
|
def extract_matchdata(matchdata)
|
890
871
|
bc = 0
|
data/uri_template.gemspec
CHANGED
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.1.
|
4
|
+
version: 0.1.3
|
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-11-
|
12
|
+
date: 2011-11-15 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &26050760 !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: *26050760
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yard
|
27
|
-
requirement: &
|
27
|
+
requirement: &26050320 !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: *26050320
|
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
|
gem however is intended to be extended when newer specs evolve. For now only draft
|