low_node 0.1.1 → 0.2.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 +4 -4
- data/lib/low_node.rb +24 -5
- data/lib/templates/renderer.rb +56 -0
- data/lib/templates/template.rb +18 -0
- data/lib/version.rb +3 -1
- metadata +31 -2
- data/lib/event_handler.rb +0 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 53844e05e1d9e16ec6de05d3ec8646e8e0a5eb40331d0e2333e0ad7efea35fb6
|
|
4
|
+
data.tar.gz: 4c2e0088e28f38262803fc127ca9fbb92bad0260eaccac243b108af9bbd00f96
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6c6630d5968329821cf284c4870c4222fd0fa66d47988a1db24cd27a560c4d8e93b763d26af9da2cb7782c302a929b72c3050b8d01626f80fb1001b166318bf9
|
|
7
|
+
data.tar.gz: 75207a27150341a5179ddb8db3bf5b10d60c18ae9393546f09dacc9b6e38f3daa56d1fb6f6d8d353b884c3a7d3fbcd5d1b38274442c4c0954791d5f05069b085
|
data/lib/low_node.rb
CHANGED
|
@@ -2,16 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
require 'observers'
|
|
4
4
|
require 'low_type'
|
|
5
|
+
require 'low_event'
|
|
6
|
+
require 'low_loop' # TODO: Merge low loop's response factory into low event.
|
|
5
7
|
|
|
6
|
-
require_relative '
|
|
8
|
+
require_relative 'templates/renderer'
|
|
7
9
|
|
|
8
10
|
class LowNode
|
|
9
11
|
extend Observers
|
|
10
|
-
|
|
11
|
-
include EventHandler
|
|
12
|
+
|
|
12
13
|
include LowType
|
|
14
|
+
include Low::Types
|
|
15
|
+
include Low::Templates::Renderer
|
|
16
|
+
|
|
17
|
+
attr_reader :event
|
|
18
|
+
|
|
19
|
+
def initialize(event:)
|
|
20
|
+
@event = event
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def handle(event:)
|
|
24
|
+
raise NotImplementedError
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class << self
|
|
28
|
+
def handle(event:)
|
|
29
|
+
self.new(event:).handle(event:)
|
|
30
|
+
end
|
|
13
31
|
|
|
14
|
-
|
|
15
|
-
|
|
32
|
+
def inherited(child)
|
|
33
|
+
child.include LowType
|
|
34
|
+
end
|
|
16
35
|
end
|
|
17
36
|
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'template'
|
|
4
|
+
|
|
5
|
+
module Low
|
|
6
|
+
module Templates
|
|
7
|
+
module Renderer
|
|
8
|
+
def render(event:)
|
|
9
|
+
raise NotImplementedError
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# When render() contains RBX/Antlers then LowLoad populates a template to render with instead.
|
|
13
|
+
def render_template(event:, parent_binding: nil, slot_node: nil, props: {})
|
|
14
|
+
template = self.class.template
|
|
15
|
+
current_binding = binding
|
|
16
|
+
|
|
17
|
+
# Pass in props from parent component as keyword arguments.
|
|
18
|
+
template.params.each do |param|
|
|
19
|
+
current_binding.local_variable_set(param, props[param]) if props[param]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
template.engine.render(ast: template.ast, current_binding:, parent_binding:, slot_node:, namespace: template.namespace)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.included(base)
|
|
26
|
+
base.extend(ClassMethods)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module ClassMethods
|
|
30
|
+
def template
|
|
31
|
+
@template
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def load_template(template:, params:, engine:, namespace:)
|
|
35
|
+
@template = Template.new(template:, params:, engine:, namespace:)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# TODO: Handle situation where node is tested in a unit test and args come in here; expose them to the template.
|
|
39
|
+
def render(event:)
|
|
40
|
+
node = self.new(event:)
|
|
41
|
+
|
|
42
|
+
# RBX/Antlers is rendered via template while valid Ruby is rendered as written.
|
|
43
|
+
body = @template ? node.render_template(event:) : node.render(event:)
|
|
44
|
+
|
|
45
|
+
# GOAL: Make return value configurable; ResponseEvent, Response, or body.
|
|
46
|
+
response = Low::Factories::ResponseFactory.html(body:)
|
|
47
|
+
Low::Events::ResponseEvent.new(response:)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def render_template(event:)
|
|
51
|
+
self.new(event:).render_template(event:)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
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.parse(template)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: low_node
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- maedi
|
|
@@ -23,6 +23,20 @@ dependencies:
|
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: low_loop
|
|
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'
|
|
26
40
|
- !ruby/object:Gem::Dependency
|
|
27
41
|
name: low_type
|
|
28
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -37,6 +51,20 @@ dependencies:
|
|
|
37
51
|
- - "~>"
|
|
38
52
|
- !ruby/object:Gem::Version
|
|
39
53
|
version: '1.0'
|
|
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'
|
|
40
68
|
- !ruby/object:Gem::Dependency
|
|
41
69
|
name: observers
|
|
42
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -57,8 +85,9 @@ executables: []
|
|
|
57
85
|
extensions: []
|
|
58
86
|
extra_rdoc_files: []
|
|
59
87
|
files:
|
|
60
|
-
- lib/event_handler.rb
|
|
61
88
|
- lib/low_node.rb
|
|
89
|
+
- lib/templates/renderer.rb
|
|
90
|
+
- lib/templates/template.rb
|
|
62
91
|
- lib/version.rb
|
|
63
92
|
homepage: https://github.com/low-rb/low_node
|
|
64
93
|
licenses: []
|
data/lib/event_handler.rb
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
require 'low_event'
|
|
2
|
-
|
|
3
|
-
module EventHandler
|
|
4
|
-
def handle(event:)
|
|
5
|
-
node = self.new(event:)
|
|
6
|
-
node.handle(event:)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def render(event:)
|
|
10
|
-
node = self.new(event:)
|
|
11
|
-
response = Low::Events::ResponseFactory.response(body: node.render(event:))
|
|
12
|
-
Low::Events::ResponseEvent.new(response:)
|
|
13
|
-
end
|
|
14
|
-
end
|