class ApipieDSL::MethodDescription

Attributes

aliases[RW]
class_description[R]
examples[R]
full_description[RW]
klass[R]
metadata[RW]
name[R]
raises[RW]
returns[RW]
see[R]
short_description[RW]
show[RW]
signature[R]

Public Class Methods

from_dsl_data(klass, args) click to toggle source
# File lib/apipie_dsl/method_description.rb, line 10
def self.from_dsl_data(klass, args)
  name, dsl_data = args
  ApipieDSL::MethodDescription.new(name, klass, dsl_data)
end
new(name, klass, dsl_data) click to toggle source
# File lib/apipie_dsl/method_description.rb, line 15
def initialize(name, klass, dsl_data)
  @name = name.to_s
  @klass = klass

  desc = dsl_data[:description] || ''
  @full_description = ApipieDSL.markup_to_html(desc)

  @short_description = dsl_data[:short_description] || ''

  @params = (dsl_data[:params] || []).map do |args|
    ApipieDSL::ParameterDescription.from_dsl_data(self, args)
  end

  @params = ApipieDSL::ParameterDescription.unify(@params)

  @raises = (dsl_data[:raises] || []).map do |args|
    ApipieDSL::ExceptionDescription.from_dsl_data(args)
  end

  # Every method in Ruby returns an onject
  dsl_data[:returns] = [{ object_of: Object }] if dsl_data[:returns].nil?

  @returns = ApipieDSL::ReturnDescription.from_dsl_data(self, dsl_data[:returns])

  @tag_list = dsl_data[:tag_list]

  @see = (dsl_data[:see] || []).map do |method, options|
    options[:scope] ||= @klass
    ApipieDSL::SeeDescription.new(method, options)
  end

  @metadata = dsl_data[:meta]

  @show = dsl_data[:show].nil? ? true : dsl_data[:show]

  @examples = (dsl_data[:examples] || []).select do |example|
    next example if example[:for].nil?

    example[:for].to_s == @name
  end

  @aliases = dsl_data[:aliases]

  @signature = dsl_data[:signature]
end

Public Instance Methods

doc_url(section = nil) click to toggle source
# File lib/apipie_dsl/method_description.rb, line 88
def doc_url(section = nil)
  crumbs = []
  crumbs << @klass.version if ApipieDSL.configuration.version_in_url
  crumbs << section if section
  crumbs << @klass.id
  crumbs << @name
  ApipieDSL.full_url(crumbs.join('/')).gsub('?', '%3F')
end
docs(section = nil, lang = nil) click to toggle source
# File lib/apipie_dsl/method_description.rb, line 97
def docs(section = nil, lang = nil)
  {
    doc_url: doc_url(section),
    name: @name,
    full_description: ApipieDSL.translate(@full_description, lang),
    short_description: ApipieDSL.translate(@short_description, lang),
    params: param_descriptions.map { |param| param.docs(lang) }.flatten,
    raises: raises.map(&:docs),
    returns: @returns.docs(lang),
    metadata: @metadata,
    see: see.map(&:docs),
    show: @show,
    examples: @examples,
    aliases: aliases,
    signature: signature
  }
end
id() click to toggle source
# File lib/apipie_dsl/method_description.rb, line 61
def id
  "#{klass.id}##{name}"
end
param_descriptions() click to toggle source
# File lib/apipie_dsl/method_description.rb, line 74
def param_descriptions
  @params.select(&:validator)
end
params() click to toggle source
# File lib/apipie_dsl/method_description.rb, line 69
def params
  param_descriptions.each_with_object({}) { |p, h| h[p.name] = p }
                    .sort.to_h
end
plain_params() click to toggle source
# File lib/apipie_dsl/method_description.rb, line 65
def plain_params
  @params
end
tag_list() click to toggle source
# File lib/apipie_dsl/method_description.rb, line 78
def tag_list
  parent = ApipieDSL.get_class_description(ApipieDSL.superclass_for(@klass.class))
  parent_tags = [parent, @klass].compact.flat_map(&:tag_list_arg)
  ApipieDSL::TagListDescription.new((parent_tags + @tag_list).uniq.compact)
end
version() click to toggle source
# File lib/apipie_dsl/method_description.rb, line 84
def version
  klass.version
end