hancock_cms_pages 1.0.0 → 1.0.2

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/hancock/pages/blocksetable.rb +48 -14
  3. data/app/controllers/concerns/hancock/pages/localizeable.rb +5 -5
  4. data/app/controllers/concerns/hancock/pages/nav_menu.rb +10 -5
  5. data/app/controllers/concerns/hancock/pages/seo_pages.rb +3 -3
  6. data/app/helpers/hancock/pages/blocksets_helper.rb +26 -0
  7. data/app/helpers/hancock/pages/pages_helper.rb +11 -0
  8. data/app/models/concerns/hancock/pages/connectable.rb +1 -1
  9. data/app/views/blocks/_cached_blockset_navigation.html.slim +26 -0
  10. data/app/views/blocks/_cached_navigation.html.slim +26 -0
  11. data/app/views/blocks/_header.html.slim +9 -1
  12. data/app/views/hancock/pages/pages/show.html.slim +14 -1
  13. data/app/views/shared/_obj.html.slim +21 -25
  14. data/config/locales/hancock.pages.ru.yml +5 -0
  15. data/hancock_cms_pages.gemspec +3 -3
  16. data/lib/generators/hancock/pages/config/{install_generator.rb → config_generator.rb} +0 -0
  17. data/lib/generators/hancock/pages/config/templates/hancock_pages.erb +19 -6
  18. data/lib/generators/hancock/pages/controllers/decorators_generator.rb +24 -0
  19. data/lib/generators/hancock/pages/{migration_generator.rb → migrations/migrations_generator.rb} +3 -3
  20. data/lib/generators/hancock/pages/{templates → migrations/templates}/migration_blocks.rb +0 -0
  21. data/lib/generators/hancock/pages/{templates → migrations/templates}/migration_pages.rb +0 -0
  22. data/lib/generators/hancock/pages/models/templates/block.erb +5 -5
  23. data/lib/generators/hancock/pages/models/templates/blockset.erb +5 -5
  24. data/lib/generators/hancock/pages/models/templates/menu.erb +5 -5
  25. data/lib/generators/hancock/pages/models/templates/page.erb +7 -7
  26. data/lib/hancock/pages/admin.rb +35 -8
  27. data/lib/hancock/pages/admin/block.rb +14 -1
  28. data/lib/hancock/pages/admin/blockset.rb +34 -11
  29. data/lib/hancock/pages/admin/menu.rb +3 -1
  30. data/lib/hancock/pages/admin/page.rb +35 -5
  31. data/lib/hancock/pages/configuration.rb +28 -5
  32. data/lib/hancock/pages/controllers/pages.rb +10 -1
  33. data/lib/hancock/pages/engine.rb +59 -0
  34. data/lib/hancock/pages/models/active_record/blockset.rb +2 -1
  35. data/lib/hancock/pages/models/block.rb +234 -55
  36. data/lib/hancock/pages/models/blockset.rb +50 -38
  37. data/lib/hancock/pages/models/menu.rb +24 -15
  38. data/lib/hancock/pages/models/mongoid/block.rb +13 -0
  39. data/lib/hancock/pages/models/mongoid/blockset.rb +3 -0
  40. data/lib/hancock/pages/models/mongoid/menu.rb +4 -1
  41. data/lib/hancock/pages/models/mongoid/page.rb +19 -6
  42. data/lib/hancock/pages/models/page.rb +196 -90
  43. data/lib/hancock/pages/rails_admin_ext/hancock_connectable.rb +2 -0
  44. data/lib/hancock/pages/rails_admin_ext/menu.rb +11 -7
  45. data/lib/hancock/pages/version.rb +1 -1
  46. data/lib/hancock/pages/views_whitelist.rb +103 -0
  47. data/lib/hancock_cms_pages.rb +4 -6
  48. data/release.sh +1 -1
  49. metadata +19 -14
  50. data/app/helpers/hancock/pages/pages_helpers.rb +0 -2
@@ -9,6 +9,8 @@ module Hancock::Pages
9
9
  attr_accessor :menu_max_depth
10
10
 
11
11
  attr_accessor :seo_support
12
+ attr_accessor :cache_support
13
+ attr_accessor :insertions_support
12
14
 
