slow_blink 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/ext/slow_blink/ext_schema_parser/lexer.c +2793 -839
  3. data/ext/slow_blink/ext_schema_parser/lexer.h +14 -137
  4. data/ext/slow_blink/ext_schema_parser/parser.c +616 -670
  5. data/ext/slow_blink/ext_schema_parser/parser.h +6 -4
  6. data/ext/slow_blink/message/ext_compact_encoder/blink_compact.c +642 -0
  7. data/ext/slow_blink/message/ext_compact_encoder/blink_compact.h +411 -0
  8. data/ext/slow_blink/message/ext_compact_encoder/blink_debug.h +46 -0
  9. data/ext/slow_blink/message/ext_compact_encoder/blink_stream.c +314 -0
  10. data/ext/slow_blink/message/ext_compact_encoder/blink_stream.h +185 -0
  11. data/ext/slow_blink/message/ext_compact_encoder/ext_compact_encoder.c +382 -269
  12. data/lib/slow_blink/definition.rb +18 -53
  13. data/lib/slow_blink/dynamic_group.rb +8 -0
  14. data/lib/slow_blink/enum.rb +101 -0
  15. data/lib/slow_blink/field.rb +63 -33
  16. data/lib/slow_blink/generate_c/model.rb +89 -0
  17. data/lib/slow_blink/group.rb +119 -100
  18. data/lib/slow_blink/message/binary.rb +3 -4
  19. data/lib/slow_blink/message/boolean.rb +3 -4
  20. data/lib/slow_blink/message/date.rb +3 -4
  21. data/lib/slow_blink/message/decimal.rb +3 -5
  22. data/lib/slow_blink/message/{enumeration.rb → enum.rb} +17 -17
  23. data/lib/slow_blink/message/field.rb +77 -27
  24. data/lib/slow_blink/message/fixed.rb +5 -21
  25. data/lib/slow_blink/message/floating_point.rb +3 -4
  26. data/lib/slow_blink/message/group.rb +90 -161
  27. data/lib/slow_blink/message/integer.rb +24 -32
  28. data/lib/slow_blink/message/model.rb +50 -110
  29. data/lib/slow_blink/message/string.rb +3 -4
  30. data/lib/slow_blink/message/time.rb +5 -5
  31. data/lib/slow_blink/message/time_of_day.rb +5 -12
  32. data/lib/slow_blink/ref.rb +22 -71
  33. data/lib/slow_blink/schema.rb +64 -85
  34. data/lib/slow_blink/schema_buffer.rb +1 -4
  35. data/lib/slow_blink/static_group.rb +37 -0
  36. data/lib/slow_blink/string.rb +4 -5
  37. data/lib/slow_blink/sym.rb +8 -28
  38. data/lib/slow_blink/type.rb +10 -19
  39. data/lib/slow_blink/version.rb +1 -1
  40. data/lib/slow_blink.rb +1 -0
  41. data/test/tc_compact_encoder.rb +114 -147
  42. data/test/tc_inputs.rb +2 -4
  43. data/test/tc_model_string.rb +29 -0
  44. data/test/tc_schema_new.rb +212 -0
  45. metadata +17 -26
  46. data/ext/slow_blink/ext_schema_parser/common.h +0 -27
  47. data/ext/slow_blink/message/ext_compact_encoder/compact_encoder.c +0 -258
  48. data/ext/slow_blink/message/ext_compact_encoder/compact_encoder.h +0 -92
  49. data/lib/slow_blink/annotatable.rb +0 -48
  50. data/lib/slow_blink/annotation.rb +0 -47
  51. data/lib/slow_blink/enumeration.rb +0 -90
  52. data/lib/slow_blink/incremental_annotation.rb +0 -151
  53. data/lib/slow_blink/log.rb +0 -51
  54. data/lib/slow_blink/message/sequence.rb +0 -98
  55. data/lib/slow_blink/name_with_id.rb +0 -49
  56. data/lib/slow_blink/namespace.rb +0 -143
  57. data/lib/slow_blink/sequence.rb +0 -57
  58. data/test/tc_field.rb +0 -94
  59. data/test/tc_group.rb +0 -114
  60. data/test/tc_incr_annote.rb +0 -22
  61. data/test/tc_namespace.rb +0 -8
  62. data/test/tc_types.rb +0 -218
@@ -19,6 +19,7 @@
19
19
  # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
20
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
+
22
23
  module SlowBlink
23
24
 
24
25
  # This module is concerned with generating models from Schema that are optimised for encoding/decoding and enforcing constraints
