Class: ApipieDSL::Delegatable::Delegatee

Inherits:
Object
  • Object
show all
Includes:
Base, Common, Klass, Method
Defined in:
lib/apipie_dsl/dsl.rb

Constant Summary

Constants included from Parameter

Parameter::SUPPORTED_TYPES

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Method

#aliases, #example, #example_for, #method, #raises, #returns, #see, #signature

Methods included from Parameter

#block, #default_param_group_scope, #define_param_group, #keyword, #kwlist, #list, #optional, #param, #param_group, #required

Methods included from Klass

#app_info, #class_description, #default_prop_group_scope, #define_prop_group, #name, #prop_group, #property, #refs, #sections

Methods included from Common

#deprecated, #desc, #dsl_versions, #meta, #short, #show, #tags

Methods included from Base

#apipie_eval_dsl, #dsl_data, #dsl_data_clear

Constructor Details

#initialize(class_scope) ⇒ Delegatee

Returns a new instance of Delegatee.



361
362
363
# File 'lib/apipie_dsl/dsl.rb', line 361

def initialize(class_scope)
  @class_scope = class_scope
end

Instance Attribute Details

#class_scopeObject

Returns the value of attribute class_scope.



359
360
361
# File 'lib/apipie_dsl/dsl.rb', line 359

def class_scope
  @class_scope
end

Class Method Details

.define_validators(class_scope, method_desc) ⇒ Object



400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
# File 'lib/apipie_dsl/dsl.rb', line 400

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_dataObject



396
397
398
# File 'lib/apipie_dsl/dsl.rb', line 396

def self.extension_data
  @extension_data ||= { methods: [] }
end

.instanceObject



392
393
394
# File 'lib/apipie_dsl/dsl.rb', line 392

def self.instance
  @instance_for
end

.instance_for(class_scope) ⇒ Object



384
385
386
# File 'lib/apipie_dsl/dsl.rb', line 384

def self.instance_for(class_scope)
  @instance_for = new(class_scope)
end

.instance_resetObject



388
389
390
# File 'lib/apipie_dsl/dsl.rb', line 388

def self.instance_reset
  @instance_for = nil
end

.update_method_desc(method_desc, dsl_data) ⇒ Object



423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
# File 'lib/apipie_dsl/dsl.rb', line 423

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.&.merge!(dsl_data[:meta])
  else
    method_desc. = 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

Instance Method Details

#eval_dsl_for(context) ⇒ Object



371
372
373
374
375
376
377
378
379
380
381
382
# File 'lib/apipie_dsl/dsl.rb', line 371

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) ⇒ Object



365
366
367
368
369
# File 'lib/apipie_dsl/dsl.rb', line 365

def with(options = {}, &block)
  @dsl_block = block if block_given?
  @options = options
  self
end