antlers 0.9.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 +4 -4
- data/lib/antlers/api.rb +12 -0
- data/lib/antlers/version.rb +1 -1
- data/lib/antlers.rb +9 -13
- data/lib/interfaces/antler_node.rb +8 -1
- data/lib/interfaces/branch_node.rb +2 -2
- data/lib/modules/props.rb +0 -5
- data/lib/nodes/for_node.rb +2 -2
- data/lib/nodes/form_node.rb +2 -2
- data/lib/nodes/if_node.rb +2 -2
- data/lib/nodes/prop_node.rb +5 -4
- data/lib/nodes/root_node.rb +1 -1
- data/lib/nodes/slot_node.rb +2 -2
- data/lib/nodes/var_node.rb +1 -1
- data/lib/nodes/yield_node.rb +2 -2
- metadata +2 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 375ebfb2e841c81843bb17b1025d8cd43dbe851f803f4845afb73f6d24f8ef30
|
|
4
|
+
data.tar.gz: a7db1372364cb6633b6ce6ae2492966ecf1c6d2a20f3d7af214ce14e18feda21
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c0b9b231ebe71d01f50443bebcec9210c3f97fe238138d172974ef5c298d5c543af1371a3806f45e54cc8e5a6a8cb32d6e51e17547465ed96682a633393c0ca4
|
|
7
|
+
data.tar.gz: d7c42c19f7c1aa9a5bcb27d30fe2fe0118054897bb5e2388f266b7127bf6c89bdc35b7da4fa20e39f969a20f6a7a2ce9c6e8325ac32e0a9f78720b85a06bb21c
|
data/lib/antlers/api.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'elements'
|
|
4
|
+
require_relative 'lexer'
|
|
5
|
+
require_relative 'parser'
|
|
6
|
+
require_relative '../interfaces/lexeme'
|
|
7
|
+
require_relative '../interfaces/branch_node'
|
|
8
|
+
require_relative '../interfaces/leaf_node'
|
|
9
|
+
require_relative '../modules/props'
|
|
10
|
+
require_relative '../modules/variables'
|
|
11
|
+
|
|
12
|
+
# Usage: require 'antlers/api'
|
data/lib/antlers/version.rb
CHANGED
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
|
-
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
DEFAULT_ELEMENTS = %i[root html form for if prop slot yield var]
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
21
|
-
|
|
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
|
|
data/lib/nodes/for_node.rb
CHANGED
|
@@ -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
|
|
data/lib/nodes/form_node.rb
CHANGED
|
@@ -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
|
|
data/lib/nodes/prop_node.rb
CHANGED
|
@@ -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
|
|
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 =
|
|
21
|
+
event = possible_render_event(props:)
|
|
22
22
|
|
|
23
|
-
# TODO: Get
|
|
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)
|
data/lib/nodes/root_node.rb
CHANGED
data/lib/nodes/slot_node.rb
CHANGED
|
@@ -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 =
|
|
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:)
|
data/lib/nodes/var_node.rb
CHANGED
|
@@ -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
|
data/lib/nodes/yield_node.rb
CHANGED
|
@@ -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,
|
|
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:
|
|
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
|
|
@@ -74,6 +60,7 @@ extensions: []
|
|
|
74
60
|
extra_rdoc_files: []
|
|
75
61
|
files:
|
|
76
62
|
- lib/antlers.rb
|
|
63
|
+
- lib/antlers/api.rb
|
|
77
64
|
- lib/antlers/elements.rb
|
|
78
65
|
- lib/antlers/lexer.rb
|
|
79
66
|
- lib/antlers/parser.rb
|