@@ -112,63 +113,45 @@ module SlowBlink
112
113
  @maxRecursion = opts[:maxRecursion]||DEFAULT_MAX_RECURSION
113
114
  maxRecursion = @maxRecursion
114
115
 
115
- # define the extension object
116
- groups = @groups
116
+ # any of the groups
117
+
117
118
  taggedGroups = @taggedGroups
118
- permitted = schema.tagged.keys
119
- @extensionObject = Class.new(DynamicGroup) do
119
+
120
+ @anyTaggedGroup = Class.new(DynamicGroup) do
120
121
  @maxRecursion = maxRecursion
121
- @extensionObject = self
122
- @opt = false
123
- @groups = groups
122
+ @anyTaggedGroup = self
124
123
  @taggedGroups = taggedGroups
125
- @permitted = permitted
124
+ @permittedID = schema.groups.map{|g|g.id}.select{|g|g}
126
125
  end
127
- extensionObject = @extensionObject
126
+
127
+ anyTaggedGroup = @anyTaggedGroup
128
128
 
129
- schema.groups.each do |name, g|
130
- fields = {}
131
- g.fields.each do |f|
132
- fields[f.nameWithID.name] = _model_field(f)
133
- end
134
- @groups[name] = Class.new(Group) do
135
- @extensionObject = extensionObject
129
+ # create an anon class for each group defined in schema
130
+ schema.groups.each do |g|
131
+ fields = g.fields.map{|f| _model_field(f)}
132
+ @groups[g.name] = Class.new(Group) do
136
133
  @maxRecursion = maxRecursion
137
- @name = g.nameWithID.name
138
- @id = g.nameWithID.id
139
- @fields = fields
134
+ @anyTaggedGroup = anyTaggedGroup
135
+ @name = g.name
136
+ @id = g.id
137
+ @fields = fields
140
138
  end
141
- if g.nameWithID.id
142
- @taggedGroups[g.nameWithID.id] = @groups[name]
139
+ if g.id
140
+ @taggedGroups[g.id] = @groups[g.name]
143
141
  end
144
142
  end
145
143
 
146
-
147
144
  end
148
145
 
149
146
  # @api user
150
147
  #
151
148
  # Initialise a {Group} from a compact form string
152
- # @param input [String] Blink Protocol compact form
149
+ # @param input [StringIO] Blink Protocol compact form
153
150
  # @return [Group] anonymous subclass instance of Group
154
151
  # @raise [WeakError,StrongError]
155
152
  # @raise [RecursionLimit]
156
- # @raise []
157
153
  def decode_compact(input)
158
- stack = []
159
- inputSize = input.size
160
- buf = input.getBinary!
161
- if buf.size > 0
162
- id = buf.getU64!
163
- groupClass = @taggedGroups[id]
164
- if groupClass
165
- group = groupClass.from_compact!(buf, stack)
166
- else
167
- raise WeakError2.new "W2: Group id #{group.id} is unknown"
168
- end
169
- else
170
- raise WeakError1.new "W1: Top level group cannot be null"
171
- end
154
+ @anyTaggedGroup.from_compact(input, []).get
172
155
  end
173
156
 
174
157
  # @api user
@@ -179,11 +162,10 @@ module SlowBlink
179
162
  # @return [Group] anonymous subclass of Group
180
163
  # @raise [RangeError] unknown group
181
164
  def group(name)
182
- group = @groups[name]
183
- if group
184
- group
185
- else
165
+ if (group = @groups[name]).nil?
186
166
  raise RangeError.new "group '#{name}' is unknown"
167
+ else
168
+ group
187
169
  end
188
170
  end
189
171
 
@@ -194,89 +176,47 @@ module SlowBlink
194
176
  # @param field [SlowBlink::Field] field definition
195
177
  # @return [Class] anonymous subclass of {Field}
196
178
  def _model_field(field)
197
- type = _model_type(field.type, field.opt?)
179
+
180
+ type = _model_type(field.type)
198
181
  Class.new(Field) do
199
- @opt = field.opt?
200
- @name = field.nameWithID.name
201
- @id = field.nameWithID.id
182
+ @optional = field.optional?
183
+ @name = field.name
184
+ @id = field.id
202
185
  @type = type
203
- end
186
+ @sequence = field.type.sequence?
187
+ end
204
188
  end
205
189
 
206
190
  # Create a model for a type
207
191
  #
208
192
  # @param type [SlowBlink::Type] type definition
