Class: SlowBlink::Message::Field Abstract
- Inherits:
-
Object
- Object
- SlowBlink::Message::Field
- Defined in:
- lib/slow_blink/message/field.rb
Overview
This class is abstract.
Instance Attribute Summary collapse
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Class Method Summary collapse
-
.id ⇒ Integer?
Field ID.
-
.name ⇒ String
Field name.
-
.optional? ⇒ true, false
Field is optional?.
-
.sequence? ⇒ true, false
True if this field contains a sequence type.
-
.type ⇒ Object
Type contained by field.
Instance Method Summary collapse
-
#get ⇒ Object
Field value or nil.
-
#initialize(input = nil, depth = nil) ⇒ Field
constructor
A new instance of Field.
- #optional? ⇒ Boolean
- #sequence? ⇒ Boolean
- #set(value) ⇒ Object
- #to_tag ⇒ Object
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
#type ⇒ Object (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
.id ⇒ Integer?
Returns field ID.
38 39 40 |
# File 'lib/slow_blink/message/field.rb', line 38 def self.id @id end |
.name ⇒ String
Returns 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?.
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.
48 49 50 |
# File 'lib/slow_blink/message/field.rb', line 48 def self.sequence? @sequence end |
.type ⇒ Object
Returns type contained by field.
43 44 45 |
# File 'lib/slow_blink/message/field.rb', line 43 def self.type @type end |
Instance Method Details
#get ⇒ Object
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
65 66 67 |
# File 'lib/slow_blink/message/field.rb', line 65 def optional? @optional end |
#sequence? ⇒ 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_tag ⇒ Object
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 |