rage-rb 0.1.2 → 0.2.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 +4 -4
- data/.yardopts +1 -1
- data/CHANGELOG.md +17 -0
- data/Gemfile +3 -0
- data/README.md +2 -2
- data/lib/rage/application.rb +1 -1
- data/lib/rage/controller/api.rb +1 -1
- data/lib/rage/router/backend.rb +6 -6
- data/lib/rage/router/dsl.rb +44 -14
- data/lib/rage/router/handler_storage.rb +8 -2
- data/lib/rage/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4570bfdf4f86125be1d6c35b9ccba08a956fe8a20dac392e5ae914db347ad396
|
4
|
+
data.tar.gz: '019e919339f97e641e65f9aecc91c02740875ebcbe71edf14a07144950e47f07'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ad7b89eb46407831ae723c1c15b87ea12b898ae1784989374b07fcffcc3afcff2a237861c94565afe4c5f486b99edb15022b539ab9cad142778e4b2718b92ea
|
7
|
+
data.tar.gz: 471cb6bcbf294d9a4eb3e5fd69827f26661effafc1df20447b8e7eddd0816aff411266d22104988978c46318dc08c4fa753f1e1a4fa1327268a5f24d8851ac5a
|
data/.yardopts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--exclude lib/rage/templates --markup markdown --no-private
|
1
|
+
--exclude lib/rage/templates --markup markdown --no-private -o doc
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.2.0] - 2023-09-27
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- Gem configuration by env.
|
8
|
+
- Add `skip_before_action`.
|
9
|
+
- Add `rescue_from`.
|
10
|
+
- Add `Fiber.await`.
|
11
|
+
- Support the `defaults` route option.
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
- Ignore trailing slashes in the URLs.
|
16
|
+
- Support constraints in routes with optional params.
|
17
|
+
- Make the `root` routes helper work correctly with scopes.
|
18
|
+
- Convert objects to string when rendering text.
|
19
|
+
|
3
20
|
## [0.1.0] - 2023-09-15
|
4
21
|
|
5
22
|
- Initial release
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
<p align="center"><img height="200" src="https://github.com/rage-rb/rage/assets/2270393/
|
1
|
+
<p align="center"><img height="200" src="https://github.com/rage-rb/rage/assets/2270393/9d06e0a4-5c20-49c7-b51d-e16ce8f1e1b7" /></p>
|
2
2
|
|
3
3
|
# Rage
|
4
4
|
|
@@ -141,7 +141,7 @@ end
|
|
141
141
|
|
142
142
|
Version | Changes
|
143
143
|
------- |------------
|
144
|
-
0.2 | Gem configuration by env.<br>Add `skip_before_action`.<br>Add `rescue_from`.<br>Router updates:<br> • make the `root` helper work correctly with `scope`;<br> • support the `defaults` option
|
144
|
+
0.2 :white_check_mark: | ~~Gem configuration by env.<br>Add `skip_before_action`.<br>Add `rescue_from`.<br>Router updates:<br> • make the `root` helper work correctly with `scope`;<br> • support the `defaults` option;~~
|
145
145
|
0.3 | CLI updates:<br> • `routes` task;<br> • `console` task;<br>Support the `:if` and `:unless` options in `before_action`.<br>Allow to set response headers.
|
146
146
|
0.4 | Expose the `params` object.<br>Support header authentication with `authenticate_with_http_token`.<br>Router updates:<br> • add the `resources` route helper;<br> • add the `namespace` route helper;<br> • support regexp constraints;
|
147
147
|
0.5 | Implement Iodine-based equivalent of `ActionController::Live`.<br>Use `ActionDispatch::RemoteIp`.
|
data/lib/rage/application.rb
CHANGED
@@ -19,7 +19,7 @@ class Rage::Application
|
|
19
19
|
end
|
20
20
|
|
21
21
|
rescue => e
|
22
|
-
[500, {}, ["#{e.class}:#{e.message}\n\n#{e.backtrace.join("\n")}"]]
|
22
|
+
[500, {}, ["#{e.class}:#{e.message}\n\n#{e.backtrace.join("\n")}"]] # TODO: check Rage.env
|
23
23
|
|
24
24
|
ensure
|
25
25
|
# notify Iodine the request can now be served
|
data/lib/rage/controller/api.rb
CHANGED
data/lib/rage/router/backend.rb
CHANGED
@@ -12,7 +12,7 @@ class Rage::Router::Backend
|
|
12
12
|
@constrainer = Rage::Router::Constrainer.new({})
|
13
13
|
end
|
14
14
|
|
15
|
-
def on(method, path, handler, constraints: {})
|
15
|
+
def on(method, path, handler, constraints: {}, defaults: nil)
|
16
16
|
raise "Path could not be empty" if path&.empty?
|
17
17
|
|
18
18
|
if match_index = (path =~ OPTIONAL_PARAM_REGEXP)
|
@@ -21,8 +21,8 @@ class Rage::Router::Backend
|
|
21
21
|
path_full = path.sub(OPTIONAL_PARAM_REGEXP, "/#{$1}")
|
22
22
|
path_optional = path.sub(OPTIONAL_PARAM_REGEXP, "")
|
23
23
|
|
24
|
-
on(method, path_full, handler, constraints: constraints)
|
25
|
-
on(method, path_optional, handler, constraints: constraints)
|
24
|
+
on(method, path_full, handler, constraints: constraints, defaults: defaults)
|
25
|
+
on(method, path_optional, handler, constraints: constraints, defaults: defaults)
|
26
26
|
return
|
27
27
|
end
|
28
28
|
|
@@ -42,7 +42,7 @@ class Rage::Router::Backend
|
|
42
42
|
handler = ->(env, _params) { orig_handler.call(env) }
|
43
43
|
end
|
44
44
|
|
45
|
-
__on(method, path, handler, constraints)
|
45
|
+
__on(method, path, handler, constraints, defaults)
|
46
46
|
end
|
47
47
|
|
48
48
|
def lookup(env)
|
@@ -52,7 +52,7 @@ class Rage::Router::Backend
|
|
52
52
|
|
53
53
|
private
|
54
54
|
|
55
|
-
def __on(method, path, handler, constraints)
|
55
|
+
def __on(method, path, handler, constraints, defaults)
|
56
56
|
@constrainer.validate_constraints(constraints)
|
57
57
|
# Let the constrainer know if any constraints are being used now
|
58
58
|
@constrainer.note_usage(constraints)
|
@@ -159,7 +159,7 @@ class Rage::Router::Backend
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
-
route = { method: method, path: path, pattern: pattern, params: params, constraints: constraints, handler: handler }
|
162
|
+
route = { method: method, path: path, pattern: pattern, params: params, constraints: constraints, handler: handler, defaults: defaults }
|
163
163
|
@routes << route
|
164
164
|
current_node.add_route(route, @constrainer)
|
165
165
|
end
|
data/lib/rage/router/dsl.rb
CHANGED
@@ -16,6 +16,7 @@ class Rage::Router::DSL
|
|
16
16
|
|
17
17
|
@path_prefixes = []
|
18
18
|
@module_prefixes = []
|
19
|
+
@defaults = []
|
19
20
|
end
|
20
21
|
|
21
22
|
# Register a new GET route.
|
@@ -23,10 +24,13 @@ class Rage::Router::DSL
|
|
23
24
|
# @param path [String] the path for the route handler
|
24
25
|
# @param to [String] the route handler in the format of "controller#action"
|
25
26
|
# @param constraints [Hash] a hash of constraints for the route
|
27
|
+
# @param defaults [Hash] a hash of default parameters for the route
|
26
28
|
# @example
|
27
29
|
# get "/photos/:id", to: "photos#show", constraints: { host: /myhost/ }
|
28
|
-
|
29
|
-
|
30
|
+
# @example
|
31
|
+
# get "/photos(/:id)", to: "photos#show", defaults: { id: "-1" }
|
32
|
+
def get(path, to:, constraints: nil, defaults: nil)
|
33
|
+
__on("GET", path, to, constraints, defaults)
|
30
34
|
end
|
31
35
|
|
32
36
|
# Register a new POST route.
|
@@ -34,10 +38,13 @@ class Rage::Router::DSL
|
|
34
38
|
# @param path [String] the path for the route handler
|
35
39
|
# @param to [String] the route handler in the format of "controller#action"
|
36
40
|
# @param constraints [Hash] a hash of constraints for the route
|
41
|
+
# @param defaults [Hash] a hash of default parameters for the route
|
37
42
|
# @example
|
38
43
|
# post "/photos", to: "photos#create", constraints: { host: /myhost/ }
|
39
|
-
|
40
|
-
|
44
|
+
# @example
|
45
|
+
# post "/photos", to: "photos#create", defaults: { format: "jpg" }
|
46
|
+
def post(path, to:, constraints: nil, defaults: nil)
|
47
|
+
__on("POST", path, to, constraints, defaults)
|
41
48
|
end
|
42
49
|
|
43
50
|
# Register a new PUT route.
|
@@ -45,10 +52,13 @@ class Rage::Router::DSL
|
|
45
52
|
# @param path [String] the path for the route handler
|
46
53
|
# @param to [String] the route handler in the format of "controller#action"
|
47
54
|
# @param constraints [Hash] a hash of constraints for the route
|
55
|
+
# @param defaults [Hash] a hash of default parameters for the route
|
48
56
|
# @example
|
49
57
|
# put "/photos/:id", to: "photos#update", constraints: { host: /myhost/ }
|
50
|
-
|
51
|
-
|
58
|
+
# @example
|
59
|
+
# put "/photos(/:id)", to: "photos#update", defaults: { id: "-1" }
|
60
|
+
def put(path, to:, constraints: nil, defaults: nil)
|
61
|
+
__on("PUT", path, to, constraints, defaults)
|
52
62
|
end
|
53
63
|
|
54
64
|
# Register a new PATCH route.
|
@@ -56,10 +66,13 @@ class Rage::Router::DSL
|
|
56
66
|
# @param path [String] the path for the route handler
|
57
67
|
# @param to [String] the route handler in the format of "controller#action"
|
58
68
|
# @param constraints [Hash] a hash of constraints for the route
|
69
|
+
# @param defaults [Hash] a hash of default parameters for the route
|
59
70
|
# @example
|
60
71
|
# patch "/photos/:id", to: "photos#update", constraints: { host: /myhost/ }
|
61
|
-
|
62
|
-
|
72
|
+
# @example
|
73
|
+
# patch "/photos(/:id)", to: "photos#update", defaults: { id: "-1" }
|
74
|
+
def patch(path, to:, constraints: nil, defaults: nil)
|
75
|
+
__on("PATCH", path, to, constraints, defaults)
|
63
76
|
end
|
64
77
|
|
65
78
|
# Register a new DELETE route.
|
@@ -67,10 +80,13 @@ class Rage::Router::DSL
|
|
67
80
|
# @param path [String] the path for the route handler
|
68
81
|
# @param to [String] the route handler in the format of "controller#action"
|
69
82
|
# @param constraints [Hash] a hash of constraints for the route
|
83
|
+
# @param defaults [Hash] a hash of default parameters for the route
|
70
84
|
# @example
|
71
85
|
# delete "/photos/:id", to: "photos#destroy", constraints: { host: /myhost/ }
|
72
|
-
|
73
|
-
|
86
|
+
# @example
|
87
|
+
# delete "/photos(/:id)", to: "photos#destroy", defaults: { id: "-1" }
|
88
|
+
def delete(path, to:, constraints: nil, defaults: nil)
|
89
|
+
__on("DELETE", path, to, constraints, defaults)
|
74
90
|
end
|
75
91
|
|
76
92
|
# Register a new route pointing to '/'.
|
@@ -79,7 +95,7 @@ class Rage::Router::DSL
|
|
79
95
|
# @example
|
80
96
|
# root to: "photos#index"
|
81
97
|
def root(to:)
|
82
|
-
__on("GET", "/", to, nil)
|
98
|
+
__on("GET", "/", to, nil, nil)
|
83
99
|
end
|
84
100
|
|
85
101
|
# Scopes a set of routes to the given default options.
|
@@ -115,9 +131,22 @@ class Rage::Router::DSL
|
|
115
131
|
@module_prefixes.pop if opts[:module]
|
116
132
|
end
|
117
133
|
|
134
|
+
# Specify default parameters for a set of routes.
|
135
|
+
#
|
136
|
+
# @param defaults [Hash] a hash of default parameters
|
137
|
+
# @example
|
138
|
+
# defaults id: "-1", format: "jpg" do
|
139
|
+
# get "photos/(:id)", to: "photos#index"
|
140
|
+
# end
|
141
|
+
def defaults(defaults, &block)
|
142
|
+
@defaults << defaults
|
143
|
+
instance_eval &block
|
144
|
+
@defaults.pop
|
145
|
+
end
|
146
|
+
|
118
147
|
private
|
119
148
|
|
120
|
-
def __on(method, path, to, constraints)
|
149
|
+
def __on(method, path, to, constraints, defaults)
|
121
150
|
if path != "/"
|
122
151
|
path = "/#{path}" unless path.start_with?("/")
|
123
152
|
path = path.delete_suffix("/") if path.end_with?("/")
|
@@ -129,11 +158,12 @@ class Rage::Router::DSL
|
|
129
158
|
|
130
159
|
path_prefix = @path_prefixes.any? ? "/#{@path_prefixes.join("/")}" : nil
|
131
160
|
module_prefix = @module_prefixes.any? ? "#{@module_prefixes.join("/")}/" : nil
|
161
|
+
defaults = (defaults ? @defaults + [defaults] : @defaults).reduce(&:merge)
|
132
162
|
|
133
163
|
if to.is_a?(String)
|
134
|
-
@router.on(method, "#{path_prefix}#{path}", "#{module_prefix}#{to}", constraints: constraints || {})
|
164
|
+
@router.on(method, "#{path_prefix}#{path}", "#{module_prefix}#{to}", constraints: constraints || {}, defaults: defaults)
|
135
165
|
else
|
136
|
-
@router.on(method, "#{path_prefix}#{path}", to, constraints: constraints || {})
|
166
|
+
@router.on(method, "#{path_prefix}#{path}", to, constraints: constraints || {}, defaults: defaults)
|
137
167
|
end
|
138
168
|
end
|
139
169
|
end
|
@@ -22,7 +22,7 @@ class Rage::Router::HandlerStorage
|
|
22
22
|
params: params,
|
23
23
|
constraints: constraints,
|
24
24
|
handler: route[:handler],
|
25
|
-
create_params_object: compile_create_params_object(params)
|
25
|
+
create_params_object: compile_create_params_object(params, route[:defaults])
|
26
26
|
}
|
27
27
|
|
28
28
|
constraints_keys = constraints.keys
|
@@ -47,13 +47,19 @@ class Rage::Router::HandlerStorage
|
|
47
47
|
|
48
48
|
private
|
49
49
|
|
50
|
-
def compile_create_params_object(param_keys)
|
50
|
+
def compile_create_params_object(param_keys, defaults)
|
51
51
|
lines = []
|
52
52
|
|
53
53
|
param_keys.each_with_index do |key, i|
|
54
54
|
lines << "'#{key}' => param_values[#{i}]"
|
55
55
|
end
|
56
56
|
|
57
|
+
if defaults
|
58
|
+
defaults.except(*param_keys.map(&:to_sym)).each do |key, value|
|
59
|
+
lines << "'#{key}' => '#{value}'"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
57
63
|
eval "->(param_values) { { #{lines.join(',')} } }"
|
58
64
|
end
|
59
65
|
|
data/lib/rage/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rage-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Samoilov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
11
|
+
date: 2023-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|