raindeer 0.5.0 → 0.6.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: 10abc837f7a79dd6e8807ab756f5d393324ef1643dc7eacfc53fdd09246e5d97
4
- data.tar.gz: 15eb9638281737ad60f8ce07dd9164f8584ec5ac8a66b0d5f304c734f13155f0
3
+ metadata.gz: 1e0b76037f60987d82171f076418703e068203ea1a9326964c630049a7aef633
4
+ data.tar.gz: 92a5be3103a09b81f287f3dafb74d75cf41761271d2c917500bf762fefb4613a
5
5
  SHA512:
6
- metadata.gz: 27d14ec70fdd565fa5d62833f05672762bce3e050a482b6748d99b524892b473b42cda5658b3aa22dc459fcd3230614e724928d01de5e1d138031ee0a6f4151e
7
- data.tar.gz: 07761ecc57e9660c719793226e63f6be7ba4d795e660647d8d9540b16b53a857f5e33e27e8d3aa435b2775d2a4222b8df17220008036f77cd64637fb8239d8b4
6
+ metadata.gz: 06b5fb27769c9319b0c0dbe7ef75cbdab5f5ea6e1c9b116bcd73faffbb9c56211a9818e62aae4ebe27b3a120eb0fc689caabe55e14d751f7461a85a0aeaf9448
7
+ data.tar.gz: d96c8de0e0d25782b167c7fd72bd610463f353379df85024323edfaae941490bb7f751db37effb4112aa31788ba3de9f757bb38c16be937f03ed3329739f9bf5
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'kramdown'
4
+ require 'kramdown-parser-gfm'
5
+ require 'rouge'
6
+
7
+ module Rain
8
+ class Pages
9
+ include LowType
10
+
11
+ attr_reader :url_paths
12
+
13
+ Result = Struct.new(:metadata, :html)
14
+
15
+ def initialize(metadata:)
16
+ @url_paths = metadata.url_paths
17
+ end
18
+
19
+ def process(file_path:)
20
+ metadata, text = parse_file(file_path:)
21
+ html = Kramdown::Document.new(text, input: 'GFM', syntax_highlighter: 'rouge').to_html
22
+
23
+ Result.new(metadata, html)
24
+ end
25
+
26
+ private
27
+
28
+ def parse_file(file_path:)
29
+ dash_lines = []
30
+ data_lines = []
31
+ text_lines = []
32
+
33
+ File.foreach(file_path).with_index do |line, index|
34
+ if line.strip == '---' && dash_lines.count < 2
35
+ dash_lines << line
36
+ next
37
+ elsif dash_lines.count > 0 && dash_lines.count < 2
38
+ data_lines << line
39
+ next
40
+ end
41
+
42
+ text_lines << line
43
+ end
44
+
45
+ [YAML.safe_load(data_lines.join, symbolize_names: true), text_lines.join.strip]
46
+ end
47
+ end
48
+ end
data/lib/raindeer/boot.rb CHANGED
@@ -6,9 +6,14 @@ require 'low_type'
6
6
  require 'observers'
7
7
  require 'providers'
8
8
 
9
+ require_relative '../pages/pages'
9
10
  require_relative '../router/router'
10
11
  require_relative '../support/config_loader'
11
12
 
13
+ #################################################
14
+ # INTERNAL API
15
+ #################################################
16
+
12
17
  module Rain
13
18
  env = {
14
19
  host: ENV.fetch('RAIN_HOST', nil),
@@ -37,6 +42,10 @@ module Rain
37
42
  end
38
43
  end
39
44
 
45
+ #################################################
46
+ # EXTERNAL API
47
+ #################################################
48
+
40
49
  module Raindeer
41
50
  class << self
42
51
  def router(&block)
@@ -45,5 +54,20 @@ module Raindeer
45
54
  end
46
55
  end
47
56
 
57
+ #################################################
58
+ # USER CODE
59
+ #################################################
60
+
61
+ require 'antlers' # LowLoad supports antlers but doesn't make it a hard dependency.
48
62
  require 'lowload'
49
63
  LowLoad.dirload(File.expand_path('../system', __dir__))
64
+
65
+ application_path = File.expand_path('app', Dir.pwd)
66
+ return unless Dir.exist?(application_path)
67
+
68
+ metadata = LowLoad.dirload(application_path)
69
+ return unless Dir.exist?(File.expand_path('pages', application_path))
70
+
71
+ Providers.define('rain.pages', eager: true) do
72
+ Rain::Pages.new(metadata:)
73
+ end
data/lib/router/router.rb CHANGED
@@ -6,6 +6,7 @@ require 'providers'
6
6
  require_relative 'route'
7
7
  require_relative 'route_event'
8
8
  require_relative 'trie'
9
+ require_relative 'wildcard_route_event'
9
10
 
10
11
  module Rain
11
12
  class Router
@@ -58,9 +59,14 @@ module Rain
58
59
  @trie.match(path: event.request.path.delete_suffix('/')).each do |route_event|
59
60
  response_event = route_event.trigger
60
61
  end
61
-
62
62
  return response_event if response_event
63
63
 
64
+ if @routes['/*']
65
+ route = Route.new(path: event.request.path, verbs: @routes['/*'].verbs)
66
+ wildcard_event = WildcardRouteEvent.trigger(key: '/*', action: :render, route:)
67
+ return wildcard_event if wildcard_event
68
+ end
69
+
64
70
  Low::Events::StatusEvent.trigger(status: Low::Types::Status[404], request: event.request)
65
71
  end
66
72
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'low_event'
4
+
5
+ module Rain
6
+ class WildcardRouteEvent < ::LowEvent
7
+ attr_reader :route, :params
8
+
9
+ def initialize(key:, route:, action: :render)
10
+ super(key:, action:)
11
+
12
+ @route = route
13
+ end
14
+ end
15
+ end
@@ -5,7 +5,7 @@ module System
5
5
  def render(event:)
6
6
  <html>
7
7
  <head>
8
- <link rel="stylesheet" href="/system/pico.min.css">
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css">
9
9
  <link rel="stylesheet" href="/system/system.css">
10
10
  </head>
11
11
  <body>
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Raindeer
4
- VERSION = '0.5.0'
4
+ VERSION = '0.6.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.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi
@@ -37,6 +37,48 @@ dependencies:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: kramdown
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: kramdown-parser-gfm
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rouge
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
40
82
  - !ruby/object:Gem::Dependency
41
83
  name: low_event
42
84
  requirement: !ruby/object:Gem::Requirement
@@ -190,12 +232,14 @@ files:
190
232
  - lib/matrix/effects/leet_effect.rb
191
233
  - lib/matrix/matrix.rb
192
234
  - lib/matrix/stream.rb
235
+ - lib/pages/pages.rb
193
236
  - lib/raindeer/boot.rb
194
237
  - lib/router/route.rb
195
238
  - lib/router/route_event.rb
196
239
  - lib/router/router.rb
197
240
  - lib/router/trie.rb
198
241
  - lib/router/trie_node.rb
242
+ - lib/router/wildcard_route_event.rb
199
243
  - lib/support/config_loader.rb
200
244
  - lib/system/dashboard_node.rbx
201
245
  - lib/system/events_node.rbx
@@ -206,7 +250,7 @@ files:
206
250
  - lib/system/routes_node.rbx
207
251
  - lib/system/status_404_node.rbx
208
252
  - lib/system/status_node.rbx
209
- - lib/system/system.rb
253
+ - lib/system/system_routes.rb
210
254
  - lib/version.rb
211
255
  homepage: https://codeberg.org/raindeer/raindeer
212
256
  licenses: []
File without changes