Class: RASN1::Types::Enumerated

Inherits:
Integer show all
Defined in:
lib/rasn1/types/enumerated.rb

Overview

ASN.1 Enumerated

An enumerated type permits to assign names to integer values. It may be defined different ways:

enum = RASN1::Types::Enumerated.new(enum: { 'a' => 0, 'b' => 1, 'c' => 2 })
enum = RASN1::Types::Enumerated.new(enum: { a: 0, b: 1, c: 2 })

Its value should be setting as an Integer or a String/symbol:

enum.value = :b
enum.value = 1   # equivalent to :b

But its value is always stored as named integer:

enum.value = :b
enum.value      # => :b
enum.value = 0
enum.value      # => :a

A EnumeratedError is raised when set value is not in enumeration.

Author:

  • Sylvain Daubert

Constant Summary

Constants inherited from Integer

Integer::TAG

Constants inherited from Primitive

Primitive::ASN1_PC

Constants inherited from Base

Base::CLASSES, Base::INDEFINITE_LENGTH, Base::MAX_TAG

Instance Attribute Summary collapse

Attributes inherited from Base

#asn1_class, #default, #name, #value

Instance Method Summary collapse

Methods inherited from Base

#==, #constructed?, #explicit?, #implicit?, #initialize_copy, #inspect, #optional?, parse, #parse!, #primitive?, #tag, #tagged?, #to_der, #type, type, #value_size

Constructor Details

#initialize(options = {}) ⇒ Enumerated #initialize(value, options = {}) ⇒ Enumerated

Returns a new instance of Enumerated.

Overloads:

  • #initialize(options = {}) ⇒ Enumerated

    Options Hash (options):

    • :enum (Hash)

      enumeration hash. Keys are names, and values are integers. This key is mandatory.

    Raises:

  • #initialize(value, options = {}) ⇒ Enumerated

    Parameters:

    • value (Object)

      value to set for this ASN.1 object

    Options Hash (options):

    • :enum (Hash)

      enumeration hash. Keys are names, and values are integers. This key is mandatory.

    Raises:

Raises:

See Also:



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/rasn1/types/enumerated.rb', line 36

def initialize(value_or_options={}, options={})
  super
  opts = value_or_options.is_a?(Hash) ? value_or_options : options

  raise EnumeratedError, 'no enumeration given' unless opts.has_key? :enum
  @enum = opts[:enum]

  case @default
  when String,Symbol
    unless @enum.has_key? @default
      raise EnumeratedError, "TAG #@name: unknwon enumerated default value #@default"
    end
  when ::Integer
    if @enum.has_value? @default
      @default = @enum.key(@default)
    else
      raise EnumeratedError, "TAG #@name: default value #@defalt not in enumeration"
    end
  when nil
  else
    raise TypeError, "TAG #@name: #{@value.class} not handled as default value"
  end
end

Instance Attribute Details

#enumHash (readonly)

Returns:

  • (Hash)


22
23
24
# File 'lib/rasn1/types/enumerated.rb', line 22

def enum
  @enum
end

Instance Method Details

#to_hHash

Returns:

  • (Hash)


100
101
102
# File 'lib/rasn1/types/enumerated.rb', line 100

def to_h
  @enum
end

#to_iInteger

Returns:



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/rasn1/types/enumerated.rb', line 82

def to_i
  case @value
  when String, Symbol
      @enum[@value]
  when ::Integer
    super
  when nil
    if @default
      @enum[@default]
    else
      0
    end
  else
    raise TypeError, "TAG #@name: #{@value.class} not handled"
  end
end

#value=(v) ⇒ String, ...

Parameters:

Returns:

  • (String, Symbol, nil)


62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/rasn1/types/enumerated.rb', line 62

def value=(v)
  case v
  when String,Symbol
    unless @enum.has_key? v
      raise EnumeratedError, "TAG #@name: unknwon enumerated value #{v}"
    end
    @value = v
  when ::Integer
    unless @enum.has_value? v
      raise EnumeratedError, "TAG #@name: #{v} not in enumeration"
    end
    @value = @enum.key(v)
  when nil
    @value = nil
  else
    raise EnumeratedError, "TAG #@name: not in enumeration"
  end
end