antlers 1.0.0 → 1.1.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: 7e2b59df9502f3e66f123ec45e707de957f8e96656c44ddd6b8a026cf96f73ef
4
- data.tar.gz: f8455c5e3de15fc2fdfd8ab1c41dc6c2f6ab377e7d811522f7dc4aa36c40e223
3
+ metadata.gz: 375ebfb2e841c81843bb17b1025d8cd43dbe851f803f4845afb73f6d24f8ef30
4
+ data.tar.gz: a7db1372364cb6633b6ce6ae2492966ecf1c6d2a20f3d7af214ce14e18feda21
5
5
  SHA512:
6
- metadata.gz: '045843a0d001f3f6cc846cdca65935f30a1ecb7aea81e4d5a6fb4bce3627ffb670b458f2457c65b582d048f37747e061bf62754beefcde8e4f327eb17da9565a'
7
- data.tar.gz: 7995630d52ba13a9756ee08bdb394ce7afeef4c96397eb7da0822952cf6f8516cdd54c7df519d8fdc9826a792495b9ad2b5a6aab42b683d9c07e70d2a713efaa
6
+ metadata.gz: c0b9b231ebe71d01f50443bebcec9210c3f97fe238138d172974ef5c298d5c543af1371a3806f45e54cc8e5a6a8cb32d6e51e17547465ed96682a633393c0ca4
7
+ data.tar.gz: d7c42c19f7c1aa9a5bcb27d30fe2fe0118054897bb5e2388f266b7127bf6c89bdc35b7da4fa20e39f969a20f6a7a2ce9c6e8325ac32e0a9f78720b85a06bb21c
data/lib/antlers/api.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative 'elements'
4
4
  require_relative 'lexer'
5
+ require_relative 'parser'
5
6
  require_relative '../interfaces/lexeme'
6
7
  require_relative '../interfaces/branch_node'
7
8
  require_relative '../interfaces/leaf_node'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Antlers
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
data/lib/antlers.rb CHANGED
@@ -4,21 +4,17 @@ require_relative 'antlers/elements'
4
4
  require_relative 'antlers/lexer'
5
5
  require_relative 'antlers/parser'
6
6
 
7
- # These requires allow downstream libraries to build their own antlers nodes.
8
- require_relative 'interfaces/branch_node'
9
- require_relative 'interfaces/leaf_node'
10
-
11
7
  module Antlers
12
- DEFAULT_ELEMENTS = [:root, :html, :form, :for, :if, :prop, :slot, :yield, :var]
8
+ module_function
9
+
10
+ DEFAULT_ELEMENTS = %i[root html form for if prop slot yield var]
13
11
 
14
- class << self
15
- def ast(template:, namespace: nil, elements: Elements[*DEFAULT_ELEMENTS])
16
- sequence = Lexer.new(lexeme_types: elements[:lexeme]).parse(template:)
17
- Parser.new(namespace:, node_types: elements[:node]).parse(sequence:, template:)
18
- end
12
+ def ast(template:, namespace: nil, elements: Elements[*DEFAULT_ELEMENTS])
13
+ sequence = Lexer.new(lexeme_types: elements[:lexeme]).parse(template:)
14
+ Parser.new(namespace:, node_types: elements[:node]).parse(sequence:, template:)
15
+ end
19
16
 
20
- def render(ast:, current_binding:, parent_binding: nil, slot_node: nil)
21
- ast.render(current_binding:, parent_binding:, slot_node:)
22
- end
17
+ def render(ast:, current_binding:, parent_binding: nil, slot_node: nil, metadata: {})
18
+ ast.render(current_binding:, parent_binding:, slot_node:, metadata:)
23
19
  end
24
20
  end
@@ -11,7 +11,7 @@ module Antlers
11
11
  @name = name
12
12
  end
13
13
 
