openhab-jrubyscripting 5.0.0.rc6 → 5.0.0.rc9
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/lib/openhab/core.rb +1 -1
 - data/lib/openhab/dsl/version.rb +1 -1
 - data/lib/openhab/rspec/helpers.rb +18 -4
 - metadata +1 -4
 - data/lib/openhab/yard/base_helper.rb +0 -46
 - data/lib/openhab/yard/markdown_directive.rb +0 -125
 - data/lib/openhab/yard/markdown_helper.rb +0 -99
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b818f8062ce950e265819455075b42fd1cf2d1fc6270b57f547b3e93f19f0656
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: '08c396633d12172da0751719196247319731205b9ee6704ea4844bd3709321aa'
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ac9760ebe37190c941c973a4526ec8b8a7a2b1584585f324f80c531849f879f7cb471bcbac1beae02f3412fb6822fbb7e50e343e6e015e5ddbb9f5b552712a70
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: bc0ec52bafce17c3f090984370d98695fa49bfc1799293d1d6f421764f7a8ecfbe814c6d2b7bd6b03f023c0daefa517f3595bebcd7c0af53d0ce53ee153d4360
         
     | 
    
        data/lib/openhab/core.rb
    CHANGED
    
    
    
        data/lib/openhab/dsl/version.rb
    CHANGED
    
    
| 
         @@ -184,7 +184,7 @@ module OpenHAB 
     | 
|
| 
       184 
184 
     | 
    
         
             
                  def autorequires
         
     | 
| 
       185 
185 
     | 
    
         
             
                    ENV["RUBYLIB"] ||= ""
         
     | 
| 
       186 
186 
     | 
    
         
             
                    ENV["RUBYLIB"] += ":" unless ENV["RUBYLIB"].empty?
         
     | 
| 
       187 
     | 
    
         
            -
                    ENV["RUBYLIB"] +=  
     | 
| 
      
 187 
     | 
    
         
            +
                    ENV["RUBYLIB"] += rubylib_dirs.join(":")
         
     | 
| 
       188 
188 
     | 
    
         | 
| 
       189 