13
15
  attr_accessor :localize
14
16
 
@@ -18,18 +20,39 @@ module Hancock::Pages
18
20
  attr_accessor :user_abilities_support
19
21
  attr_accessor :ra_comments_support
20
22
 
23
+ attr_accessor :renderer_lib_extends
24
+
25
+ attr_accessor :verbose_render
26
+ attr_accessor :raven_support
27
+
28
+ attr_accessor :available_layouts
29
+
21
30
  def initialize
22
31
  @menu_max_depth = 2
23
32
 
24
- @seo_support = defined? Hancock::Seo
33
+ @seo_support = !!defined? Hancock::Seo
34
+ @cache_support = !!defined?(Hancock::Cache)
35
+ @insertions_support = true
25
36
 
26
37
  @localize = Hancock.config.localize
27
38
 
28
- @breadcrumbs_on_rails_support = defined?(BreadcrumbsOnRails)
39
+ @breadcrumbs_on_rails_support = !!defined?(BreadcrumbsOnRails)
40
+
41
+ @model_settings_support = !!defined?(RailsAdminModelSettings)
42
+ @user_abilities_support = !!defined?(RailsAdminUserAbilities)
43
+ @ra_comments_support = !!defined?(RailsAdminComments)
44
+
45
+ @renderer_lib_extends = [
46
+ # ::ActionController::Base,
47
+ ::ActionView::Helpers::TagHelper,
48
+ ::ActionView::Context
49
+ ]
50
+
51
+ @verbose_render = Rails.env.development? or Rails.env.test?
52
+ @raven_support = !!(Hancock.config.respond_to?(:raven_support) ? Hancock.config.raven_support : defined?(Raven))
53
+
54
+ @available_layouts = ["application"]
29
55
 
30
- @model_settings_support = defined?(RailsAdminModelSettings)
31
- @user_abilities_support = defined?(RailsAdminUserAbilities)
32
- @ra_comments_support = defined?(RailsAdminComments)
33
56
  end
34
57
  end
35
58
  end
@@ -3,6 +3,11 @@ module Hancock::Pages
3
3
  module Pages
4
4
  extend ActiveSupport::Concern
5
5
 
6
+ included do
7
+ include ActionView::Helpers::TagHelper
8
+ include ActionView::Context
9
+ end
10
+
6
11
  def show
7
12
  if @seo_page.nil? || !@seo_page.persisted?
8
13
  if !params[:id].blank? or !params[:slug].blank?
@@ -18,6 +23,10 @@ module Hancock::Pages
18
23
  if Hancock::Pages.config.breadcrumbs_on_rails_support
19
24
  add_breadcrumb @seo_page.name, @seo_page.slug
20
25
  end
26
+
27
+ if Hancock::Pages.config.available_layouts.include?(@seo_page.layout_name)
28
+ render layout: @seo_page.layout_name
29
+ end
21
30
  end
22
31
 
23
32
  private
@@ -27,7 +36,7 @@ module Hancock::Pages
27
36
 
28
37
  def after_initialize
29
38
  end
30
-
39
+
31
40
  end
32
41
  end
33
42
  end
@@ -1,5 +1,64 @@
1
1
  module Hancock::Pages
2
2
  class Engine < ::Rails::Engine
3
3
  # isolate_namespace Hancock::Pages
