rage-iodine 1.7.58

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 (128) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  3. data/.github/workflows/ruby.yml +42 -0
  4. data/.gitignore +20 -0
  5. data/.rspec +2 -0
  6. data/.yardopts +8 -0
  7. data/CHANGELOG.md +1098 -0
  8. data/Gemfile +11 -0
  9. data/LICENSE.txt +21 -0
  10. data/LIMITS.md +41 -0
  11. data/README.md +782 -0
  12. data/Rakefile +23 -0
  13. data/SPEC-PubSub-Draft.md +159 -0
  14. data/SPEC-WebSocket-Draft.md +239 -0
  15. data/bin/console +22 -0
  16. data/bin/info.md +353 -0
  17. data/bin/mustache_bench.rb +100 -0
  18. data/bin/poc/Gemfile.lock +23 -0
  19. data/bin/poc/README.md +37 -0
  20. data/bin/poc/config.ru +66 -0
  21. data/bin/poc/gemfile +1 -0
  22. data/bin/poc/www/index.html +57 -0
  23. data/examples/async_task.ru +92 -0
  24. data/examples/bates/README.md +3 -0
  25. data/examples/bates/config.ru +342 -0
  26. data/examples/bates/david+bold.pdf +0 -0
  27. data/examples/bates/public/drop-pdf.png +0 -0
  28. data/examples/bates/public/index.html +600 -0
  29. data/examples/config.ru +59 -0
  30. data/examples/echo.ru +59 -0
  31. data/examples/etag.ru +16 -0
  32. data/examples/hello.ru +29 -0
  33. data/examples/pubsub_engine.ru +81 -0
  34. data/examples/rack3.ru +12 -0
  35. data/examples/redis.ru +70 -0
  36. data/examples/shootout.ru +73 -0
  37. data/examples/sub-protocols.ru +90 -0
  38. data/examples/tcp_client.rb +66 -0
  39. data/examples/x-sendfile.ru +14 -0
  40. data/exe/iodine +280 -0
  41. data/ext/iodine/extconf.rb +110 -0
  42. data/ext/iodine/fio.c +12096 -0
  43. data/ext/iodine/fio.h +6390 -0
  44. data/ext/iodine/fio_cli.c +431 -0
  45. data/ext/iodine/fio_cli.h +189 -0
  46. data/ext/iodine/fio_json_parser.h +687 -0
  47. data/ext/iodine/fio_siphash.c +157 -0
  48. data/ext/iodine/fio_siphash.h +37 -0
  49. data/ext/iodine/fio_tls.h +129 -0
  50. data/ext/iodine/fio_tls_missing.c +649 -0
  51. data/ext/iodine/fio_tls_openssl.c +1056 -0
  52. data/ext/iodine/fio_tmpfile.h +50 -0
  53. data/ext/iodine/fiobj.h +44 -0
  54. data/ext/iodine/fiobj4fio.h +21 -0
  55. data/ext/iodine/fiobj_ary.c +333 -0
  56. data/ext/iodine/fiobj_ary.h +139 -0
  57. data/ext/iodine/fiobj_data.c +1185 -0
  58. data/ext/iodine/fiobj_data.h +167 -0
  59. data/ext/iodine/fiobj_hash.c +409 -0
  60. data/ext/iodine/fiobj_hash.h +176 -0
  61. data/ext/iodine/fiobj_json.c +622 -0
  62. data/ext/iodine/fiobj_json.h +68 -0
  63. data/ext/iodine/fiobj_mem.h +71 -0
  64. data/ext/iodine/fiobj_mustache.c +317 -0
  65. data/ext/iodine/fiobj_mustache.h +62 -0
  66. data/ext/iodine/fiobj_numbers.c +344 -0
  67. data/ext/iodine/fiobj_numbers.h +127 -0
  68. data/ext/iodine/fiobj_str.c +433 -0
  69. data/ext/iodine/fiobj_str.h +172 -0
  70. data/ext/iodine/fiobject.c +620 -0
  71. data/ext/iodine/fiobject.h +654 -0
  72. data/ext/iodine/hpack.h +1923 -0
  73. data/ext/iodine/http.c +2736 -0
  74. data/ext/iodine/http.h +1019 -0
  75. data/ext/iodine/http1.c +825 -0
  76. data/ext/iodine/http1.h +29 -0
  77. data/ext/iodine/http1_parser.h +1835 -0
  78. data/ext/iodine/http_internal.c +1279 -0
  79. data/ext/iodine/http_internal.h +248 -0
  80. data/ext/iodine/http_mime_parser.h +350 -0
  81. data/ext/iodine/iodine.c +1433 -0
  82. data/ext/iodine/iodine.h +64 -0
  83. data/ext/iodine/iodine_caller.c +218 -0
  84. data/ext/iodine/iodine_caller.h +27 -0
  85. data/ext/iodine/iodine_connection.c +941 -0
  86. data/ext/iodine/iodine_connection.h +55 -0
  87. data/ext/iodine/iodine_defer.c +420 -0
  88. data/ext/iodine/iodine_defer.h +6 -0
  89. data/ext/iodine/iodine_fiobj2rb.h +120 -0
  90. data/ext/iodine/iodine_helpers.c +282 -0
  91. data/ext/iodine/iodine_helpers.h +12 -0
  92. data/ext/iodine/iodine_http.c +1280 -0
  93. data/ext/iodine/iodine_http.h +23 -0
  94. data/ext/iodine/iodine_json.c +302 -0
  95. data/ext/iodine/iodine_json.h +6 -0
  96. data/ext/iodine/iodine_mustache.c +567 -0
  97. data/ext/iodine/iodine_mustache.h +6 -0
  98. data/ext/iodine/iodine_pubsub.c +580 -0
  99. data/ext/iodine/iodine_pubsub.h +26 -0
  100. data/ext/iodine/iodine_rack_io.c +273 -0
  101. data/ext/iodine/iodine_rack_io.h +20 -0
  102. data/ext/iodine/iodine_store.c +142 -0
  103. data/ext/iodine/iodine_store.h +20 -0
  104. data/ext/iodine/iodine_tcp.c +346 -0
  105. data/ext/iodine/iodine_tcp.h +13 -0
  106. data/ext/iodine/iodine_tls.c +261 -0
  107. data/ext/iodine/iodine_tls.h +13 -0
  108. data/ext/iodine/mustache_parser.h +1546 -0
  109. data/ext/iodine/redis_engine.c +957 -0
  110. data/ext/iodine/redis_engine.h +79 -0
  111. data/ext/iodine/resp_parser.h +317 -0
  112. data/ext/iodine/scheduler.c +173 -0
  113. data/ext/iodine/scheduler.h +6 -0
  114. data/ext/iodine/websocket_parser.h +506 -0
  115. data/ext/iodine/websockets.c +752 -0
  116. data/ext/iodine/websockets.h +185 -0
  117. data/iodine.gemspec +50 -0
  118. data/lib/iodine/connection.rb +61 -0
  119. data/lib/iodine/json.rb +42 -0
  120. data/lib/iodine/mustache.rb +113 -0
  121. data/lib/iodine/pubsub.rb +55 -0
  122. data/lib/iodine/rack_utils.rb +43 -0
  123. data/lib/iodine/tls.rb +16 -0
  124. data/lib/iodine/version.rb +3 -0
  125. data/lib/iodine.rb +274 -0
  126. data/lib/rack/handler/iodine.rb +33 -0
  127. data/logo.png +0 -0
  128. metadata +284 -0