189 
     | 
    
         
             
                    $LOAD_PATH.unshift(*ENV["RUBYLIB"]
         
     | 
| 
       190 
190 
     | 
    
         
             
                      .split(File::PATH_SEPARATOR)
         
     | 
| 
         @@ -265,10 +265,15 @@ module OpenHAB 
     | 
|
| 
       265 
265 
     | 
    
         
             
                  # @return [void]
         
     | 
| 
       266 
266 
     | 
    
         
             
                  #
         
     | 
| 
       267 
267 
     | 
    
         
             
                  def load_rules
         
     | 
| 
       268 
     | 
    
         
            -
                    automation_path = "#{org.openhab.core.OpenHAB.config_folder}/automation/ 
     | 
| 
      
 268 
     | 
    
         
            +
                    automation_path = "#{org.openhab.core.OpenHAB.config_folder}/automation/ruby"
         
     | 
| 
      
 269 
     | 
    
         
            +
                    lib_dirs = rubylib_dirs.map { |d| File.join(d, "") }
         
     | 
| 
      
 270 
     | 
    
         
            +
                    lib_dirs << File.join(gem_home, "")
         
     | 
| 
       269 
271 
     | 
    
         | 
| 
       270 
272 
     | 
    
         
             
                    SuspendRules.suspend_rules do
         
     | 
| 
       271 
273 
     | 
    
         
             
                      files = Dir["#{automation_path}/**/*.rb"]
         
     | 
| 
      
 274 
     | 
    
         
            +
                      files.reject! do |f|
         
     | 
| 
      
 275 
     | 
    
         
            +
                        lib_dirs.any? { |l| f.start_with?(l) }
         
     | 
| 
      
 276 
     | 
    
         
            +
                      end
         
     | 
| 
       272 
277 
     | 
    
         
             
                      files.sort_by { |f| [get_start_level(f), f] }.each do |f|
         
     | 
| 
       273 
278 
     | 
    
         
             
                        load f
         
     | 
| 
       274 
279 
     | 
    
         
             
                      rescue Exception => e
         
     | 
| 
         @@ -376,8 +381,17 @@ module OpenHAB 
     | 
|
| 
       376 
381 
     | 
    
         
             
                    ca.get_configuration("org.openhab.automation.jrubyscripting", nil)&.properties
         
     | 
| 
       377 
382 
     | 
    
         
             
                  end
         
     | 
| 
       378 
383 
     | 
    
         | 
| 
       379 
     | 
    
         
            -
                  def  
     | 
| 
       380 
     | 
    
         
            -
                    jrubyscripting_config&.get(" 
     | 
| 
      
 384 
     | 
    
         
            +
                  def gem_home
         
     | 
| 
      
 385 
     | 
    
         
            +
                    gem_home = jrubyscripting_config&.get("gem_home")
         
     | 
| 
      
 386 
     | 
    
         
            +
                    return "#{org.openhab.core.OpenHAB.config_folder}/automation/ruby/.gem" unless gem_home
         
     | 
| 
      
 387 
     | 
    
         
            +
             
     | 
| 
      
 388 
     | 
    
         
            +
                    # strip everything after the first {
         
     | 
| 
      
 389 
     | 
    
         
            +
                    gem_home.split("{", 2).first
         
     | 
| 
      
 390 
     | 
    
         
            +
                  end
         
     | 
| 
      
 391 
     | 
    
         
            +
             
     | 
| 
      
 392 
     | 
    
         
            +
                  def rubylib_dirs
         
     | 
| 
      
 393 
     | 
    
         
            +
                    jrubyscripting_config&.get("rubylib")&.split(File::PATH_SEPARATOR) ||
         
     | 
| 
      
 394 
     | 
    
         
            +
                      ["#{org.openhab.core.OpenHAB.config_folder}/automation/ruby/lib"]
         
     | 
| 
       381 
395 
     | 
    
         
             
                  end
         
     | 
| 
       382 
396 
     | 
    
         | 
| 
       383 
397 
     | 
    
         
             
                  def get_start_level(file)
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: openhab-jrubyscripting
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 5.0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 5.0.0.rc9
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Cody Cutrer
         
     | 
| 
         @@ -488,7 +488,6 @@ files: 
     | 
|
| 
       488 
488 
     | 
    
         
             
            - lib/openhab/rspec/shell.rb
         
     | 
| 
       489 
489 
     | 
    
         
             
            - lib/openhab/rspec/suspend_rules.rb
         
     | 
| 
       490 
490 
     | 
    
         
             
            - lib/openhab/yard.rb
         
     | 
| 
       491 
     | 
    
         
            -
            - lib/openhab/yard/base_helper.rb
         
     | 
| 
       492 
491 
     | 
    
         
             
            - lib/openhab/yard/cli/stats.rb
         
     | 
| 
       493 
492 
     | 
    
         
             
            - lib/openhab/yard/code_objects/group_object.rb
         
     | 
| 
       494 
493 
     | 
    
         
             
            - lib/openhab/yard/code_objects/java/base.rb
         
     | 
| 
         @@ -503,8 +502,6 @@ files: 
     | 
|
| 
       503 
502 
     | 
    
         
             
            - lib/openhab/yard/handlers/jruby/java_import_handler.rb
         
     | 
| 
       504 
503 
     | 
    
         
             
            - lib/openhab/yard/handlers/jruby/mixin_handler.rb
         
     | 
| 
       505 
504 
     | 
    
         
             
            - lib/openhab/yard/html_helper.rb
         
     | 
| 
       506 
     | 
    
         
            -
            - lib/openhab/yard/markdown_directive.rb
         
     | 
| 
       507 
     | 
    
         
            -
            - lib/openhab/yard/markdown_helper.rb
         
     | 
| 
       508 
505 
     | 
    
         
             
            - lib/openhab/yard/tags/constant_directive.rb
         
     | 
| 
       509 
506 
     | 
    
         
             
            - lib/openhab/yard/tags/group_directive.rb
         
     | 
| 
       510 
507 
     | 
    
         
             
            - lib/openhab/yard/tags/library.rb
         
     | 
| 
         @@ -1,46 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "nokogiri"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            module OpenHAB
         
     | 
| 
       6 
     | 
    
         
            -
              module YARD
         
     | 
| 
       7 
     | 
    
         
            -
                # @!visibility private
         
     | 
| 
       8 
     | 
    
         
            -
                module BaseHelper
         
     | 
| 
       9 
     | 
    
         
            -
                  def preprocess(text)
         
     | 
| 
       10 
     | 
    
         
            -
                    html = Nokogiri::HTML5.fragment(text)
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                    context = if ENV["ADDON"]
         
     | 
| 
       13 
     | 
    
         
            -
                                :addon
         
     | 
| 
       14 
     | 
    
         
            -
                              else
         
     | 
| 
       15 
     | 
    
         
            -
                                :yard
         
     | 
| 
       16 
     | 
    
         
            -
                              end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                    # process directives on which content is supposed to be included in this context
         
     | 
| 
       19 
     | 
    
         
            -
                    node = html.children.first
         
     | 
| 
       20 
     | 
    
         
            -
                    loop do
         
     | 
| 
       21 
     | 
    
         
            -
                      break unless node
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                      next_node = node.next
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                      if node.comment? && (directive = MarkdownDirective.new(node)).directive?
         
     | 
| 
       26 
     | 
    
         
            -
                        next_node = directive.process(context) || next_node
         
     | 
| 
       27 
     | 
    
         
            -
                      end
         
     | 
| 
       28 
     | 
    
         
            -
                      node = next_node
         
     | 
| 
       29 
     | 
    
         
            -
                    end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                    html.to_s
         
     | 
| 
       32 
     | 
    
         
            -
                  end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                  def link_object(obj, title = nil, *)
         
     | 
| 
       35 
     | 
    
         
            -
                    ::YARD::Handlers::JRuby::Base.infer_java_class(obj) if obj.is_a?(String)
         
     | 
| 
       36 
     | 
    
         
            -
                    obj = ::YARD::Registry.resolve(object, obj, true, true) if obj.is_a?(String)
         
     | 
| 
       37 
     | 
    
         
            -
                    if obj.is_a?(::YARD::CodeObjects::Java::Base) && (see = obj.docstring.tag(:see))
         
     | 
| 
       38 
     | 
    
         
            -
                      # link to the first see tag
         
     | 
| 
       39 
     | 
    
         
            -
                      return linkify(see.name, title&.to_s || see.text)
         
     | 
| 
       40 
     | 
    
         
            -
                    end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                    super
         
     | 
| 
       43 
     | 
    
         
            -
                  end
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
              end
         
     | 
| 
       46 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,125 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "nokogiri"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            module OpenHAB
         
     | 
| 
       6 
     | 
    
         
            -
              module YARD
         
     | 
| 
       7 
     | 
    
         
            -
                # @!visibility private
         
     | 
| 
       8 
     | 
    
         
            -
                class MarkdownDirective
         
     | 
| 
       9 
     | 
    
         
            -
                  attr_reader :comment, :context
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  def initialize(comment)
         
     | 
| 
       12 
     | 
    
         
            -
                    @comment = comment
         
     | 
| 
       13 
     | 
    
         
            -
                    @lines = comment.text.split("\n")
         
     | 
| 
       14 
     | 
    
         
            -
                    directive_text = @lines.first.strip
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                    @multiline = @lines.length > 1
         
     | 
| 
       17 
     | 
    
         
            -
                    @directive = false
         
     | 
| 
       18 
     | 
    
         
            -
                    return unless (match = directive_text.match(%r{^<(/)?(!)?([a-z]+)-only>$}))
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                    @closing = match[1]
         
     | 
| 
       21 
     | 
    
         
            -
                    @context = match[3].to_sym
         
     | 
| 
       22 
     | 
    
         
            -
                    @inverted = match[2]
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                    if closing? && multiline?
         
     | 
| 
       25 
     | 
    
         
            -
                      log.warn "In file `#{file}':#{line}: Multiline closing directives are not allowed (#{directive_text})."
         
     | 
| 
       26 
     | 
    
         
            -
                      return
         
     | 
| 
       27 
     | 
    
         
            -
                    end
         
     | 
| 
       28 
     | 
    
         
            -
                    @directive = true
         
     | 
| 
       29 
     | 
    
         
            -
                  end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                  def directive?
         
     | 
| 
       32 
     | 
    
         
            -
                    @directive
         
     | 
| 
       33 
     | 
    
         
            -
                  end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                  def multiline?
         
     | 
| 
       36 
     | 
    
         
            -
                    @multiline
         
     | 
| 
       37 
     | 
    
         
            -
                  end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                  def closing?
         
     | 
| 
       40 
     | 
    
         
            -
                    @closing
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                  def inverted?
         
     | 
| 
       44 
     | 
    
         
            -
                    @inverted
         
     | 
| 
       45 
     | 
    
         
            -
                  end
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                  def match?(context)
         
     | 
| 
       48 
     | 
    
         
            -
                    result = context == self.context
         
     | 
| 
       49 
     | 
    
         
            -
                    result = !result if inverted?
         
     | 
| 
       50 
     | 
    
         
            -
                    result
         
     | 
| 
       51 
     | 
    
         
            -
                  end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                  def closing_directive
         
     | 
| 
       54 
     | 
    
         
            -
                    return nil if multiline?
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                    unless instance_variable_defined?(:@closing_directive)
         
     | 
| 
       57 
     | 
    
         
            -
                      next_node = @comment.next
         
     | 
| 
       58 
     | 
    
         
            -
                      loop do
         
     | 
| 
       59 
     | 
    
         
            -
                        return @closing_directive = nil unless next_node
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                        if next_node.comment?
         
     | 
| 
       62 
     | 
    
         
            -
                          directive = MarkdownDirective.new(next_node)
         
     | 
| 
       63 
     | 
    
         
            -
                          if directive.directive? &&
         
     | 
| 
       64 
     | 
    
         
            -
                             directive.closing? &&
         
     | 
| 
       65 
     | 
    
         
            -
                             directive.context == context &&
         
     | 
| 
       66 
     | 
    
         
            -
                             directive.inverted? == inverted?
         
     | 
| 
       67 
     | 
    
         
            -
                            return @closing_directive = next_node
         
     | 
| 
       68 
     | 
    
         
            -
                          end
         
     | 
| 
       69 
     | 
    
         
            -
                        end
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
                        next_node = next_node.next
         
     | 
| 
       72 
     | 
    
         
            -
                      end
         
     | 
| 
       73 
     | 
    
         
            -
                    end
         
     | 
| 
       74 
     | 
    
         
            -
                    @closing_directive
         
     | 
| 
       75 
     | 
    
         
            -
                  end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                  def process(context)
         
     | 
| 
       78 
     | 
    
         
            -
                    return unless directive?
         
     | 
| 
       79 
     | 
    
         
            -
                    return if closing?
         
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
                    matched = match?(context)
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                    # if it's a matched multiline, extract the contents and insert them directly,
         
     | 
| 
       84 
     | 
    
         
            -
                    # and remove the comment
         
     | 
| 
       85 
     | 
    
         
            -
                    if multiline?
         
     | 
| 
       86 
     | 
    
         
            -
                      result = comment.next
         
     | 
| 
       87 
     | 
    
         
            -
                      comment.before(Nokogiri::HTML5.fragment(@lines[1..].join("\n"))) if matched
         
     | 
| 
       88 
     | 
    
         
            -
                      comment.remove
         
     | 
| 
       89 
     | 
    
         
            -
                      return result
         
     | 
| 
       90 
     | 
    
         
            -
                    end
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
                    unless closing_directive
         
     | 
| 
       93 
     | 
    
         
            -
                      log.warn "In file `#{file}':#{line}: Unmatched directive <#{"!" if inverted?}#{context}-only>."
         
     | 
| 
       94 
     | 
    
         
            -
                      return
         
     | 
| 
       95 
     | 
    
         
            -
                    end
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                    result = closing_directive.next
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                    unless matched
         
     | 
| 
       100 
     | 
    
         
            -
                      # remove all nodes between the opening and closing directives
         
     | 
| 
       101 
     | 
    
         
            -
                      comment.next.remove while comment.next != closing_directive
         
     | 
| 
       102 
     | 
    
         
            -
                    end
         
     | 
| 
       103 
     | 
    
         
            -
                    # now remove the directives themselves
         
     | 
| 
       104 
     | 
    
         
            -
                    closing_directive.remove
         
     | 
| 
       105 
     | 
    
         
            -
                    comment.remove
         
     | 
| 
       106 
     | 
    
         
            -
                    result
         
     | 
| 
       107 
     | 
    
         
            -
                  end
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                  def file
         
     | 
| 
       110 
     | 
    
         
            -
                    ((defined?(@file) && @file) ? @file.filename : object.file) || "(unknown)"
         
     | 
| 
       111 
     | 
    
         
            -
                  end
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
                  def line
         
     | 
| 
       114 
     | 
    
         
            -
                    return @line if instance_variable_defined?(@line)
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                    @line = (if defined?(@file) && @file
         
     | 
| 
       117 
     | 
    
         
            -
                               1
         
     | 
| 
       118 
     | 
    
         
            -
                             else
         
     | 
| 
       119 
     | 
    
         
            -
                               (object.docstring.line_range ? object.docstring.line_range.first : 1)
         
     | 
| 
       120 
     | 
    
         
            -
                             end) + (match ? $`.count("\n") : 0)
         
     | 
| 
       121 
     | 
    
         
            -
                    @line += comment.line - 1
         
     | 
| 
       122 
     | 
    
         
            -
                  end
         
     | 
| 
       123 
     | 
    
         
            -
                end
         
     | 
| 
       124 
     | 
    
         
            -
              end
         
     | 
| 
       125 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,99 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "nokogiri"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            module OpenHAB
         
     | 
| 
       6 
     | 
    
         
            -
              module YARD
         
     | 
| 
       7 
     | 
    
         
            -
                # @!visibility private
         
     | 
| 
       8 
     | 
    
         
            -
                module MarkdownHelper
         
     | 
| 
       9 
     | 
    
         
            -
                  # @group Linking Objects and URLs
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  def diskfile
         
     | 
| 
       12 
     | 
    
         
            -
                    preprocess(super)
         
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  # mostly copied from HTMLHelper
         
     | 
| 
       16 
     | 
    
         
            -
                  def resolve_links(text)
         
     | 
| 
       17 
     | 
    
         
            -
                    blockquotes = false
         
     | 
| 
       18 
     | 
    
         
            -
                    text.gsub(%r{(```)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=[\W<]|.+</|$)}m) do |str|
         
     | 
