module Hancock::Pages::Models::Block

Public Instance Methods

block_content(clear_insertions = true) click to toggle source
# File lib/hancock/pages/models/block.rb, line 39
def block_content(clear_insertions = true)
  if clear_insertions.is_a?(Hash)
    clear_insertions = clear_insertions[:clear_insertions]
  end
  if @content_used.nil?
    if content.nil?
      @content_used = true
      ''
    else
      # content.gsub(/\{\{(.*?)\}\}/) do
      # {{"some_text"}} #temporary disabled - need tests
      # _content = content.gsub(/\{\{(['"])(.*?)(\1)\}\}/) do
      #   $2
      # end.gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
      _content = content.gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
        if $4 == "FILE" and $3.blank?
          clear_insertions ? "" : $1
        elsif $4 =~ /\ABS\|(.*?)\Z/ and $3.blank?
          clear_insertions ? "" : $1
        elsif $3 == "self" and !$4.blank?
          if clear_insertions
            ""
          elsif Hancock::Pages.config.insertions_support
            get_insertion($4)
          else
            $1
          end
        else
          (Settings and !$4.blank? and $3 != "self") ? Settings.ns($3).get($4).val : "" #temp
        end
      end
      @content_used = true
      _content
    end
  else
    ''
  end
end
block_content_html(clear_insertions = true) click to toggle source
# File lib/hancock/pages/models/block.rb, line 77
def block_content_html(clear_insertions = true)
  if clear_insertions.is_a?(Hash)
    clear_insertions = clear_insertions[:clear_insertions]
  end
  if @content_html_used.nil?
    if content_html.nil?
      @content_html_used = true
      ''
    else
      # content.gsub(/\{\{(.*?)\}\}/) do
      # {{"some_text"}} #temporary disabled - need tests
      # _content_html = content_html.gsub(/\{\{(['"])(.*?)(\1)\}\}/) do
      #   $2
      # end.gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
      _content_html = content_html.gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
        if $4 == "FILE" and $3.blank?
          clear_insertions ? "" : $1
        elsif $4 =~ /\ABS\|(.*?)\Z/ and $3.blank?
          clear_insertions ? "" : $1
        elsif $3 == "self" and !$4.blank?
          if clear_insertions
            ""
          elsif Hancock::Pages.config.insertions_support
            get_insertion($4)
          else
            $1
          end
        else
          (Settings and !$4.blank? and $3 != "self") ? Settings.ns($3).get($4).val : "" #temp
        end
      end
      @content_html_used = true
      _content_html
    end
  else
    ''
  end
end
can_render?() click to toggle source
# File lib/hancock/pages/models/block.rb, line 29
def can_render?
  Hancock::Pages::can_render_in_block?(self.file_path)
end
file_exists?() click to toggle source
# File lib/hancock/pages/models/block.rb, line 326
def file_exists?
  file_fullpath(true).exist?
end
file_fullpath(with_ext = false, ext = ".html.slim") click to toggle source
# File lib/hancock/pages/models/block.rb, line 314
def file_fullpath(with_ext = false, ext = ".html.slim")
  if with_ext.is_a?(String)
    ext, with_ext = with_ext, true
  end
  ret = nil
  unless self.file_path.blank?
    ret = self.file_path_for_fs
    ret += ext if with_ext
    ret = Rails.root.join("views", ret)
  end
  return ret
end
file_path_as_partial() click to toggle source
# File lib/hancock/pages/models/block.rb, line 120
def file_path_as_partial
  self.file_pathname_as_partial.to_s
end
file_path_for_fs() click to toggle source
# File lib/hancock/pages/models/block.rb, line 127
def file_path_for_fs
  self.file_pathname_for_fs.to_s
end
file_pathname_as_partial() click to toggle source
# File lib/hancock/pages/models/block.rb, line 117
def file_pathname_as_partial
  self.file_pathname.dirname.join("_#{self.file_pathname.basename}")
end
file_pathname_for_fs() click to toggle source
# File lib/hancock/pages/models/block.rb, line 124
def file_pathname_for_fs
  self.partial ? self.file_pathname_as_partial : self.file_pathname
end
has_content?() click to toggle source
# File lib/hancock/pages/models/block.rb, line 146
def has_content?
  @content_used.nil? && !content.blank?
end
has_content_html?() click to toggle source
# File lib/hancock/pages/models/block.rb, line 149
def has_content_html?
  @content_html_used.nil? && !content_html.blank?
end
nav_options() click to toggle source
nav_options_additions() click to toggle source
nav_options_default() click to toggle source
rails_admin_label() click to toggle source
# File lib/hancock/pages/models/block.rb, line 131
def rails_admin_label
  if !self.name.blank?
    self.name
  elsif self.render_file and !self.file_path.blank?
    _human_name = Hancock::Pages.whitelist_human_names[self.file_path]
    if _human_name.blank?
      self.file_path_for_fs
    else
      _human_name
    end
  else
    self.id
  end
