takagi 0.1.0 → 1.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.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +70 -7
  3. data/.yard/templates/default/layout/html/layout.erb +34 -0
  4. data/AGENTS.md +16 -0
  5. data/CHANGELOG.md +158 -1
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +590 -23
  8. data/ROADMAP.md +55 -0
  9. data/Rakefile +4 -4
  10. data/Steepfile +39 -0
  11. data/bin/takagi-dev +159 -0
  12. data/docs/FIRST_PLUGIN_GUIDE.md +224 -0
  13. data/docs/HOOKS.md +31 -0
  14. data/examples/client_lifecycle_example.rb +118 -0
  15. data/examples/cloud_gateway_app.rb +217 -0
  16. data/examples/nested_api_app.rb +258 -0
  17. data/examples/simple_device_app.rb +71 -0
  18. data/examples/takagi.yml +138 -0
  19. data/lib/takagi/application.rb +256 -0
  20. data/lib/takagi/base/middleware_management.rb +39 -0
  21. data/lib/takagi/base/plugin_management.rb +75 -0
  22. data/lib/takagi/base/reactor_management.rb +104 -0
  23. data/lib/takagi/base/server_lifecycle.rb +156 -0
  24. data/lib/takagi/base.rb +103 -11
  25. data/lib/takagi/branding.rb +88 -0
  26. data/lib/takagi/cbor/decoder.rb +385 -0
  27. data/lib/takagi/cbor/encoder.rb +260 -0
  28. data/lib/takagi/cbor/error.rb +17 -0
  29. data/lib/takagi/cbor/version.rb +9 -0
  30. data/lib/takagi/client/response.rb +236 -0
  31. data/lib/takagi/client.rb +265 -0
  32. data/lib/takagi/client_base.rb +204 -0
  33. data/lib/takagi/coap/code_helpers.rb +190 -0
  34. data/lib/takagi/coap/registries/base.rb +165 -0
  35. data/lib/takagi/coap/registries/content_format.rb +71 -0
  36. data/lib/takagi/coap/registries/message_type.rb +69 -0
  37. data/lib/takagi/coap/registries/method.rb +38 -0
  38. data/lib/takagi/coap/registries/option.rb +71 -0
  39. data/lib/takagi/coap/registries/response.rb +93 -0
  40. data/lib/takagi/coap/registries/signaling.rb +34 -0
  41. data/lib/takagi/coap/signaling.rb +10 -0
  42. data/lib/takagi/coap.rb +37 -0
  43. data/lib/takagi/composite_router.rb +186 -0
  44. data/lib/takagi/config.rb +337 -0
  45. data/lib/takagi/controller/resource_allocator.rb +164 -0
  46. data/lib/takagi/controller/thread_pool.rb +144 -0
  47. data/lib/takagi/controller.rb +319 -0
  48. data/lib/takagi/core/attribute_set.rb +128 -0
  49. data/lib/takagi/discovery/core_link_format.rb +137 -0
  50. data/lib/takagi/errors.rb +536 -0
  51. data/lib/takagi/event_bus/address_prefix.rb +142 -0
  52. data/lib/takagi/event_bus/async_executor.rb +235 -0
  53. data/lib/takagi/event_bus/coap_bridge.rb +208 -0
  54. data/lib/takagi/event_bus/future.rb +153 -0
  55. data/lib/takagi/event_bus/lru_cache.rb +157 -0
  56. data/lib/takagi/event_bus/message_buffer.rb +237 -0
  57. data/lib/takagi/event_bus/observer_cleanup.rb +110 -0
  58. data/lib/takagi/event_bus/scope.rb +74 -0
  59. data/lib/takagi/event_bus.rb +594 -0
  60. data/lib/takagi/helpers.rb +88 -0
  61. data/lib/takagi/hooks.rb +82 -0
  62. data/lib/takagi/initializer.rb +18 -0
  63. data/lib/takagi/logger.rb +15 -6
  64. data/lib/takagi/message/base.rb +155 -0
  65. data/lib/takagi/message/deduplication_cache.rb +84 -0
  66. data/lib/takagi/message/inbound.rb +147 -0
  67. data/lib/takagi/message/outbound.rb +223 -0
  68. data/lib/takagi/message/request.rb +158 -0
  69. data/lib/takagi/message/retransmission_manager.rb +193 -0
  70. data/lib/takagi/middleware/authentication.rb +19 -0
  71. data/lib/takagi/middleware/caching.rb +23 -0
  72. data/lib/takagi/middleware/debugging.rb +16 -0
  73. data/lib/takagi/middleware/logging.rb +14 -0
  74. data/lib/takagi/middleware/metrics.rb +440 -0
  75. data/lib/takagi/middleware/rate_limiting.rb +24 -0
  76. data/lib/takagi/middleware_stack.rb +166 -0
  77. data/lib/takagi/network/base.rb +76 -0
  78. data/lib/takagi/network/framing/tcp.rb +222 -0
  79. data/lib/takagi/network/framing/udp.rb +110 -0
  80. data/lib/takagi/network/registry.rb +72 -0
  81. data/lib/takagi/network/tcp.rb +60 -0
  82. data/lib/takagi/network/tcp_sender.rb +21 -0
  83. data/lib/takagi/network/udp.rb +61 -0
  84. data/lib/takagi/network/udp_sender.rb +20 -0
  85. data/lib/takagi/observable/emitter.rb +62 -0
  86. data/lib/takagi/observable/reactor.rb +488 -0
  87. data/lib/takagi/observable/registry.rb +122 -0
  88. data/lib/takagi/observe_registry.rb +10 -0
  89. data/lib/takagi/observer/client.rb +68 -0
  90. data/lib/takagi/observer/registry.rb +137 -0
  91. data/lib/takagi/observer/sender.rb +39 -0
  92. data/lib/takagi/observer/watcher.rb +43 -0
  93. data/lib/takagi/plugin.rb +313 -0
  94. data/lib/takagi/profiles.rb +176 -0
  95. data/lib/takagi/reactor.rb +23 -0
  96. data/lib/takagi/reactor_registry.rb +64 -0
  97. data/lib/takagi/registry/base.rb +268 -0
  98. data/lib/takagi/response_builder.rb +141 -0
  99. data/lib/takagi/router/metadata_extractor.rb +133 -0
  100. data/lib/takagi/router/route_matcher.rb +83 -0
  101. data/lib/takagi/router.rb +284 -25
  102. data/lib/takagi/serialization/base.rb +102 -0
  103. data/lib/takagi/serialization/cbor_serializer.rb +92 -0
  104. data/lib/takagi/serialization/json_serializer.rb +96 -0
  105. data/lib/takagi/serialization/octet_stream_serializer.rb +82 -0
  106. data/lib/takagi/serialization/registry.rb +187 -0
  107. data/lib/takagi/serialization/text_serializer.rb +87 -0
  108. data/lib/takagi/serialization.rb +117 -0
  109. data/lib/takagi/server/multi.rb +41 -0
  110. data/lib/takagi/server/registry.rb +71 -0
  111. data/lib/takagi/server/tcp.rb +249 -0
  112. data/lib/takagi/server/udp.rb +139 -0
  113. data/lib/takagi/server/udp_worker.rb +174 -0
  114. data/lib/takagi/server.rb +1 -31
  115. data/lib/takagi/server_registry.rb +10 -0
  116. data/lib/takagi/tcp_client.rb +142 -0
  117. data/lib/takagi/version.rb +2 -1
  118. data/lib/takagi.rb +24 -3
  119. data/sig/takagi/application.rbs +48 -0
  120. data/sig/takagi/base/middleware_management.rbs +33 -0
  121. data/sig/takagi/base/reactor_management.rbs +52 -0
  122. data/sig/takagi/base/server_lifecycle.rbs +54 -0
  123. data/sig/takagi/base.rbs +48 -0
  124. data/sig/takagi/cbor/decoder.rbs +171 -0
  125. data/sig/takagi/cbor/encoder.rbs +146 -0
  126. data/sig/takagi/cbor/error.rbs +19 -0
  127. data/sig/takagi/cbor/version.rbs +7 -0
  128. data/sig/takagi/client/response.rbs +148 -0
  129. data/sig/takagi/client.rbs +119 -0
  130. data/sig/takagi/client_base.rbs +135 -0
  131. data/sig/takagi/coap/code_helpers.rbs +91 -0
  132. data/sig/takagi/coap/registries/base.rbs +95 -0
  133. data/sig/takagi/coap/registries/content_format.rbs +47 -0
  134. data/sig/takagi/coap/registries/message_type.rbs +53 -0
  135. data/sig/takagi/coap/registries/method.rbs +27 -0
  136. data/sig/takagi/coap/registries/option.rbs +43 -0
  137. data/sig/takagi/coap/registries/response.rbs +52 -0
  138. data/sig/takagi/coap.rbs +24 -0
  139. data/sig/takagi/composite_router.rbs +46 -0
  140. data/sig/takagi/config.rbs +134 -0
  141. data/sig/takagi/controller.rbs +73 -0
  142. data/sig/takagi/core/attribute_set.rbs +57 -0
  143. data/sig/takagi/discovery/core_link_format.rbs +50 -0
  144. data/sig/takagi/event_bus/address_prefix.rbs +78 -0
  145. data/sig/takagi/event_bus/async_executor.rbs +88 -0
  146. data/sig/takagi/event_bus/coap_bridge.rbs +93 -0
  147. data/sig/takagi/event_bus/future.rbs +78 -0
  148. data/sig/takagi/event_bus/lru_cache.rbs +86 -0
  149. data/sig/takagi/event_bus/message_buffer.rbs +133 -0
  150. data/sig/takagi/event_bus/observer_cleanup.rbs +62 -0
  151. data/sig/takagi/event_bus.rbs +320 -0
  152. data/sig/takagi/helpers.rbs +34 -0
  153. data/sig/takagi/initializer.rbs +9 -0
  154. data/sig/takagi/logger.rbs +17 -0
  155. data/sig/takagi/message/base.rbs +64 -0
  156. data/sig/takagi/message/deduplication_cache.rbs +49 -0
  157. data/sig/takagi/message/inbound.rbs +76 -0
  158. data/sig/takagi/message/outbound.rbs +48 -0
  159. data/sig/takagi/message/request.rbs +32 -0
  160. data/sig/takagi/message/retransmission_manager.rbs +76 -0
  161. data/sig/takagi/middleware/authentication.rbs +11 -0
  162. data/sig/takagi/middleware/caching.rbs +13 -0
  163. data/sig/takagi/middleware/debugging.rbs +9 -0
  164. data/sig/takagi/middleware/logging.rbs +7 -0
  165. data/sig/takagi/middleware/metrics.rbs +15 -0
  166. data/sig/takagi/middleware/rate_limiting.rbs +13 -0
  167. data/sig/takagi/middleware_stack.rbs +69 -0
  168. data/sig/takagi/network/tcp_sender.rbs +10 -0
  169. data/sig/takagi/network/udp_sender.rbs +14 -0
  170. data/sig/takagi/observe_registry.rbs +36 -0
  171. data/sig/takagi/observer/client.rbs +36 -0
  172. data/sig/takagi/observer/sender.rbs +12 -0
  173. data/sig/takagi/observer/watcher.rbs +18 -0
  174. data/sig/takagi/profiles.rbs +33 -0
  175. data/sig/takagi/reactor.rbs +20 -0
  176. data/sig/takagi/reactor_registry.rbs +14 -0
  177. data/sig/takagi/response_builder.rbs +12 -0
  178. data/sig/takagi/router/metadata_extractor.rbs +71 -0
  179. data/sig/takagi/router/route_matcher.rbs +43 -0
  180. data/sig/takagi/router.rbs +166 -0
  181. data/sig/takagi/serialization.rbs +32 -0
  182. data/sig/takagi/server/multi.rbs +16 -0
  183. data/sig/takagi/server/tcp.rbs +42 -0
  184. data/sig/takagi/server/udp.rbs +52 -0
  185. data/sig/takagi/server/udp_worker.rbs +42 -0
  186. data/sig/takagi/server.rbs +4 -0
  187. data/sig/takagi/server_registry.rbs +71 -0
  188. data/sig/takagi/tcp_client.rbs +23 -0
  189. data/sig/takagi/version.rbs +5 -0
  190. data/takagi.gemspec +37 -35
  191. metadata +204 -31
  192. data/.idea/.gitignore +0 -8
  193. data/.idea/misc.xml +0 -4
  194. data/.idea/modules.xml +0 -8
  195. data/.idea/takagi.iml +0 -81
  196. data/.idea/vcs.xml +0 -6
  197. data/lib/takagi/message.rb +0 -75