| 
       19 
     | 
    
         
            -
                      blockquote = $1
         
     | 
| 
       20 
     | 
    
         
            -
                      escape = $2
         
     | 
| 
       21 
     | 
    
         
            -
                      name = $3
         
     | 
| 
       22 
     | 
    
         
            -
                      title = $4
         
     | 
| 
       23 
     | 
    
         
            -
                      match = $&
         
     | 
| 
       24 
     | 
    
         
            -
                      if blockquote
         
     | 
| 
       25 
     | 
    
         
            -
                        blockquotes = !blockquotes
         
     | 
| 
       26 
     | 
    
         
            -
                        next str
         
     | 
| 
       27 
     | 
    
         
            -
                      end
         
     | 
| 
       28 
     | 
    
         
            -
                      next str if blockquotes
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                      next(match[1..-1]) if escape
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                      next(match) if name[0, 1] == '|'
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                      if object.is_a?(String)
         
     | 
| 
       35 
     | 
    
         
            -
                        object
         
     | 
| 
       36 
     | 
    
         
            -
                      else
         
     | 
| 
       37 
     | 
    
         
            -
                        link = linkify(name, title)
         
     | 
| 
       38 
     | 
    
         
            -
                        if (link == name || link == title) && (name + ' ' + link !~ /\A<a\s.*>/)
         
     | 