209
193
  # @param opt [true,false] parent definition may allow this type to be optional
210
- def _model_type(type, opt)
211
- extensionObject = @extensionObject
194
+ def _model_type(type)
195
+ anyTaggedGroup = @anyTaggedGroup
212
196
  maxRecursion = @maxRecursion
197
+
213
198
  case type.class
214
199
  when SlowBlink::OBJECT
215
- groups = @groups
200
+ @anyTaggedGroup
201
+ when SlowBlink::DynamicGroup
216
202
  taggedGroups = @taggedGroups
217
- permitted = @taggedGroups.keys
218
203
  Class.new(DynamicGroup) do
219
- @extensionObject = extensionObject
204
+ @anyTaggedGroup = anyTaggedGroup
220
205
  @maxRecursion = maxRecursion
221
- @opt = opt
222
- @groups = groups
223
206
  @taggedGroups = taggedGroups
224
- @permitted = permitted
225
- end
226
- when SlowBlink::REF
227
- if type.ref.kind_of? SlowBlink::Group
228
- if type.dynamic?
229
- taggedGroups = @taggedGroups
230
- groups = @groups
231
- permitted = @taggedGroups.keys
232
- @schema.tagged.each do |id, g|
233
- if g.group_kind_of?(type)
234
- permitted << id
235
- end
236
- end
237
- Class.new(DynamicGroup) do
238
- @extensionObject = extensionObject
239
- @maxRecursion = maxRecursion
240
- @opt = opt
241
- @taggedGroups = taggedGroups
242
- @groups = groups
243
- @permitted = permitted
244
- end
245
- else
246
- fields = {}
247
- type.ref.fields.each do |f|
248
- fields[f.nameWithID.name] = _model_field(f)
249
- end
250
- Class.new(StaticGroup) do
251
- @extensionObject = extensionObject
252
- @maxRecursion = maxRecursion
253
- @name = type.ref.nameWithID.name
254
- @id = nil
255
- @opt = opt
256
- @fields = fields
257
- end
258
- end
259
- else
260
- _model_type(type.ref, false)
261
- end
262
- when SlowBlink::SEQUENCE
263
- t = _model_type(type.type, false)
264
- Class.new(SEQUENCE) do
265
- @maxRecursion = maxRecursion
266
- @type = t
267
- end
268
- when SlowBlink::ENUMERATION
269
- symbols = {}
270
- type.symbols.each do |n,v|
271
- symbols[n] = v.val
207
+ @permittedID = type.groups.map{|g|g.id}
272
208
  end
273
- Class.new(ENUMERATION) do
274
- @symbols = symbols
275
- end
276
- else
209
+ when SlowBlink::StaticGroup
210
+ fields = type.fields.map{|f| _model_field(f)}
211
+ Class.new(StaticGroup) do
212
+ @maxRecursion = maxRecursion
213
+ @name = type.name
214
+ @id = type.id
215
+ @fields = fields
216
+ end
217
+ else
277
218
  Class.new(SlowBlink::Message.const_get(type.class.name.split('::').last)) do
278
- @opt = opt
279
- @type = type
219
+ @type = type
280
220
  end
281
221
  end
282
222
  end
@@ -287,6 +227,7 @@ module SlowBlink
287
227
 
288
228
  end
289
229
 
230
+ require "stringio"
290
231
  require "slow_blink/message/ext_compact_encoder"
291
232
  require "slow_blink/message/field"
292
233
  require "slow_blink/message/integer"
@@ -294,9 +235,8 @@ require "slow_blink/message/string"
294
235
  require "slow_blink/message/binary"
295
236
  require "slow_blink/message/fixed"
296
237
  require "slow_blink/message/boolean"
297
- require "slow_blink/message/enumeration"
238
+ require "slow_blink/message/enum"
298
239
  require "slow_blink/message/floating_point"
299
- require "slow_blink/message/sequence"
300
240
  require "slow_blink/message/group"
301
241
  require "slow_blink/message/time"
302
242
  require "slow_blink/message/time_of_day"
@@ -25,16 +25,15 @@ module SlowBlink::Message
25
25
  class STRING
26
26
 
27
27
  # @private
28
- def self.from_compact!(input, stack)
29
- value = input.getString!
30
- if value
28
+ def self.from_compact(input, stack)
29
+ if value = input.getString
31
30
  if !@type.size or value.size <= @type.size
32
31
  self.new(value)
33
32
  else
34
33
  raise WeakError7.new "W7: String value exceeds maximum size"
