Sha256: b1c46843b01c76e76d51ae991421867840f5f3016ba36ce25f07963f927d61fb

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

module Apress
  module Documentation
    module Dsl
      module Utils
        # Private: "Распознает" идентификатор html-tag'а в SwaggerUI по переданному блоку Swagger::Blocks,
        # в который будет вставлена дополнительная информация из SwaggerDocument.
        #
        # Идея: Выполнить блок DSL swagger_path из Swagger::Blocks без вызовов реальных методов.
        #
        # Алгоритм:
        #   - Выполняем переданный блок от swagger_path, пропуская неизвестные методы
        #   - как только нашли первый вызов "key :operationId, value", запоминаем value
        #   - тоже самое для key :tags, [value]
        #   - если после выполнения блока оба значения заданы (@tag, @operation_id) возвращаем результат
        class SwaggerBindPointExtractor
          def extract(&block)
            instance_eval(&block)
            "#{@tag}_#{@operation_id}" if @tag && @operation_id
          end

          def method_missing(name, *args, &block)
            if block_given?
              instance_eval(&block)
            elsif name.to_s == 'key'
              case args[0]
              when :operationId
                @operation_id ||= args[1]
              when :tags
                @tag ||= args[1].try(:first)
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
apress-documentation-0.4.0 lib/apress/documentation/dsl/utils/swagger_bind_point_extractor.rb