low_node 0.3.0 → 0.4.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: ac55ce01d35523d45910268c02ce723e5baac95880791bc2ba776be62ec42896
4
- data.tar.gz: 845688a5770bcb13e48c00e31b41fc9f6f77ea5f23e30b7fe7c6515675732b27
3
+ metadata.gz: 3306c75f526286a539e171e60afec93be837c7e25047aa129b206351d61ef0ec
4
+ data.tar.gz: adca6941b2fec856c5cfeeee62bc19522073cc4a19369977715af2476df424e5
5
5
  SHA512:
6
- metadata.gz: cae79c698dc5a1986ad920782fc2ca4fc445ed51e3eed3661dd5c501c3791a648c04d53264b01197404e3a53b682bf31f28985ddf4d206f7f202707c5b790ba5
7
- data.tar.gz: f6eeca786d6dc6bab237b56ed8a260fe2a0efbd5ffbbb58bfa5e88949ee76524dff3c02460ba5535fe92584e3cccf77b4436e32733b981665ff0278d6318c2a6
6
+ metadata.gz: c33df65970b91273bf362a342ad2f055479a34fab25025cf8583420552587bb93726a9344d2fe50ea971690f5d11b455c0daa0fc859fe966b874c5251bc0a467
7
+ data.tar.gz: 1a8596590dbd4c8b033297b70d631f4f580e4d9ef342af20d937cd58d65e4f8e6a5e0bb4c58c7c519551e6f0d04fc4dfe28229d1146b0b55100745b65350dc73
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,34 +27,30 @@ module Low
31
27
  end
32
28
 
33
29
  module ClassMethods
30
+ def render(**)
31
+ # GOAL: Make return value configurable; ResponseEvent, Response, or body.
32
+ response = Low::Factories::ResponseFactory.html(body: response_body(**))
33
+ Low::Events::ResponseEvent.new(response:).tap { it.branch }
34
+ end
35
+
36
+ # LowLoad hook.
34
37
  def template
35
38
  @template
36
39
  end
37
40
 
41
+ # LowLoad hook.
38
42
  def build_template(template:, params:, engine:, namespace:)
39
43
  @template = Template.new(template:, params:, engine:, namespace:)
40
44
  end
41
45
 
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: body(node:, event:))
48
- Low::Events::ResponseEvent.new(response:)
49
- end
50
-
51
- def render_template(event:)
52
- self.new(event:).render_template(event:)
53
- end
54
-
55
46
  private
56
47
 
57
- def body(node:, event:)
58
- return node.render_template(event:) if @template
59
- return node.render(event:) if node.method(:render).arity > 0
48
+ def response_body(**)
49
+ node = new(**)
50
+
51
+ return node.render_template(**) if @template
60
52
 
61
- node.render
53
+ node.render(**)
62
54
  end
63
55
  end
64
56
  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.0'
5
+ VERSION = '0.4.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.0
4
+ version: 0.4.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: []