metadata CHANGED
@@ -1,94 +1,267 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: takagi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Matoulek
8
- autorequire:
9
- bindir: exe
8
+ autorequire:
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-26 00:00:00.000000000 Z
11
+ date: 2026-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: sequel
28
+ name: zeitwerk
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '3.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '3.0'
55
55
  description: Sinatra-like framework for CoAP and IoT messaging.
56
56
  email:
57
57
  - domitea@gmail.com
58
- executables: []
58
+ executables:
59
+ - takagi-dev
59
60
  extensions: []
60
61
  extra_rdoc_files: []
61
62
  files:
62
- - ".idea/.gitignore"
63
- - ".idea/misc.xml"
64
- - ".idea/modules.xml"
65
- - ".idea/takagi.iml"
66
- - ".idea/vcs.xml"
67
63
  - ".rspec"
68
64
  - ".rubocop.yml"
65
+ - ".yard/templates/default/layout/html/layout.erb"
66
+ - AGENTS.md
69
67
  - CHANGELOG.md
70
68
  - CODE_OF_CONDUCT.md
71
69
  - LICENSE.txt
72
70
  - README.md
71
+ - ROADMAP.md
73
72
  - Rakefile
73
+ - Steepfile
74
+ - bin/takagi-dev
75
+ - docs/FIRST_PLUGIN_GUIDE.md
76
+ - docs/HOOKS.md
77
+ - examples/client_lifecycle_example.rb
78
+ - examples/cloud_gateway_app.rb
79
+ - examples/nested_api_app.rb
80
+ - examples/simple_device_app.rb
81
+ - examples/takagi.yml
74
82
  - lib/takagi.rb
