Sha256: 1817ea0f4602561d32100dee639f170ad9b454128fece1c9f55f791ab0e8dabd

Contents?: true

Size: 1.68 KB

Versions: 53

Compression:

Stored size: 1.68 KB

Contents

module MessagePack
  class Factory
    # see ext for other methods

    # [ {type: id, class: Class(or nil), packer: arg, unpacker: arg}, ... ]
    def registered_types(selector=:both)
      packer, unpacker = registered_types_internal
      # packer: Class -> [tid, proc, arg]
      # unpacker: tid -> [klass, proc, arg]

      list = []

      case selector
      when :both
        packer.each_pair do |klass, ary|
          type = ary[0]
          packer_arg = ary[2]
          unpacker_arg = nil
          if unpacker.has_key?(type) && unpacker[type][0] == klass
            unpacker_arg = unpacker.delete(type)[2]
          end
          list << {type: type, class: klass, packer: packer_arg, unpacker: unpacker_arg}
        end

        # unpacker definition only
        unpacker.each_pair do |type, ary|
          list << {type: type, class: ary[0], packer: nil, unpacker: ary[2]}
        end

      when :packer
        packer.each_pair do |klass, ary|
          list << {type: ary[0], class: klass, packer: ary[2]}
        end

      when :unpacker
        unpacker.each_pair do |type, ary|
          list << {type: type, class: ary[0], unpacker: ary[2]}
        end

      else
        raise ArgumentError, "invalid selector #{selector}"
      end

      list.sort{|a, b| a[:type] <=> b[:type] }
    end

    def type_registered?(klass_or_type, selector=:both)
      case klass_or_type
      when Class
        klass = klass_or_type
        registered_types(selector).any?{|entry| klass <= entry[:class] }
      when Integer
        type = klass_or_type
        registered_types(selector).any?{|entry| type == entry[:type] }
      else
        raise ArgumentError, "class or type id"
      end
    end
  end
end

Version data entries

53 entries across 53 versions & 2 rubygems

Version Path
fluent-plugin-detect-memb-exceptions-0.0.2 vendor/bundle/ruby/2.0.0/gems/msgpack-1.1.0/lib/msgpack/factory.rb
fluent-plugin-detect-memb-exceptions-0.0.1 vendor/bundle/ruby/2.0.0/gems/msgpack-1.1.0/lib/msgpack/factory.rb
msgpack-1.1.0-java lib/msgpack/factory.rb
msgpack-1.1.0-x64-mingw32 lib/msgpack/factory.rb
msgpack-1.1.0-x86-mingw32 lib/msgpack/factory.rb
msgpack-1.1.0 lib/msgpack/factory.rb
msgpack-1.0.3-x86-mingw32 lib/msgpack/factory.rb
msgpack-1.0.3-x64-mingw32 lib/msgpack/factory.rb
msgpack-1.0.3-java lib/msgpack/factory.rb
msgpack-1.0.3 lib/msgpack/factory.rb
msgpack-1.0.2-x64-mingw32 lib/msgpack/factory.rb
msgpack-1.0.2-x86-mingw32 lib/msgpack/factory.rb
msgpack-1.0.2-java lib/msgpack/factory.rb
msgpack-1.0.2 lib/msgpack/factory.rb
msgpack-1.0.1-java lib/msgpack/factory.rb
msgpack-1.0.1-x64-mingw32 lib/msgpack/factory.rb
msgpack-1.0.1-x86-mingw32 lib/msgpack/factory.rb
msgpack-1.0.1 lib/msgpack/factory.rb
msgpack-1.0.0-x64-mingw32 lib/msgpack/factory.rb
msgpack-1.0.0-x86-mingw32 lib/msgpack/factory.rb