raindeer 0.3.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d79ce92ce79c7e46122adb4e9ba39968d9bf220cca424deba580f3a74ac26c6
4
- data.tar.gz: 6970876678afd4bf8395135d52a9c1ff20858170282e3c97c540f1458338d4ea
3
+ metadata.gz: a6fa213232ae917a276896434feda9d572209e595d0e04a7d5c7e2ba5244f035
4
+ data.tar.gz: cd7e970c62ad742f0024981eca3d8f3d609ad7b2e703283d10d1a82b2995d34b
5
5
  SHA512:
6
- metadata.gz: 947dd01220faa492c9abf83e78aae9ec07d5e6c5794724aa24dda43be39e8fe82822734c068612f1176246c64b3e5f34e205d5b2fbb7d5517be598d3e927b1f2
7
- data.tar.gz: bb4fff4358eae10a7b3ee1085ad9bd35bd7ac795c639dcb48b8e7c7deea3055e592a1f196931fc98ad64161631b5107bd1ca75fe29086d415891e7cfc23d84d3
6
+ metadata.gz: 150cc6803a59f65d411f5441d56b851cd6a9b89de713cdae5a5292fc660e279d8978ac5c49421e4416e3294d05e3334e7a4521fc931bcc44b57d8c7e35dda34e
7
+ data.tar.gz: 826b04af2e7ded427657d3c06f9899d80901d8858373286bf85feb003ab56ca81db8f729ee00d8d6b64b4478caf63b76aa85f8f99a7c3fed35d0cbda6c9a4721
data/lib/boot.rb CHANGED
@@ -11,6 +11,7 @@ env = {
11
11
  host: ENV.fetch('RAIN_HOST', nil),
12
12
  port: ENV.fetch('RAIN_PORT', nil),
13
13
  web_root: ENV.fetch('RAIN_WEB_ROOT', nil),
14
+ debug_mode: Rain::ConfigLoader.parse_boolean(ENV.fetch('RAIN_DEBUG', true)),
14
15
  matrix_mode: Rain::ConfigLoader.parse_boolean(ENV.fetch('RAIN_MATRIX', nil)),
15
16
  mirror_mode: Rain::ConfigLoader.parse_boolean(ENV.fetch('RAIN_MIRROR', nil))
16
17
  }
data/lib/matrix/matrix.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'low_event'
4
+ require 'low_type'
4
5
  require 'observers'
5
6
  require 'paint'
6
7
 
@@ -9,6 +10,7 @@ require_relative 'stream'
9
10
 
10
11
  module Rain
11
12
  class Matrix
13
+ include LowType
12
14
  include Observers
13
15
 
14
16
  def initialize(event_pool:, config: ConfigLoader.load('./config/matrix.yaml'))
@@ -3,9 +3,19 @@
3
3
  class DashboardNode < LowNode
4
4
  observe '/system'
5
5
 
6
+ def initialize(event:)
7
+ @node_count = LowNode.count
8
+ @event_count = LowEvent.count
9
+ end
10
+
6
11
  def render(event:) # rubocop:disable Lint/UnusedMethodArgument
7
12
  <{ LayoutNode: }>
8
13
  <h1>{"Dashboard"}</h1>
14
+
15
+ <div class="grid">
16
+ <{ StatFormatter title='Nodes' stat=@node_count }>
17
+ <{ StatFormatter title='Events' stat=@event_count }>
18
+ </div>
9
19
  <{ :LayoutNode }>
10
20
  end
11
21
  end
@@ -4,29 +4,30 @@ class EventsNode < LowNode
4
4
  observe '/system/events'
5
5
 
6
6
  def initialize(event:)
7
- @events = 'TODO: Populate via LowEvent inherited hook.'
7
+ # TODO: Include types that can be observed keys too like Status and Status[404].
8
+ @event_types = LowEvent.events
8
9
  end
9
10
 
10
11
  def render(event:)
11
12
  <{ LayoutNode: }>
12
13
  <h1>{"Events"}</h1>
13
14
 
14
- {@events}
15
-
16
15
  <table>
17
16
  <thead>
18
17
  <tr>
19
- <th scope="col">HTTP Verbs</th>
20
- <th scope="col">Route</th>
18
+ <th scope="col">Event</th>
21
19
  <th scope="col">Observers</th>
22
20
  </tr>
23
21
  </thead>
24
22
  <tbody>
25
- <tr>
26
- <td>1</td>
27
- <td>2</td>
28
- <td>3</td>
29
- </tr>
23
+ <{ for: observer_key in: @event_types }>
24
+ <tr>
25
+ <td>{observer_key}</td>
26
+ <td>
27
+ <{ ObserversFormatter observer_key=observer_key }>
28
+ </td>
29
+ </tr>
30
+ <{ :for }>
30
31
  </tbody>
31
32
  </table>
32
33
  <{ :LayoutNode }>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class LabelFormatter < LowNode
