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
- #options ⇒ Hash readonly
Instance Method Summary collapse
- #any(name, options = {}) ⇒ Elem
-
#define_type_accel(accel_name, klass) ⇒ Object
Define an accelarator to access a type in a model definition.
- #define_type_accel_base(accel_name, klass) ⇒ Object
- #define_type_accel_of(accel_name, klass) ⇒ Object
-
#inherited(klass) ⇒ void
On inheritance, create @root class variable.
-
#model(name, model_klass) ⇒ Elem
Use another model in this model.
- #objectid(name, options = {}) ⇒ Elem
-
#parse(str, ber: false) ⇒ Model
Parse a DER/BER encoded string.
-
#root_options(options) ⇒ void
Update options of root element.
-
#type ⇒ String
Give type name (aka class name).
-
#wrapper(element, options = {}) ⇒ WrapElem
Use a Wrapper around a Types::Base or a RASN1::Model object.
Instance Attribute Details
#options ⇒ Hash (readonly)
107 108 109 |
# File 'lib/rasn1/model.rb', line 107 def @options end |
Instance Method Details
#any(name, options = {}) ⇒ Elem
220 221 222 223 224 |
# File 'lib/rasn1/model.rb', line 220 def any(name, ={}) [:name] = name proc = proc { |opts| Types::Any.new(.merge(opts)) } @root = BaseElem.new(name, proc, nil) end |
#define_type_accel(accel_name, klass) ⇒ Object
Define an accelarator to access a type in a model definition
196 197 198 199 200 201 202 |
# File 'lib/rasn1/model.rb', line 196 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
162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/rasn1/model.rb', line 162 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 = BaseElem.new(name, proc, options[:content]) end EVAL end |
#define_type_accel_of(accel_name, klass) ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/rasn1/model.rb', line 179 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 = BaseElem.new(name, proc, nil) end EVAL end |
#inherited(klass) ⇒ void
This method returns an undefined value.
On inheritance, create @root class variable
151 152 153 154 155 |
# File 'lib/rasn1/model.rb', line 151 def inherited(klass) super root = @root klass.class_eval { @root = root } end |
#model(name, model_klass) ⇒ Elem
Use another model in this model
113 114 115 |
# File 'lib/rasn1/model.rb', line 113 def model(name, model_klass) @root = ModelElem.new(name, model_klass) end |
#objectid(name, options = {}) ⇒ Elem
Note:
This method is named objectid
and not object_id
to not override Object#object_id.
210 211 212 213 214 |
# File 'lib/rasn1/model.rb', line 210 def objectid(name, ={}) [:name] = name proc = proc { |opts| Types::ObjectId.new(.merge(opts)) } @root = BaseElem.new(name, proc, nil) end |
#parse(str, ber: false) ⇒ Model
Parse a DER/BER encoded string
239 240 241 242 243 |
# File 'lib/rasn1/model.rb', line 239 def parse(str, ber: false) model = new model.parse!(str, ber: ber) model end |
#root_options(options) ⇒ void
140 141 142 143 144 145 146 |
# File 'lib/rasn1/model.rb', line 140 def () @options = return unless .key?(:name) @root = @root.dup @root.name = [:name] end |
#type ⇒ String
Give type name (aka class name)
228 229 230 231 232 |
# File 'lib/rasn1/model.rb', line 228 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
122 123 124 |
# File 'lib/rasn1/model.rb', line 122 def wrapper(element, ={}) @root = WrapElem.new(element, ) end |