4
+
5
+ # initializer "hancock_cms_pages.blocksets_settings" do
6
+ # # Write default email settings to DB so they can be changed.
7
+ #
8
+ # #temp
9
+ # begin
10
+ # if Settings and Settings.table_exists?
11
+ # Settings.hancock_pages_blocks_whitelist(default: '', kind: :text, label: 'Белый список блоков')
12
+ # Settings.hancock_pages_blocks_human_names(default: '', kind: :yaml, label: 'Имена блоков')
13
+ # end
14
+ #
15
+ # # if Settings and Settings.table_exists? and Hancock::Pages.model_settings_support
16
+ # # Hancock::Pages::Blockset.settings.blocks_whitelist(default: '', kind: :text, label: 'Белый список блоков')
17
+ # # Hancock::Pages::Blockset.settings.blocks_human_names(default: '', kind: :yaml, label: 'Имена блоков')
18
+ # #
19
+ # #
20
+ # # _setting_existed = !Hancock::Cache::Fragment.settings.getnc('detecting').nil?
21
+ # # unless _setting_existed
22
+ # # Hancock::Pages::Blockset.settings.blocks_whitelist(kind: :text, default: '', label: 'Белый список блоков')
23
+ # # Hancock::Pages::Blockset.settings.unload!
24
+ # # _setting = Hancock::Pages::Blockset.settings.getnc('blocks_whitelist')
25
+ # # if _setting
26
+ # # _setting.for_admin = true
27
+ # # _setting.perform_caching = false
28
+ # # _setting.save
29
+ # # end
30
+ # # end
31
+ # #
32
+ # #
33
+ # # _setting_existed = !Hancock::Cache::Fragment.settings.getnc('detecting').nil?
34
+ # # unless _setting_existed
35
+ # # Hancock::Pages::Blockset.settings.blocks_human_names(default: '', kind: :yaml, label: 'Имена блоков')
36
+ # # Hancock::Pages::Blockset.settings.unload!
37
+ # # _setting = Hancock::Pages::Blockset.settings.getnc('blocks_human_names')
38
+ # # if _setting
39
+ # # _setting.for_admin = true
40
+ # # _setting.perform_caching = false
41
+ # # _setting.save
42
+ # # end
43
+ # # end
44
+ # #
45
+ # # end
46
+ # rescue
47
+ # end
48
+ # end
49
+
50
+ config.after_initialize do
51
+ # Write default email settings to DB so they can be changed.
52
+ begin
53
+ if Settings and Settings.table_exists?
54
+ Settings.hancock_pages_blocks_whitelist(default: '', kind: :text, label: 'Белый список блоков') unless RailsAdminSettings::Setting.ns("main").where(key: "hancock_pages_blocks_whitelist").exists?
55
+ Settings.hancock_pages_blocks_human_names(default: '', kind: :yaml, label: 'Имена блоков') unless RailsAdminSettings::Setting.ns("main").where(key: "hancock_pages_blocks_human_names").exists?
56
+
57
+ Settings.ns('admin').hancock_pages_blocks_blacklist(default: '', kind: :text, label: 'Черный список блоков') unless RailsAdminSettings::Setting.ns("admin").where(key: "hancock_pages_blocks_blacklist").exists?
58
+ end
59
+ rescue
60
+ end
61
+ end
62
+
4
63
  end
5
64
  end
@@ -11,7 +11,8 @@ module Hancock::Pages
11
11
  translates :name
12
12
  end
13
13
 
14
- has_many :page_blocks, class_name: "Hancock::Pages::Blockset"
14
+ has_many :blocks, class_name: "Hancock::Pages::Blockset", inverse_of: :blockset
15
+ accepts_nested_attributes_for :blocks, allow_destroy: true
15
16
  end
16
17
  end
17
18
  end
@@ -6,6 +6,10 @@ module Hancock::Pages
6
6
  include Hancock::Enableable
7
7
  include ManualSlug
8
8
 
9
+ if Hancock::Pages.config.insertions_support
10
+ include Hancock::InsertionField
11
+ end
12
+
9
13
  include Hancock::Pages.orm_specific('Block')
10
14
 
11
15
  included do
@@ -21,6 +25,93 @@ module Hancock::Pages
21
25
  after_initialize do
22
26
  self.file_pathname = Pathname.new(file_path) unless file_path.nil?
23
27
  end