35
34
  end
36
35
  else
37
- value
36
+ nil
38
37
  end
39
38
  end
40
39
 
@@ -18,6 +18,7 @@
18
18
  # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
19
  # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
20
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
21
22
  require 'time'
22
23
 
23
24
  module SlowBlink::Message
@@ -26,12 +27,11 @@ module SlowBlink::Message
26
27
  class MILLI_TIME
27
28
 
28
29
  # @private
29
- def self.from_compact!(input, stack)
30
- value = input.getI64!
31
- if value
30
+ def self.from_compact(input, stack)
31
+ if value = input.getI64
32
32
  self.new(value)
33
33
  else
34
- value
34
+ nil
35
35
  end
36
36
  end
37
37
 
@@ -51,7 +51,7 @@ module SlowBlink::Message
51
51
  # @raise [ArgumentError]
52
52
  def set(value)
53
53
  if value.kind_of? Time or value.kind_of? DateTime or value.kind_of? Date
54
- @value = time.to_datetime
54
+ @value = value.to_datetime
55
55
  elsif value.kind_of? String
56
56
  @value = DateTime.parse(value)
57
57
  elsif value.kind_of? Integer
@@ -25,9 +25,8 @@ module SlowBlink::Message
25
25
  class TIME_OF_DAY_MILLI
26
26
 
27
27
  # @private
28
- def self.from_compact!(input, stack)
29
- value = input.getU32!
30
- if value
28
+ def self.from_compact(input, stack)
29
+ if value = input.getU32
31
30
  self.new(value)
32
31
  else
33
32
  value
@@ -54,12 +53,7 @@ module SlowBlink::Message
54
53
 
55
54
  # @note calls {#set}(value)
56
55
  def initialize(value)
57
- @opt = self.class.opt?
58
- if value
59
- set(value)
60
- else
61
- @value = nil
62
- end
56
+ set(value)
63
57
  end
64
58
 
65
59
  # @private
@@ -73,9 +67,8 @@ module SlowBlink::Message
73
67
  class TIME_OF_DAY_NANO
74
68
 
75
69
  # @private
76
- def self.from_compact!(input, stack)
77
- value = input.getU64!
78
- if value
70
+ def self.from_compact(input, stack)
71
+ if value = input.getU64
79
72
  self.new(value)
80
73
  else
81
74
  value
@@ -22,88 +22,39 @@
22
22
 
23
23
  module SlowBlink
24
24
 
25
+ # A REF is a type that points to a Group or a Definition
26
+ # by a reference string.
27
+ #
28
+ #
25
29
  class REF < Type
26
30
 
27
- # @return referenced object
31
+ # @return [String]
28
32
  attr_reader :ref
29
33
 
30
- # @return [true] dynamic group reference
31
- # @return [false] static reference
34
+ # @return [true,false]
32
35
  def dynamic?
33
36
  @dynamic
34
37
  end
35
38
 
36
- # Either this reference is dynamic or an intermediate reference is dynamic
37
- #
38
- # @return [true,false]
39
- def dynamic_reference?
40
- @dynamic or @dynamic_reference
41
- end
42
-
43
- # @return [String]
44
- attr_reader :qname
45
-
46
- # @param qname [String]
47
- # @param dynamic [true,false]
48
- # @param location [String]
49
- def initialize(qname, dynamic, location)
50
- @qname = qname
51
- if qname.split(":").size == 1
52
- @namespace = nil
53
- @name = qname
54
- else
55
- @namespace = qname.split(":").first
56
- @name = qname.split(":").last
57
- end
58
- @dynamic = dynamic
59
- @ref = nil
60
- @dynamic_reference = false
61
- super(location)
62
- end
63
-
64
- # @api private
65
- #
66
- # Resolve references, enforce constraints, and detect cycles
67
- #
68
- # @param schema [Schema] schema this definition belongs to
69
- # @param ns [Namespace] namespace this definition belongs to
70
- # @param stack [nil, Array] objects that depend on this object
71
- # @return [true,false] linked?
72
- def link(schema, ns, stack=[])
73
- if @schema.nil?
74
- if @namespace
75
- ref = schema.resolve(@namespace, @name)
76
- else
77
- ref = ns.resolve(@name) or schema.resolve(@namespace, @name)
78
- end
79
- if ref and ref.link(schema, stack << self)
80
- # follow reference
81
- loop do
82
- if ref.kind_of? Definition
83
- if ref.type.kind_of? REF
84
- if ref.type.dynamic?
85
- @dynamic_reference = true
86
- end
87
- ref = ref.type.ref
88
- next
89
- else
90
- ref = ref.type
91
- end
92
- end
93
- break
94
- end
95
-
96
- if @dynamic and !ref.kind_of? Group
97
- Log.error "#{@location}: error: a dynamic reference must resolve to a group that has an identifier"
98
- else
99
- @ref = ref
100
- @schema = schema
39
+ # @return [Group, Definition]
40
+ def resolve
41
+ result = nil
42
+ if @table
43
+ if (result = @table[@ref]).nil?
44
+ if @ns and @ref.split("::").size == 1
45
+ result = @table[@ns + "::" + @ref]
101
46
  end