end
render_or_content(view = Hancock::Pages::PagesController.new, opts = {}) { |ret| ... } click to toggle source
# File lib/hancock/pages/models/block.rb, line 236
def render_or_content(view = Hancock::Pages::PagesController.new, opts = {})
  if view.is_a?(Hash)
    view, opts = view.delete(:view) || Hancock::Pages::PagesController.new, view
  end
  Hancock::Pages.config.renderer_lib_extends.each do |lib_extends|
    unless view.class < lib_extends
      if view.respond_to?(:prepend)
        view.prepend lib_extends
      else
        view.extend lib_extends
      end
    end
  end

  ret = ""
  hancock_env = {block: self, called_from: [{object: self, method: :render_or_content}]}
  hancock_env[:called_from].unshift(opts.delete(:called_from)) if opts and opts[:called_from].present?
  locals = {}
  locals[:hancock_env] = hancock_env

  unless self.file_path.blank?
    opts.merge!(partial: self.file_path, locals: locals)

    # ret = view.render_to_string(opts) rescue self.content
    ret = begin
      view.render_to_string(opts) if can_render?
    rescue Exception => exception
      if Hancock::Pages.config.verbose_render
        Rails.logger.error exception.message
        Rails.logger.error exception.backtrace.join("\n")
        puts exception.message
        puts exception.backtrace.join("\n")
      end
      Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
      self.content
    end
    # ret = view.render(opts) rescue self.content
  else
    opts.merge!(partial: self.file_path, locals: locals)
    ret = self.block_content(false).gsub("{{FILE}}") do
      # view.render_to_string(opts) rescue nil
      begin
        view.render_to_string(opts) if can_render?
      rescue Exception => exception
        if Hancock::Pages.config.verbose_render
          Rails.logger.error exception.message
          Rails.logger.error exception.backtrace.join("\n")
          puts exception.message
          puts exception.backtrace.join("\n")
        end
        Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
        nil
      end
      # view.render(opts) rescue nil
    end.gsub(/\{\{BS\|(.*?)\}\}/) do
      bs = Hancock::Pages::Blockset.enabled.where(name: $1).first
      # view.render_blockset(bs, called_from: :render_or_content) rescue nil if bs
      if bs
        begin
          view.render_blockset(bs, called_from: {object: self, method: :render_or_content})
        rescue Exception => exception
          if Hancock::Pages.config.verbose_render
            Rails.logger.error exception.message
            Rails.logger.error exception.backtrace.join("\n")
            puts exception.message
            puts exception.backtrace.join("\n")
          end
          Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
          nil
        end
      end
    end
  end
  ret = yield ret if block_given?
  return (ret.is_a?(Array) ? ret.join.html_safe : ret)
  # return ret
end
render_or_content_html(view = Hancock::Pages::PagesController.new, opts = {}) { |ret| ... } click to toggle source
# File lib/hancock/pages/models/block.rb, line 153
def render_or_content_html(view = Hancock::Pages::PagesController.new, opts = {})
  if view.is_a?(Hash)
    view, opts = view.delete(:view) || Hancock::Pages::PagesController.new, view
  end
  Hancock::Pages.config.renderer_lib_extends.each do |lib_extends|
    unless view.class < lib_extends
      if view.respond_to?(:prepend)
        view.prepend lib_extends
      else
        view.extend lib_extends
      end
    end
  end

  ret = ""
  hancock_env = {block: self, called_from: [{object: self, method: :render_or_content_html}]}
  hancock_env[:called_from].unshift(opts.delete(:called_from)) if opts and opts[:called_from].present?
  locals = {}
  locals[:hancock_env] = hancock_env

  if self.render_file and !self.file_path.blank?
    opts.merge!(partial: self.file_path, locals: locals)
    # ret = view.render_to_string(opts) rescue self.content_html.html_safe
    ret = begin
      view.render_to_string(opts) if can_render?
    rescue Exception => exception
      if Hancock::Pages.config.verbose_render
        Rails.logger.error exception.message
        Rails.logger.error exception.backtrace.join("\n")
        puts exception.message
        puts exception.backtrace.join("\n")
      end
      Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
      self.content_html.html_safe
    end
  else
    opts.merge!(partial: self.file_path, locals: locals)
    # ret = self.block_content_html(false).gsub(/(\{\{(([^\.]*?)\.)?(.*?)\}\})/) do
    ret = self.block_content_html(false).gsub("{{FILE}}") do
      # view.render(opts) rescue nil
      begin
        view.render(opts) if can_render?
      rescue Exception => exception
        if Hancock::Pages.config.verbose_render
          Rails.logger.error exception.message
          Rails.logger.error exception.backtrace.join("\n")
          puts exception.message
          puts exception.backtrace.join("\n")
        end
        Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
        nil
      end
    end.gsub(/\{\{BS\|(.*?)\}\}/) do
      bs = Hancock::Pages::Blockset.enabled.where(name: $1).first
      # view.render_blockset(bs, called_from: :render_or_content_html) rescue nil if bs
      if bs
        begin
          view.render_blockset(bs, called_from: {object: self, method: :render_or_content_html})
        rescue Exception => exception
          if Hancock::Pages.config.verbose_render
            Rails.logger.error exception.message
            Rails.logger.error exception.backtrace.join("\n")
            puts exception.message
            puts exception.backtrace.join("\n")
          end
          Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
          nil
        end
      end
    end.html_safe
  end
  if use_wrapper
    _attrs = {
      class: wrapper_class,
      id: wrapper_id
    }.merge(wrapper_attributes)
    ret = view.content_tag wrapper_tag, ret, _attrs
  end
  ret = yield ret if block_given?
  return (ret.is_a?(Array) ? ret.join.html_safe : ret)
  # return ret
end
wrapper_attributes=(val) click to toggle source
# File lib/hancock/pages/models/block.rb, line 350
def wrapper_attributes=(val)
  if val.is_a? (String)
    begin
      begin
        self[:wrapper_attributes] = JSON.parse(val)
      rescue
        self[:wrapper_attributes] = YAML.load(val)
      end
    rescue
    end
  elsif val.is_a?(Hash)
    self[:wrapper_attributes] = val
  else
    self[:wrapper_attributes] = wrapper_attributes
  end
end