28
+
29
+ def can_render?
30
+ Hancock::Pages::can_render_in_block?(self.file_path)
31
+ end
32
+
33
+ if Hancock::Pages.config.insertions_support
34
+ # insertions_for(:content)
35
+ insertions_for(:content_html)
36
+ alias :block_content :page_content
37
+ alias :block_content_html :page_content_html
38
+ end
39
+ def block_content(clear_insertions = true)
40
+ if clear_insertions.is_a?(Hash)
41
+ clear_insertions = clear_insertions[:clear_insertions]
42
+ end
43
+ if @content_used.nil?
44
+ if content.nil?
45
+ @content_used = true
46
+ ''
47
+ else
48
+ # content.gsub(/\{\{(.*?)\}\}/) do
49
+ # {{"some_text"}} #temporary disabled - need tests
50
+ # _content = content.gsub(/\{\{(['"])(.*?)(\1)\}\}/) do
51
+ # $2
52
+ # end.gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
53
+ _content = content.gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
54
+ if $4 == "FILE" and $3.blank?
55
+ clear_insertions ? "" : $1
56
+ elsif $4 =~ /\ABS\|(.*?)\Z/ and $3.blank?
57
+ clear_insertions ? "" : $1
58
+ elsif $3 == "self" and !$4.blank?
59
+ if clear_insertions
60
+ ""
61
+ elsif Hancock::Pages.config.insertions_support
62
+ get_insertion($4)
63
+ else
64
+ $1
65
+ end
66
+ else
67
+ (Settings and !$4.blank? and $3 != "self") ? Settings.ns($3).get($4).val : "" #temp
68
+ end
69
+ end
70
+ @content_used = true
71
+ _content
72
+ end
73
+ else
74
+ ''
75
+ end
76
+ end
77
+ def block_content_html(clear_insertions = true)
78
+ if clear_insertions.is_a?(Hash)
79
+ clear_insertions = clear_insertions[:clear_insertions]
80
+ end
81
+ if @content_html_used.nil?
82
+ if content_html.nil?
83
+ @content_html_used = true
84
+ ''
85
+ else
86
+ # content.gsub(/\{\{(.*?)\}\}/) do
87
+ # {{"some_text"}} #temporary disabled - need tests
88
+ # _content_html = content_html.gsub(/\{\{(['"])(.*?)(\1)\}\}/) do
89
+ # $2
90
+ # end.gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
91
+ _content_html = content_html.gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
92
+ if $4 == "FILE" and $3.blank?
93
+ clear_insertions ? "" : $1
94
+ elsif $4 =~ /\ABS\|(.*?)\Z/ and $3.blank?
95
+ clear_insertions ? "" : $1
96
+ elsif $3 == "self" and !$4.blank?
97
+ if clear_insertions
98
+ ""
99
+ elsif Hancock::Pages.config.insertions_support
100
+ get_insertion($4)
101
+ else
102
+ $1
103
+ end
104
+ else
105
+ (Settings and !$4.blank? and $3 != "self") ? Settings.ns($3).get($4).val : "" #temp
106
+ end
107
+ end
108
+ @content_html_used = true
109
+ _content_html
110
+ end
111
+ else
112
+ ''
113
+ end
114
+ end
24
115
  end
25
116
 
26
117
  def file_pathname_as_partial
@@ -37,70 +128,97 @@ module Hancock::Pages
37
128
  self.file_pathname_for_fs.to_s
38
129
  end
39
130
 
40
-
41
- def has_content?
42
- @content_used.nil? && !content.blank?
43
- end
44
- def block_content(clear_insertions = true)
45
- if clear_insertions.is_a?(Hash)
46
- clear_insertions = clear_insertions[:clear_insertions]
47
- end
48
- if @content_used.nil?
49
- @content_used = true
50
- if content.nil?
51
- ''
131
+ def rails_admin_label
132
+ if !self.name.blank?
133
+ self.name
134
+ elsif self.render_file and !self.file_path.blank?
135
+ _human_name = Hancock::Pages.whitelist_human_names[self.file_path]
136
+ if _human_name.blank?
137
+ self.file_path_for_fs
52
138
  else
53
- # content.gsub(/\{\{(.*?)\}\}/) do
54
- content.gsub(/\{\{(([^\.]*?)\.)?(.*?)\}\}/) do
55
- if $3 == "FILE" and $2.blank?
56
- clear_insertions ? "" : $0
57
- else
58
- (Settings and !$3.blank?) ? Settings.ns($2).get($3).val : "" #temp
59
- end
60
- end
139
+ _human_name
61
140
  end
62
141
  else
63
- ''
142
+ self.id
64
143
  end
65
144
  end
145
+
146
+ def has_content?
147
+ @content_used.nil? && !content.blank?
148
+ end
66
149
  def has_content_html?
