Sha256: 953521230222378cf77c1a6e99723c9a0bb98a5baca3f6cf773e934eec9f3388

Contents?: true

Size: 919 Bytes

Versions: 13

Compression:

Stored size: 919 Bytes

Contents

# frozen_string_literal: true

module Meta
  module RouteDSL
    class ChainBuilder
      def initialize
        @blocks = []
      end

      def build
        blocks = @blocks
        proc do
          blocks.each { |b| instance_exec &b }
        end
      end

      def do_any(&block)
        @blocks << block

        self
      end

      def resource(&block)
        do_any {
          resource = instance_exec(&block)

          raise Errors::ResourceNotFound if resource.nil?

          # 为 execution 添加一个 resource 方法
          define_singleton_method(:resource) { resource }
        }
      end

      def authorize(&block)
        do_any {
          permitted = instance_eval(&block)
          raise Errors::NotAuthorized unless permitted
        }
      end

      def set_status(&block)
        do_any {
          response.status = instance_exec(&block)
        }
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

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