Sha256: 4ec584efc6f3dd6df7f40bb8b1970997a484af8969de4fbcbfd65df583e3147e

Contents?: true

Size: 1.08 KB

Versions: 13

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

require_relative 'route_dsl/route_builder'
require_relative 'route_dsl/application_builder'
require_relative 'application/application'

# 结构组织如下:
# - lib/application.rb: 模块实例
# - route_dsl/application_builder.rb: DSL 语法的 Builder
# - application.rb(本类): 综合以上两个类q的方法到一个类当中
module Meta
  class Application
    class << self
      extend Forwardable

      include Execution::MakeToRackMiddleware

      attr_reader :builder

      def inherited(mod)
        super

        mod.instance_variable_set(:@builder, RouteDSL::ApplicationBuilder.new)
      end

      # 读取应用的元信息
      def_delegators :app, :prefix, :routes, :applications, :execute, :to_swagger_doc

      # DSL 调用委托给内部 Builder
      builder_methods = (RouteDSL::ApplicationBuilder.public_instance_methods(false) - ['build'])
      def_delegators :builder, *builder_methods

      def app
        @app || @app = builder.build
      end

      def build(**args)
        @app = builder.build(**args)
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
meta-api-0.2.0 lib//meta/application.rb
meta-api-0.1.2 lib//meta/application.rb
meta-api-0.1.1 lib//meta/application.rb
meta-api-0.1.0 lib//meta/application.rb
meta-api-0.0.9 lib//meta/application.rb
meta-api-0.0.8 lib/meta/application.rb
meta-api-0.0.7 lib/meta/application.rb
meta-api-0.0.6 lib/meta/application.rb
meta-api-0.0.5 lib/meta/application.rb
meta-api-0.0.4 lib/meta/application.rb
meta-api-0.0.3 lib/meta/application.rb
meta-api-0.0.2 lib/meta/application.rb
meta-api-0.0.1 lib/meta/application.rb