67
150
  @content_html_used.nil? && !content_html.blank?
68
151
  end
69
- def block_content_html(clear_insertions = true)
70
- if clear_insertions.is_a?(Hash)
71
- clear_insertions = clear_insertions[:clear_insertions]
152
+
153
+ def render_or_content_html(view = Hancock::Pages::PagesController.new, opts = {})
154
+ if view.is_a?(Hash)
155
+ view, opts = view.delete(:view) || Hancock::Pages::PagesController.new, view
72
156
  end
73
- if @content_html_used.nil?
74
- @content_html_used = true
75
- if content_html.nil?
76
- ''
77
- else
78
- # content.gsub(/\{\{(.*?)\}\}/) do
79
- content_html.gsub(/\{\{(([^\.]*?)\.)?(.*?)\}\}/) do
80
- if $3 == "FILE" and $2.blank?
81
- clear_insertions ? "" : $0
82
- else
83
- (Settings and !$3.blank?) ? Settings.ns($2).get($3).val : "" #temp
84
- end
157
+ Hancock::Pages.config.renderer_lib_extends.each do |lib_extends|
158
+ unless view.class < lib_extends
159
+ if view.respond_to?(:prepend)
160
+ view.prepend lib_extends
161
+ else
162
+ view.extend lib_extends
85
163
  end
86
164
  end
87
- else
88
- ''
89
165
  end
90
- end
91
166
 
92
- def render_or_content_html(view, opts = {})
93
- if view.is_a?(Hash)
94
- view, opts = view.delete(:view), view
95
- end
96
167
  ret = ""
168
+ hancock_env = {block: self, called_from: [{object: self, method: :render_or_content_html}]}
169
+ hancock_env[:called_from].unshift(opts.delete(:called_from)) if opts and opts[:called_from].present?
170
+ locals = {}
171
+ locals[:hancock_env] = hancock_env
172
+
97
173
  if self.render_file and !self.file_path.blank?
98
- opts.merge!(partial: self.file_path, locals: {hancock_block: self, called_from: :render})
99
- ret = view.render(opts) rescue self.content_html.html_safe
174
+ opts.merge!(partial: self.file_path, locals: locals)
175
+ # ret = view.render_to_string(opts) rescue self.content_html.html_safe
176
+ ret = begin
177
+ view.render_to_string(opts) if can_render?
178
+ rescue Exception => exception
179
+ if Hancock::Pages.config.verbose_render
180
+ Rails.logger.error exception.message
181
+ Rails.logger.error exception.backtrace.join("\n")
182
+ puts exception.message
183
+ puts exception.backtrace.join("\n")
184
+ end
185
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
186
+ self.content_html.html_safe
187
+ end
100
188
  else
101
- opts.merge!(partial: self.file_path, locals: {hancock_block: self, called_from: :content_html})
189
+ opts.merge!(partial: self.file_path, locals: locals)
190
+ # ret = self.block_content_html(false).gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
102
191
  ret = self.block_content_html(false).gsub("{{FILE}}") do
103
- view.render(opts) rescue nil
192
+ # view.render(opts) rescue nil
193
+ begin
194
+ view.render(opts) if can_render?
195
+ rescue Exception => exception
196
+ if Hancock::Pages.config.verbose_render
197
+ Rails.logger.error exception.message
198
+ Rails.logger.error exception.backtrace.join("\n")
199
+ puts exception.message
200
+ puts exception.backtrace.join("\n")
201
+ end
202
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
203
+ nil
204
+ end
205
+ end.gsub(/\{\{BS\|(.*?)\}\}/) do
206
+ bs = Hancock::Pages::Blockset.enabled.where(name: $1).first
207
+ # view.render_blockset(bs, called_from: :render_or_content_html) rescue nil if bs
208
+ if bs
209
+ begin
210
+ view.render_blockset(bs, called_from: {object: self, method: :render_or_content_html})
211
+ rescue Exception => exception
212
+ if Hancock::Pages.config.verbose_render
213
+ Rails.logger.error exception.message
214
+ Rails.logger.error exception.backtrace.join("\n")
215
+ puts exception.message
216
+ puts exception.backtrace.join("\n")
217
+ end
218
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
219
+ nil
220
+ end
221
+ end
104
222
  end.html_safe
