Class: SlowBlink::Message::Field Abstract

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

Overview

This class is abstract.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(input = nil, depth = nil) ⇒ Field

Returns a new instance of Field.



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/slow_blink/message/field.rb', line 69

def initialize(input=nil, depth=nil)

    @optional = self.class.optional?
    @sequence = self.class.sequence?
    @type = self.class.type
    @value = nil

    if input and depth
        if @sequence
            if size = input.getU32
                @value = []
                size.times do
                    value = @type.from_compact(input, depth)
                    if value
                        @value << value
                    end
                end
            end
        elsif @optional and (@type.kind_of? StaticGroup or @type.kind_of? FIXED)
            if input.get_present
                @value = @type.from_compact(input, depth)
            end
        else
            @value = @type.from_compact(input, depth)
        end
        
    end
    
end

Instance Attribute Details

#typeObject (readonly)

Returns the value of attribute type.



60
61
62
# File 'lib/slow_blink/message/field.rb', line 60

def type
  @type
end

Class Method Details

.idInteger?

Returns field ID.

Returns:

  • (Integer, nil)

    field ID



38
39
40
# File 'lib/slow_blink/message/field.rb', line 38

def self.id
    @id
end

.nameString

Returns field name.

Returns:

  • (String)

    field name



33
34
35
# File 'lib/slow_blink/message/field.rb', line 33

def self.name
    @name.to_s
end

.optional?true, false

Returns field is optional?.

Returns:

  • (true, false)

    field is optional?



28
29
30
# File 'lib/slow_blink/message/field.rb', line 28

def self.optional?
    @optional
end

.sequence?true, false

Returns true if this field contains a sequence type.

Returns:

  • (true, false)

    true if this field contains a sequence type



48
49
50
# File 'lib/slow_blink/message/field.rb', line 48

def self.sequence?
    @sequence
end

.typeObject

Returns type contained by field.

Returns:

  • (Object)

    type contained by field



43
44
45
# File 'lib/slow_blink/message/field.rb', line 43

def self.type
    @type
end

Instance Method Details

#getObject

Returns field value or nil.

Returns:

  • field value or nil



129
130
131
132
133
134
135
136
137
138
139
# File 'lib/slow_blink/message/field.rb', line 129

def get
    if @value
        if @sequence
            @value.map{|v|v.get}                
        else
            @value.get
        end
    else
        nil
    end
end

#optional?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/slow_blink/message/field.rb', line 65

def optional?
    @optional
end

#sequence?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/slow_blink/message/field.rb', line 62

def sequence?
    @sequence
end

#set(value) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/slow_blink/message/field.rb', line 99

def set(value)            
    if value.kind_of? Field
        self.set(value.get)
    elsif value.nil?
        if @optional
            @value = nil
            self
        else
            raise ArgumentError.new "field '#{self.class.name}'is not optional, value cannot be nil (sequence: #{@sequence})"
        end                
    elsif @sequence                
        if value.kind_of? Array
            @value = []
            value.each do |v|
                if v.nil?
                    next
                end
                @value << @type.new(v)
            end
            self
        else
            raise ArgumentError.new "field value must be an array of type"
        end
    else
        @value = @type.new(value)
        self
    end    
end

#to_tagObject



164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# File 'lib/slow_blink/message/field.rb', line 164

def to_tag
    if @value
        if @value.is_a? Array
            @value.inject("|#{self.class.name}=[") do |out,v|
                if @value.first != v
                    out << ";"
                end
                out << v.to_tag
            end << "]"
        else
            "|#{self.class.name}=#{@value.to_tag}"
        end                
    else
        ""
    end
end