Sha256: da28717c23725ae2b5509783693db75a153764bdbe648c44865a8e920cc0c526

Contents?: true

Size: 1.09 KB

Versions: 15

Compression:

Stored size: 1.09 KB

Contents

module Praxis
  class Collection < Attributor::Collection
    include Types::MediaTypeCommon

    def self.of(type)
      if defined?(type::Collection)
        return type::Collection
      end

      klass = super
      klass.anonymous_type

      if type < Praxis::Types::MediaTypeCommon
        klass.member_type type
        type.const_set :Collection, klass
      else
        warn "DEPRECATION: Praxis::Collection.of() for non-MediaTypes will be unsupported in 1.0. Use Attributor::Collection.of() instead."
        Attributor::Collection.of(type)
      end

    end

    def self.member_type(type=nil)
      unless type.nil?
        @member_type = type
        @views = nil
        self.identifier(type.identifier + ';type=collection') unless type.identifier.nil?
      end

      @member_type
    end

    def self.views
      @views ||= begin
        @member_type.views.each_with_object(Hash.new) do |(name, view), hash|
          hash[name] = Praxis::CollectionView.new(name, @member_type, view)
        end
      end
    end

    def self.domain_model
      @member_type.domain_model
    end

  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
praxis-2.0.pre.9 lib/praxis/collection.rb
praxis-2.0.pre.8 lib/praxis/collection.rb
praxis-2.0.pre.7 lib/praxis/collection.rb
praxis-2.0.pre.6 lib/praxis/collection.rb
praxis-2.0.pre.5 lib/praxis/collection.rb
praxis-2.0.pre.4 lib/praxis/collection.rb
praxis-2.0.pre.3 lib/praxis/collection.rb
praxis-2.0.pre.2 lib/praxis/collection.rb
praxis-2.0.pre.1 lib/praxis/collection.rb
praxis-0.22.pre.2 lib/praxis/collection.rb
praxis-0.22.pre.1 lib/praxis/collection.rb
praxis-0.21 lib/praxis/collection.rb
praxis-0.20.1 lib/praxis/collection.rb
praxis-0.20.0 lib/praxis/collection.rb
praxis-0.19.0 lib/praxis/collection.rb