low_loop 0.2.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ca13498531cc4abf7f577bee5f78387d0f42fcbb414e5b20be39db848a154e5
4
- data.tar.gz: '075782581f7fd32f7b7d077bbcf03101561560823f39a6f8ecd38ac312c3a363'
3
+ metadata.gz: 7d01329530968986952de86dbb5f82d6e4fc7d2c64111176fca14c403ffd483b
4
+ data.tar.gz: fc7475b5dafdf37c2e63d6a95f206c363a7a4476cd161f04c725cf04feb5fa13
5
5
  SHA512:
6
- metadata.gz: ddaf50e11f1eb8a5af18580932fd4d84117ac0754ea84a468e7e78772ab3894df04774428b10ea8d45ebdaaa2e240cbc95ff2ae8fbd6af6848b31b1e2b299ca0
7
- data.tar.gz: a3bb6a044dda05bda5bf3f0b73cb1747c3b3c10275541651073b592a2cba3541b5a1d23d8e489d0a7828611e4fc4643c3dc1289c0a94a6d81a181ffe6ad03263
6
+ metadata.gz: 514b047cf407d3960a37745b166f29c299f4d9976ff717d70c9f44c8f7db5a18fb65072df0c343224b13c81c3c320a7354a44ea05684b5793c9ec35f54039139
7
+ data.tar.gz: 02d577dfe82a415b723060e9c2ed4c2517c40d34db71a33e4e71cb1ae55efd4aa9f2d11293e4327fdacc2e7c497e74573b370889bf0f6b0dd79b0ea9db719679
data/lib/low_loop.rb CHANGED
@@ -14,10 +14,18 @@ module Low
14
14
  class Loop
15
15
  include Observers
16
16
 
17
- def start(config:)
18
- server = TCPServer.new(config.host, config.port)
19
- server.listen(10)
20
- puts "Server@#{config.host}:#{config.port}" if config.matrix_mode
17
+ attr_reader :config
18
+
19
+ def initialize(config:, router: nil)
20
+ @config = config
21
+
22
+ observers.push(self, action: :mirror) if config.mirror_mode
23
+ observers << FileServer.new
24
+ observers << router if router
25
+ end
26
+
27
+ def start
28
+ server = start_server
21
29
 
22
30
  Fiber.set_scheduler(Async::Scheduler.new)
23
31
 
@@ -27,13 +35,8 @@ module Low
27
35
 
28
36
  Fiber.schedule do
29
37
  request = RequestParser.parse(socket:, host: config.host, port: config.port)
30
-
31
- if config.mirror_mode
32
- response = ResponseFactory.response(body: "Thank you for visiting #{request.path} with '#{request.body}'")
33
- else
34
- response_event = take(Events::RequestEvent.new(request:))
35
- response = response_event.response
36
- end
38
+ response_event = take(event: Events::RequestEvent.new(request:))
39
+ response = response_event.response
37
40
 
38
41
  ResponseBuilder.respond(config:, socket:, response:)
39
42
  rescue StandardError => e
@@ -44,6 +47,25 @@ module Low
44
47
  end
45
48
  end
46
49
  end
50
+
51
+ def start_server
52
+ puts "Starting server @ #{config.host}:#{config.port}" unless config.matrix_mode
53
+
54
+ server = TCPServer.new(config.host, config.port)
55
+ server.listen(10)
56
+ server
57
+ end
58
+
59
+ def mirror(event:)
60
+ request = event.request
61
+ response = Events::ResponseFactory.response(body: "Thank you for visiting #{request.path} with body: '#{request.body}'")
62
+ Events::ResponseEvent.new(response:)
63
+ end
64
+
65
+ # Consider LowLoop a value object in the context of Observers (there can only be one).
66
+ def ==(other) = other.class == self.class
67
+ def eql?(other) = self == other
68
+ def hash = [self.class].hash
47
69
  end
48
70
  end
49
71
 
@@ -31,7 +31,8 @@ module Low
31
31
  # \r\n
32
32
  # :body
33
33
  #
34
- def parse_request(stream:) # TODO: Handle type for namespaced "IO:Stream".
34
+ # TODO: Handle type for namespaced "IO:Stream".
35
+ def parse_request(stream:)
35
36
  request_line = stream.gets || raise(StandardError, 'EOF')
36
37
 
37
38
  method, full_path, _http_version = request_line.strip.split(' ', 3)
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Low
4
- LOOP_VERSION = '0.2.0'
4
+ LOOP_VERSION = '0.2.1'
5
5
  end
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.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi