Sha256: 809d5b065363d95b9189a6c87e7e5d67732892efa11bd03a4c954160ec9f73da

Contents?: true

Size: 1.35 KB

Versions: 5

Compression:

Stored size: 1.35 KB

Contents

module YARD
  module Handlers
    module Ruby

      # Sets visibility of a constant (class, module, const)
      class PrivateConstantHandler < YARD::Handlers::Ruby::Base
        handles method_call(:private_constant)
        namespace_only

        process do
          errors = []
          statement.parameters.each do |param|
            next unless AstNode === param
            begin
              privatize_constant(param)
            rescue UndocumentableError => err
              errors << err.message
            end
          end
          if errors.size > 0
            msg = errors.size == 1 ? ": #{errors[0]}" : "s: #{errors.join(", ")}"
            raise UndocumentableError, "private constant#{msg} for #{namespace.path}"
          end
        end

        private

        def privatize_constant(node)
          if node.literal? || (node.type == :var_ref && node[0].type == :const)
            node = node.jump(:tstring_content, :const)
            const = Proxy.new(namespace, node[0])
            ensure_loaded!(const)
            const.visibility = :private
          else
            raise UndocumentableError, "invalid argument to private_constant: #{node.source}"
          end
        rescue NamespaceMissingError
          raise UndocumentableError, "private visibility set on unrecognized constant: #{node[0]}"
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
abaci-0.3.0 vendor/bundle/gems/yard-0.9.2/lib/yard/handlers/ruby/private_constant_handler.rb
yard-0.9.5 lib/yard/handlers/ruby/private_constant_handler.rb
yard-0.9.4 lib/yard/handlers/ruby/private_constant_handler.rb
yard-0.9.3 lib/yard/handlers/ruby/private_constant_handler.rb
yard-0.9.2 lib/yard/handlers/ruby/private_constant_handler.rb