Class: Xap::Schema::XapBscMessage

Inherits:
XapUnsupportedMessage show all
Defined in:
lib/xap/schema/xap_bsc.rb

Direct Known Subclasses

XapBscCommand, XapBscQuery, XapBscResponse

Instance Attribute Summary

Attributes inherited from XapMessage

#headername, #hop, #msgclass, #src_addr, #target_addr, #uid, #version

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from XapMessage

register_class, #to_s, #uid_endpoint

Constructor Details

#initialize(msgclass, src_addr, src_uid, target_addr, is_input) ⇒ XapBscMessage

Returns a new instance of XapBscMessage.



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/xap/schema/xap_bsc.rb', line 149

def initialize msgclass, src_addr, src_uid, target_addr, is_input
  super msgclass, src_addr, src_uid, target_addr

  if msgclass.is_a?(Hash)
    raise 'xAP BSC messages must have at least one block' if @blocks.length == 0
    @is_input = @blocks.keys[0].downcase.start_with? 'input'
  else
    @is_input = is_input
  end

  @bsc_blocks = []
  idx = 0
  @blocks.each do |k, v|
    kdown = k.downcase
    if kdown.start_with?('input') || kdown.start_with?('output')
      @bsc_blocks << XapBscBlock.new(@is_input, idx, v)
    end
    idx += 1 if idx
  end
end

Class Method Details

.parse(hash) ⇒ Object



145
146
147
# File 'lib/xap/schema/xap_bsc.rb', line 145

def self.parse hash
  self.new hash, nil, nil, nil, nil
end

Instance Method Details

#each_block(&block) ⇒ Object

Yields each XapBscBlock in sequence.



182
183
184
185
186
# File 'lib/xap/schema/xap_bsc.rb', line 182

def each_block &block
  @bsc_blocks.each do |b|
    yield b
  end
end

#inspectObject

Returns a human-readable string description of this message.



171
172
173
174
175
176
177
178
179
# File 'lib/xap/schema/xap_bsc.rb', line 171

def inspect
  s = "#{self.class.name}: #{@bsc_blocks.length} blocks recognized, #{@blocks.length} total\n"
  s << "Blocks: \n"
  @bsc_blocks.each do |blk|
    s << "\t#{blk.inspect}\n"
  end
  s << "Regenerated message:\n\t"
  s << super.lines.to_a.join("\t")
end