low_loop 0.1.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: 0cf78d69ff18cc8ec9d07e93acb8c3bffce11e38e83667b8ffe852fa842561e0
4
- data.tar.gz: 9f96d239ec4b1c80823260b3d3718859528f6189d611247f6f6f7e4e34a23082
3
+ metadata.gz: 7d01329530968986952de86dbb5f82d6e4fc7d2c64111176fca14c403ffd483b
4
+ data.tar.gz: fc7475b5dafdf37c2e63d6a95f206c363a7a4476cd161f04c725cf04feb5fa13
5
5
  SHA512:
6
- metadata.gz: 6a8a845e855e664055b2676d665bdb40d133f4595d4eacc6d0eea11b028b3c992f0c83a82527aaec0f840e3efcd598138e076ce8ef1f95541e118c2439ad6f33
7
- data.tar.gz: 4dfc52e4259769ff99efba99195f8561689c8b62a1354bd724dc84ba964ed6a057501d3a1b9d3729c404902918a11648ee08d7e3528c13f22c691a1c4772bc4e
6
+ metadata.gz: 514b047cf407d3960a37745b166f29c299f4d9976ff717d70c9f44c8f7db5a18fb65072df0c343224b13c81c3c320a7354a44ea05684b5793c9ec35f54039139
7
+ data.tar.gz: 02d577dfe82a415b723060e9c2ed4c2517c40d34db71a33e4e71cb1ae55efd4aa9f2d11293e4327fdacc2e7c497e74573b370889bf0f6b0dd79b0ea9db719679
data/lib/low_loop.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require 'async'
4
4
  require 'socket'
5
5
  require 'low_type'
6
- require 'low_event' # TODO: Move RequestEvent and ResponseEvent into this gem.
6
+ require 'low_event'
7
7
  require 'observers'
8
8
 
9
9
  require_relative 'factories/response_factory'
@@ -12,13 +12,20 @@ require_relative 'response_builder'
12
12
 
13
13
  module Low
14
14
  class Loop
15
- extend Observers
16
- observable
15
+ include Observers
17
16
 
18
- def start(config:)
19
- server = TCPServer.new(config.host, config.port)
20
- server.listen(10)
21
- 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
22
29
 
23
30
  Fiber.set_scheduler(Async::Scheduler.new)
24
31
 
@@ -28,13 +35,8 @@ module Low
28
35
 
29
36
  Fiber.schedule do
30
37
  request = RequestParser.parse(socket:, host: config.host, port: config.port)
31
-
32
- if config.mirror_mode
33
- response = Low::ResponseFactory.response(body: "Thank you for visiting #{request.path} with '#{request.body}'")
34
- else
35
- response_event = LowLoop.take RequestEvent.new(request:)
36
- response = response_event.response
37
- end
38
+ response_event = take(event: Events::RequestEvent.new(request:))
39
+ response = response_event.response
38
40
 
39
41
  ResponseBuilder.respond(config:, socket:, response:)
40
42
  rescue StandardError => e
@@ -45,6 +47,25 @@ module Low
45
47
  end
46
48
  end
47
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
48
69
  end
49
70
  end
50
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.1.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.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi