decko-commons/decko

View on GitHub
.yard_extensions/yard_extensions.rb

Summary

Maintainability
A
0 mins
Test Coverage
# handles methods that define method with block
module CardDSLHandler
  def process_set_method method
    process do
      name = statement.parameters.first.jump(:tstring_content, :ident).source
      object = YARD::CodeObjects::MethodObject.new namespace, "#{method}: #{name}"
      register object
      if (block = statement.last.last)&.is_a? Proc
        parse_block block, owner: object
      end

      # modify the object
      object.dynamic = true

      # add custom metadata to the object
      object["custom_field"] = "generated by #{method}"
    end
  end
end

# handler for #event definitions
class CardEventHandler < YARD::Handlers::Ruby::Base
  extend CardDSLHandler
  handles method_call :event
  namespace_only
  process_set_method :event
end

# handler for #view definitions
class CardViewHandler < YARD::Handlers::Ruby::Base
  extend CardDSLHandler
  handles method_call :view
  namespace_only
  process_set_method :view
end