kirei 0.7.0 → 0.8.1
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/README.md +1 -1
- data/kirei.gemspec +1 -2
- data/lib/cli/commands/new_app/files/db_rake.rb +1 -1
- data/lib/kirei/controller.rb +3 -26
- data/lib/kirei/routing/base.rb +18 -9
- data/lib/kirei/routing/request.rb +40 -0
- data/lib/kirei/version.rb +1 -1
- metadata +4 -7
- data/CHANGELOG.md +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bde9dc5680f9744ab2eb1d0fce8fce8019f2177ee263d1b8d6d82bb9c6fff73
|
4
|
+
data.tar.gz: 48732a443adf3d134fcf0fcdabc5e191b794f31a7966e36c1f83e80a9fe9585f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5a4a532eb8181cf02d7725bed41c8492eb11e0b879e4a51ad430674e220dbb5b26c1b5a44aa29790f6af8f7a1b9ccc132262bb239815f3c290c75c2e7edaaea
|
7
|
+
data.tar.gz: 604c5d622a63e5817e39b99d3029d2e15caa1c90a370cb44e9b2a0a321db8317c8da1686543a7267beef957abb149501c200fd0c5d2a148513210c7ab03e9ae5
|
data/README.md
CHANGED
@@ -21,7 +21,7 @@ TL;DR:
|
|
21
21
|
|
22
22
|
This gem follows SemVer, however only after a stable release 1.0.0 is made.
|
23
23
|
|
24
|
-
A changelog is maintained
|
24
|
+
A changelog is maintained via the [GitHub Releases page](https://github.com/swiknaba/kirei/releases).
|
25
25
|
|
26
26
|
## Installation
|
27
27
|
|
data/kirei.gemspec
CHANGED
@@ -31,12 +31,11 @@ Gem::Specification.new do |spec|
|
|
31
31
|
"kirei.gemspec",
|
32
32
|
".irbrc",
|
33
33
|
"lib/**/*",
|
34
|
-
# do not include RBIs for gems, because users might use different
|
34
|
+
# do not include RBIs for gems, because users might use different versions
|
35
35
|
"sorbet/rbi/dsl/**/*.rbi",
|
36
36
|
"sorbet/rbi/shims/**/*.rbi",
|
37
37
|
"LICENSE",
|
38
38
|
"README.md",
|
39
|
-
"CHANGELOG.md",
|
40
39
|
]
|
41
40
|
|
42
41
|
spec.bindir = "bin"
|
data/lib/kirei/controller.rb
CHANGED
@@ -41,32 +41,9 @@ module Kirei
|
|
41
41
|
@after_hooks.add(block) if block
|
42
42
|
end
|
43
43
|
|
44
|
-
sig { returns(
|
45
|
-
def
|
46
|
-
env.
|
47
|
-
end
|
48
|
-
|
49
|
-
sig { returns(String) }
|
50
|
-
def req_domain
|
51
|
-
T.must(req_host.split(":").first).split(".").last(2).join(".")
|
52
|
-
end
|
53
|
-
|
54
|
-
sig { returns(T.nilable(String)) }
|
55
|
-
def req_subdomain
|
56
|
-
parts = T.must(req_host.split(":").first).split(".")
|
57
|
-
return if parts.size <= 2
|
58
|
-
|
59
|
-
T.must(parts[0..-3]).join(".")
|
60
|
-
end
|
61
|
-
|
62
|
-
sig { returns(Integer) }
|
63
|
-
def req_port
|
64
|
-
env.fetch("SERVER_PORT")&.to_i
|
65
|
-
end
|
66
|
-
|
67
|
-
sig { returns(T::Boolean) }
|
68
|
-
def req_ssl?
|
69
|
-
env.fetch("HTTPS", env.fetch("rack.url_scheme", "http")) == "https"
|
44
|
+
sig { returns(Routing::Request) }
|
45
|
+
def request
|
46
|
+
@request ||= T.let(Routing::Request.new(env: env), T.nilable(Routing::Request))
|
70
47
|
end
|
71
48
|
|
72
49
|
sig { returns(T::Hash[String, T.untyped]) }
|
data/lib/kirei/routing/base.rb
CHANGED
@@ -35,12 +35,13 @@ module Kirei
|
|
35
35
|
# -> use https://github.com/cyu/rack-cors ?
|
36
36
|
#
|
37
37
|
|
38
|
-
|
38
|
+
lookup_verb = http_verb == Verb::HEAD ? Verb::GET : http_verb
|
39
|
+
route = router.get(lookup_verb, req_path)
|
39
40
|
return NOT_FOUND if route.nil?
|
40
41
|
|
41
42
|
router.current_env = env # expose the env to the controller
|
42
43
|
|
43
|
-
params = case
|
44
|
+
params = case http_verb
|
44
45
|
when Verb::GET
|
45
46
|
query = T.cast(env.fetch("QUERY_STRING"), String)
|
46
47
|
query.split("&").to_h do |p|
|
@@ -50,14 +51,15 @@ module Kirei
|
|
50
51
|
end
|
51
52
|
when Verb::POST, Verb::PUT, Verb::PATCH
|
52
53
|
# TODO: based on content-type, parse the body differently
|
53
|
-
#
|
54
|
+
# built-in support for JSON & XML
|
54
55
|
body = T.cast(env.fetch("rack.input"), T.any(IO, StringIO))
|
55
56
|
res = Oj.load(body.read, Kirei::OJ_OPTIONS)
|
56
57
|
body.rewind # TODO: maybe don't rewind if we don't need to?
|
57
58
|
T.cast(res, T::Hash[String, T.untyped])
|
58
|
-
|
59
|
-
Logging::Logger.logger.warn("Unsupported HTTP verb: #{http_verb.serialize} send to #{req_path}")
|
59
|
+
when Verb::HEAD, Verb::DELETE, Verb::OPTIONS, Verb::TRACE, Verb::CONNECT
|
60
60
|
{}
|
61
|
+
else
|
62
|
+
T.absurd(http_verb)
|
61
63
|
end
|
62
64
|
|
63
65
|
req_id = T.cast(env["HTTP_X_REQUEST_ID"], T.nilable(String))
|
@@ -86,10 +88,17 @@ module Kirei
|
|
86
88
|
}
|
87
89
|
Logging::Metric.inject_defaults(statsd_timing_tags)
|
88
90
|
|
89
|
-
status, headers, response_body =
|
90
|
-
|
91
|
-
|
92
|
-
|
91
|
+
status, headers, response_body = case http_verb
|
92
|
+
when Verb::HEAD, Verb::OPTIONS, Verb::TRACE, Verb::CONNECT
|
93
|
+
[200, {}, []]
|
94
|
+
when Verb::GET, Verb::POST, Verb::PUT, Verb::PATCH, Verb::DELETE
|
95
|
+
T.cast(
|
96
|
+
controller.new(params: params).public_send(route.action),
|
97
|
+
RackResponseType,
|
98
|
+
)
|
99
|
+
else
|
100
|
+
T.absurd(http_verb)
|
101
|
+
end
|
93
102
|
|
94
103
|
after_hooks = collect_hooks(controller, :after_hooks)
|
95
104
|
run_hooks(after_hooks)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Kirei
|
5
|
+
module Routing
|
6
|
+
class Request < T::Struct
|
7
|
+
extend T::Sig
|
8
|
+
|
9
|
+
const :env, T::Hash[String, T.untyped]
|
10
|
+
|
11
|
+
sig { returns(String) }
|
12
|
+
def host
|
13
|
+
env.fetch("HTTP_HOST")
|
14
|
+
end
|
15
|
+
|
16
|
+
sig { returns(String) }
|
17
|
+
def domain
|
18
|
+
T.must(host.split(":").first).split(".").last(2).join(".")
|
19
|
+
end
|
20
|
+
|
21
|
+
sig { returns(T.nilable(String)) }
|
22
|
+
def subdomain
|
23
|
+
parts = T.must(host.split(":").first).split(".")
|
24
|
+
return if parts.size <= 2
|
25
|
+
|
26
|
+
T.must(parts[0..-3]).join(".")
|
27
|
+
end
|
28
|
+
|
29
|
+
sig { returns(Integer) }
|
30
|
+
def port
|
31
|
+
env.fetch("SERVER_PORT")&.to_i
|
32
|
+
end
|
33
|
+
|
34
|
+
sig { returns(T::Boolean) }
|
35
|
+
def ssl?
|
36
|
+
env.fetch("HTTPS", env.fetch("rack.url_scheme", "http")) == "https"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/kirei/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kirei
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ludwig Reinmiedl
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: logger
|
@@ -164,7 +163,6 @@ extensions: []
|
|
164
163
|
extra_rdoc_files: []
|
165
164
|
files:
|
166
165
|
- ".irbrc"
|
167
|
-
- CHANGELOG.md
|
168
166
|
- README.md
|
169
167
|
- bin/kirei
|
170
168
|
- kirei.gemspec
|
@@ -199,6 +197,7 @@ files:
|
|
199
197
|
- lib/kirei/routing/nilable_hooks_type.rb
|
200
198
|
- lib/kirei/routing/rack_env_type.rb
|
201
199
|
- lib/kirei/routing/rack_response_type.rb
|
200
|
+
- lib/kirei/routing/request.rb
|
202
201
|
- lib/kirei/routing/route.rb
|
203
202
|
- lib/kirei/routing/router.rb
|
204
203
|
- lib/kirei/routing/verb.rb
|
@@ -216,7 +215,6 @@ licenses:
|
|
216
215
|
metadata:
|
217
216
|
rubygems_mfa_required: 'true'
|
218
217
|
homepage_uri: https://github.com/swiknaba/kirei
|
219
|
-
post_install_message:
|
220
218
|
rdoc_options: []
|
221
219
|
require_paths:
|
222
220
|
- lib
|
@@ -231,8 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
229
|
- !ruby/object:Gem::Version
|
232
230
|
version: '0'
|
233
231
|
requirements: []
|
234
|
-
rubygems_version: 3.
|
235
|
-
signing_key:
|
232
|
+
rubygems_version: 3.6.7
|
236
233
|
specification_version: 4
|
237
234
|
summary: Kirei is a typed Ruby micro/REST-framework for building scalable and performant
|
238
235
|
microservices.
|
data/CHANGELOG.md
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
# Changelog
|
2
|
-
|
3
|
-
## [Unreleased]
|
4
|
-
|
5
|
-
## [0.1.0] - 2023-09-02
|
6
|
-
|
7
|
-
- Initial release
|
8
|
-
- added base model
|
9
|
-
- added database connection
|
10
|
-
- WIP: basic cli to scaffold a new project
|
11
|
-
|
12
|
-
## [0.2.0] - 2023-09-02
|
13
|
-
|
14
|
-
- added routing
|
15
|
-
- added base controller
|
16
|
-
- added database tasks (create, drop, migrate, rollback, generate migration)
|