83
+ - lib/takagi/application.rb
75
84
  - lib/takagi/base.rb
85
+ - lib/takagi/base/middleware_management.rb
86
+ - lib/takagi/base/plugin_management.rb
87
+ - lib/takagi/base/reactor_management.rb
88
+ - lib/takagi/base/server_lifecycle.rb
89
+ - lib/takagi/branding.rb
90
+ - lib/takagi/cbor/decoder.rb
91
+ - lib/takagi/cbor/encoder.rb
92
+ - lib/takagi/cbor/error.rb
93
+ - lib/takagi/cbor/version.rb
94
+ - lib/takagi/client.rb
95
+ - lib/takagi/client/response.rb
96
+ - lib/takagi/client_base.rb
97
+ - lib/takagi/coap.rb
98
+ - lib/takagi/coap/code_helpers.rb
99
+ - lib/takagi/coap/registries/base.rb
100
+ - lib/takagi/coap/registries/content_format.rb
101
+ - lib/takagi/coap/registries/message_type.rb
102
+ - lib/takagi/coap/registries/method.rb
103
+ - lib/takagi/coap/registries/option.rb
104
+ - lib/takagi/coap/registries/response.rb
105
+ - lib/takagi/coap/registries/signaling.rb
106
+ - lib/takagi/coap/signaling.rb
107
+ - lib/takagi/composite_router.rb
108
+ - lib/takagi/config.rb
109
+ - lib/takagi/controller.rb
110
+ - lib/takagi/controller/resource_allocator.rb
111
+ - lib/takagi/controller/thread_pool.rb
112
+ - lib/takagi/core/attribute_set.rb
113
+ - lib/takagi/discovery/core_link_format.rb
114
+ - lib/takagi/errors.rb
115
+ - lib/takagi/event_bus.rb
116
+ - lib/takagi/event_bus/address_prefix.rb
117
+ - lib/takagi/event_bus/async_executor.rb
118
+ - lib/takagi/event_bus/coap_bridge.rb
119
+ - lib/takagi/event_bus/future.rb
120
+ - lib/takagi/event_bus/lru_cache.rb
121
+ - lib/takagi/event_bus/message_buffer.rb
122
+ - lib/takagi/event_bus/observer_cleanup.rb
123
+ - lib/takagi/event_bus/scope.rb
124
+ - lib/takagi/helpers.rb
125
+ - lib/takagi/hooks.rb
126
+ - lib/takagi/initializer.rb
76
127
  - lib/takagi/logger.rb
