tzispa_rig 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9b0801d5dd6d70a7e9787b110ea8ddcd481058b
4
- data.tar.gz: fc1e6464c849608c5818cdbd10323de2377cc597
3
+ metadata.gz: 3e832ffa87f19506e339017eee1aeb22d6664671
4
+ data.tar.gz: f4365cd9feb40b7e97d23c680e8d379145f132d6
5
5
  SHA512:
6
- metadata.gz: e5968f3ffc90ead75ffdaa7ea700aeea5089e4efe2f311d8c3c035f25b01ced2b3d86eb67f8d20c2f0dd3d4fae8a7adce7a974b28e7fb7acbe1d53ee7efff60c
7
- data.tar.gz: e8c1965acb288ead946bba1d0d90a3f2319a3931747d9563dc2eaaa15d79dbf4c95ec05a0bc1c36f2cbac915e7c73f52ee0c40ec0dd64b66199beab0fcdc6024
6
+ metadata.gz: b135a0befc2df801b505cf87ec3706c41ca12b70fdbcb286652fb41f3c43ba23bcbb944bf873573bf13b11af9204ffee54f08225a44e4a7cdf074301b5d58fc4
7
+ data.tar.gz: 447f262807c582167eb1ba9b1756fa8bba284cd4842965a54aa957ec600565394a42efc7fd4e65ca03c66bfdd6f384840f79c2f8b707039acc39c283f6469f69
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@ Tzispa Rig
2
2
 
3
3
  Rig templates implementation
4
4
 
5
+ ## v0.5.5
6
+ - minor code refactory
7
+ - move template creation code to helper module
8
+
5
9
  ## v0.5.4
6
10
  - fix nested loops not binding
7
11
 
@@ -50,17 +50,11 @@ module Tzispa
50
50
  #
51
51
  # loop_binder(:mylist)
52
52
  #
53
- # The LoopBinder returned by this funcion is independent of the
54
- # parent binder where it is defined, so the template symbols of the parent
55
- # binder are not accesible in the loop_binder context. In
56
- # other words, in the top example the two 'myvar' symbols are different
57
- # and you can not access the first myvar value inside the loop
58
- #
59
53
  # ==== Parameters
60
54
  # loop_id<Symbol>: The id of the template loop to bind
61
55
  #
62
56
  def loop_binder(loop_id)
63
- prl = loop_parser?(loop_id)
57
+ prl = loop?(loop_id)
64
58
  LoopBinder.new(prl, context) if prl
65
59
  end
66
60
 
@@ -70,14 +64,14 @@ module Tzispa
70
64
 
71
65
  private
72
66
 
73
- def loop_parser?(loop_id)
74
- lp = @parser.loop_parser loop_id
75
- duplicated? lp
76
- lp.first if lp.count.positive?
67
+ def loop?(loop_id)
68
+ ltk = parser.loop_token loop_id
69
+ duplicated? ltk
70
+ ltk.first if ltk.count.positive?
77
71
  end
78
72
 
79
- def duplicated?(loop_parser)
80
- raise DuplicatedLoop.new(self.class.name, loop_parser.id) if loop_parser.count > 1
73
+ def duplicated?(token)
74
+ raise DuplicatedLoop.new(self.class.name, token.id) if token.count > 1
81
75
  end
82
76
  end