105
223
  end
106
224
  if use_wrapper
@@ -111,25 +229,86 @@ module Hancock::Pages
111
229
  ret = view.content_tag wrapper_tag, ret, _attrs
112
230
  end
113
231
  ret = yield ret if block_given?
114
- return ret
232
+ return (ret.is_a?(Array) ? ret.join.html_safe : ret)
233
+ # return ret
115
234
  end
116
235
 
117
- def render_or_content(view, opts = {})
236
+ def render_or_content(view = Hancock::Pages::PagesController.new, opts = {})
118
237
  if view.is_a?(Hash)
119
- view, opts = view.delete(:view), view
238
+ view, opts = view.delete(:view) || Hancock::Pages::PagesController.new, view
239
+ end
240
+ Hancock::Pages.config.renderer_lib_extends.each do |lib_extends|
241
+ unless view.class < lib_extends
242
+ if view.respond_to?(:prepend)
243
+ view.prepend lib_extends
244
+ else
245
+ view.extend lib_extends
246
+ end
247
+ end
120
248
  end
249
+
121
250
  ret = ""
251
+ hancock_env = {block: self, called_from: [{object: self, method: :render_or_content}]}
252
+ hancock_env[:called_from].unshift(opts.delete(:called_from)) if opts and opts[:called_from].present?
253
+ locals = {}
254
+ locals[:hancock_env] = hancock_env
255
+
122
256
  unless self.file_path.blank?
123
- opts.merge!(partial: self.file_path, locals: {hancock_block: self, called_from: :render})
124
- ret = view.render(opts) rescue self.content
257
+ opts.merge!(partial: self.file_path, locals: locals)
258
+
259
+ # ret = view.render_to_string(opts) rescue self.content
260
+ ret = begin
261
+ view.render_to_string(opts) if can_render?
262
+ rescue Exception => exception
263
+ if Hancock::Pages.config.verbose_render
264
+ Rails.logger.error exception.message
265
+ Rails.logger.error exception.backtrace.join("\n")
266
+ puts exception.message
267
+ puts exception.backtrace.join("\n")
268
+ end
269
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
270
+ self.content
271
+ end
272
+ # ret = view.render(opts) rescue self.content
125
273
  else
126
- opts.merge!(partial: self.file_path, locals: {hancock_block: self, called_from: :content})
274
+ opts.merge!(partial: self.file_path, locals: locals)
127
275
  ret = self.block_content(false).gsub("{{FILE}}") do
128
- view.render(opts) rescue nil
276
+ # view.render_to_string(opts) rescue nil
277
+ begin
278
+ view.render_to_string(opts) if can_render?
279
+ rescue Exception => exception
280
+ if Hancock::Pages.config.verbose_render
281
+ Rails.logger.error exception.message
282
+ Rails.logger.error exception.backtrace.join("\n")
283
+ puts exception.message
284
+ puts exception.backtrace.join("\n")
285
+ end
286
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
287
+ nil
288
+ end
289
+ # view.render(opts) rescue nil
290
+ end.gsub(/\{\{BS\|(.*?)\}\}/) do
291
+ bs = Hancock::Pages::Blockset.enabled.where(name: $1).first
292
+ # view.render_blockset(bs, called_from: :render_or_content) rescue nil if bs
293
+ if bs
294
+ begin
295
+ view.render_blockset(bs, called_from: {object: self, method: :render_or_content})
296
+ rescue Exception => exception
297
+ if Hancock::Pages.config.verbose_render
298
+ Rails.logger.error exception.message
299
+ Rails.logger.error exception.backtrace.join("\n")
300
+ puts exception.message
301
+ puts exception.backtrace.join("\n")
302
+ end
303
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
304
+ nil
305
+ end
306
+ end
129
307
  end
130
308
  end
131
309
  ret = yield ret if block_given?
132
- return ret
310
+ return (ret.is_a?(Array) ? ret.join.html_safe : ret)
311
+ # return ret
133
312
  end
134
313
 
135
314
  def file_fullpath(with_ext = false, ext = ".html.slim")