77
- - lib/takagi/message.rb
128
+ - lib/takagi/message/base.rb
129
+ - lib/takagi/message/deduplication_cache.rb
130
+ - lib/takagi/message/inbound.rb
131
+ - lib/takagi/message/outbound.rb
132
+ - lib/takagi/message/request.rb
133
+ - lib/takagi/message/retransmission_manager.rb
134
+ - lib/takagi/middleware/authentication.rb
135
+ - lib/takagi/middleware/caching.rb
136
+ - lib/takagi/middleware/debugging.rb
137
+ - lib/takagi/middleware/logging.rb
138
+ - lib/takagi/middleware/metrics.rb
139
+ - lib/takagi/middleware/rate_limiting.rb
140
+ - lib/takagi/middleware_stack.rb
141
+ - lib/takagi/network/base.rb
142
+ - lib/takagi/network/framing/tcp.rb
143
+ - lib/takagi/network/framing/udp.rb
144
+ - lib/takagi/network/registry.rb
145
+ - lib/takagi/network/tcp.rb
146
+ - lib/takagi/network/tcp_sender.rb
147
+ - lib/takagi/network/udp.rb
148
+ - lib/takagi/network/udp_sender.rb
149
+ - lib/takagi/observable/emitter.rb
150
+ - lib/takagi/observable/reactor.rb
151
+ - lib/takagi/observable/registry.rb
152
+ - lib/takagi/observe_registry.rb
153
+ - lib/takagi/observer/client.rb
154
+ - lib/takagi/observer/registry.rb
155
+ - lib/takagi/observer/sender.rb
156
+ - lib/takagi/observer/watcher.rb
157
+ - lib/takagi/plugin.rb
158
+ - lib/takagi/profiles.rb
159
+ - lib/takagi/reactor.rb
160
+ - lib/takagi/reactor_registry.rb
161
+ - lib/takagi/registry/base.rb
162
+ - lib/takagi/response_builder.rb
78
163
  - lib/takagi/router.rb