83
77
 
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require 'tzispa/utils/string'
5
+ require 'tzispa/utils/indenter'
6
+
7
+ module Tzispa
8
+ module Rig
9
+ module Helpers
10
+ module TemplateMaker
11
+
12
+ using Tzispa::Utils::TzString
13
+
14
+ def create(content = '')
15
+ FileUtils.mkdir_p(path) unless Dir.exist? path
16
+ super(content)
17
+ create_binder
18
+ end
19
+
20
+ def binder_require
21
+ @binder_require ||= "view/#{subdomain || '_'}/#{type}/#{name.downcase}"
22
+ end
23
+
24
+ def binder_namespace
25
+ @binder_namespace ||= "#{domain.name.to_s.camelize}::#{subdomain&.camelize}View"
26
+ end
27
+
28
+ def binder_class_name
29
+ @binder_class_name ||= @name.camelize
30
+ end
31
+
32
+ def binder_class
33
+ @binder_class ||= begin
34
+ domain.require binder_require
35
+ "#{binder_namespace}::#{binder_class_name}#{type.to_s.capitalize}".constantize
36
+ end
37
+ end
38
+
39
+ def create_binder
40
+ return unless %i[block layout].include?(type)
41
+ ::File.open("#{domain.path}/#{binder_require}.rb", 'w') do |f|
42
+ f.puts write_binder_code
43
+ end
44
+ end
45
+
46
+ def write_binder_code
47
+ Tzispa::Utils::Indenter.new(2).tap do |binder_code|
48
+ binder_code << "require 'tzispa/rig/binder'\n\n"
49
+ level = 0
50
+ binder_namespace.split('::').each do |ns|
51
+ binder_code.indent if level.positive?
52
+ binder_code << "module #{ns}\n"
53
+ level += 1
54
+ end
55
+ binder_code.indent << "\nclass #{binder_class_name} < Tzispa::Rig::TemplateBinder\n\n"
56
+ binder_code.indent << "def bind!\n"
57
+ binder_code << "end\n\n"
58
+ binder_code.unindent << "end\n"
59
+ binder_namespace.split('::').each { binder_code.unindent << "end\n" }
60
+ end.to_s
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+
@@ -40,7 +40,6 @@ module Tzispa
40
40
  @attribute_tags = nil
41
41
  @childrens = []
42
42
  @tokens = []
43
- @loop_parser = {}
44
43
  parse_flags
45
44
  if bindable?
46
45
  parse_statements
@@ -73,11 +72,11 @@ module Tzispa
73
72
  end
74
73
  end
75
74
 
76
- def loop_parser(id)
75
+ def loop_token(id)
77
76
  lpp = tokens.select { |p| p.type == :loop && p.id == id }
78
77
  lpp.concat(
79
78
  tokens.select { |p| p.type == :ife }.map do |p|
80
- p.loop_parser(id)
79
+ p.loop_token(id)
81
80
  end.flatten.compact
82
81
  )
83
82
  end
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'forwardable'
4
- require 'fileutils'
5
- require 'tzispa/utils/string'
6
- require 'tzispa/utils/indenter'
7
4
  require 'tzispa/rig/parameters'
8
5
  require 'tzispa/rig/parsernext'
9
6
  require 'tzispa/rig/template_binder'
7
+ require 'tzispa/rig/helpers/template_maker'
10
8
 
11
9
  module Tzispa
12
10
  module Rig
@@ -95,7 +93,9 @@ module Tzispa
95
93
  class Template < File
96
94
  extend Forwardable
97
95
 
98
- using Tzispa::Utils::TzString
96
+ include Tzispa::Rig::Helpers::TemplateMaker
97
+
98
+
99
99
 
100
100
  BASIC_TYPES = %i[layout block static].freeze
101
101
  RIG_EXTENSION = 'rig'
@@ -122,29 +122,30 @@ module Tzispa
122
122
  self
123
123
  end
124
124
 
125
- def modified?
126
- super || (parser && parser.childrens.index(&:modified?))
127
- end
128
-
129
- def valid?
130
- !content.empty? && !parser.empty?
131
- end
132
-
133
125
  def render(context, binder = nil)
134
126
  parse! unless parser
135
127
  binder ||= TemplateBinder.for self, context
136
- binder.bound
137
- parser.render binder
128
+ parser.render binder.bound
138
129
  end
139
130
 
140
131
  def path
141
132
  @path ||= "#{domain.path}/view/#{subdomain || '_'}/#{type.to_s.downcase}"
142
133
  end
143
134
 
