Sha256: 3abf36ee9fb230a840353abca713e7fd0db2f80864bde32f4ff7a1472350a96d

Contents?: true

Size: 1.49 KB

Versions: 4

Compression:

Stored size: 1.49 KB

Contents

module Dao
  class Context
    Attrs = %w( api route path interface args status errors params result data form validations )

    Attrs.each{|a| attr_accessor(a)}

    def Context.attrs
      Attrs
    end

    def Context.for(api, route, path, interface, params, *args)
    # setup
    #
      options = Dao.options_for!(args)

      parsed_params = Dao.parse(path, params, options)

      result = Result.new(:mode => api.mode)
      params = result.params
      params.update(parsed_params)

      args =
        if interface.arity < 1
          [params, result]
        else
          [params, result].slice(0, interface.arity)
        end

    # build the context
    #
      context = new
      context.api = api
      context.interface = interface
      context.route = route
      context.path = path
      context.args = args
      context.status = Status.default
      context.errors = Errors.new

      context.result = result
      context.data = result.data

      context.params = params
      context.form = params.form
      context.validations = params.validations

    # wire up shared state
    #
      result.route = context.route
      result.path = context.path
      result.status = context.status
      result.errors = context.errors

      params.route = context.route
      params.path = context.path
      params.status = context.status
      params.errors = context.errors

      context
    end

    include InstanceExec

    def call
      api.instance_exec(*args, &interface)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dao-3.3.0 lib/dao/api/context.rb
dao-3.2.0 lib/dao/api/context.rb
dao-3.1.2 lib/dao/api/context.rb
dao-3.1.1 lib/dao/api/context.rb