tzispa_rig 0.5.2 → 0.5.3
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/CHANGELOG.md +3 -0
- data/lib/tzispa/rig/binder.rb +8 -67
- data/lib/tzispa/rig/template.rb +4 -4
- data/lib/tzispa/rig/template_binder.rb +87 -0
- data/lib/tzispa/rig/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83f9244aa0671284489e35cc3ab1d69313acb7cc
|
4
|
+
data.tar.gz: 78644d54bf7fc9ee38447c8f88c95cfb60dc23aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f97e685d30424bc8a34084d75b9ccb5daa01f4ad75bba8158991d2a5f656cc410654d357b845753fbcdbf3c5badbd6bed924bedb43974903c48201d6d992082
|
7
|
+
data.tar.gz: a46ee803a956f44b75b3d6b841ca82abf957e7ac1ce7bea4b521b444f5496bed8d13508cbcb486b0d6670e20fe9c0412d881681a89e8efd3b0decf6f2e4dfa7a
|
data/CHANGELOG.md
CHANGED
data/lib/tzispa/rig/binder.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'forwardable'
|
4
|
-
require 'json'
|
5
|
-
require 'tzispa/utils/hash'
|
6
4
|
|
7
5
|
module Tzispa
|
8
6
|
module Rig
|
@@ -19,12 +17,6 @@ module Tzispa
|
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
22
|
-
class IsnotTemplateBinder < ArgumentError
|
23
|
-
def initialize(name)
|
24
|
-
super "Class #{name} isn't a TemplateBinder"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
20
|
class Binder
|
29
21
|
extend Forwardable
|
30
22
|
|
@@ -66,10 +58,8 @@ module Tzispa
|
|
66
58
|
# loop_id<Symbol>: The id of the template loop to bind
|
67
59
|
#
|
68
60
|
def loop_binder(loop_id)
|
69
|
-
|
70
|
-
|
71
|
-
duplicated? loop_parser
|
72
|
-
LoopBinder.new loop_parser[0], @context
|
61
|
+
lp = loop_parser?(loop_id)
|
62
|
+
LoopBinder.new(lp.first, @context) if lp
|
73
63
|
end
|
74
64
|
|
75
65
|
def attr_cache(*attrs)
|
@@ -78,63 +68,14 @@ module Tzispa
|
|
78
68
|
|
79
69
|
private
|
80
70
|
|
81
|
-
def
|
82
|
-
|
71
|
+
def loop_parser?(loop_id)
|
72
|
+
lp = @parser.loop_parser loop_id
|
73
|
+
duplicated? lp
|
74
|
+
lp if lp.count.positive?
|
83
75
|
end
|
84
76
|
|
85
77
|
def duplicated?(loop_parser)
|
86
|
-
raise DuplicatedLoop.new(self.class.name, loop_parser.id)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
class TemplateBinder < Binder
|
91
|
-
extend Forwardable
|
92
|
-
|
93
|
-
using Tzispa::Utils::TzHash
|
94
|
-
|
95
|
-
attr_reader :template
|
96
|
-
def_delegators :@template, :params
|
97
|
-
|
98
|
-
def initialize(template, context)
|
99
|
-
super(template.parser, context)
|
100
|
-
@template = template
|
101
|
-
end
|
102
|
-
|
103
|
-
def data
|
104
|
-
@data ||= @data_struct.new
|
105
|
-
end
|
106
|
-
|
107
|
-
def attach(json = nil, **params)
|
108
|
-
attach_json(json) if json
|
109
|
-
data.tap do |d|
|
110
|
-
params.each do |k, v|
|
111
|
-
raise UnknownTag.new(self.class.name, k) unless tags.include? k
|
112
|
-
d[k] = v.is_a?(Enumerable) ? attach_loop(k, v) : v
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def attach_json(data)
|
118
|
-
src = JSON.parse(data).symbolize!
|
119
|
-
attach(src.reject { |_, v| v.is_a?(Array) || v.is_a?(::Hash) })
|
120
|
-
attach(src.select { |_, v| v.is_a?(Array) }.map do |k, v|
|
121
|
-
[k, attach_loop(k, v)]
|
122
|
-
end.to_h)
|
123
|
-
end
|
124
|
-
|
125
|
-
def attach_loop(k, v)
|
126
|
-
loop_binder(k).bind! { v.map { |item| loop_item item.symbolize! } }
|
127
|
-
end
|
128
|
-
|
129
|
-
def self.for(template, context)
|
130
|
-
if template.bindable?
|
131
|
-
binder_class = template.binder_class
|
132
|
-
binder_class&.new(template, context)&.tap do |binder|
|
133
|
-
raise IsnotTemplateBinder(binder_class.name) unless binder.is_a? TemplateBinder
|
134
|
-
end
|
135
|
-
else
|
136
|
-
new(template, context)
|
137
|
-
end
|
78
|
+
raise DuplicatedLoop.new(self.class.name, loop_parser.id) if loop_parser.count > 1
|
138
79
|
end
|
139
80
|
end
|
140
81
|
|
@@ -162,7 +103,7 @@ module Tzispa
|
|
162
103
|
def loop_item(params = nil)
|
163
104
|
(LoopItem.new self).tap do |item|
|
164
105
|
params&.each do |k, v|
|
165
|
-
|
106
|
+
next unless tags.include? k
|
166
107
|
item.data[k] = v
|
167
108
|
end
|
168
109
|
end
|
data/lib/tzispa/rig/template.rb
CHANGED
@@ -6,7 +6,7 @@ require 'tzispa/utils/string'
|
|
6
6
|
require 'tzispa/utils/indenter'
|
7
7
|
require 'tzispa/rig/parameters'
|
8
8
|
require 'tzispa/rig/parsernext'
|
9
|
-
require 'tzispa/rig/
|
9
|
+
require 'tzispa/rig/template_binder'
|
10
10
|
|
11
11
|
module Tzispa
|
12
12
|
module Rig
|
@@ -97,7 +97,7 @@ module Tzispa
|
|
97
97
|
|
98
98
|
using Tzispa::Utils::TzString
|
99
99
|
|
100
|
-
BASIC_TYPES = [
|
100
|
+
BASIC_TYPES = %i[layout block static].freeze
|
101
101
|
RIG_EXTENSION = 'rig'
|
102
102
|
|
103
103
|
attr_reader :id, :name, :type, :domain, :parser, :subdomain, :childrens, :content_type
|
@@ -133,7 +133,7 @@ module Tzispa
|
|
133
133
|
def render(context, binder = nil)
|
134
134
|
parse! unless parser
|
135
135
|
binder ||= TemplateBinder.for self, context
|
136
|
-
binder.
|
136
|
+
binder.bound
|
137
137
|
parser.render binder
|
138
138
|
end
|
139
139
|
|
@@ -205,7 +205,7 @@ module Tzispa
|
|
205
205
|
end
|
206
206
|
|
207
207
|
def create_binder
|
208
|
-
return unless [
|
208
|
+
return unless %i[block layout].include?(type)
|
209
209
|
::File.open("#{domain.path}/#{binder_require}.rb", 'w') do |f|
|
210
210
|
f.puts write_binder_code
|
211
211
|
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
require 'json'
|
5
|
+
require 'tzispa/utils/hash'
|
6
|
+
require 'tzispa/helpers/hooks/before'
|
7
|
+
require 'tzispa/helpers/hooks/after'
|
8
|
+
require 'tzispa/rig/binder'
|
9
|
+
|
10
|
+
module Tzispa
|
11
|
+
module Rig
|
12
|
+
|
13
|
+
class IsnotTemplateBinder < ArgumentError
|
14
|
+
def initialize(name)
|
15
|
+
super "Class #{name} isn't a TemplateBinder"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class TemplateBinder < Binder
|
20
|
+
extend Forwardable
|
21
|
+
|
22
|
+
using Tzispa::Utils::TzHash
|
23
|
+
|
24
|
+
include Tzispa::Helpers::Hooks::Before
|
25
|
+
include Tzispa::Helpers::Hooks::After
|
26
|
+
|
27
|
+
attr_reader :template
|
28
|
+
def_delegators :@template, :params
|
29
|
+
|
30
|
+
def initialize(template, context)
|
31
|
+
super(template.parser, context)
|
32
|
+
@template = template
|
33
|
+
end
|
34
|
+
|
35
|
+
def bound
|
36
|
+
do_before
|
37
|
+
bind! if respond_to?(:bind!)
|
38
|
+
do_after
|
39
|
+
end
|
40
|
+
|
41
|
+
def data
|
42
|
+
@data ||= @data_struct.new
|
43
|
+
end
|
44
|
+
|
45
|
+
def attach(json = nil, **params)
|
46
|
+
attach_json(json) if json
|
47
|
+
data.tap do |d|
|
48
|
+
params.each do |k, v|
|
49
|
+
next unless tags.include? k
|
50
|
+
d[k] = case v
|
51
|
+
when Enumerable
|
52
|
+
bind_loopitems(k, v)
|
53
|
+
when Proc
|
54
|
+
loop_binder(k)&.bind!(&v) || v.call
|
55
|
+
else
|
56
|
+
v
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def attach_json(data)
|
63
|
+
src = JSON.parse(data).symbolize!
|
64
|
+
attach(src.reject { |_, v| v.is_a?(Array) || v.is_a?(::Hash) })
|
65
|
+
attach(src.select { |_, v| v.is_a?(Array) }.map do |k, v|
|
66
|
+
[k, bind_loopitems(k, v)]
|
67
|
+
end.to_h)
|
68
|
+
end
|
69
|
+
|
70
|
+
def bind_loopitems(k, v)
|
71
|
+
loop_binder(k)&.bind! { v.map { |item| loop_item item.symbolize! } }
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.for(template, context)
|
75
|
+
if template.bindable?
|
76
|
+
binder_class = template.binder_class
|
77
|
+
binder_class&.new(template, context)&.tap do |binder|
|
78
|
+
raise IsnotTemplateBinder(binder_class.name) unless binder.is_a? TemplateBinder
|
79
|
+
end
|
80
|
+
else
|
81
|
+
new(template, context)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
data/lib/tzispa/rig/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tzispa_rig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Antonio Piñero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tzispa_utils
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- lib/tzispa/rig/parsernext.rb
|
70
70
|
- lib/tzispa/rig/syntax.rb
|
71
71
|
- lib/tzispa/rig/template.rb
|
72
|
+
- lib/tzispa/rig/template_binder.rb
|
72
73
|
- lib/tzispa/rig/token.rb
|
73
74
|
- lib/tzispa/rig/type_token/api_url.rb
|
74
75
|
- lib/tzispa/rig/type_token/block.rb
|