Class: ISO8583::BCDField
Instance Attribute Summary collapse
-
#byte_length ⇒ Object
Returns the value of attribute byte_length.
-
#data_length ⇒ Object
Returns the value of attribute data_length.
Attributes inherited from Field
#bmp, #codec, #max, #name, #padding
Instance Method Summary collapse
- #encode(value) ⇒ Object
-
#length ⇒ Object
This corrects the length for BCD fields, as their encoded length is half (+ parity) of the content length.
Methods inherited from Field
Instance Attribute Details
#byte_length ⇒ Object
Returns the value of attribute byte_length.
89 90 91 |
# File 'lib/iso8583/field.rb', line 89 def byte_length @byte_length end |
#data_length ⇒ Object
Returns the value of attribute data_length.
88 89 90 |
# File 'lib/iso8583/field.rb', line 88 def data_length @data_length end |
Instance Method Details
#encode(value) ⇒ Object
96 97 98 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 127 128 |
# File 'lib/iso8583/field.rb', line 96 def encode(value) begin encoded_value = codec.encode(value) @data_length = value.size @byte_length = encoded_value.bytes.size rescue ISO8583Exception => e ContextLog.exception(e, e.backtrace, "#{e.} (#{name})") if Object.const_defined?(:ContextLog) raise ISO8583Exception.new(e.+" (#{name})") end if padding if padding.arity == 1 encoded_value = padding.call(encoded_value) elsif padding.arity == 2 encoded_value = padding.call(encoded_value, length) end end len_str = case length when Integer raise ISO8583Exception.new("Too long: #{value} (#{name})! length=#{length}") if encoded_value.length > length raise ISO8583Exception.new("Too short: #{value} (#{name})! length=#{length}") if encoded_value.length < length String.new("", encoding: 'ASCII-8BIT') when Field raise ISO8583Exception.new("Max length exceeded: #{value}, max: #{max}") if max && @byte_length > max length.encode(@data_length) else raise ISO8583Exception.new("Invalid length (#{length}) for '#{name}' field") end len_str + encoded_value end |
#length ⇒ Object
This corrects the length for BCD fields, as their encoded length is half (+ parity) of the content length. E.g. 123 (length = 3) encodes to “x01x23” (length 2)
92 93 94 |
# File 'lib/iso8583/field.rb', line 92 def length @byte_length end |