Class: JekyllSupport::JekyllTag
- Inherits:
-
Liquid::Tag
- Object
- Liquid::Tag
- JekyllSupport::JekyllTag
- Includes:
- JekyllSupportError, ToString
- Defined in:
- lib/tag/jekyll_plugin_support_tag.rb,
lib/jekyll_plugin_support.rb
Overview
Base class for Jekyll tags
Direct Known Subclasses
JekyllAllCollections::AllCollectionsTag, JekyllTagNoArgParsing
Instance Attribute Summary collapse
-
#argument_string ⇒ Object
readonly
Returns the value of attribute argument_string.
-
#helper ⇒ Object
readonly
Returns the value of attribute helper.
-
#line_number ⇒ Object
readonly
Returns the value of attribute line_number.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#page ⇒ Object
readonly
Returns the value of attribute page.
-
#site ⇒ Object
readonly
Returns the value of attribute site.
Instance Method Summary collapse
- #initialize(tag_name, markup, parse_context) ⇒ void constructor
-
#render(liquid_context) ⇒ Object
Method prescribed by the Jekyll plugin lifecycle.
-
#render_impl ⇒ Object
Jekyll plugins must override this method, not render, so their plugin can be tested more easily The following variables are predefined: @argument_string, @config, @envs, @helper, @layout, @logger, @mode, @page, @paginator, @site, @tag_name and @theme.
- #set_error_context ⇒ Object
Methods included from ToString
Methods included from JekyllSupportError
#exit_without_stack_trace, #format_error_message, #maybe_reraise_error, #remove_ansi_color, #warn_short_trace
Constructor Details
#initialize(tag_name, markup, parse_context) ⇒ void
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 23 def initialize(tag_name, markup, parse_context) super @tag_name = tag_name raise JekyllPluginSupportError, "markup is a #{markup.class} with value '#{markup}'." unless markup.instance_of? String # Vars in plugin parameters cannot be replaced yet @argument_string = markup.to_s # Lookup variable names with values in markup in render because site and config are not available here @logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config) @logger.debug { "#{self.class}: respond_to?(:no_arg_parsing) #{respond_to?(:no_arg_parsing) ? 'yes' : 'no'}." } @helper = JekyllPluginHelper.new(tag_name, @argument_string, @logger, no_arg_parsing: respond_to?(:no_arg_parsing)) @error_name = "#{tag_name.camelcase(:upper)}Error" ::JekyllSupport::CustomError.factory @error_name end |
Instance Attribute Details
#argument_string ⇒ Object (readonly)
Returns the value of attribute argument_string.
4 5 6 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 4 def argument_string @argument_string end |
#helper ⇒ Object (readonly)
Returns the value of attribute helper.
4 5 6 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 4 def helper @helper end |
#line_number ⇒ Object (readonly)
Returns the value of attribute line_number.
4 5 6 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 4 def line_number @line_number end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
4 5 6 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 4 def logger @logger end |
#page ⇒ Object (readonly)
Returns the value of attribute page.
4 5 6 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 4 def page @page end |
#site ⇒ Object (readonly)
Returns the value of attribute site.
4 5 6 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 4 def site @site end |
Instance Method Details
#render(liquid_context) ⇒ Object
Method prescribed by the Jekyll plugin lifecycle.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 40 def render(liquid_context) return if @helper.excerpt_caller @helper.liquid_context = JekyllSupport.inject_config_vars liquid_context # modifies liquid_context @envs = liquid_context.environments.first @page = liquid_context.registers[:page] @scopes = liquid_context.scopes @site = liquid_context.registers[:site] @config = @site.config @tag_config = @config[@tag_name] @jps = @config['jekyll_plugin_support'] @pry_on_standard_error = @jps['pry_on_standard_error'] || false if @jps set_error_context # @envs.keys are :content, :highlighter_prefix, :highlighter_suffix, :jekyll, :layout, :page, :paginator, :site, :theme @layout = @envs[:layout] @paginator = @envs[:paginator] @theme = @envs[:theme] env = @config['env'] @mode = env&.key?('JEKYLL_ENV') ? env['JEKYLL_ENV'] : 'development' @argument_string = JekyllSupport.lookup_liquid_variables @logger, @helper.liquid_context, @argument_string.to_s.strip @helper.reinitialize @argument_string.to_s.strip # @argument_string = JekyllSupport.lookup_liquid_variables @logger, liquid_context, @argument_string # Is this redundant? # @argument_string.strip! # Is this redundant? # @helper.reinitialize @argument_string # Is this redundant? render_impl rescue StandardError => e e.shorten_backtrace file_name = e.backtrace[0]&.split(':')&.first in_file_name = "in '#{file_name}' " if file_name of_page = "of '#{@page['path']}'" if @page @logger.error { "#{e.class} on line #{@line_number} #{of_page} while processing #{tag_name} #{in_file_name}- #{e.}" } binding.pry if @pry_on_standard_error # rubocop:disable Lint/Debugger raise e if @die_on_standard_error <<~END_MSG <div class='standard_error'> #{e.class} on line #{@line_number} #{of_page} while processing #{tag_name} #{in_file_name} - #{JekyllPluginHelper. e.} </div> END_MSG end |
#render_impl ⇒ Object
Jekyll plugins must override this method, not render, so their plugin can be tested more easily The following variables are predefined:
@argument_string, @config, @envs, @helper, @layout, @logger, @mode, @page, @paginator, @site, @tag_name and @theme
92 93 94 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 92 def render_impl abort "#{self.class}.render_impl for tag #{@tag_name} must be overridden, but it was not." end |
#set_error_context ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/tag/jekyll_plugin_support_tag.rb', line 96 def set_error_context return unless Object.const_defined? @error_name error_class = Object.const_get @error_name error_class.class_variable_set(:@@argument_string, @argument_string) error_class.class_variable_set(:@@line_number, @line_number) error_class.class_variable_set(:@@path, @page['path']) error_class.class_variable_set(:@@tag_name, @tag_name) end |