Module: RASN1::Model::Accel

Included in:
RASN1::Model
Defined in:
lib/rasn1/model.rb

Overview

Define helper methods to define models

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#optionsHash (readonly)

Returns:

  • (Hash)


103
104
105
# File 'lib/rasn1/model.rb', line 103

def options
  @options
end

Instance Method Details

#any(name, options = {}) ⇒ Elem

Parameters:

  • name (Symbol, String)

    name of object in model

  • options (Hash) (defaults to: {})

Returns:

See Also:

  • Types::Any#initialize


216
217
218
219
220
# File 'lib/rasn1/model.rb', line 216

def any(name, options={})
  options[:name] = name
  proc = proc { |opts| Types::Any.new(options.merge(opts)) }
  @root = Elem.new(name, proc, nil)
end

#define_type_accel(accel_name, klass) ⇒ Object

Define an accelarator to access a type in a model definition

Parameters:

  • accel_name (String)
  • klass (Class)

    class to instanciate

Since:

  • 0.11.0

  • 0.12.0 track source location on error (adfoster-r7)



192
193
194
195
196
197
198
# File 'lib/rasn1/model.rb', line 192

def define_type_accel(accel_name, klass)
  if klass < Types::SequenceOf
    define_type_accel_of(accel_name, klass)
  else
    define_type_accel_base(accel_name, klass)
  end
end

#define_type_accel_base(accel_name, klass) ⇒ Object

Parameters:

  • accel_name (String, Symbol)
  • klass (Class)

Since:

  • 0.11.0

  • 0.12.0 track source location on error (adfoster-r7)



158
159
160
161
162
163
164
165
166
167
168
# File 'lib/rasn1/model.rb', line 158

def define_type_accel_base(accel_name, klass)
  singleton_class.class_eval <<-EVAL, __FILE__, __LINE__ + 1
    def #{accel_name}(name, options={}) # def sequence(name, type, options)
      options[:name] = name
      proc = proc do |opts|
        #{klass}.new(options.merge(opts)) # Sequence.new(options.merge(opts))
      end
      @root = Elem.new(name, proc, options[:content])
    end
  EVAL
end

#define_type_accel_of(accel_name, klass) ⇒ Object

Parameters:

  • accel_name (String, Symbol)
  • klass (Class)

Since:

  • 0.11.0

  • 0.12.0 track source location on error (adfoster-r7)



175
176
177
178
179
180
181
182
183
184
185
# File 'lib/rasn1/model.rb', line 175

def define_type_accel_of(accel_name, klass)
  singleton_class.class_eval <<-EVAL, __FILE__, __LINE__ + 1
    def #{accel_name}_of(name, type, options={}) # def sequence_of(name, type, options)
      options[:name] = name
      proc = proc do |opts|
        #{klass}.new(type, options.merge(opts)) # SequenceOf.new(type, options.merge(opts))
      end
      @root = Elem.new(name, proc, nil)
    end
  EVAL
end

#inherited(klass) ⇒ void

This method returns an undefined value.

On inheritance, create @root class variable

Parameters:

  • klass (Class)


147
148
149
150
151
# File 'lib/rasn1/model.rb', line 147

def inherited(klass)
  super
  root = @root
  klass.class_eval { @root = root }
end

#model(name, model_klass) ⇒ Elem

Use another model in this model

Parameters:

  • name (String, Symbol)
  • model_klass (Class)

Returns:



109
110
111
# File 'lib/rasn1/model.rb', line 109

def model(name, model_klass)
  @root = Elem.new(name, model_klass, nil)
end

#objectid(name, options = {}) ⇒ Elem

Note:

This method is named objectid and not object_id to not override Object#object_id.

Parameters:

  • name (Symbol, String)

    name of object in model

  • options (Hash) (defaults to: {})

Returns:

See Also:

  • Types::ObjectId#initialize


206
207
208
209
210
# File 'lib/rasn1/model.rb', line 206

def objectid(name, options={})
  options[:name] = name
  proc = proc { |opts| Types::ObjectId.new(options.merge(opts)) }
  @root = Elem.new(name, proc, nil)
end

#parse(str, ber: false) ⇒ Model

Parse a DER/BER encoded string

Parameters:

  • str (String)
  • ber (Boolean) (defaults to: false)

    accept BER encoding or not

Returns:

Raises:



235
236
237
238
239
# File 'lib/rasn1/model.rb', line 235

def parse(str, ber: false)
  model = new
  model.parse!(str, ber: ber)
  model
end

#root_options(options) ⇒ void

This method returns an undefined value.

Update options of root element. May be used when subclassing.

class Model1 < RASN1::Model
  sequence :seq, implicit: 0,
           content: [bool(:bool), integer(:int)]
end

# same as Model1 but with implicit tag set to 1
class Model2 < Model1
  root_options implicit: 1
end

Parameters:

  • options (Hash)

Since:

  • 0.12.0 may change name through :name



136
137
138
139
140
141
142
# File 'lib/rasn1/model.rb', line 136

def root_options(options)
  @options = options
  return unless options.key?(:name)

  @root = @root.dup
  @root.name = options[:name]
end

#typeString

Give type name (aka class name)

Returns:

  • (String)


224
225
226
227
228
# File 'lib/rasn1/model.rb', line 224

def type
  return @type if defined? @type

  @type = self.to_s.gsub(/.*::/, '')
end

#wrapper(element, options = {}) ⇒ WrapElem

Use a Wrapper around a Types::Base or a RASN1::Model object

Parameters:

Returns:

Since:

  • 0.12



118
119
120
# File 'lib/rasn1/model.rb', line 118

def wrapper(element, options={})
  @root = WrapElem.new(element, options)
end