.yard_extensions/yard_extensions.rb
# 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