164
+ - lib/takagi/router/metadata_extractor.rb
165
+ - lib/takagi/router/route_matcher.rb
166
+ - lib/takagi/serialization.rb
167
+ - lib/takagi/serialization/base.rb
168
+ - lib/takagi/serialization/cbor_serializer.rb
169
+ - lib/takagi/serialization/json_serializer.rb
170
+ - lib/takagi/serialization/octet_stream_serializer.rb
171
+ - lib/takagi/serialization/registry.rb
172
+ - lib/takagi/serialization/text_serializer.rb
79
173
  - lib/takagi/server.rb
174
+ - lib/takagi/server/multi.rb
175
+ - lib/takagi/server/registry.rb
176
+ - lib/takagi/server/tcp.rb
177
+ - lib/takagi/server/udp.rb
178
+ - lib/takagi/server/udp_worker.rb
179
+ - lib/takagi/server_registry.rb
180
+ - lib/takagi/tcp_client.rb
80
181
  - lib/takagi/version.rb
81
182
  - sig/takagi.rbs
183
+ - sig/takagi/application.rbs
184
+ - sig/takagi/base.rbs
185
+ - sig/takagi/base/middleware_management.rbs
186
+ - sig/takagi/base/reactor_management.rbs
187
+ - sig/takagi/base/server_lifecycle.rbs
188
+ - sig/takagi/cbor/decoder.rbs
189
+ - sig/takagi/cbor/encoder.rbs
190
+ - sig/takagi/cbor/error.rbs
191
+ - sig/takagi/cbor/version.rbs
192
+ - sig/takagi/client.rbs
193
+ - sig/takagi/client/response.rbs
194
+ - sig/takagi/client_base.rbs
195
+ - sig/takagi/coap.rbs
196
+ - sig/takagi/coap/code_helpers.rbs
197
+ - sig/takagi/coap/registries/base.rbs
198
+ - sig/takagi/coap/registries/content_format.rbs
199
+ - sig/takagi/coap/registries/message_type.rbs
200
+ - sig/takagi/coap/registries/method.rbs
201
+ - sig/takagi/coap/registries/option.rbs
202
+ - sig/takagi/coap/registries/response.rbs
203
+ - sig/takagi/composite_router.rbs
204
+ - sig/takagi/config.rbs
205
+ - sig/takagi/controller.rbs
206
+ - sig/takagi/core/attribute_set.rbs
207
+ - sig/takagi/discovery/core_link_format.rbs
208
+ - sig/takagi/event_bus.rbs
209
+ - sig/takagi/event_bus/address_prefix.rbs
210
+ - sig/takagi/event_bus/async_executor.rbs
211
+ - sig/takagi/event_bus/coap_bridge.rbs
212
+ - sig/takagi/event_bus/future.rbs
213
+ - sig/takagi/event_bus/lru_cache.rbs
214
+ - sig/takagi/event_bus/message_buffer.rbs
215
+ - sig/takagi/event_bus/observer_cleanup.rbs
216
+ - sig/takagi/helpers.rbs
217
+ - sig/takagi/initializer.rbs
218
+ - sig/takagi/logger.rbs
219
+ - sig/takagi/message/base.rbs
220
+ - sig/takagi/message/deduplication_cache.rbs
221
+ - sig/takagi/message/inbound.rbs
222
+ - sig/takagi/message/outbound.rbs
223
+ - sig/takagi/message/request.rbs
224
+ - sig/takagi/message/retransmission_manager.rbs
225
+ - sig/takagi/middleware/authentication.rbs
226
+ - sig/takagi/middleware/caching.rbs
227
+ - sig/takagi/middleware/debugging.rbs
228
+ - sig/takagi/middleware/logging.rbs
229
+ - sig/takagi/middleware/metrics.rbs
230
+ - sig/takagi/middleware/rate_limiting.rbs
231
+ - sig/takagi/middleware_stack.rbs
232
+ - sig/takagi/network/tcp_sender.rbs
233
+ - sig/takagi/network/udp_sender.rbs
234
+ - sig/takagi/observe_registry.rbs
235
+ - sig/takagi/observer/client.rbs
236
+ - sig/takagi/observer/sender.rbs
237
+ - sig/takagi/observer/watcher.rbs
238
+ - sig/takagi/profiles.rbs
239
+ - sig/takagi/reactor.rbs
240
+ - sig/takagi/reactor_registry.rbs
241
+ - sig/takagi/response_builder.rbs
242
+ - sig/takagi/router.rbs
243
+ - sig/takagi/router/metadata_extractor.rbs
244
+ - sig/takagi/router/route_matcher.rbs
245
+ - sig/takagi/serialization.rbs
246
+ - sig/takagi/server.rbs
247
+ - sig/takagi/server/multi.rbs
248
+ - sig/takagi/server/tcp.rbs
249
+ - sig/takagi/server/udp.rbs
250
+ - sig/takagi/server/udp_worker.rbs
251
+ - sig/takagi/server_registry.rbs
252
+ - sig/takagi/tcp_client.rbs
253
+ - sig/takagi/version.rbs
82
254
  - takagi.gemspec
