uri-builder 0.1.12 → 0.1.13
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/Gemfile.lock +1 -1
- data/README.md +20 -1
- data/lib/uri/builder/version.rb +1 -1
- data/lib/uri/builder.rb +38 -3
- metadata +3 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a0af25288f9f2c4f6385d2a7ad29016951a1c9048c40722d893b1b49151c5e5
|
4
|
+
data.tar.gz: 370b0a62178447bcd9c313c6fa522ac77926a793af19765a0c1bab9ff167fcb9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f92b5696f4694868faafd3a0ebec001105431e60fcd656c0eb4d547251903aaefe09cb349a139d65004c84bbd8c46401ad3778e42b491d2337678e67df2a55d6
|
7
|
+
data.tar.gz: 4da7c5653b3fc86f37eab3ff04a50f352957e91716dcc011f452fa2669a7ea9e522f29cebd12ab833947202c298454c0c1322fcfed5421a5c9c1f846f84b549b
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -9,7 +9,7 @@ URI.build("https://www.example.com/api/v1").path("/api/v2").query(search: "great
|
|
9
9
|
Or if you prefer a block format that automatically converts back to an URI object after the transformation.
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
URI.build("https://www.example.com/api/v1") {
|
12
|
+
URI.build("https://www.example.com/api/v1") { it.path("/api/v2").query search: "great books" }
|
13
13
|
```
|
14
14
|
|
15
15
|
Compare that to:
|
@@ -36,6 +36,25 @@ uri.query = URI.encode_www_form(first_name: "Brad")
|
|
36
36
|
uri
|
37
37
|
```
|
38
38
|
|
39
|
+
Paths may be traversed with various methods:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
URI.build("https://www.example.com/api/v1") { it.join("books/search").query search: "great books" } # => "https://www.example.com/api/v1/books/search?search=great+books"
|
43
|
+
|
44
|
+
URI.build("https://www.example.com/api/v1") { it.parent.join("v2/articles/search").query search: "great books" }.uri # => #<URI::HTTPS https://www.example.com/api/v2/articles/search?search=great+books>
|
45
|
+
|
46
|
+
URI.build("https://www.example.com/api/v1") { it.root.join("about").uri # => #<URI::HTTPS https://www.example.com/about>
|
47
|
+
```
|
48
|
+
|
49
|
+
Compare that to:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
uri = URI("https://www.example.com/api/v1")
|
53
|
+
uri.path = uri.path + "/books/search"
|
54
|
+
uri.query = URI.encode_www_form(search: "great books")
|
55
|
+
uri
|
56
|
+
```
|
57
|
+
|
39
58
|
Each chain creates a duplicate of the original URL, so you can transform away without worrying about thrashing the original URL object.
|
40
59
|
|
41
60
|
## Installation
|
data/lib/uri/builder/version.rb
CHANGED
data/lib/uri/builder.rb
CHANGED
@@ -7,6 +7,32 @@ module URI
|
|
7
7
|
module Builder
|
8
8
|
class Error < StandardError; end
|
9
9
|
|
10
|
+
class Path
|
11
|
+
File = ::File
|
12
|
+
|
13
|
+
def initialize(*segments)
|
14
|
+
@trailing_slash = segments.last.to_s.end_with?("/")
|
15
|
+
@segments = segments.compact.flat_map { _1.to_s.split("/") }
|
16
|
+
end
|
17
|
+
|
18
|
+
def join(*segments)
|
19
|
+
self.class.new(*@segments, *segments)
|
20
|
+
end
|
21
|
+
|
22
|
+
def parent
|
23
|
+
self.class.new(*@segments[0...-1])
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_s
|
27
|
+
File.join("/", *@segments.map(&:to_s).tap { _1.append "/" if @trailing_slash })
|
28
|
+
end
|
29
|
+
|
30
|
+
def trailing_slash(value = true)
|
31
|
+
@trailing_slash = value
|
32
|
+
self
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
10
36
|
class DSL
|
11
37
|
attr_reader :uri
|
12
38
|
|
@@ -58,19 +84,28 @@ module URI
|
|
58
84
|
|
59
85
|
def path(*segments)
|
60
86
|
# Make sure there's a leading / if a non leading / is given.
|
61
|
-
wrap :path,
|
87
|
+
wrap :path, Path.new(*segments).to_s
|
62
88
|
end
|
63
89
|
|
64
90
|
def clear_path
|
65
91
|
path "/"
|
66
92
|
end
|
93
|
+
alias :root :clear_path
|
67
94
|
|
68
95
|
def trailing_slash
|
69
|
-
wrap :path,
|
96
|
+
wrap :path, Path.new(@uri.path).trailing_slash(true).to_s
|
70
97
|
end
|
71
98
|
|
72
99
|
def clear_trailing_slash
|
73
|
-
wrap :path,
|
100
|
+
wrap :path, Path.new(@uri.path).trailing_slash(false).to_s
|
101
|
+
end
|
102
|
+
|
103
|
+
def join(...)
|
104
|
+
wrap :path, Path.new(@uri.path).join(...).to_s
|
105
|
+
end
|
106
|
+
|
107
|
+
def parent(...)
|
108
|
+
wrap :path, Path.new(@uri.path).parent(...).to_s
|
74
109
|
end
|
75
110
|
|
76
111
|
def to_s
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uri-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brad Gessler
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-02-07 00:00:00.000000000 Z
|
12
11
|
dependencies: []
|
13
12
|
description: Build URIs via chains
|
14
13
|
email:
|
@@ -36,7 +35,6 @@ metadata:
|
|
36
35
|
homepage_uri: https://github.com/rubymonolith/uri-builder
|
37
36
|
source_code_uri: https://github.com/rubymonolith/uri-builder
|
38
37
|
changelog_uri: https://github.com/rubymonolith/uri-builder
|
39
|
-
post_install_message:
|
40
38
|
rdoc_options: []
|
41
39
|
require_paths:
|
42
40
|
- lib
|
@@ -51,8 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
51
49
|
- !ruby/object:Gem::Version
|
52
50
|
version: '0'
|
53
51
|
requirements: []
|
54
|
-
rubygems_version: 3.
|
55
|
-
signing_key:
|
52
|
+
rubygems_version: 3.6.2
|
56
53
|
specification_version: 4
|
57
54
|
summary: Build URIs via chains
|
58
55
|
test_files: []
|