low_node 0.3.1 → 0.5.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: 75eb52cd5e606c086a9672c8675710979878a5b240428a619b3ab454ec8534f0
4
- data.tar.gz: 476ce5d261f9034066b21223a31be47d137cf64d6ec3921605bcf5060b594ea4
3
+ metadata.gz: 84888260b641cba4399689afd91aaddc305d704ab4711c15f20520d32915a9bc
4
+ data.tar.gz: be064e6d1be460ab4d4761443112a4e32d5f21364be923d3e4a16b961ffe649d
5
5
  SHA512:
6
- metadata.gz: 9712d807495ee5299d83fc6fcd17355d009978ba9c6bbc8709da9098decb858ff4d52e035505213bc28c745561537a161b24412d6175552618cd0c8ef1f96d4e
7
- data.tar.gz: 889af9b4f7caca1f61a559743f3a2ba2792d177320a37d9d9a2a8258af5713d4ca088cdf07991e8eb11415bb85defa2a839fa438450f331be4b33bd85fbb0c75
6
+ metadata.gz: 051e636700adbb503c89d6e6e0e2187db8ce716a27a7c37765339d77470ef9cad63402b2a7da9404e6aa52377f2e3d015cf5e1964a46d1dcca0d68b314116eef
7
+ data.tar.gz: a2915fa0fbd329b523cf407407c45f715da8ea71de50d4a6c1af9facaddc4560357ea908555532c8aa486f983ac9f0ad5f4f89489fd7cfba1273cdf860281d83
data/lib/low_node.rb CHANGED
@@ -17,17 +17,18 @@ class LowNode
17
17
 
18
18
  attr_reader :event
19
19
 
20
- def initialize(event:)
20
+ def initialize(event: nil)
21
21
  @event = event
22
22
  end
23
23
 
24
+ # TODO: Rename "handle" method/action to more specific "route" and maybe split out into module too.
24
25
  def handle(event:)
25
26
  nil
26
27
  end
27
28
 
28
29
  class << self
29
30
  def handle(event:)
30
- self.new(event:).handle(event:)
31
+ new(event:).handle(event:)
31
32
  end
32
33
 
33
34
  def inherited(child)
@@ -4,26 +4,22 @@ require_relative 'template'
4
4
 
5
5
  module Low
6
6
  module Templates
7
+ # Use the Method Factory pattern to .render -> .new -> #initialize -> #render a low node.
7
8
  module Renderer
8
- def render(event: nil)
9
- nil
10
- end
11
-
12
9
  # When render() contains RBX/Antlers then LowLoad builds a template to render with instead.
13
- def render_template(event:, parent_binding: nil, slot_node: nil, props: {})
10
+ def render_template(parent_binding: nil, slot_node: nil, props: {}, **kwargs)
14
11
  template = self.class.template
15
12
 
16
13
  # NOTE: We currently set local variables on this local binding, not the receiver's binding.
17
14
  # TODO: Should we create an "instance_binding" method on LowNode and use that binding instead?
18
15
  current_binding = binding
19
- current_binding.local_variable_set(:event, event)
20
16
 
21
- # Pass in props from parent component as keyword arguments.
22
17
  template.params.each do |param|
23
- current_binding.local_variable_set(param, props[param]) if props[param]
18
+ variable = props[param] || kwargs[param] || raise(ArgumentError, "Missing argument: '#{param}'")
19
+ current_binding.local_variable_set(param, variable)
24
20
  end
25
21
 
26
- template.engine.render(ast: template.ast, current_binding:, parent_binding:, slot_node:, namespace: template.namespace)
22
+ template.engine.render(ast: template.ast, current_binding:, parent_binding:, slot_node:)
27
23
  end
28
24
 
29
25
  def self.included(base)
@@ -31,28 +27,34 @@ module Low
31
27
  end
32
28
 
33
29
  module ClassMethods
30
+ # Accepts all arguments but only sends arguments required by the sub class.
31
+ def render(**)
32
+ # GOAL: Make return value configurable; ResponseEvent, Response, or body.
33
+ body = response_body(**)
34
+
35
+ return if body.nil? || body == ''
36
+
37
+ response = Low::Factories::ResponseFactory.html(body:)
38
+ Low::Events::ResponseEvent.new(response:).tap(&:branch)
39
+ end
40
+
41
+ # LowLoad hook.
34
42
  def template
35
43
  @template
36
44
  end
37
45
 
46
+ # LowLoad hook.
38
47
  def build_template(template:, params:, engine:, namespace:)
39
48
  @template = Template.new(template:, params:, engine:, namespace:)
40
49
  end
41
50
 
42
- # TODO: Handle situation where node is tested in a unit test and args come in here; expose them to the template.
43
- def render(event: nil)
44
- node = self.new(event:)
45
-
46
- # GOAL: Make return value configurable; ResponseEvent, Response, or body.
47
- response = Low::Factories::ResponseFactory.html(body: response_body(node:, event:))
48
- Low::Events::ResponseEvent.new(response:).tap { it.branch }
49
- end
50
-
51
51
  private
52
52
 
53
- def response_body(node:, event:)
54
- return node.render_template(event:) if @template
55
- return node.render(event:) if node.method(:render).arity > 0
53
+ def response_body(**kwargs)
54
+ node = new(**kwargs)
55
+
56
+ return node.render_template(**kwargs) if @template
57
+ return node.render(**kwargs) if node.method(:render).arity > 0
56
58
 
57
59
  node.render
58
60
  end
@@ -11,7 +11,7 @@ module Low
11
11
  @namespace = namespace
12
12
 
13
13
  @engine = engine
14
- @ast = engine.ast(template)
14
+ @ast = engine.ast(template:, namespace:)
15
15
  end
16
16
  end
17
17
  end
data/lib/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Low
4
4
  module Node
5
- VERSION = '0.3.1'
5
+ VERSION = '0.5.0'
6
6
  end
7
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.3.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
110
  requirements: []
111
- rubygems_version: 4.0.10
111
+ rubygems_version: 4.0.6
112
112
  specification_version: 4
113
113
  summary: Flexible building blocks
114
114
  test_files: []