102
- else
103
- Log.error "#{@location}: error: unresolved reference ('#{@qname}' is not defined as a group, type, or enum)"
104
47
  end
105
48
  end
106
- @schema
49
+ result
50
+ end
51
+
52
+ # @private
53
+ def initialize(attr)
54
+ super(attr)
55
+ @ref = attr[:ref].freeze
56
+ @dynamic = attr[:dynamic]
57
+ @table = attr[:table]
107
58
  end
108
59
 
109
60
  end
@@ -20,7 +20,6 @@
20
20
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
22
 
23
- # SlowBlink namespace
24
23
  module SlowBlink
25
24
 
26
25
  # @!macro location
@@ -50,124 +49,104 @@ module SlowBlink
50
49
 
51
50
  # @api user
52
51
  #
53
- # @return [Hash<Group>] groups indexed by qualified name
54
- attr_reader :groups
52
+ # @return [Array<Group>] groups
53
+ def groups
54
+ @defs.values.select do |d|
55
+ d.is_a? Group
56
+ end
57
+ end
55
58
 
56
- attr_reader :tagged
57
-
58
- # @return [Array<Namespace>]
59
- attr_reader :ns
59
+ # @api user
60
+ #
61
+ # @return [Array<Definition,Group>] definitions
62
+ def definitions
63
+ @defs.values
64
+ end
60
65
 
61
66
  # @api user
62
67
  #
63
- # Create a Schema from one or more SchemaBuffers that are evaluated
64
- # in the order they appear.
68
+ # Create a Schema from one or more Blink Protocol schemas
65
69
  #
66
- # @param buffer [Array<SchemaBuffer>]
70
+ # @param buffer [Array<SchemaBuffer,String>]
67
71
  def initialize(*buffer)
68
72
 
73
+ namespace = []
74
+
69
75
  if buffer.size > 0
70
- namespace = []
71
76
  buffer.each do |b|
72
- namespace << Namespace.parse(b.buffer, filename: b.filename)
77
+ if buffer.kind_of? String
78
+ namespace << SlowBlink.parse_file_buffer(buffer)
79
+ else
80
+ namespace << SlowBlink.parse_file_buffer(b.buffer, filename: b.filename)
81
+ end
73
82
  end
74
83
  else
75
84
  raise ArgumentError.new "at least one buffer required"
76
85
  end
77
86
 
78
- @ns = {}
79
- @tagged = {}
80
-
81
- error = false
82
-
83
- # gather and merge namespaces
84
- namespace.each do |ns|
85
- if @ns[ns.name]
86
- begin
87
- @ns[ns.name].merge!(ns)
88
- rescue
89
- raise ParseError
87
+ @defs = {}
88
+
89
+ # create groups and definitions
90
+ namespace.each do |ns|
91
+ ns[:defs].select{|d|d[:class] != :IncrementalAnnotation}.each do |d|
92
+ key = d[:name][:name].dup
93
+ if ns[:name]
94
+ key.prepend "#{ns[:name]}::"
90
95
  end
91
- else
92
- @ns[ns.name] = ns
93
- end
96
+ if @defs[key]
97
+ raise ParseError.new "#{d[:loc]}: duplicate definition: '#{key}' first defined at '#{@defs[key].location}'"
98
+ else
99
+ @defs[key] = SlowBlink.const_get(d[:class]).new(d.merge({:ns=>ns[:name], :table=>@defs}))
100
+ end
101
+ end
94
102
  end
95
103
 