| 
       39 
     | 
    
         
            -
                          match = /(.+)?(\{#{Regexp.quote name}(?:\s.*?)?\})(.+)?/.match(text)
         
     | 
| 
       40 
     | 
    
         
            -
                          file = (defined?(@file) && @file ? @file.filename : object.file) || '(unknown)'
         
     | 
| 
       41 
     | 
    
         
            -
                          line = (defined?(@file) && @file ? 1 : (object.docstring.line_range ? object.docstring.line_range.first : 1)) + (match ? $`.count("\n") : 0)
         
     | 
| 
       42 
     | 
    
         
            -
                          log.warn "In file `#{file}':#{line}: Cannot resolve link to #{name} from text" + (match ? ":" : ".") +
         
     | 
| 
       43 
     | 
    
         
            -
                                   "\n\t" + (match[1] ? '...' : '') + match[2].delete("\n") + (match[3] ? '...' : '') if match
         
     | 
| 
       44 
     | 
    
         
            -
                        end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                        link
         
     | 
| 
       47 
     | 
    
         
            -
                      end
         
     | 
| 
       48 
     | 
    
         
            -
                    end
         
     | 
| 
       49 
     | 
    
         
            -
                  end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                  # mostly copied from HTMLHelper
         
     | 
| 
       52 
     | 
    
         
            -
                  def link_object(obj, title = nil, anchor = nil, relative = true)
         
     | 
| 
       53 
     | 
    
         
            -
                    return title if obj.nil?
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                    obj = Registry.resolve(object, obj, true, true) if obj.is_a?(String)
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                    was_const = false
         
     | 
| 
       58 
     | 
    
         
            -
                    # Re-link references to constants that are aliases to their target. But keep
         
     | 
| 
       59 
     | 
    
         
            -
                    # their current title.
         
     | 
| 
       60 
     | 
    
         
            -
                    while obj.is_a?(CodeObjects::ConstantObject) && obj.target
         
     | 
| 
       61 
     | 
    
         
            -
                      title ||= h(object.relative_path(obj)).to_s
         
     | 
| 
       62 
     | 
    
         
            -
                      was_const = true
         
     | 
| 
       63 
     | 
    
         
            -
                      obj = obj.target
         
     | 
| 
       64 
     | 
    
         
            -
                    end
         
     | 
| 
       65 
     | 
    
         
            -
                    return link_object(obj, title, anchor, relative) if was_const
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                    title = if title
         
     | 
| 
       68 
     | 
    
         
            -
                              title.to_s
         
     | 
| 
       69 
     | 
    
         
            -
                            elsif object.is_a?(CodeObjects::Base)
         
     | 
| 
       70 
     | 
    
         
            -
                              # Check if we're linking to a class method in the current
         
     | 
| 
       71 
     | 
    
         
            -
                              # object. If we are, create a title in the format of
         
     | 
| 
       72 
     | 
    
         
            -
                              # "CurrentClass.method_name"
         
     | 
| 
       73 
     | 
    
         
            -
                              if obj.is_a?(CodeObjects::MethodObject) && obj.scope == :class && obj.parent == object
         
     | 
| 
       74 
     | 
    
         
            -
                                h([object.name, obj.sep, obj.name].join)
         
     | 
| 
       75 
     | 
    
         
            -
                              elsif obj.title != obj.path
         
     | 
| 
       76 
     | 
    
         
            -
                                h(obj.title)
         
     | 
| 
       77 
     | 
    
         
            -
                              else
         
     | 
| 
       78 
     | 
    
         
            -
                                h(object.relative_path(obj))
         
     | 
| 
       79 
     | 
    
         
            -
                              end
         
     | 
| 
       80 
     | 
    
         
            -
                            else
         
     | 
| 
       81 
     | 
    
         
            -
                              h(obj.title)
         
     | 
| 
       82 
     | 
    
         
            -
                            end
         
     | 
| 
       83 
     | 
    
         
            -
                    return title unless serializer
         
     | 
| 
       84 
     | 
    
         
            -
                    return title if obj.is_a?(CodeObjects::Proxy)
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                    link = url_for(obj, anchor, relative)
         
     | 
| 
       87 
     | 
    
         
            -
                    link ? link_url(link, title, title: h("#{obj.title} (#{obj.type})")) : title
         
     | 
| 
       88 
     | 
    
         
            -
                  rescue Parser::UndocumentableError
         
     | 
| 
       89 
     | 
    
         
            -
                    log.warn "The namespace of link #{obj.inspect} is a constant or invalid."
         
     | 
| 
       90 
     | 
    
         
            -
                    title || obj.to_s
         
     | 
| 
       91 
     | 
    
         
            -
                  end
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
                  def link_url(url, title = nil, _params = nil)
         
     | 
| 
       94 
     | 
    
         
            -
                    title ||= url
         
     | 
| 
       95 
     | 
    
         
            -
                    "[#{title}](#{url})"
         
     | 
| 
       96 
     | 
    
         
            -
                  end
         
     | 
| 
       97 
     | 
    
         
            -
                end
         
     | 
| 
       98 
     | 
    
         
            -
              end
         
     | 
| 
       99 
     | 
    
         
            -
            end
         
     |