14
- def render(current_binding: nil, parent_binding: nil, slot_node: nil, namespace: nil)
14
+ def render(current_binding: nil, parent_binding: nil, slot_node: nil, namespace: nil, metadata: {})
15
15
  raise NotImplementedError
16
16
  end
17
17
 
@@ -19,6 +19,13 @@ module Antlers
19
19
  'level_1'
20
20
  end
21
21
 
22
+ # Support sending an event to render_template hook when lowevent available. See lownode as an example implementation.
23
+ def possible_render_event(props:)
24
+ Low::Events::RenderEvent.new(action: :render, props:) if defined?(LowEvent)
25
+
26
+ nil
27
+ end
28
+
22
29
  class << self
23
30
  def match?(segment:)
24
31
  raise NotImplementedError
@@ -12,11 +12,11 @@ module Antlers
12
12
  @children = children
13
13
  end
14
14
 
15
- def render(current_binding: nil, parent_binding: nil, slot_node: nil)
15
+ def render(current_binding: nil, parent_binding: nil, slot_node: nil, metadata: {})
16
16
  output = ''
17
17
 
18
18
  @children.each do |child|
19
- output += child.render(current_binding:, parent_binding:, slot_node:) || ''
19
+ output += child.render(current_binding:, parent_binding:, slot_node:, metadata:) || ''
20
20
  end
21
21
 
22
22
  output
data/lib/modules/props.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'low_event'
4
3
  require_relative 'variables'
5
4
 
6
5
  module Antlers
@@ -17,10 +16,6 @@ module Antlers
17
16
 
18
17
  private
19
18
 
20
- def create_render_event(props:)
21
- Low::Events::RenderEvent.new(action: :render, props:)
22
- end
23
-
24
19
  def evaluate_props(props:, current_binding:)
25
20
  return {} if props.nil?
26
21
 
@@ -20,7 +20,7 @@ module Antlers
20
20
  @key = key
21
21
  end
22
22
 
23
- def render(current_binding: nil, parent_binding: nil, slot_node: nil)
23
+ def render(current_binding: nil, parent_binding: nil, slot_node: nil, metadata: {})
24
24
  output = ''
25
25
 
26
26
  evaluate(name: @items, current_binding:).each do |value|
@@ -31,7 +31,7 @@ module Antlers
31
31
  current_binding.local_variable_set(@key, key) if @key
32
32
 
33
33
  @children.each do |child|
34
- output += child.render(current_binding:, parent_binding:, slot_node:) || ''
34
+ output += child.render(current_binding:, parent_binding:, slot_node:, metadata:) || ''
35
35
  end
36
36
  end
37
37
 
@@ -19,11 +19,11 @@ module Antlers
19
19
  @method = method
20
20
  end
21
21
 
22
- def render(current_binding: nil, parent_binding: nil, slot_node: nil)
22
+ def render(current_binding: nil, parent_binding: nil, slot_node: nil, metadata: {})
23
23
  output = "<form action='#{@action}' method='#{@method}'>"
24
24
 
25
25
  @children.each do |child|
26
- output += child.render(current_binding:, parent_binding:, slot_node:) || ''
26
+ output += child.render(current_binding:, parent_binding:, slot_node:, metadata:) || ''
27
27
  end
28
28
 
29
29
  output += '</form>'
data/lib/nodes/if_node.rb CHANGED
@@ -18,12 +18,12 @@ module Antlers
18
18
  @value = value
19
19
  end
20
20
 
21
- def render(current_binding: nil, parent_binding: nil, slot_node: nil)
21
+ def render(current_binding: nil, parent_binding: nil, slot_node: nil, metadata: {})
22
22
  output = ''.dup
23
23
 
24
24
  if evaluate(name: @value, current_binding:)
25
25
  @children.each do |child|
26
- output += child.render(current_binding:, parent_binding:, slot_node:) || ''
26
+ output += child.render(current_binding:, parent_binding:, slot_node:, metadata:) || ''
27
27
  end
28
28
  end
29
29
 
