rfc3987 0.1.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 +7 -0
- data/.gitignore +13 -0
- data/.rspec +3 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +21 -0
- data/README.md +37 -0
- data/Rakefile +6 -0
- data/bin/console +8 -0
- data/bin/setup +8 -0
- data/lib/rfc3987/parser.rb +13 -0
- data/lib/rfc3987/version.rb +3 -0
- data/lib/rfc3987.rb +3625 -0
- data/rfc3987.gemspec +30 -0
- data/rfc3987.treetop +196 -0
- metadata +129 -0
data/rfc3987.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rfc3987/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'rfc3987'
|
8
|
+
spec.version = RFC3987::VERSION
|
9
|
+
spec.authors = ['kajisha']
|
10
|
+
spec.email = ['kajisha@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = %q{}
|
13
|
+
spec.description = %q{}
|
14
|
+
spec.homepage = 'https://github.com/kajisha/rfc3987'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
spec.bindir = 'exe'
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ['lib']
|
23
|
+
|
24
|
+
spec.add_dependency 'treetop'
|
25
|
+
|
26
|
+
spec.add_development_dependency 'bundler'
|
27
|
+
spec.add_development_dependency 'rake'
|
28
|
+
spec.add_development_dependency 'rspec'
|
29
|
+
spec.add_development_dependency 'pry'
|
30
|
+
end
|
data/rfc3987.treetop
ADDED
@@ -0,0 +1,196 @@
|
|
1
|
+
grammar RFC3987
|
2
|
+
rule IRI
|
3
|
+
scheme ':' ihier_part ( '?' iquery )? ( '#' ifragment )?
|
4
|
+
end
|
5
|
+
|
6
|
+
rule ihier_part
|
7
|
+
'//' iauthority ipath_abempty / ipath_absolute / ipath_rootless / ipath_empty
|
8
|
+
end
|
9
|
+
|
10
|
+
rule IRI_reference
|
11
|
+
IRI / irelative_ref
|
12
|
+
end
|
13
|
+
|
14
|
+
rule absolute_IRI
|
15
|
+
scheme ':' ihier_part ( '?' iquery )?
|
16
|
+
end
|
17
|
+
|
18
|
+
rule irelative_ref
|
19
|
+
irelative_part ( '?' iquery )? ( '#' ifragment )?
|
20
|
+
end
|
21
|
+
|
22
|
+
rule irelative_part
|
23
|
+
'//' iauthority ipath_abempty / ipath_absolute / ipath_noscheme / ipath_empty
|
24
|
+
end
|
25
|
+
|
26
|
+
rule iauthority
|
27
|
+
( iuserinfo '@' )? ihost ( ':' port )?
|
28
|
+
end
|
29
|
+
|
30
|
+
rule iuserinfo
|
31
|
+
( iunreserved / pct_encoded / sub_delims / ':' )*
|
32
|
+
end
|
33
|
+
|
34
|
+
rule ihost
|
35
|
+
IP_literal / IPv4address / ireg_name
|
36
|
+
end
|
37
|
+
|
38
|
+
rule ireg_name
|
39
|
+
( iunreserved / pct_encoded / sub_delims )*
|
40
|
+
end
|
41
|
+
|
42
|
+
rule ipath
|
43
|
+
ipath_abempty # begins with '/' or is empty
|
44
|
+
/ ipath_absolute # begins with '/' but not '//'
|
45
|
+
/ ipath_noscheme # begins with a non-colon segment
|
46
|
+
/ ipath_rootless # begins with a segment
|
47
|
+
/ ipath_empty # zero characters
|
48
|
+
end
|
49
|
+
|
50
|
+
rule ipath_abempty
|
51
|
+
( '/' isegment)*
|
52
|
+
end
|
53
|
+
|
54
|
+
rule ipath_absolute
|
55
|
+
'/' ( isegment_nz ( '/' isegment )* )?
|
56
|
+
end
|
57
|
+
|
58
|
+
rule ipath_noscheme
|
59
|
+
isegment_nz_nc ( '/' isegment)*
|
60
|
+
end
|
61
|
+
|
62
|
+
rule ipath_rootless
|
63
|
+
isegment_nz ( '/' isegment )*
|
64
|
+
end
|
65
|
+
|
66
|
+
rule ipath_empty
|
67
|
+
''
|
68
|
+
end
|
69
|
+
|
70
|
+
rule isegment
|
71
|
+
( ipchar )*
|
72
|
+
end
|
73
|
+
|
74
|
+
rule isegment_nz
|
75
|
+
( ipchar )+
|
76
|
+
end
|
77
|
+
|
78
|
+
rule isegment_nz_nc
|
79
|
+
( iunreserved / pct_encoded / sub_delims / '@' )+ # non-zero-length segment without any colon ':'
|
80
|
+
end
|
81
|
+
|
82
|
+
rule pct_encoded
|
83
|
+
'%' HEXDIG HEXDIG
|
84
|
+
end
|
85
|
+
|
86
|
+
rule ipchar
|
87
|
+
iunreserved / pct_encoded / sub_delims / ':' / '@'
|
88
|
+
end
|
89
|
+
|
90
|
+
rule iquery
|
91
|
+
( ipchar iprivate '/' '?' )*
|
92
|
+
end
|
93
|
+
|
94
|
+
rule ifragment
|
95
|
+
( ipchar '/' '?' )*
|
96
|
+
end
|
97
|
+
|
98
|
+
rule iunreserved
|
99
|
+
ALPHA / DIGIT / '-' / '.' / '_' / '~' / ucschar
|
100
|
+
end
|
101
|
+
|
102
|
+
rule ucschar
|
103
|
+
[\u000A0-\u0D7FF] / [\u0F900-\u0FDCF] / [\u0FDF0-\u0FFEF]
|
104
|
+
/ [\u10000-\u1FFFD] / [\u20000-\u2FFFD] / [\u30000-\u3FFFD]
|
105
|
+
/ [\u40000-\u4FFFD] / [\u50000-\u5FFFD] / [\u60000-\u6FFFD]
|
106
|
+
/ [\u70000-\u7FFFD] / [\u80000-\u8FFFD] / [\u90000-\u9FFFD]
|
107
|
+
/ [\uA0000-\uAFFFD] / [\uB0000-\uBFFFD] / [\uC0000-\uCFFFD]
|
108
|
+
#/ [\uD0000-\uDFFFD] / [\uE1000-\uEFFFD]
|
109
|
+
/ [\uE1000-\uEFFFD]
|
110
|
+
end
|
111
|
+
|
112
|
+
rule iprivate
|
113
|
+
[\uE000-\uF8FF] / [\uF0000-\uFFFFD] / [\u100000-\u10FFFD]
|
114
|
+
end
|
115
|
+
|
116
|
+
rule scheme
|
117
|
+
ALPHA ( ALPHA / DIGIT / "+" / "-" / "." )*
|
118
|
+
end
|
119
|
+
|
120
|
+
rule port
|
121
|
+
DIGIT*
|
122
|
+
end
|
123
|
+
|
124
|
+
rule IP_literal
|
125
|
+
"[" ( IPv6address / IPvFuture ) "]"
|
126
|
+
end
|
127
|
+
|
128
|
+
rule IPvFuture
|
129
|
+
"v" HEXDIG+ "." ( unreserved / sub_delims / ":" )+
|
130
|
+
end
|
131
|
+
|
132
|
+
rule IPv6address
|
133
|
+
( h16 ":" ) 6..6 ls32
|
134
|
+
/ "::" ( h16 ":" ) 5..5 ls32
|
135
|
+
/ [ h16 ] "::" ( h16 ":" ) 4..4 ls32
|
136
|
+
/ [ ( h16 ":" ) 1..1 h16 ] "::" ( h16 ":" ) 3..3 ls32
|
137
|
+
/ [ ( h16 ":" ) 2..2 h16 ] "::" ( h16 ":" ) 2..2 ls32
|
138
|
+
/ [ ( h16 ":" ) 3..3 h16 ] "::" h16 ":" ls32
|
139
|
+
/ [ ( h16 ":" ) 4..4 h16 ] "::" ls32
|
140
|
+
/ [ ( h16 ":" ) 5..5 h16 ] "::" h16
|
141
|
+
/ [ ( h16 ":" ) 6..6 h16 ] "::"
|
142
|
+
end
|
143
|
+
|
144
|
+
rule h16
|
145
|
+
HEXDIG 4..4
|
146
|
+
end
|
147
|
+
|
148
|
+
rule ls32
|
149
|
+
( h16 ":" h16 ) / IPv4address
|
150
|
+
end
|
151
|
+
|
152
|
+
rule IPv4address
|
153
|
+
dec_octet "." dec_octet "." dec_octet "." dec_octet
|
154
|
+
end
|
155
|
+
|
156
|
+
rule dec_octet
|
157
|
+
DIGIT # 0-9
|
158
|
+
/ ['0x30'-'0x39'] DIGIT # 10-99
|
159
|
+
/ "1" DIGIT 2..2 # 100-199
|
160
|
+
/ "2" ['0x30'-'0x34'] DIGIT # 200-249
|
161
|
+
/ "25" ['0x30'-'0x35'] # 250-255
|
162
|
+
end
|
163
|
+
|
164
|
+
rule pct_encoded
|
165
|
+
"%" HEXDIG HEXDIG
|
166
|
+
end
|
167
|
+
|
168
|
+
rule unreserved
|
169
|
+
ALPHA / DIGIT / "-" / "." / "_" / "~"
|
170
|
+
end
|
171
|
+
|
172
|
+
rule reserved
|
173
|
+
gen_delims / sub_delims
|
174
|
+
end
|
175
|
+
|
176
|
+
rule gen_delims
|
177
|
+
":" / "/" / "?" / "#" / "[" / "]" / "@"
|
178
|
+
end
|
179
|
+
|
180
|
+
rule sub_delims
|
181
|
+
'!' / '$' / '&' / "'" / '(' / ')' / '*' / '+' / ',' / ';' / '='
|
182
|
+
end
|
183
|
+
|
184
|
+
rule ALPHA
|
185
|
+
[a-zA-Z]
|
186
|
+
end
|
187
|
+
|
188
|
+
rule DIGIT
|
189
|
+
[0-9]
|
190
|
+
end
|
191
|
+
|
192
|
+
rule HEXDIG
|
193
|
+
[0-9A-F]
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rfc3987
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- kajisha
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-05-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: treetop
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
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: rake
|
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: rspec
|
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: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: ''
|
84
|
+
email:
|
85
|
+
- kajisha@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- ".travis.yml"
|
93
|
+
- CODE_OF_CONDUCT.md
|
94
|
+
- Gemfile
|
95
|
+
- LICENSE.txt
|
96
|
+
- README.md
|
97
|
+
- Rakefile
|
98
|
+
- bin/console
|
99
|
+
- bin/setup
|
100
|
+
- lib/rfc3987.rb
|
101
|
+
- lib/rfc3987/parser.rb
|
102
|
+
- lib/rfc3987/version.rb
|
103
|
+
- rfc3987.gemspec
|
104
|
+
- rfc3987.treetop
|
105
|
+
homepage: https://github.com/kajisha/rfc3987
|
106
|
+
licenses:
|
107
|
+
- MIT
|
108
|
+
metadata: {}
|
109
|
+
post_install_message:
|
110
|
+
rdoc_options: []
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
requirements: []
|
124
|
+
rubyforge_project:
|
125
|
+
rubygems_version: 2.7.6
|
126
|
+
signing_key:
|
127
|
+
specification_version: 4
|
128
|
+
summary: ''
|
129
|
+
test_files: []
|