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)
117 118 119 |
# File 'lib/rasn1/model.rb', line 117 def @options end |
Instance Method Details
#any(name, options = {}) ⇒ Elem
230 231 232 233 234 |
# File 'lib/rasn1/model.rb', line 230 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
206 207 208 209 210 211 212 |
# File 'lib/rasn1/model.rb', line 206 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
172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/rasn1/model.rb', line 172 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
189 190 191 192 193 194 195 196 197 198 199 |
# File 'lib/rasn1/model.rb', line 189 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
161 162 163 164 165 |
# File 'lib/rasn1/model.rb', line 161 def inherited(klass) super root = @root klass.class_eval { @root = root } end |
#model(name, model_klass) ⇒ Elem
Use another model in this model
123 124 125 |
# File 'lib/rasn1/model.rb', line 123 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.
220 221 222 223 224 |
# File 'lib/rasn1/model.rb', line 220 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
249 250 251 252 253 |
# File 'lib/rasn1/model.rb', line 249 def parse(str, ber: false) model = new model.parse!(str, ber: ber) model end |
#root_options(options) ⇒ void
150 151 152 153 154 155 156 |
# File 'lib/rasn1/model.rb', line 150 def () @options = return unless .key?(:name) @root = @root.dup @root.name = [:name] end |
#type ⇒ String
Give type name (aka class name)
238 239 240 241 242 |
# File 'lib/rasn1/model.rb', line 238 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
132 133 134 |
# File 'lib/rasn1/model.rb', line 132 def wrapper(element, ={}) @root = WrapElem.new(element, ) end |