@@ -15,12 +15,12 @@ module Antlers
15
15
  @namespace = namespace
16
16
  end
17
17
 
18
- # Classes referenced via "<{ MyNode }>" must implement class/instance and render/render_template methods (See LowNode).
19
- def render(current_binding: nil, parent_binding: nil, slot_node: nil)
18
+ # Classes referenced via "<{ MyNode }>" must implement class/instance and render/render_template methods (See lownode).
19
+ def render(current_binding: nil, parent_binding: nil, slot_node: nil, metadata: {})
20
20
  props = evaluate_props(props: @props, current_binding:)
21
- event = create_render_event(props:)
21
+ event = possible_render_event(props:)
22
22
 
23
- # TODO: Get LowLoad to load constants defined in "<{ MyNode }>" syntax so that we can resolve namespace/params on class load.
23
+ # TODO: Get dirload to load constants defined in "<{ MyNode }>" syntax so that we can resolve namespace/params on class load.
24
24
  klass = class_constant(namespace: @namespace&.split('::') || [], name: @name)
25
25
  class_proxy = Lowkey[klass.to_s].first[klass.to_s]
26
26
 
@@ -44,6 +44,7 @@ module Antlers
44
44
 
45
45
  def create_instance(class_proxy:, klass:, event:, props:)
46
46
  initialize_params = class_proxy.instance_methods[:initialize]&.tagged_params(:keyword)&.map(&:name) || []
47
+
47
48
  return klass.new(event:, **props) if initialize_params.include?(:event) && initialize_params.count > 1
48
49
  return klass.new(**props) if initialize_params.count > 1
49
50
  return klass.new(event:) if initialize_params.include?(:event)
@@ -14,7 +14,7 @@ module Antlers
14
14
  end
15
15
 
16
16
  def build(**)
17
- new()
17
+ new
18
18
  end
19
19
  end
20
20
  end
@@ -20,9 +20,9 @@ module Antlers
20
20
  @namespace = namespace
21
21
  end
22
22
 
23
- def render(current_binding: nil, parent_binding: nil, slot_node: nil)
23
+ def render(current_binding: nil, parent_binding: nil, slot_node: nil, metadata: {})
24
24
  props = evaluate_props(props: @props, current_binding:)
25
- event = create_render_event(props:)
25
+ event = possible_render_event(props:)
26
26
 
27
27
  # TODO: Get LowLoad to load constants defined in "<{ MyNode }>" syntax so that we can resolve namespace/params on class load.
28
28
  klass = class_constant(namespace: @namespace&.split('::') || [], name:)
@@ -18,7 +18,7 @@ module Antlers
18
18
  @raw = raw
19
19
  end
20
20
 
21
- def render(current_binding: nil, parent_binding: nil, slot_node: nil)
21
+ def render(current_binding: nil, parent_binding: nil, slot_node: nil, metadata: {})
22
22
  result = evaluate(name: @value, current_binding:) || fallback(@value)
23
23
 
24
24
  return result if @raw
@@ -9,11 +9,11 @@ module Antlers
9
9
  end
10
10
 
11
11
  # Render the children in the binding of the parent.
12
- def render(current_binding: nil, parent_binding:, slot_node:)
12
+ def render(parent_binding:, slot_node:, current_binding: nil, metadata: {})
13
13
  output = ''
14
14
 
15
15
  slot_node.children.each do |child|
16
- output += child.render(current_binding: parent_binding, parent_binding:, slot_node:) || ''
16
+ output += child.render(current_binding: parent_binding, parent_binding:, slot_node:, metadata:) || ''
17
17
  end
18
18
 
19
19
  output
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: antlers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi
@@ -23,20 +23,6 @@ dependencies:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
- - !ruby/object:Gem::Dependency
27
- name: low_event
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
26
  - !ruby/object:Gem::Dependency
41
27
  name: lowkey
42
28
  requirement: !ruby/object:Gem::Requirement