96
- # apply incremental annotation in order of input
97
- namespace.each do |ns|
98
- ns.incrAnnotations.each do |a|
99
- a.apply(self, ns)
100
- end
101
- end
102
-
103
- # gather tagged groups and detect duplicates
104
- @ns.each do |name, ns|
105
- ns.groups.each do |g|
106
- if g.nameWithID.id
107
- if @tagged[g.nameWithID.id]
108
- Log.error "error: groups that have identifiers must have unique identifiers ('#{@g.nameWithID.id}' was first assigned to '#{@tagged[g.nameWithID.id].nameWithID.name}' at #{@tagged[g.nameWithID.id].location}"
109
- error = true
110
- else
111
- @tagged[g.nameWithID.id] = g
104
+ # test that reference definitions resolve and detect circular references
105
+ @defs.values.each do |d|
106
+ if d.is_a? Definition and d.type.is_a? REF
107
+ ptr = d.type.resolve
108
+ if ptr
109
+ stack = [d]
110
+ while ptr and ptr.is_a? Definition and ptr.type.is_a? REF do
111
+ if stack.include? ptr
112
+ raise ParseError.new "#{d.type.location}: '#{d.name}' resolves to a circular reference"
113
+ else
114
+ ptr = ptr.type.resolve
115
+ end
112
116
  end
117
+ else
118
+ raise ParseError.new "#{d.type.location}: '#{d.name}' does not resolve"
113
119
  end
114
120
  end
115
121
  end
116
122
 
117
- # resolve all references
118
- @ns.each do |name, ns|
119
- if !ns.link(self)
120
- error = true
121
- end
122
- end
123
-
124
- # create list of all groups with qualified names
125
- @groups = {}
126
- @ns.each do |name, ns|
127
- ns.groups.each do |g|
128
- if name
129
- @groups[g.nameWithID.name.prepend "#{name}:"] = g
123
+ # test that groups resolve and meet constraints
124
+ tagged = {}
125
+ @defs.values.each do |d|
126
+ if d.is_a? Group
127
+ d.superGroup
128
+ d.fields
129
+ if d.id and tagged[d.id]
130
+ raise ParseError.new "#{d.type.location}: duplicate tag"
130
131
  else
131
- @groups[g.nameWithID.name] = g
132
- end
132
+ tagged[d.id] = d
133
+ end
133
134
  end
134
135
  end
135
136
 
136
- if error
137
- raise ParseError
138
- end
139
-
140
137
  end
141
138
 
142
- # Resolve a name to a definition in any namespace
143
- #
144
- # @param namespace [String,nil]
145
- # @param name [String]
146
- # @return [Definition,Group]
147
- def resolve(namespace, name)
148
- if @ns[namespace]
149
- @ns[namespace].resolve(name)
150
- else
151
- nil
152
- end
153
- end
154
-
155
139
  end
156
140
 
157
141
  end
158
142
 
159
143
  require 'slow_blink/parse_error'
160
- require 'slow_blink/log'
161
144
  require 'slow_blink/schema_buffer'
162
- require 'slow_blink/annotatable'
163
- require 'slow_blink/namespace'
164
145
  require 'slow_blink/version'
165
- require 'slow_blink/annotation'
166
- require 'slow_blink/incremental_annotation'
167
- require 'slow_blink/group'
168
146
  require 'slow_blink/field'
169
- require 'slow_blink/definition'
170
147
  require 'slow_blink/type'
148
+ require 'slow_blink/static_group'
149
+ require 'slow_blink/dynamic_group'
171
150
  require 'slow_blink/integer'
172
151
  require 'slow_blink/decimal'
173
152
  require 'slow_blink/floating_point'
@@ -177,13 +156,13 @@ require 'slow_blink/fixed'
177
156
  require 'slow_blink/date'
178
157
  require 'slow_blink/time_of_day'
179
158
  require 'slow_blink/time'
180
- require 'slow_blink/sequence'
181
159
  require 'slow_blink/ref'
160
+ require 'slow_blink/group'
182
161
  require 'slow_blink/object'
183
162
  require 'slow_blink/boolean'
184
- require 'slow_blink/enumeration'
163
+ require 'slow_blink/enum'
185
164
  require 'slow_blink/sym'
186
- require 'slow_blink/name_with_id'
165
+ require 'slow_blink/definition'
187
166
  require 'slow_blink/ext_schema_parser'
188
167
 
189
168
 
@@ -22,10 +22,7 @@
22
22
 
23
23
  module SlowBlink
24
24
 
25
- # Use schema buffer when you want to deal with schemas in-memory
26
- # rather than loading from files.
27
- #
28
- # It combines the schema string with an optional filename string.
25
+ # Use SchemaBuffer when you want to deal named in-memory schemas
29
26
  #
30
27
  # e.g:
31
28
  #