144
- def create(content = '')
145
- FileUtils.mkdir_p(path) unless Dir.exist? path
146
- super(content)
147
- create_binder
135
+ def params=(value)
136
+ @params = Parameters.new(value)
137
+ end
138
+
139
+ def params
140
+ @params.data
141
+ end
142
+
143
+ def modified?
144
+ super || (parser && parser.childrens.index(&:modified?))
145
+ end
146
+
147
+ def valid?
148
+ !content.empty? && !parser.empty?
148
149
  end
149
150
 
150
151
  def block?
@@ -163,33 +164,6 @@ module Tzispa
163
164
  block? || layout?
164
165
  end
165
166
 
166
- def params=(value)
167
- @params = Parameters.new(value)
168
- end
169
-
170
- def params
171
- @params.data
172
- end
173
-
174
- def binder_require
175
- @binder_require ||= "view/#{subdomain || '_'}/#{type}/#{name.downcase}"
176
- end
177
-
178
- def binder_namespace
179
- @binder_namespace ||= "#{domain.name.to_s.camelize}::#{subdomain&.camelize}View"
180
- end
181
-
182
- def binder_class_name
183
- @binder_class_name ||= @name.camelize
184
- end
185
-
186
- def binder_class
187
- @binder_class ||= begin
188
- domain.require binder_require
189
- "#{binder_namespace}::#{binder_class_name}#{type.to_s.capitalize}".constantize
190
- end
191
- end
192
-
193
167
  private
194
168
 
195
169
  def build_name(name)
@@ -203,30 +177,6 @@ module Tzispa
203
177
  raise ArgumentError("#{value} is not a Rig block") unless BASIC_TYPES.include?(value)
204
178
  @type = value
205
179
  end
206
-
207
- def create_binder
208
- return unless %i[block layout].include?(type)
209
- ::File.open("#{domain.path}/#{binder_require}.rb", 'w') do |f|
210
- f.puts write_binder_code
211
- end
212
- end
213
-
214
- def write_binder_code
215
- Tzispa::Utils::Indenter.new(2).tap do |binder_code|
216
- binder_code << "require 'tzispa/rig/binder'\n\n"
217
- level = 0
218
- binder_namespace.split('::').each do |ns|
219
- binder_code.indent if level.positive?
220
- binder_code << "module #{ns}\n"
221
- level += 1
222
- end
223
- binder_code.indent << "\nclass #{binder_class_name} < Tzispa::Rig::TemplateBinder\n\n"
224
- binder_code.indent << "def bind!\n"
225
- binder_code << "end\n\n"
226
- binder_code.unindent << "end\n"
227
- binder_namespace.split('::').each { binder_code.unindent << "end\n" }
228
- end.to_s
229
- end
230
180
  end
231
181
 
232
182
  end
@@ -32,6 +32,7 @@ module Tzispa
32
32
  do_before
33
33
  bind! if respond_to?(:bind!)
34
34
  do_after
35
+ self
35
36
  end
36
37
 
37
38
  def self.for(template, context)
@@ -11,7 +11,7 @@ module Tzispa
11
11
 
12
12
  using Tzispa::Utils::TzString
13
13
 
14
- RE_ANCHOR = /(\$\$\h+\$\$)/
14
+ RE_ANCHOR = /(\u0010\$\h+\$\u0010)/
15
15
 
16
16
  attr_reader :type, :parser
17
17
  def_delegators :@parser, :domain, :content_type, :template
@@ -23,19 +23,19 @@ module Tzispa
23
23
 
24
24
  class << self
25
25
  def instance(parser, type, match)
26
- "Tzispa::Rig::TypeToken::#{type.to_s.capitalize}".constantize.new parser, match
26
+ "Tzispa::Rig::Tokens::#{type.to_s.capitalize}".constantize.new parser, match
27
27
  end
28
28
  end
29
29
 
30
30
  def anchor
31
- @anchor ||= "$$#{format '%x', object_id}$$"
31
+ @anchor ||= "\u0010$#{format '%x', object_id}$\u0010"
32
32
  end
33
33
  end
34
34
 