83
- homepage: https://github.com/domitea/takagi
255
+ homepage: https://github.com/takagi-works/takagi
84
256
  licenses:
85
257
  - MIT
86
258
  metadata:
87
259
  allowed_push_host: https://rubygems.org
88
- homepage_uri: https://github.com/domitea/takagi
89
- source_code_uri: https://github.com/domitea/takagi
90
- changelog_uri: https://github.com/domitea/takagi/CHANGELOG.md
91
- post_install_message:
260
+ homepage_uri: https://github.com/takagi-works/takagi
261
+ source_code_uri: https://github.com/takagi-works/takagi.git
262
+ changelog_uri: https://github.com/takagi-works/takagi/blob/master/CHANGELOG.md
263
+ rubygems_mfa_required: 'true'
264
+ post_install_message:
92
265
  rdoc_options: []
93
266
  require_paths:
94
267
  - lib
@@ -103,8 +276,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
276
  - !ruby/object:Gem::Version
104
277
  version: '0'
105
278
  requirements: []
106
- rubygems_version: 3.3.7
107
- signing_key:
279
+ rubygems_version: 3.3.26
280
+ signing_key:
108
281
  specification_version: 4
109
282
  summary: Lightweight CoAP framework for Ruby
110
283
  test_files: []
data/.idea/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- # Default ignored files
2
- /shelf/
3
- /workspace.xml
4
- # Editor-based HTTP Client requests
5
- /httpRequests/
6
- # Datasource local storage ignored files
7
- /dataSources/
8
- /dataSources.local.xml
data/.idea/misc.xml DELETED
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectRootManager" version="2" project-jdk-name="ruby-3.1.2-p20" project-jdk-type="RUBY_SDK" />
4
- </project>
data/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/takagi.iml" filepath="$PROJECT_DIR$/.idea/takagi.iml" />
6
- </modules>
7
- </component>
8
- </project>
data/.idea/takagi.iml DELETED
@@ -1,81 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="ModuleRunConfigurationManager">
4
- <shared />
5
- </component>
6
- <component name="NewModuleRootManager">
7
- <content url="file://$MODULE_DIR$">
8
- <sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
9
- <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
10
- <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
11
- </content>
12
- <orderEntry type="inheritedJdk" />
13
- <orderEntry type="sourceFolder" forTests="false" />
14
- <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, ruby-3.1.2-p20) [gem]" level="application" />
15
- <orderEntry type="library" scope="PROVIDED" name="bigdecimal (v3.1.9, ruby-3.1.2-p20) [gem]" level="application" />
16
- <orderEntry type="library" scope="PROVIDED" name="bundler (v2.5.6, ruby-3.1.2-p20) [gem]" level="application" />
17
- <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.6.0, ruby-3.1.2-p20) [gem]" level="application" />
18
- <orderEntry type="library" scope="PROVIDED" name="json (v2.10.1, ruby-3.1.2-p20) [gem]" level="application" />
19
- <orderEntry type="library" scope="PROVIDED" name="language_server-protocol (v3.17.0.4, ruby-3.1.2-p20) [gem]" level="application" />
20
- <orderEntry type="library" scope="PROVIDED" name="lint_roller (v1.1.0, ruby-3.1.2-p20) [gem]" level="application" />
21
- <orderEntry type="library" scope="PROVIDED" name="parallel (v1.26.3, ruby-3.1.2-p20) [gem]" level="application" />
22
- <orderEntry type="library" scope="PROVIDED" name="parser (v3.3.7.1, ruby-3.1.2-p20) [gem]" level="application" />
23
- <orderEntry type="library" scope="PROVIDED" name="racc (v1.8.1, ruby-3.1.2-p20) [gem]" level="application" />
24
- <orderEntry type="library" scope="PROVIDED" name="rack (v3.1.10, ruby-3.1.2-p20) [gem]" level="application" />
25
- <orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, ruby-3.1.2-p20) [gem]" level="application" />
26
- <orderEntry type="library" scope="PROVIDED" name="rake (v13.2.1, ruby-3.1.2-p20) [gem]" level="application" />
27
- <orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.10.0, ruby-3.1.2-p20) [gem]" level="application" />
28
- <orderEntry type="library" scope="PROVIDED" name="rspec (v3.13.0, ruby-3.1.2-p20) [gem]" level="application" />
29
- <orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.13.3, ruby-3.1.2-p20) [gem]" level="application" />
30
- <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.13.3, ruby-3.1.2-p20) [gem]" level="application" />
31
- <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.13.2, ruby-3.1.2-p20) [gem]" level="application" />
32
- <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.13.2, ruby-3.1.2-p20) [gem]" level="application" />
33
- <orderEntry type="library" scope="PROVIDED" name="rubocop (v1.73.0, ruby-3.1.2-p20) [gem]" level="application" />
34
- <orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.38.1, ruby-3.1.2-p20) [gem]" level="application" />
35
- <orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.13.0, ruby-3.1.2-p20) [gem]" level="application" />
36
- <orderEntry type="library" scope="PROVIDED" name="sequel (v5.89.0, ruby-3.1.2-p20) [gem]" level="application" />
37
- <orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v3.1.4, ruby-3.1.2-p20) [gem]" level="application" />
38
- <orderEntry type="library" scope="PROVIDED" name="unicode-emoji (v4.0.4, ruby-3.1.2-p20) [gem]" level="application" />
39
- </component>
40
- <component name="RakeTasksCache-v2">
41
- <option name="myRootTask">
42
- <RakeTaskImpl id="rake">
43
- <subtasks>
44
- <RakeTaskImpl description="Build takagi-0.1.0.gem into the pkg directory" fullCommand="build" id="build" />
45
- <RakeTaskImpl id="build">
46
- <subtasks>
47
- <RakeTaskImpl description="Generate SHA512 checksum if takagi-0.1.0.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
48
- </subtasks>
49
- </RakeTaskImpl>
50
- <RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
51
- <RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
52
- <RakeTaskImpl description="Build and install takagi-0.1.0.gem into system gems" fullCommand="install" id="install" />
53
- <RakeTaskImpl id="install">
54
- <subtasks>
55
- <RakeTaskImpl description="Build and install takagi-0.1.0.gem into system gems without network access" fullCommand="install:local" id="local" />
56
- </subtasks>
57
- </RakeTaskImpl>
58
- <RakeTaskImpl description="Create tag v0.1.0 and build and push takagi-0.1.0.gem to https://rubygems.org" fullCommand="release[remote]" id="release[remote]" />
59
- <RakeTaskImpl description="Run RuboCop" fullCommand="rubocop" id="rubocop" />
60
- <RakeTaskImpl id="rubocop">
61
- <subtasks>
62
- <RakeTaskImpl description="Autocorrect RuboCop offenses (only when it's safe)" fullCommand="rubocop:autocorrect" id="autocorrect" />
63
- <RakeTaskImpl description="Autocorrect RuboCop offenses (safe and unsafe)" fullCommand="rubocop:autocorrect_all" id="autocorrect_all" />
64
- <RakeTaskImpl description="" fullCommand="rubocop:auto_correct" id="auto_correct" />
65
- </subtasks>
66
- </RakeTaskImpl>
67
- <RakeTaskImpl description="Run RSpec code examples" fullCommand="spec" id="spec" />
68
- <RakeTaskImpl description="" fullCommand="default" id="default" />
69
- <RakeTaskImpl description="" fullCommand="release" id="release" />
70
- <RakeTaskImpl id="release">
71
- <subtasks>
72
- <RakeTaskImpl description="" fullCommand="release:guard_clean" id="guard_clean" />
73
- <RakeTaskImpl description="" fullCommand="release:rubygem_push" id="rubygem_push" />
74
- <RakeTaskImpl description="" fullCommand="release:source_control_push" id="source_control_push" />
75
- </subtasks>
76
- </RakeTaskImpl>
77
- </subtasks>
78
- </RakeTaskImpl>
79
- </option>
80
- </component>
81
- </module>
data/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="" vcs="Git" />
5
- </component>
6
- </project>
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Takagi
4
- class Message
5
- def self.parse(data)
6
- version_type_tkl = data.bytes[0]
7
- code = data.bytes[1]
8
- data.bytes[2..3].pack("C*").unpack1("n")
9
- token_length = version_type_tkl & 0x0F
10
- token = data[4, token_length] || "".b
11
- path = extract_uri_path(data.bytes[(4 + token_length)..])
12
- payload_start = data.index("\xFF".b)
13
- payload = payload_start ? data[(payload_start + 1)..].force_encoding("ASCII-8BIT") : nil
14
-
15
- { method: coap_code_to_method(code), path: path, token: token, payload: payload }
16
- end
17
-
18
- def self.build_response(code, payload, token)
19
- message_id = rand(0..0xFFFF)
20
- response_code = coap_method_to_code(code)
21
- header = [0x60 | (token.bytesize & 0x0F), response_code, (message_id >> 8) & 0xFF, message_id & 0xFF].pack("C*")
22
-
23
- payload_marker = "\xFF".b
24
- payload_data = payload.to_json.force_encoding("ASCII-8BIT")
25
- header + token + payload_marker + payload_data
26
- end
27
-
28
- def self.coap_code_to_method(code)
29
- case code
30
- when 1 then "GET"
31
- when 2 then "POST"
32
- when 3 then "PUT"
33
- when 4 then "DELETE"
34
- else "UNKNOWN"
35
- end
36
- end
37
-
38
- def self.coap_method_to_code(code)
39
- case code
40
- when 2.05 then 69 # 2.05 Content
41
- when 4.04 then 132 # 4.04 Not Found
42
- else 160 # Generic response
43
- end
44
- end
45
-
46
- def self.extract_uri_path(bytes)
47
- path_segments = [] # Místo prostého stringu uložíme segmenty do pole
48
- options_start = 0
49
- last_option = 0
50
-
51
- while options_start < bytes.length && bytes[options_start] != 255 # 0xFF = start payloadu
52
- delta = (bytes[options_start] >> 4) & 0x0F # Číslo opce
53
- len = bytes[options_start] & 0x0F # Délka dat
54
- options_start += 1
55
-
56
- option_number = last_option + delta
57
- if option_number == 11 # Uri-Path (11 znamená část cesty)
58
- segment = bytes[options_start, len].pack("C*").b
59
- path_segments << segment # Ukládáme jednotlivé segmenty do pole
60
- puts "Parsed path segment: #{segment}" # Debug výpis
61
- end
62
-
63
- options_start += len
64
- last_option = option_number
65
- end
66
-
67
- # Spojíme segmenty pomocí `/` a zajistíme, že začne `/`
68
- path = "/#{path_segments.join("/")}"
69
-
70
- path.force_encoding("UTF-8") if path.valid_encoding?
71
- puts "Final parsed path: #{path}" # Debug výpis celé cesty
72
- path
73
- end
74
- end
75
- end