low_loop 0.3.1 → 0.4.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/lib/events/file_event.rb +1 -1
- data/lib/low_loop.rb +10 -6
- data/lib/support/config_loader.rb +28 -0
- data/lib/support/low_frame.rb +54 -0
- data/lib/version.rb +1 -1
- metadata +4 -3
- data/lib/support/config_support.rb +0 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3d9fa2d555e127ad470c1eb71573c076d3484b08b833e184aa5c052b0de5a6af
|
|
4
|
+
data.tar.gz: 7a56cc04f846739e4dd957f66d6d558e40ab98c1fc69408fe82a6675f6101dec
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1e6d8044eee477441056a43a895c1314cbe14e99d170244ed9d75477c50b614c5ea29a6ac2dd245172dab8870cdca6d70bfec5b9c4ca2065dce8468be5b12e8c
|
|
7
|
+
data.tar.gz: 1923f95b047d33bccd17fe9b48b63a84dfa80ac30497d25b5989bdffdf1ff50f554898b0e2a5d7fcdc4ceda175f02f4da6dff6dca0c60d94f063a5801d45e9f2
|
data/lib/events/file_event.rb
CHANGED
data/lib/low_loop.rb
CHANGED
|
@@ -9,20 +9,22 @@ require 'observers'
|
|
|
9
9
|
require_relative 'factories/response_factory'
|
|
10
10
|
require_relative 'requests/request_parser'
|
|
11
11
|
require_relative 'responses/response_builder'
|
|
12
|
+
require_relative 'servers/file_server'
|
|
13
|
+
require_relative 'support/low_frame'
|
|
12
14
|
|
|
13
15
|
class LowLoop
|
|
14
16
|
include Observers
|
|
15
17
|
|
|
16
18
|
attr_reader :config
|
|
17
19
|
|
|
18
|
-
def initialize(config:,
|
|
20
|
+
def initialize(config:, router: nil, renderer: nil, show_output: true)
|
|
19
21
|
@config = config
|
|
22
|
+
@frame = LowFrame.new(renderer:, fps: 30, show_output:)
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
end
|
|
24
|
+
observers(Low::Events::RequestEvent) << Low::FileServer.new(web_root: config.web_root, content_types: config.content_types)
|
|
25
|
+
observers(Low::Events::RequestEvent) << router if router
|
|
24
26
|
|
|
25
|
-
observers.push(
|
|
27
|
+
observers.push(Low::Events::RequestEvent, action: :mirror) if config.mirror_mode
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
def start
|
|
@@ -34,9 +36,11 @@ class LowLoop
|
|
|
34
36
|
loop do
|
|
35
37
|
socket = server.accept
|
|
36
38
|
|
|
39
|
+
@frame.render if @frame.renderer
|
|
40
|
+
|
|
37
41
|
Fiber.schedule do
|
|
38
42
|
request = Low::RequestParser.parse(socket:, host: config.host, port: config.port)
|
|
39
|
-
response_event =
|
|
43
|
+
response_event = Low::Events::RequestEvent.take(request:)
|
|
40
44
|
response = response_event.response
|
|
41
45
|
|
|
42
46
|
Low::ResponseBuilder.respond(config:, socket:, response:)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ostruct'
|
|
4
|
+
require 'yaml'
|
|
5
|
+
|
|
6
|
+
module Low
|
|
7
|
+
class ConfigLoader
|
|
8
|
+
class << self
|
|
9
|
+
def load(filepath, env = {})
|
|
10
|
+
config_file = YAML.safe_load_file(filepath, symbolize_names: true)
|
|
11
|
+
|
|
12
|
+
# Environment variables override config file.
|
|
13
|
+
config_data = config_file.merge(env) do |_key, old_value, new_value|
|
|
14
|
+
new_value.nil? ? old_value : new_value
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
OpenStruct.new(config_data)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def parse_boolean(value)
|
|
21
|
+
return true if value == '1'
|
|
22
|
+
return false if value == '0'
|
|
23
|
+
|
|
24
|
+
nil
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'io/console'
|
|
4
|
+
|
|
5
|
+
class LowFrame
|
|
6
|
+
attr_reader :screen_size, :renderer
|
|
7
|
+
|
|
8
|
+
def initialize(renderer:, fps: 30, show_output: true)
|
|
9
|
+
@renderer = renderer
|
|
10
|
+
@show_output = show_output
|
|
11
|
+
|
|
12
|
+
# Millisecond duration of each frame. We lose a small amount of precision dropping the decimal.
|
|
13
|
+
@frame_time = ((1.0 / fps) * 1000).to_i
|
|
14
|
+
|
|
15
|
+
row_count, column_count = IO.console.winsize
|
|
16
|
+
@screen_size = { row_count:, column_count: }
|
|
17
|
+
|
|
18
|
+
@last_frame = nil
|
|
19
|
+
|
|
20
|
+
setup if renderer && show_output
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def render
|
|
24
|
+
if @last_frame.nil? || (current_timestamp - @last_frame) >= @frame_time
|
|
25
|
+
system 'clear' if @show_output
|
|
26
|
+
|
|
27
|
+
@last_frame = current_timestamp
|
|
28
|
+
@renderer.render(screen_size: @screen_size)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def setup
|
|
33
|
+
print "\e[?25l" # Hide cursor.
|
|
34
|
+
system 'clear'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def reset
|
|
38
|
+
print "\e[?25h\e[0m" # Show cursor and reset colors.
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def exit
|
|
42
|
+
trap('INT') {
|
|
43
|
+
reset
|
|
44
|
+
system 'clear'
|
|
45
|
+
exit
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def current_timestamp
|
|
52
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
53
|
+
end
|
|
54
|
+
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: low_loop
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- maedi
|
|
@@ -123,7 +123,8 @@ files:
|
|
|
123
123
|
- lib/responses/response_builder.rb
|
|
124
124
|
- lib/servers/file_server.rb
|
|
125
125
|
- lib/states/file_state.rb
|
|
126
|
-
- lib/support/
|
|
126
|
+
- lib/support/config_loader.rb
|
|
127
|
+
- lib/support/low_frame.rb
|
|
127
128
|
- lib/version.rb
|
|
128
129
|
homepage: https://github.com/low-rb/low_loop
|
|
129
130
|
licenses: []
|
|
@@ -144,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
144
145
|
- !ruby/object:Gem::Version
|
|
145
146
|
version: '0'
|
|
146
147
|
requirements: []
|
|
147
|
-
rubygems_version:
|
|
148
|
+
rubygems_version: 4.0.6
|
|
148
149
|
specification_version: 4
|
|
149
150
|
summary: An event-driven event loop
|
|
150
151
|
test_files: []
|