Class: Jade::Decode::Desc::Indexed

Inherits:
Data
  • Object
show all
Includes:
Node
Defined in:
lib/jade/decode.rb

Overview

Record by position: N indices of an array into an N-argument constructor. What the tuple decoders are built from.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Node

#decoded?

Instance Attribute Details

#ctorObject (readonly)

Returns the value of attribute ctor

Returns:

  • (Object)

    the current value of ctor



222
223
224
# File 'lib/jade/decode.rb', line 222

def ctor
  @ctor
end

#innersObject (readonly)

Returns the value of attribute inners

Returns:

  • (Object)

    the current value of inners



222
223
224
# File 'lib/jade/decode.rb', line 222

def inners
  @inners
end

Instance Method Details

#decode(value) ⇒ Object



225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
# File 'lib/jade/decode.rb', line 225

def decode(value)
  return type_err('Array', value) unless ::Array === value

  size = inners.length
  given = value.length
  args = ::Array.new(size)
  errors = nil
  i = 0

  while i < size
    if i >= given
      (errors ||= []) << MissingField["[#{i}]"]
    else
      decoded = inners[i].decode(value[i])
      Failure === decoded ? (errors ||= []) << AtIndex[i, decoded.error] : args[i] = decoded
    end
    i += 1
  end

  errors ? Failure.new(wrap_errors(errors)) : ctor.new(*args)
end