Class: DataTypes::Type
- Inherits:
-
Object
- Object
- DataTypes::Type
- Defined in:
- lib/active_model_serializers_binary/base_type.rb
Instance Attribute Summary collapse
-
#bit_length ⇒ Object
Returns the value of attribute bit_length.
-
#count ⇒ Object
Returns the value of attribute count.
-
#length ⇒ Object
Returns the value of attribute length.
-
#name ⇒ Object
Returns the value of attribute name.
-
#parent ⇒ Object
Returns the value of attribute parent.
-
#raw_value ⇒ Object
Returns the value of attribute raw_value.
-
#sign ⇒ Object
Returns the value of attribute sign.
-
#type ⇒ Object
Returns the value of attribute type.
-
#value ⇒ Object
Returns the value of attribute value.
Instance Method Summary collapse
-
#after_load ⇒ Array
Se ejecuta después de deserializar los datos.
-
#before_dump(value) ⇒ Array
Se ejecuta antes de serializar los datos.
- #check(value, options = {}) ⇒ Object
-
#check_raw_value(value) ⇒ Object
Los datos siempre vienen en bytes.
- #check_value(value) ⇒ Object
-
#initialize(options = {}) ⇒ Type
constructor
A new instance of Type.
-
#size ⇒ Object
Return size of object in bytes.
- #to_s ⇒ Object
- #trim(value, bit_length, sign) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Type
Returns a new instance of Type.
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 7 def initialize( = {}) @default_value = [:default_value].nil? ? 0 : [:default_value] @raw_value = nil @bit_length = [:bit_length] # Cantidad de bits del tipo de dato @type = type @sign = [:sign] # :signed / :unsigned @count = [:count] || 1 # Cantidad de elementos del array @length = [:length] || 1 # En char y bitfield especifica la longitud del campo. Ignorado para el resto de los tipos @value = check_value( @default_value ) @block = [:block] @name = [:name] @parent = [:parent] end |
Instance Attribute Details
#bit_length ⇒ Object
Returns the value of attribute bit_length.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def bit_length @bit_length end |
#count ⇒ Object
Returns the value of attribute count.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def count @count end |
#length ⇒ Object
Returns the value of attribute length.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def length @length end |
#name ⇒ Object
Returns the value of attribute name.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def name @name end |
#parent ⇒ Object
Returns the value of attribute parent.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def parent @parent end |
#raw_value ⇒ Object
Returns the value of attribute raw_value.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def raw_value @raw_value end |
#sign ⇒ Object
Returns the value of attribute sign.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def sign @sign end |
#type ⇒ Object
Returns the value of attribute type.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def type @type end |
#value ⇒ Object
Returns the value of attribute value.
5 6 7 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 5 def value @value end |
Instance Method Details
#after_load ⇒ Array
Se ejecuta después de deserializar los datos. @value contiene los datos deserializados
128 129 130 131 132 133 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 128 def after_load if !@block.nil? @parent.instance_exec( self, :load, &@block ) end @value end |
#before_dump(value) ⇒ Array
Se ejecuta antes de serializar los datos
114 115 116 117 118 119 120 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 114 def before_dump(value) self.value = value if !value.nil? if !@block.nil? value = @parent.instance_exec( self, :dump, &@block ) end self.value = value if !value.nil? end |
#check(value, options = {}) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 34 def check( value, = {} ) type = [:type] count = [:count] length = [:length] bit_length = [:bit_length] sign = [:sign] default_value = [:default_value] value = Array(value) # Se asegura de que sea un array value = value[0...count] # Corta el array según la cantidad de elementos especificados en la declaración # Lo convierte al tipo especificado value.map! do |v| if v.nil? default_value else case type when :float32 v.to_f when :char v.to_s[0...length] when :bool (v.in? [1, true]) ? true : false else v.to_i end end end trim(value, bit_length, sign) # Se asegura de que los valores esten dentro de los rangos permitidos pra el tipo de dato declarado value.fill(default_value, value.length...count) # Completa los elementos faltantes del array con default_value end |
#check_raw_value(value) ⇒ Object
Los datos siempre vienen en bytes
78 79 80 81 82 83 84 85 86 87 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 78 def check_raw_value(value) check(value, { :type => :uint8, :count => size, :length => 1, :bit_length => 8, :sign => :unsigned, :default_value => 0, }) end |
#check_value(value) ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 66 def check_value(value) check(value, { :type => @type, :count => @count, :length => @length, :bit_length => @bit_length, :sign => @sign, :default_value => @default_value, }) end |
#size ⇒ Object
Return size of object in bytes
30 31 32 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 30 def size (@bit_length*@length*@count)/8.0 end |
#to_s ⇒ Object
21 22 23 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 21 def to_s @value.to_s end |
#trim(value, bit_length, sign) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/active_model_serializers_binary/base_type.rb', line 89 def trim(value, bit_length, sign) # Recorta los valores según el bit_length value.map! do |v| if sign == :signed [-2**(bit_length-1),[v.to_i,2**(bit_length-1)-1].min].max elsif sign == :unsigned [0,[v.to_i,2**(bit_length)-1].min].max else v end end end |