rasn1 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +10 -0
- data/lib/rasn1/model.rb +39 -11
- data/lib/rasn1/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4242a3051584aaa4b2f6d2603e45b1d516da098
|
4
|
+
data.tar.gz: fe8a39c6b026c8d408cc97417ab470b2cd8c8c88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ef413c1ce1070a8d0d647e66a8022ae38947a71cb8d2b2ce1947379162459fe94fe6d1e53f2b4656d336e48efc66db22b33027010273b22b517ee2994048009
|
7
|
+
data.tar.gz: 2998c9805c9e0f017b5e1cb994ddb26de41e393f670da34429de4104eaa319cb7fdeeefd60badd75c08aacb3b43be6f0cd9c915e3d2a59670987066be3986100
|
data/.travis.yml
ADDED
data/lib/rasn1/model.rb
CHANGED
@@ -68,6 +68,32 @@ module RASN1
|
|
68
68
|
@root = [name, model_klass]
|
69
69
|
end
|
70
70
|
|
71
|
+
# Update options of root element.
|
72
|
+
# May be used when subclassing.
|
73
|
+
# class Model1 < RASN1::Model
|
74
|
+
# sequence :seq, implicit: 0,
|
75
|
+
# content: [bool(:bool), integer(:int)]
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# # same as Model1 but with implicit tag set to 1
|
79
|
+
# class Model2 < Model1
|
80
|
+
# root_options implicit: 1
|
81
|
+
# end
|
82
|
+
# @param [Hash] options
|
83
|
+
# @return [void]
|
84
|
+
def root_options(options)
|
85
|
+
@options = options
|
86
|
+
end
|
87
|
+
|
88
|
+
# On inheritance, create +@root+ class variable
|
89
|
+
# @param [Class] klass
|
90
|
+
# @return [void]
|
91
|
+
def inherited(klass)
|
92
|
+
super
|
93
|
+
root = @root
|
94
|
+
klass.class_eval { @root = root }
|
95
|
+
end
|
96
|
+
|
71
97
|
# @method sequence(name, options)
|
72
98
|
# @see Types::Sequence#initialize
|
73
99
|
# @method set(name, options)
|
@@ -76,8 +102,8 @@ module RASN1
|
|
76
102
|
# @see Types::Choice#initialize
|
77
103
|
%w(sequence set choice).each do |type|
|
78
104
|
class_eval "def #{type}(name, options={})\n" \
|
79
|
-
" proc = Proc.new do
|
80
|
-
" Types::#{type.capitalize}.new(name, options)\n" \
|
105
|
+
" proc = Proc.new do |opts|\n" \
|
106
|
+
" Types::#{type.capitalize}.new(name, options.merge(opts))\n" \
|
81
107
|
" end\n" \
|
82
108
|
" @root = [name, proc]\n" \
|
83
109
|
" @root << options[:content] unless options[:content].nil?\n" \
|
@@ -92,8 +118,8 @@ module RASN1
|
|
92
118
|
%w(sequence set).each do |type|
|
93
119
|
klass_name = "Types::#{type.capitalize}Of"
|
94
120
|
class_eval "def #{type}_of(name, type, options={})\n" \
|
95
|
-
" proc = Proc.new do
|
96
|
-
" #{klass_name}.new(name, type, options)\n" \
|
121
|
+
" proc = Proc.new do |opts|\n" \
|
122
|
+
" #{klass_name}.new(name, type, options.merge(opts))\n" \
|
97
123
|
" end\n" \
|
98
124
|
" @root = [name, proc]\n" \
|
99
125
|
"end"
|
@@ -116,7 +142,9 @@ module RASN1
|
|
116
142
|
Types.primitives.each do |prim|
|
117
143
|
next if prim == Types::ObjectId
|
118
144
|
class_eval "def #{prim.type.downcase.gsub(/\s+/, '_')}(name, options={})\n" \
|
119
|
-
" proc = Proc.new
|
145
|
+
" proc = Proc.new do |opts|\n" \
|
146
|
+
" #{prim.to_s}.new(name, options.merge(opts))\n" \
|
147
|
+
" end\n" \
|
120
148
|
" @root = [name, proc]\n" \
|
121
149
|
"end"
|
122
150
|
end
|
@@ -125,13 +153,13 @@ module RASN1
|
|
125
153
|
# +Object#object_id+.
|
126
154
|
# @see Types::ObjectId#initialize
|
127
155
|
def objectid(name, options={})
|
128
|
-
proc = Proc.new { Types::ObjectId.new(name, options) }
|
156
|
+
proc = Proc.new { |opts| Types::ObjectId.new(name, options.merge(opts)) }
|
129
157
|
@root = [name, proc]
|
130
158
|
end
|
131
159
|
|
132
160
|
# @see Types::Any#initialize
|
133
161
|
def any(name, options={})
|
134
|
-
proc = Proc.new { Types::Any.new(name, options) }
|
162
|
+
proc = Proc.new { |opts| Types::Any.new(name, options.merge(opts)) }
|
135
163
|
@root = [name, proc]
|
136
164
|
end
|
137
165
|
|
@@ -240,10 +268,10 @@ module RASN1
|
|
240
268
|
[Types::SequenceOf, Types::SetOf].include? el.class
|
241
269
|
end
|
242
270
|
|
243
|
-
def get_type(proc_or_class,
|
271
|
+
def get_type(proc_or_class, options={})
|
244
272
|
case proc_or_class
|
245
273
|
when Proc
|
246
|
-
proc_or_class.call
|
274
|
+
proc_or_class.call(options)
|
247
275
|
when Class
|
248
276
|
proc_or_class.new
|
249
277
|
end
|
@@ -253,14 +281,14 @@ module RASN1
|
|
253
281
|
root = self.class.class_eval { @root }
|
254
282
|
@root = root[0]
|
255
283
|
@elements = {}
|
256
|
-
@elements[@root] = get_type(root[1])
|
284
|
+
@elements[@root] = get_type(root[1], self.class.class_eval { @options } || {})
|
257
285
|
root
|
258
286
|
end
|
259
287
|
|
260
288
|
def set_elements(name, el, content=nil)
|
261
289
|
if content.is_a? Array
|
262
290
|
@elements[name].value = content.map do |name2, proc_or_class, content2|
|
263
|
-
subel = get_type(proc_or_class
|
291
|
+
subel = get_type(proc_or_class)
|
264
292
|
@elements[name2] = subel
|
265
293
|
if is_composed?(subel) and content2.is_a? Array
|
266
294
|
set_elements(name2, proc_or_class, content2)
|
data/lib/rasn1/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rasn1
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Daubert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
@@ -88,6 +88,7 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- ".gitignore"
|
91
|
+
- ".travis.yml"
|
91
92
|
- Gemfile
|
92
93
|
- LICENSE
|
93
94
|
- README.md
|