class ApipieDSL::Delegatable::Delegatee

Attributes

class_scope[R]

Public Class Methods

define_validators(class_scope, method_desc) click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/apipie_dsl/dsl.rb, line 391
def self.define_validators(class_scope, method_desc)
  return if method_desc.nil? || ![true, :implicitly, :explicitly].include?(ApipieDSL.configuration.validate)
  return unless [true, :implicitly].include?(ApipieDSL.configuration.validate)

  old_method = class_scope.instance_method(method_desc.name)
  old_params = old_method.parameters.map { |param| param[1] }

  class_scope.define_method(method_desc.name) do |*args|
    # apipie validations start
    if ApipieDSL.configuration.validate_value?
      documented_params = ApipieDSL.get_method_description(ApipieDSL.get_class_name(self.class), __method__)
                                   .param_descriptions
      param_values = old_params.each_with_object({}) { |param, values| values[param] = args.shift }

      documented_params.each do |param|
        param.validate(param_values[param.name]) if param_values.key?(param.name)
      end
    end
    # apipie validations end
    old_method.bind(self).call(*args)
  end
end
extension_data() click to toggle source
# File lib/apipie_dsl/dsl.rb, line 386
def self.extension_data
  @extension_data ||= []
end
instance() click to toggle source
# File lib/apipie_dsl/dsl.rb, line 382
def self.instance
  @instance_for
end
instance_for(class_scope) click to toggle source
# File lib/apipie_dsl/dsl.rb, line 374
def self.instance_for(class_scope)
  @instance_for = new(class_scope)
end
instance_reset() click to toggle source
# File lib/apipie_dsl/dsl.rb, line 378
def self.instance_reset
  @instance_for = nil
end
new(class_scope) click to toggle source
# File lib/apipie_dsl/dsl.rb, line 351
def initialize(class_scope)
  @class_scope = class_scope
end
update_method_desc(method_desc, dsl_data) click to toggle source
# File lib/apipie_dsl/dsl.rb, line 414
def self.update_method_desc(method_desc, dsl_data)
  method_desc.full_description = dsl_data[:description] || method_desc.full_description
  method_desc.short_description = dsl_data[:short_description] || method_desc.short_description
  if dsl_data[:meta]&.is_a?(Hash)
    method_desc.metadata&.merge!(dsl_data[:meta])
  else
    method_desc.metadata = dsl_data[:meta]
  end
  method_desc.show = dsl_data[:show]
  method_desc.raises += dsl_data[:raises].map do |args|
    ApipieDSL::ExceptionDescription.from_dsl_data(args)
  end
  # Update parameters
  params = dsl_data[:params].map do |args|
    ApipieDSL::ParameterDescription.from_dsl_data(method_desc, args)
  end
  ParameterDescription.merge(method_desc.plain_params, params)
end

Public Instance Methods

eval_dsl_for(context) click to toggle source
# File lib/apipie_dsl/dsl.rb, line 361
def eval_dsl_for(context)
  case context
  when :method
    apipie_eval_dsl(&@dsl_block)
  when :class
    class_description(&@dsl_block)
  when :param_group
    define_param_group(@options[:name], &@dsl_block)
  when :prop_group
    define_prop_group(@options[:name], &@dsl_block)
  end
end
with(options = {}, &block) click to toggle source
# File lib/apipie_dsl/dsl.rb, line 355
def with(options = {}, &block)
  @dsl_block = block if block_given?
  @options = options
  self
end