4
+ def render(event:, labels:)
5
+ <ul class="labels">
6
+ <{ for: label in: labels }>
7
+ <li class={label}>{label}</li>
8
+ <{ :for }>
9
+ </ul>
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ObserversFormatter < LowNode
4
+ def initialize(event:, observer_key:)
5
+ # TODO: What's the best way to do this? An "if:" at the template layer? A decorator at the node layer?
6
+ if observer_key.to_s == 'Rain::RouteEvent'
7
+ routes_count = Providers['rain.router'].routes.count
8
+ @observers = ["#{routes_count} routes"]
9
+ else
10
+ @observers = Observers[observer_key].map { it.object }
11
+ end
12
+ end
13
+
14
+ def render(event:, observer_key:)
15
+ <ul>
16
+ <{ for: observer in: @observers }>
17
+ <li>{ observer }</li>
18
+ <{ :for }>
19
+ </ul>
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class StatFormatter < LowNode
4
+ def render(event:, title:, stat:)
5
+ <article class="stat">
6
+ <div class="number">{stat}</div>
7
+ <footer>{title}</footer>
8
+ </article>
9
+ end
10
+ end
@@ -6,6 +6,7 @@ class LayoutNode < LowNode
6
6
  <head>
7
7
  <link rel="stylesheet" href="/assets/pico.min.css">
8
8
  <link rel="stylesheet" href="/assets/system.css">
9
+ <link rel="stylesheet" href="/assets/stats.css">
9
10
  </head>
10
11
  <body>
11
12
  <header>
@@ -11,8 +11,6 @@ class RoutesNode < LowNode
11
11
  <{ LayoutNode: }>
12
12
  <h1>{"Routes"}</h1>
13
13
 
14
- {@routes}
15
-
16
14
  <table>
17
15
  <thead>
18
16
  <tr>
@@ -22,11 +20,13 @@ class RoutesNode < LowNode
22
20
  </tr>
23
21
  </thead>
24
22
  <tbody>
25
- <tr>
26
- <td>1</td>
27
- <td>2</td>
28
- <td>3</td>
29
- </tr>
23
+ <{ for: path, route in: @routes }>
24
+ <tr>
25
+ <td><{ LabelFormatter labels=route.verbs }></td>
26
+ <td>{route.path}</td>
27
+ <td><{ ObserversFormatter observer_key=route.path }></td>
28
+ </tr>
29
+ <{ :for }>
30
30
  </tbody>
31
31
  </table>
32
32
  <{ :LayoutNode }>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Status404Node < LowNode
4
+ observe Status[404]
5
+
6
+ def render
7
+ <div class="status status-404">
8
+ <em>404</em>
9
+ </div>
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class StatusNode < LowNode
4
+ observe Status
5
+
6
+ def initialize(event: StatusEvent)
7
+ @status_code = event.status.status_code
8
+ end
9
+
10
+ def render
11
+ <div class="status status-{@status_code}">
12
+ <em>{@status_code}</em>
13
+ </div>
14
+ end
15
+ end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Raindeer
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raindeer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi
@@ -55,30 +55,30 @@ dependencies:
55
55
  name: lowload
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ">="
58
+ - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '0'
60
+ version: '0.5'
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ">="
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '0'
67
+ version: '0.5'
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: low_loop
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '0.5'
74
+ version: '0.6'
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '0.5'
81
+ version: '0.6'
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: low_node
84
84
  requirement: !ruby/object:Gem::Requirement
@@ -196,10 +196,14 @@ files:
196
196
  - lib/router/trie_node.rb
197
197
  - lib/support/config_loader.rb
198
198
  - lib/system/dashboard_node.rbx
199
- - lib/system/error_404_node.rbx
200
199
  - lib/system/events_node.rbx
201
- - lib/system/layout_node.rbx
200
+ - lib/system/formatters/label_formatter.rbx
201
+ - lib/system/formatters/observers_formatter.rbx
202
+ - lib/system/formatters/stat_formatter.rbx
203
+ - lib/system/layouts/layout_node.rbx
202
204
  - lib/system/routes_node.rbx
205
+ - lib/system/status_404_node.rbx
206
+ - lib/system/status_node.rbx
203
207
  - lib/system/system.rb
204
208
  - lib/version.rb
205
209
  homepage: https://codeberg.org/raindeer/raindeer
@@ -221,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
225
  - !ruby/object:Gem::Version
222
226
  version: '0'
223
227
  requirements: []
224
- rubygems_version: 4.0.6
228
+ rubygems_version: 4.0.10
225
229
  specification_version: 4
226
230
  summary: Deer to be different
227
231
  test_files: []
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Error404Node < LowNode
4
- observe Low::Types::Status[404]
5
-
6
- def render(event:) # rubocop:disable Lint/UnusedMethodArgument
7
- <div class="page-not-found">
8
- <em>404</em>
9
- </div>
10
- end
11
- end