Class: SlowBlink::Message::Group
- Inherits:
-
Object
- Object
- SlowBlink::Message::Group
- Defined in:
- lib/slow_blink/message/group.rb
Instance Attribute Summary collapse
-
#extension ⇒ Object
readonly
Returns the value of attribute extension.
Class Method Summary collapse
- .ancestorID ⇒ Object
-
.id ⇒ Integer?
Group identifier.
-
.name ⇒ String
Name of group.
Instance Method Summary collapse
-
#[](name) ⇒ Object
Finds Field by name and calls Field#get.
-
#[]=(name, value) ⇒ Object
Finds Field by name and calls Field#set(value).
- #encode_compact(out = "".force_encoding("ASCII-8BIT")) ⇒ Object
- #get ⇒ Object
-
#initialize(fields = {}, *extension) ⇒ Group
constructor
A new instance of Group.
- #set(value) ⇒ Object
- #to_tag ⇒ Object
- #to_tag_extension ⇒ Object
- #to_tag_value ⇒ Object
Constructor Details
#initialize(fields = {}, *extension) ⇒ Group
Returns a new instance of Group.
71 72 73 74 75 76 |
# File 'lib/slow_blink/message/group.rb', line 71 def initialize(fields={}, *extension) @value = {} self.class.fields.each{|f|@value[f.name] = f.new} set(fields) @extension = extension end |
Instance Attribute Details
#extension ⇒ Object (readonly)
Returns the value of attribute extension.
26 27 28 |
# File 'lib/slow_blink/message/group.rb', line 26 def extension @extension end |
Class Method Details
.ancestorID ⇒ Object
46 47 48 |
# File 'lib/slow_blink/message/group.rb', line 46 def self.ancestorID @ancestorID end |
.id ⇒ Integer?
Returns group identifier.
36 37 38 |
# File 'lib/slow_blink/message/group.rb', line 36 def self.id @id end |
.name ⇒ String
Returns name of group.
42 43 44 |
# File 'lib/slow_blink/message/group.rb', line 42 def self.name @name end |
Instance Method Details
#[](name) ⇒ Object
Finds Field by name and calls Field#get
99 100 101 102 103 104 105 |
# File 'lib/slow_blink/message/group.rb', line 99 def [](name) if field = @value[name] field.get else raise IndexError.new "field #{name} is not defined in this group" end end |
#[]=(name, value) ⇒ Object
Finds Field by name and calls Field#set(value)
84 85 86 87 88 89 90 91 |
# File 'lib/slow_blink/message/group.rb', line 84 def []=(name, value) if field = @value[name] @value[name] = field.set(value) else raise IndexError.new "field #{name} is not defined in this group" end self end |
#encode_compact(out = "".force_encoding("ASCII-8BIT")) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/slow_blink/message/group.rb', line 131 def encode_compact(out="".force_encoding("ASCII-8BIT")) if self.class.id groupOut = String.new.putU64(self.class.id) to_compact(groupOut) if @extension.size > 0 groupOut.putU32(@extension.size) @extension.each{|e|e.encode_compact(groupOut)} end out.putU32(groupOut.size) out << groupOut else raise UntaggedGroup.new "cannot encode a group without an ID" end end |
#get ⇒ Object
122 123 124 |
# File 'lib/slow_blink/message/group.rb', line 122 def get self end |
#set(value) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/slow_blink/message/group.rb', line 107 def set(value) if value.kind_of? Hash value.each do |fn, fv| if @value[fn] @value[fn] = @value[fn].set(fv) else raise IndexError.new "field '#{fn}' is unknown" end end else raise TypeError.new "expecting a Hash instance" end self end |
#to_tag ⇒ Object
166 167 168 |
# File 'lib/slow_blink/message/group.rb', line 166 def to_tag "@#{self.class.name}#{to_tag_value}#{to_tag_extension}" end |
#to_tag_extension ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/slow_blink/message/group.rb', line 151 def to_tag_extension if @extension.size > 0 out = "|[" @extension.each do |e| if e != @extension.first out << ";" end out << e.to_tag end out << "]" else out = "" end end |
#to_tag_value ⇒ Object
147 148 149 |
# File 'lib/slow_blink/message/group.rb', line 147 def to_tag_value @value.values.inject(""){|out,f|out << f.to_tag} end |