low_node 0.1.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29af4b835c94b158539f9e41c423ffed4e069f37fe7aeb446c170237fbd662b2
4
- data.tar.gz: '09be86c35bfa8fa4b5e03a7ac02e4090acb9ab62f587bb1b290ab22597d3a34f'
3
+ metadata.gz: 53844e05e1d9e16ec6de05d3ec8646e8e0a5eb40331d0e2333e0ad7efea35fb6
4
+ data.tar.gz: 4c2e0088e28f38262803fc127ca9fbb92bad0260eaccac243b108af9bbd00f96
5
5
  SHA512:
6
- metadata.gz: e1ca411612a1bfd3019caa85a0b07f6cb6d5dcbc26e9614d6c6df8ab10ff17502716e39225f71dfd9658b35efe53050b33685a97f8a8ae892f79e84b33719d94
7
- data.tar.gz: '065308c6e7f7642972b05204dccb695079e5893aa7b850e7656ef6eb6e88f7fe0eac8188ff60353e41a0c209b9a82c55751f09e84f6e65619e3f0868802642e7'
6
+ metadata.gz: 6c6630d5968329821cf284c4870c4222fd0fa66d47988a1db24cd27a560c4d8e93b763d26af9da2cb7782c302a929b72c3050b8d01626f80fb1001b166318bf9
7
+ data.tar.gz: 75207a27150341a5179ddb8db3bf5b10d60c18ae9393546f09dacc9b6e38f3daa56d1fb6f6d8d353b884c3a7d3fbcd5d1b38274442c4c0954791d5f05069b085
data/lib/low_node.rb CHANGED
@@ -2,14 +2,17 @@
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 'event_handler'
8
+ require_relative 'templates/renderer'
7
9
 
8
10
  class LowNode
9
11
  extend Observers
10
- extend EventHandler
11
- include EventHandler
12
+
12
13
  include LowType
14
+ include Low::Types
15
+ include Low::Templates::Renderer
13
16
 
14
17
  attr_reader :event
15
18
 
@@ -17,7 +20,17 @@ class LowNode
17
20
  @event = event
18
21
  end
19
22
 
20
- def self.inherited(child)
21
- child.include LowType
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
31
+
32
+ def inherited(child)
33
+ child.include LowType
34
+ end
22
35
  end
23
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
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Low
4
- NODE_VERSION = '0.1.2'
4
+ module Node
5
+ VERSION = '0.2.0'
6
+ end
5
7
  end
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.1.2
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.class == Class ? self.new(event:) : self
6
- node.handle(event:)
7
- end
8
-
9
- def render(event:)
10
- node = self.class == Class ? self.new(event:) : self
11
- response = Low::Events::ResponseFactory.response(body: node.render(event:))
12
- Low::Events::ResponseEvent.new(response:)
13
- end
14
- end