Class: SlowBlink::Message::Group

Inherits:
Object
  • Object
show all
Defined in:
lib/slow_blink/message/group.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

#extensionObject (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

.ancestorIDObject



46
47
48
# File 'lib/slow_blink/message/group.rb', line 46

def self.ancestorID
    @ancestorID
end

.idInteger?

Returns group identifier.

Returns:

  • (Integer, nil)

    group identifier



36
37
38
# File 'lib/slow_blink/message/group.rb', line 36

def self.id
    @id
end

.nameString

Returns name of group.

Returns:

  • (String)

    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

Parameters:

  • name (String)

    name of field

Returns:

  • (Object)

Raises:

  • (IndexError, TypeError)


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)

Parameters:

  • name (String)

    name of field

  • value (Object)

Raises:

  • (IndexError, TypeError)


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

#getObject



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_tagObject



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_extensionObject



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_valueObject



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