35
- require 'tzispa/rig/type_token/api_url'
36
- require 'tzispa/rig/type_token/expression'
37
- require 'tzispa/rig/type_token/statement'
38
- require 'tzispa/rig/type_token/block'
35
+ require 'tzispa/rig/tokens/api_url'
36
+ require 'tzispa/rig/tokens/expression'
37
+ require 'tzispa/rig/tokens/statement'
38
+ require 'tzispa/rig/tokens/block'
39
39
 
40
40
  end
41
41
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Tzispa
4
4
  module Rig
5
- module TypeToken
5
+ module Tokens
6
6
 
7
7
  class Url < Rig::Token
8
8
  attr_reader :layout, :params, :app_name
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Tzispa
4
4
  module Rig
5
- module TypeToken
5
+ module Tokens
6
6
 
7
7
  class Blk < Rig::Token
8
8
  attr_reader :id, :params
@@ -4,7 +4,7 @@ require 'tzispa/utils/string'
4
4
 
5
5
  module Tzispa
6
6
  module Rig
7
- module TypeToken
7
+ module Tokens
8
8
 
9
9
  class Meta < Rig::Token
10
10
  attr_reader :id
@@ -41,9 +41,13 @@ module Tzispa
41
41
  end
42
42
 
43
43
  def render(binder)
44
- if binder.data.respond_to?(@id)
45
- value = binder.data.send(@id).to_s
46
- value.send(parser.content_escape_method) rescue value
44
+ if binder.data.respond_to?(id)
45
+ value = binder.data.send(id).to_s
46
+ begin
47
+ value.send(parser.content_escape_method)
48
+ rescue
49
+ value
50
+ end
47
51
  else
48
52
  unknown
49
53
  end
@@ -4,7 +4,7 @@ require 'forwardable'
4
4
 
5
5
  module Tzispa
6
6
  module Rig
7
- module TypeToken
7
+ module Tokens
8
8
 
9
9
  class Loop < Rig::Token
10
10
  extend Forwardable
@@ -67,9 +67,9 @@ module Tzispa
67
67
  end
68
68
  end
69
69
 
70
- def loop_parser(id)
71
- lpp = then_parser.loop_parser(id)
72
- lpp.concat(else_parser&.loop_parser(id) || [])
70
+ def loop_token(id)
71
+ lpp = then_parser.loop_token(id)
72
+ lpp.concat(else_parser&.loop_token(id) || [])
73
73
  lpp.compact.freeze
74
74
  end
75
75
 
@@ -3,7 +3,7 @@
3
3
  module Tzispa
4
4
  module Rig
5
5
 
6
- VERSION = '0.5.4'
6
+ VERSION = '0.5.5'
7
7
  GEM_NAME = 'tzispa_rig'
8
8
 
9
9
  end
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
4
+ version: 0.5.5
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-28 00:00:00.000000000 Z
11
+ date: 2017-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tzispa_utils
@@ -65,16 +65,17 @@ files:
65
65
  - lib/tzispa/rig.rb
66
66
  - lib/tzispa/rig/binder.rb
67
67
  - lib/tzispa/rig/engine.rb
68
+ - lib/tzispa/rig/helpers/template_maker.rb
68
69
  - lib/tzispa/rig/parameters.rb
69
70
  - lib/tzispa/rig/parsernext.rb
70
71
  - lib/tzispa/rig/syntax.rb
71
72
  - lib/tzispa/rig/template.rb
72
73
  - lib/tzispa/rig/template_binder.rb
73
74
  - lib/tzispa/rig/token.rb
74
- - lib/tzispa/rig/type_token/api_url.rb
75
- - lib/tzispa/rig/type_token/block.rb
76
- - lib/tzispa/rig/type_token/expression.rb
77
- - lib/tzispa/rig/type_token/statement.rb
75
+ - lib/tzispa/rig/tokens/api_url.rb
76
+ - lib/tzispa/rig/tokens/block.rb
77
+ - lib/tzispa/rig/tokens/expression.rb
78
+ - lib/tzispa/rig/tokens/statement.rb
78
79
  - lib/tzispa/rig/version.rb
79
80
  - lib/tzispa_rig.rb
80
81
  - test/engine_test.rb