lownode 0.5.2
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 +7 -0
- data/lib/lownode.rb +47 -0
- data/lib/templates/renderer.rb +70 -0
- data/lib/templates/template.rb +18 -0
- data/lib/version.rb +7 -0
- metadata +114 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: baff3ab2842de9d3e8a395ab89cb68bac58bbd0916f55981cfd53f71d44c3cf8
|
|
4
|
+
data.tar.gz: 508ba8d387fbc7a94002a5e3f5d405c42d78c4d6763f3522f715cd200737a0cb
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: b5685b9ac1b58d7f29fc0c557b14ed25ef9c75576e72f71552b4974199d465e2da12818fe71a0f73008059493797ca1a42ccc2dd19c3a3078e3eb54c5a44a2dc
|
|
7
|
+
data.tar.gz: bb79da2d930fc5a743952eb8ac4a9864a4a44d92abf05cf7385306d458ee36ad5d6c5b81bffd69645abf14952de66e506eba845afeb9efd4b4879065a54cd7e3
|
data/lib/lownode.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'observers'
|
|
4
|
+
require 'lowtype'
|
|
5
|
+
require 'lowevent'
|
|
6
|
+
require 'lowloop' # TODO: ResponseFactory should be done in LowLoop, which is where the class lives already anyway.
|
|
7
|
+
|
|
8
|
+
require_relative 'templates/renderer'
|
|
9
|
+
|
|
10
|
+
class LowNode
|
|
11
|
+
extend Observers
|
|
12
|
+
|
|
13
|
+
include LowType
|
|
14
|
+
include Low::Events
|
|
15
|
+
include Low::Types
|
|
16
|
+
include Low::Templates::Renderer
|
|
17
|
+
|
|
18
|
+
attr_reader :event
|
|
19
|
+
|
|
20
|
+
def initialize(event: nil)
|
|
21
|
+
@event = event
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# TODO: Rename "handle" method/action to more specific "route" and maybe split out into module too.
|
|
25
|
+
def handle(event:)
|
|
26
|
+
nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
def handle(event:)
|
|
31
|
+
new(event:).handle(event:)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def inherited(child)
|
|
35
|
+
child.include LowType
|
|
36
|
+
increase_count
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def count
|
|
40
|
+
@count ||= 0
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def increase_count
|
|
44
|
+
@count = count + 1
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'template'
|
|
4
|
+
|
|
5
|
+
module Low
|
|
6
|
+
module Templates
|
|
7
|
+
# Use the Method Factory pattern to ".render -> .new -> #initialize -> #render" a LowNode.
|
|
8
|
+
module Renderer
|
|
9
|
+
# Antlers hook.
|
|
10
|
+
# When render() contains RBX/Antlers then dirload builds a template to render with instead.
|
|
11
|
+
# When lowevent is required then Antlers will send an event keyword argument as well.
|
|
12
|
+
def render_template(parent_binding: nil, slot_node: nil, props: {}, event: nil, **kwargs)
|
|
13
|
+
template = self.class.template
|
|
14
|
+
|
|
15
|
+
# NOTE: We currently set local variables on this local binding, not the receiver's binding.
|
|
16
|
+
# TODO: Should we create an "instance_binding" method on LowNode and use that binding instead?
|
|
17
|
+
current_binding = binding
|
|
18
|
+
|
|
19
|
+
template.params.each do |param|
|
|
20
|
+
# The event keyword is already a local variable on this binding.
|
|
21
|
+
next if param == :event
|
|
22
|
+
|
|
23
|
+
variable = props[param] || kwargs[param] || raise(ArgumentError, "Missing argument: '#{param}'")
|
|
24
|
+
current_binding.local_variable_set(param, variable)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
template.engine.render(ast: template.ast, current_binding:, parent_binding:, slot_node:)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.included(base)
|
|
31
|
+
base.extend(ClassMethods)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
module ClassMethods
|
|
35
|
+
# Accepts all arguments but only sends arguments required by the sub class.
|
|
36
|
+
def render(**)
|
|
37
|
+
# GOAL: Make return value configurable; ResponseEvent, Response, or body.
|
|
38
|
+
body = response_body(**)
|
|
39
|
+
|
|
40
|
+
return if body.nil? || body == ''
|
|
41
|
+
|
|
42
|
+
# TODO: ResponseFactory should be done in LowLoop, which is where the class lives already anyway.
|
|
43
|
+
response = Low::ResponseFactory.html(body:)
|
|
44
|
+
Low::Events::ResponseEvent.new(response:).tap(&:branch)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Dirload hook.
|
|
48
|
+
def template
|
|
49
|
+
@template
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Dirload hook.
|
|
53
|
+
def build_template(template:, params:, engine:, namespace:)
|
|
54
|
+
@template = Template.new(template:, params:, engine:, namespace:)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
def response_body(**kwargs)
|
|
60
|
+
node = new(**kwargs)
|
|
61
|
+
|
|
62
|
+
return node.render_template(**kwargs) if @template
|
|
63
|
+
return node.render(**kwargs) if node.method(:render).arity > 0
|
|
64
|
+
|
|
65
|
+
node.render
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Low
|
|
4
|
+
module Templates
|
|
5
|
+
class Template
|
|
6
|
+
attr_reader :template, :params, :namespace, :engine, :ast
|
|
7
|
+
|
|
8
|
+
def initialize(template:, params:, namespace:, engine:)
|
|
9
|
+
@template = template
|
|
10
|
+
@params = params
|
|
11
|
+
@namespace = namespace
|
|
12
|
+
|
|
13
|
+
@engine = engine
|
|
14
|
+
@ast = engine.ast(template:, namespace:)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/version.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: lownode
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.5.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- maedi
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 2026-10-17 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: lowevent
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: lowloop
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: lowtype
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '1.5'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '1.5'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: antlers
|
|
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: observers
|
|
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'
|
|
82
|
+
email:
|
|
83
|
+
- maediprichard@gmail.com
|
|
84
|
+
executables: []
|
|
85
|
+
extensions: []
|
|
86
|
+
extra_rdoc_files: []
|
|
87
|
+
files:
|
|
88
|
+
- lib/lownode.rb
|
|
89
|
+
- lib/templates/renderer.rb
|
|
90
|
+
- lib/templates/template.rb
|
|
91
|
+
- lib/version.rb
|
|
92
|
+
homepage: https://github.com/low-rb/lownode
|
|
93
|
+
licenses: []
|
|
94
|
+
metadata:
|
|
95
|
+
homepage_uri: https://github.com/low-rb/lownode
|
|
96
|
+
source_code_uri: https://github.com/low-rb/lownode/src/branch/main
|
|
97
|
+
rdoc_options: []
|
|
98
|
+
require_paths:
|
|
99
|
+
- lib
|
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - ">="
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: 3.3.0
|
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
requirements: []
|
|
111
|
+
rubygems_version: 3.6.2
|
|
112
|
+
specification_version: 4
|
|
113
|
+
summary: Flexible building blocks
|
|
114
|
+
test_files: []
|