data/lib/iodine.rb ADDED
@@ -0,0 +1,274 @@
1
+ require 'stringio' # Used internally as a default RackIO
2
+ require 'socket' # TCPSocket is used internally for Hijack support
3
+ # require 'openssl' # For SSL/TLS support using OpenSSL
4
+
5
+ require_relative './iodine/version'
6
+ require_relative './iodine/iodine_ext' # loading a binary C extension
7
+
8
+ # Iodine is an HTTP / WebSocket server as well as an Evented Network Tool Library. In essense, Iodine is a Ruby port for the [facil.io](http://facil.io) C library.
9
+ #
10
+ # Here is a simple telnet based echo server using Iodine (see full list at {Iodine::Connection}):
11
+ #
12
+ #
13
+ # require 'iodine'
14
+ # # define the protocol for our service
15
+ # module EchoProtocol
16
+ # def on_open(client)
17
+ # # Set a connection timeout
18
+ # client.timeout = 10
19
+ # # Write a welcome message
20
+ # client.write "Echo server running on Iodine #{Iodine::VERSION}.\r\n"
21
+ # end
22
+ # # this is called for incoming data - note data might be fragmented.
23
+ # def on_message(client, data)
24
+ # # write the data we received
25
+ # client.write "echo: #{data}"
26
+ # # close the connection when the time comes
27
+ # client.close if data =~ /^bye[\n\r]/
28
+ # end
29
+ # # called if the connection is still open and the server is shutting down.
30
+ # def on_shutdown(client)
31
+ # # write the data we received
32
+ # client.write "Server going away\r\n"
33
+ # end
34
+ # extend self
35
+ # end
36
+ # # create the service instance, the block returns a connection handler.
37
+ # Iodine.listen(port: "3000") { EchoProtocol }
38
+ # # start the service
39
+ # Iodine.threads = 1
40
+ # Iodine.start
41
+ #
42
+ #
43
+ #
44
+ # Methods for setting up and starting {Iodine} include {start}, {threads}, {threads=}, {workers} and {workers=}.
45
+ #
46
+ # Methods for setting startup / operational callbacks include {on_idle}, {on_state}.
47
+ #
48
+ # Methods for asynchronous execution include {run} (same as {defer}), {run_after} and {run_every}.
49
+ #
50
+ # Methods for application wide pub/sub include {subscribe}, {unsubscribe} and {publish}. Connection specific pub/sub methods are documented in the {Iodine::Connection} class).
51
+ #
52
+ # Methods for TCP/IP, Unix Sockets and HTTP connections include {listen} and {connect}.
53
+ #
54
+ # Note that the HTTP server supports both TCP/IP and Unix Sockets as well as SSE / WebSockets extensions.
55
+ #
56
+ # Iodine doesn't call {patch_rack} automatically, but doing so will improve Rack's performace.
57
+ #
58
+ # Please read the {file:README.md} file for an introduction to Iodine.
59
+ #
60
+ module Iodine
61
+
62
+ # Will monkey patch some Rack methods to increase their performance.
63
+ #
64
+ # This is recommended, see {Iodine::Rack::Utils} for details.
65
+ def self.patch_rack
66
+ begin
67
+ require 'rack'
68
+ rescue LoadError
69
+ end
70
+ ::Rack::Utils.class_eval do
71
+ Iodine::Base::MonkeyPatch::RackUtils.methods(false).each do |m|
72
+ ::Rack::Utils.define_singleton_method(m,
73
+ Iodine::Base::MonkeyPatch::RackUtils.instance_method(m) )
74
+ end
75
+ end
76
+ end
77
+
78
+
79
+ # @deprecated use {Iodine.listen} with `service: :http`.
80
+ #
81
+ # Sets a block of code to run once a Worker process shuts down (both in single process mode and cluster mode).
82
+ def self.listen2http(args, &block)
83
+ warn "Iodine.listen2http is deprecated, use Iodine.listen(service: :http)."
84
+ args[:service] = :http;
85
+ Iodine.listen(args, &block)
86
+ end
87
+
88
+ # @deprecated use {Iodine.on_state}.
89
+ #
90
+ # Sets a block of code to run before a new worker process is forked (cluster mode only).
91
+ def self.before_fork(&block)
92
+ warn "Iodine.before_fork is deprecated, use Iodine.on_state(:before_fork)."
93
+ Iodine.on_state(:before_fork, &block)
94
+ end
95
+ # @deprecated use {Iodine.on_state}.
96
+ #
97
+ # Sets a block of code to run after a new worker process is forked (cluster mode only).
98
+ #
99
+ # Code runs in both the parent and the child.
100
+ def self.after_fork(&block)
101
+ warn "Iodine.after_fork is deprecated, use Iodine.on_state(:after_fork)."
102
+ Iodine.on_state(:after_fork, &block)
103
+ end
104
+ # @deprecated use {Iodine.on_state}.
105
+ #
106
+ # Sets a block of code to run in the worker process, after a new worker process is forked (cluster mode only).
107
+ def self.after_fork_in_worker(&block)
108
+ warn "Iodine.after_fork_in_worker is deprecated, use Iodine.on_state(:enter_child)."
109
+ Iodine.on_state(:enter_child, &block)
110
+ end
111
+ # @deprecated use {Iodine.on_state}.
112
+ #
113
+ # Sets a block of code to run in the master / root process, after a new worker process is forked (cluster mode only).
114
+ def self.after_fork_in_master(&block)
115
+ warn "Iodine.after_fork_in_master is deprecated, use Iodine.on_state(:enter_master)."
116
+ Iodine.on_state(:enter_master, &block)
117
+ end
118
+ # @deprecated use {Iodine.on_state}.
119
+ #
120
+ # Sets a block of code to run once a Worker process shuts down (both in single process mode and cluster mode).
121
+ def self.on_shutdown(&block)
122
+ warn "Iodine.on_shutdown is deprecated, use Iodine.on_state(:on_finish)."
123
+ Iodine.on_state(:on_finish, &block)
124
+ end
125
+
126
+ module PubSub
127
+ # @deprecated use {Iodine::PubSub.detach}.
128
+ def self.dettach(engine)
129
+ warn "Iodine::PubSub.dettach is deprecated (was a typo), use Iodine::PubSub.detach(engine)."
130
+ Iodine::PubSub.detach(engine)
131
+ end
132
+ end
133
+
134
+ ### trap some signals to avoid excessive exception reports
135
+ begin
136
+ old_sigint = Signal.trap("SIGINT") { old_sigint.call if old_sigint.respond_to?(:call) }
137
+ rescue Exception
138
+ end
139
+ begin
140
+ old_sigterm = Signal.trap("SIGTERM") { old_sigterm.call if old_sigterm.respond_to?(:call) }
141
+ rescue Exception
142
+ end
143
+ begin
144
+ old_sigpipe = Signal.trap("SIGPIPE") { old_sigpipe.call if old_sigpipe.respond_to?(:call) }
145
+ rescue Exception
146
+ end
147
+ begin
148
+ old_sigusr1 = Signal.trap("SIGUSR1") { old_sigusr1.call if old_sigusr1.respond_to?(:call) }
149
+ rescue Exception
150
+ end
151
+ end
152
+
153
+ require 'rack/handler/iodine' unless defined? ::Iodine::Rack::IODINE_RACK_LOADED
154
+
155
+
156
+ ### Automatic ActiveRecord and Sequel support for forking (preventing connection sharing)
157
+ Iodine.on_state(:before_fork) do
158
+ if defined?(ActiveRecord) && defined?(ActiveRecord::Base) && ActiveRecord::Base.respond_to?(:connection)
159
+ begin
160
+ ActiveRecord::Base.connection.disconnect!
161
+ rescue
162
+ end
163
+ end
164
+ if defined?(Sequel)
165
+ begin
166
+ Sequel::DATABASES.each { |database| database.disconnect }
167
+ rescue
168
+ end
169
+ end
170
+ end
171
+ Iodine.on_state(:after_fork) do
172
+ if defined?(ActiveRecord) && defined?(ActiveRecord::Base) && ActiveRecord::Base.respond_to?(:establish_connection)
173
+ begin
174
+ ActiveRecord::Base.establish_connection
175
+ rescue
176
+ end
177
+ end
178
+ end
179
+
180
+ ### Parse CLI for default HTTP settings
181
+ Iodine::Base::CLI.parse if defined?(IODINE_PARSE_CLI) && IODINE_PARSE_CLI
182
+
183
+ ### Set default port (if missing)
184
+ Iodine::DEFAULT_SETTINGS[:port] ||= (ENV["PORT"] || "3000")
185
+
186
+ ### Set default binding (if missing)
187
+ Iodine::DEFAULT_SETTINGS[:address] ||= nil
188
+
189
+ ### Initialize Redis if set in CLI
190
+ Iodine::PubSub.default = Iodine::PubSub::Redis.new(Iodine::DEFAULT_SETTINGS[:redis_], ping: Iodine::DEFAULT_SETTINGS[:redis_ping_]) if Iodine::DEFAULT_SETTINGS[:redis_]
191
+
192
+ ### PID file generation
193
+ if Iodine::DEFAULT_SETTINGS[:pid_]
194
+ pid_filename = Iodine::DEFAULT_SETTINGS[:pid_]
195
+ Iodine::DEFAULT_SETTINGS.delete :pid_
196
+ pid_filename << "iodine.pid" if(pid_filename[-1] == '/')
197
+ if File.exist?(pid_filename)
198
+ raise "pid filename shold point to a valid file name (not a folder)!" if(!File.file?(pid_filename))
199
+ File.delete(pid_filename)
200
+ end
201
+ Iodine.on_state(:pre_start) do
202
+ IO.binwrite(pid_filename, "#{Process.pid}\r\n")
203
+ end
204
+ Iodine.on_state(:on_finish) do
205
+ File.delete(pid_filename)
206
+ end
207
+ end
208
+
209
+ ### Puma / Thin DSL compatibility - depracated (DSLs are evil)
210
+
211
+ if(!defined?(after_fork))
212
+ # @deprecated use {Iodine.on_state}.
213
+ #
214
+ # Performs a block of code whenever a new worker process spins up (performed once per worker).
215
+ def after_fork(*args, &block)
216
+ warn "after_fork is deprecated, use Iodine.on_state(:after_fork)."
217
+ Iodine.on_state(:after_fork, &block)
218
+ end
219
+ end
220
+ if(!defined?(after_fork_in_worker))
221
+ # @deprecated use {Iodine.on_state}.
222
+ #
223
+ # Performs a block of code whenever a new worker process spins up (performed once per worker).
224
+ def after_fork_in_worker(*args, &block)
225
+ warn "after_fork_in_worker is deprecated, use Iodine.on_state(:enter_child)."
226
+ Iodine.on_state(:enter_child, &block)
227
+ end
228
+ end
229
+ if(!defined?(after_fork_in_master))
230
+ # @deprecated use {Iodine.on_state}.
231
+ #
232
+ # Performs a block of code whenever a new worker process spins up (performed once per worker).
233
+ def after_fork_in_master(*args, &block)
234
+ warn "after_fork_in_master is deprecated, use Iodine.on_state(:enter_master)."
235
+ Iodine.on_state(:enter_master, &block)
236
+ end
237
+ end
238
+ if(!defined?(on_worker_boot))
239
+ # @deprecated use {Iodine.on_state}.
240
+ #
241
+ # Performs a block of code before a new worker process spins up (performed once per worker).
242
+ def on_worker_boot(*args, &block)
243
+ warn "on_worker_boot is deprecated, use Iodine.on_state(:after_fork)."
244
+ Iodine.on_state(:after_fork, &block)
245
+ end
246
+ end
247
+ if(!defined?(on_worker_fork))
248
+ # @deprecated use {Iodine.on_state}.
249
+ #
250
+ # Performs a block of code before a new worker process spins up (performed once per worker).
251
+ def on_worker_fork(*args, &block)
252
+ warn "on_worker_fork is deprecated, use Iodine.on_state(:before_fork)."
253
+ Iodine.on_state(:before_fork, &block)
254
+ end
255
+ end
256
+ if(!defined?(before_fork))
257
+ # @deprecated use {Iodine.on_state}.
258
+ #
259
+ # Performs a block of code just before a new worker process spins up (performed once per worker, in the master thread).
260
+ def before_fork(*args, &block)
261
+ warn "before_fork is deprecated, use Iodine.on_state(:before_fork)."
262
+ Iodine.on_state(:before_fork, &block)
263
+ end
264
+ end
265
+
266
+
267
+ #############
268
+ ## At end of loading
269
+
270
+ ### Load configuration filer
271
+ if Iodine::DEFAULT_SETTINGS[:conf_]
272
+ require Iodine::DEFAULT_SETTINGS[:conf_]
273
+ Iodine::DEFAULT_SETTINGS.delete :conf_
274
+ end
@@ -0,0 +1,33 @@
1
+ require 'iodine' unless defined?(::Iodine::VERSION)
2
+
3
+ module Iodine
4
+ # Iodine's {Iodine::Rack} module provides a Rack compliant interface (connecting Iodine to Rack) for an HTTP and Websocket Server.
5
+ module Rack
6
+
7
+ # Runs a Rack app, as par the Rack handler requirements.
8
+ def self.run(app, options = {})
9
+ # nested applications... is that a thing?
10
+ Iodine.listen(service: :http, handler: app, port: options[:Port], address: options[:Host])
11
+
12
+ # start Iodine
13
+ Iodine.start
14
+
15
+ true
16
+ end
17
+
18
+ # patches an assumption by Rack, issue #98 code donated by @Shelvak (Néstor Coppi)
19
+ def self.shutdown
20
+ Iodine.stop
21
+ end
22
+
23
+ IODINE_RACK_LOADED = true
24
+ end
25
+ end
26
+
27
+ ENV['RACK_HANDLER'] ||= 'iodine'
28
+
29
+ begin
30
+ ::Rack::Handler.register('iodine', 'Iodine::Rack') if defined?(::Rack::Handler)
31
+ ::Rack::Handler.register('Iodine', 'Iodine::Rack') if defined?(::Rack::Handler)
32
+ rescue StandardError
33
+ end
data/logo.png ADDED
Binary file
metadata ADDED
@@ -0,0 +1,284 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rage-iodine
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.7.58
5
+ platform: ruby
6
+ authors:
7
+ - Boaz Segev
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-09-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '12.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '14.0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '12.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '14.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: minitest
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '5'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '6.0'
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '5'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '6.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 3.9.0
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '4.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 3.9.0
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '4.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: spec
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 5.3.0
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '6.0'
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 5.3.0
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '6.0'
93
+ - !ruby/object:Gem::Dependency
94
+ name: rake-compiler
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '1'
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: '2.0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '1'
110
+ - - "<"
111
+ - !ruby/object:Gem::Version
112
+ version: '2.0'
113
+ description: A fast HTTP / Websocket Server with built-in Pub/Sub support (with or
114
+ without Redis), static file support and many other features, optimized for Ruby
115
+ MRI on Linux / BSD / macOS / Windows
116
+ email:
117
+ - bo@plezi.io
118
+ executables:
119
+ - iodine
120
+ extensions:
121
+ - ext/iodine/extconf.rb
122
+ extra_rdoc_files: []
123
+ files:
124
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
125
+ - ".github/workflows/ruby.yml"
126
+ - ".gitignore"
127
+ - ".rspec"
128
+ - ".yardopts"
129
+ - CHANGELOG.md
130
+ - Gemfile
131
+ - LICENSE.txt
132
+ - LIMITS.md
133
+ - README.md
134
+ - Rakefile
135
+ - SPEC-PubSub-Draft.md
136
+ - SPEC-WebSocket-Draft.md
137
+ - bin/console
138
+ - bin/info.md
139
+ - bin/mustache_bench.rb
140
+ - bin/poc/Gemfile.lock
141
+ - bin/poc/README.md
142
+ - bin/poc/config.ru
143
+ - bin/poc/gemfile
144
+ - bin/poc/www/index.html
145
+ - examples/async_task.ru
146
+ - examples/bates/README.md
147
+ - examples/bates/config.ru
148
+ - examples/bates/david+bold.pdf
149
+ - examples/bates/public/drop-pdf.png
150
+ - examples/bates/public/index.html
151
+ - examples/config.ru
152
+ - examples/echo.ru
153
+ - examples/etag.ru
154
+ - examples/hello.ru
155
+ - examples/pubsub_engine.ru
156
+ - examples/rack3.ru
157
+ - examples/redis.ru
158
+ - examples/shootout.ru
159
+ - examples/sub-protocols.ru
160
+ - examples/tcp_client.rb
161
+ - examples/x-sendfile.ru
162
+ - exe/iodine
163
+ - ext/iodine/extconf.rb
164
+ - ext/iodine/fio.c
165
+ - ext/iodine/fio.h
166
+ - ext/iodine/fio_cli.c
167
+ - ext/iodine/fio_cli.h
168
+ - ext/iodine/fio_json_parser.h
169
+ - ext/iodine/fio_siphash.c
170
+ - ext/iodine/fio_siphash.h
171
+ - ext/iodine/fio_tls.h
172
+ - ext/iodine/fio_tls_missing.c
173
+ - ext/iodine/fio_tls_openssl.c
174
+ - ext/iodine/fio_tmpfile.h
175
+ - ext/iodine/fiobj.h
176
+ - ext/iodine/fiobj4fio.h
177
+ - ext/iodine/fiobj_ary.c
178
+ - ext/iodine/fiobj_ary.h
179
+ - ext/iodine/fiobj_data.c
180
+ - ext/iodine/fiobj_data.h
181
+ - ext/iodine/fiobj_hash.c
182
+ - ext/iodine/fiobj_hash.h
183
+ - ext/iodine/fiobj_json.c
184
+ - ext/iodine/fiobj_json.h
185
+ - ext/iodine/fiobj_mem.h
186
+ - ext/iodine/fiobj_mustache.c
187
+ - ext/iodine/fiobj_mustache.h
188
+ - ext/iodine/fiobj_numbers.c
189
+ - ext/iodine/fiobj_numbers.h
190
+ - ext/iodine/fiobj_str.c
191
+ - ext/iodine/fiobj_str.h
192
+ - ext/iodine/fiobject.c
193
+ - ext/iodine/fiobject.h
194
+ - ext/iodine/hpack.h
195
+ - ext/iodine/http.c
196
+ - ext/iodine/http.h
197
+ - ext/iodine/http1.c
198
+ - ext/iodine/http1.h
199
+ - ext/iodine/http1_parser.h
200
+ - ext/iodine/http_internal.c
201
+ - ext/iodine/http_internal.h
202
+ - ext/iodine/http_mime_parser.h
203
+ - ext/iodine/iodine.c
204
+ - ext/iodine/iodine.h
205
+ - ext/iodine/iodine_caller.c
206
+ - ext/iodine/iodine_caller.h
207
+ - ext/iodine/iodine_connection.c
208
+ - ext/iodine/iodine_connection.h
209
+ - ext/iodine/iodine_defer.c
210
+ - ext/iodine/iodine_defer.h
211
+ - ext/iodine/iodine_fiobj2rb.h
212
+ - ext/iodine/iodine_helpers.c
213
+ - ext/iodine/iodine_helpers.h
214
+ - ext/iodine/iodine_http.c
215
+ - ext/iodine/iodine_http.h
216
+ - ext/iodine/iodine_json.c
217
+ - ext/iodine/iodine_json.h
218
+ - ext/iodine/iodine_mustache.c
219
+ - ext/iodine/iodine_mustache.h
220
+ - ext/iodine/iodine_pubsub.c
221
+ - ext/iodine/iodine_pubsub.h
222
+ - ext/iodine/iodine_rack_io.c
223
+ - ext/iodine/iodine_rack_io.h
224
+ - ext/iodine/iodine_store.c
225
+ - ext/iodine/iodine_store.h
226
+ - ext/iodine/iodine_tcp.c
227
+ - ext/iodine/iodine_tcp.h
228
+ - ext/iodine/iodine_tls.c
229
+ - ext/iodine/iodine_tls.h
230
+ - ext/iodine/mustache_parser.h
231
+ - ext/iodine/redis_engine.c
232
+ - ext/iodine/redis_engine.h
233
+ - ext/iodine/resp_parser.h
234
+ - ext/iodine/scheduler.c
235
+ - ext/iodine/scheduler.h
236
+ - ext/iodine/websocket_parser.h
237
+ - ext/iodine/websockets.c
238
+ - ext/iodine/websockets.h
239
+ - iodine.gemspec
240
+ - lib/iodine.rb
241
+ - lib/iodine/connection.rb
242
+ - lib/iodine/json.rb
243
+ - lib/iodine/mustache.rb
244
+ - lib/iodine/pubsub.rb
245
+ - lib/iodine/rack_utils.rb
246
+ - lib/iodine/tls.rb
247
+ - lib/iodine/version.rb
248
+ - lib/rack/handler/iodine.rb
249
+ - logo.png
250
+ homepage: https://github.com/rage-rb/iodine
251
+ licenses:
252
+ - MIT
253
+ metadata:
254
+ allowed_push_host: https://rubygems.org
255
+ post_install_message: |-
256
+ Thank you for installing Iodine 1.7.58.
257
+ Remember: if iodine supports your business, it's only fair to give value back (code contributions / donations).
258
+ rdoc_options: []
259
+ require_paths:
260
+ - lib
261
+ - ext
262
+ required_ruby_version: !ruby/object:Gem::Requirement
263
+ requirements:
264
+ - - ">="
265
+ - !ruby/object:Gem::Version
266
+ version: 2.2.2
267
+ required_rubygems_version: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ requirements:
273
+ - 'A Unix based system: Linux / macOS / BSD.'
274
+ - An updated C compiler.
275
+ - Ruby >= 2.3.8 (Ruby EOL).
276
+ - Ruby >= 2.5.0 recommended.
277
+ - TLS requires OpenSSL >= 1.1.0.
278
+ - Or Windows with Ruby >= 3.0.0 build with MingW and MingW as compiler.
279
+ rubygems_version: 3.4.10
280
+ signing_key:
281
+ specification_version: 4
282
+ summary: iodine - a fast HTTP / Websocket Server with Pub/Sub support, optimized for
283
+ Ruby MRI on Linux / BSD / Windows
284
+ test_files: []