Sha256: 385318ba621a5b57cbaa86e983b209ccf51a88a0d9ab2d17c4bac619a5616253

Contents?: true

Size: 770 Bytes

Versions: 7

Compression:

Stored size: 770 Bytes

Contents

module ResoTransport
  Member = Struct.new(:name, :value, :annotation) do
    def self.from_stream(args)
      new(args["Name"], args["Value"])
    end
  end

  Enum = Struct.new(:name, :type, :is_flags) do
    def self.from_stream(args)
      new("#{args[:schema].namespace}.#{args["Name"]}", args["UnderlyingType"], args["IsFlags"])
    end
    
    def members
      @members ||= []
    end

    def parse_value(value)
      mapping.fetch(value, value)
    end

    def encode_value(value)
      "'#{mapping.invert.fetch(value, value)}'"
    end

    def mapping
      @mapping ||= generate_member_map || {}
    end

    def generate_member_map
      members.map {|mem|
        { mem.name => mem.annotation || mem.name }  
      }.reduce(:merge!)
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
reso_transport-1.4.0 lib/reso_transport/enum.rb
reso_transport-1.3.2 lib/reso_transport/enum.rb
reso_transport-1.3.1 lib/reso_transport/enum.rb
reso_transport-1.3.0 lib/reso_transport/enum.rb
reso_transport-1.2.0 lib/reso_transport/enum.rb
reso_transport-1.1.0 lib/reso_transport/enum.rb
reso_transport-1.0.0 lib/reso_transport/enum.rb