Sha256: 9c53ef1a6f6a0294dfef789cbe067c89c55485fdd55712c0732c04bd8a380265

Contents?: true

Size: 1.65 KB

Versions: 17

Compression:

Stored size: 1.65 KB

Contents

module Praxis
  module Types
    class MultipartArray < Attributor::Collection
      class PartDefinition

        attr_accessor :payload_attribute
        attr_accessor :headers_attribute
        attr_accessor :filename_attribute


        def initialize(&block)
          self.instance_eval(&block)
        end

        def update_attribute(attribute, options, block)
          attribute.options.merge!(options)
          attribute.type.attributes(**options, &block)
        end

        def create_attribute(type=Attributor::Struct, **opts, &block)
          # TODO: how do we want to handle any referenced types?
          return Attributor::Attribute.new(type, opts, &block)
        end

        def payload(type=Attributor::Struct, **opts, &block)
          #return @payload if !block_given? && type == Attributor::Struct
          @payload_attribute = create_attribute(type, **opts, &block)
        end

        def header(name, val=nil, **options)
          block = proc { header(name, val, **options) }

          if @headers_attribute
            update_attribute(@headers_attribute, options, block)
          else
            type = Attributor::Hash.of(key: String)
            @headers_attribute = create_attribute(type,
                                        dsl_compiler: Praxis::ActionDefinition::HeadersDSLCompiler,
                                        case_insensitive_load: false, # :(
                                        allow_extra: true,
                                        &block)
          end
        end

        def filename(type=String, **opts)
          @filename_attribute = create_attribute(type, **opts)
        end

      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
praxis-2.0.pre.18 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.17 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.16 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.15 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.14 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.13 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.12 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.11 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.10 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.9 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.8 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.7 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.6 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.5 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.4 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.3 lib/praxis/types/multipart_array/part_definition.rb
praxis-2.0.pre.2 lib/praxis/types/multipart_array/part_definition.rb