class DBus::Data::Array

An Array, or a Dictionary (Hash).

Public Class Methods

alignment() click to toggle source
    # File lib/dbus/data.rb
555 def self.alignment
556   4
557 end
from_items(value, mode:, type:, hash: false) click to toggle source

TODO: check that Hash keys are basic types @param mode [:plain,:exact] @param type [Type] @param hash [Boolean] are we unmarshalling an ARRAY of DICT_ENTRY @return [Data::Array]

    # File lib/dbus/data.rb
564 def self.from_items(value, mode:, type:, hash: false)
565   value = Hash[value] if hash
566   return value if mode == :plain
567 
568   new(value, type: type)
569 end
from_typed(value, type:) click to toggle source

@param value [::Object] @param type [Type] @return [Data::Array]

    # File lib/dbus/data.rb
574 def self.from_typed(value, type:)
575   new(value, type: type) # initialize(::Array<Data::Base>)
576 end
new(value, type:) click to toggle source

@param value [Data::Array,Enumerable] @param type [SingleCompleteType,Type]

Calls superclass method DBus::Data::Base::new
    # File lib/dbus/data.rb
597 def initialize(value, type:)
598   type = Type::Factory.make_type(type)
599   self.class.assert_type_matches_class(type)
600   @type = type
601 
602   typed_value = case value
603                 when Data::Array
604                   unless value.type == type
605                     raise ArgumentError,
606                           "Specified type is #{type.inspect} but value type is #{value.type.inspect}"
607                   end
608 
609                   value.exact_value
610                 else
611                   # TODO: Dict??
612                   value.map do |i|
613                     Data.make_typed(type.child, i)
614                   end
615                 end
616   super(typed_value)
617 end
type_code() click to toggle source
    # File lib/dbus/data.rb
551 def self.type_code
552   "a"
553 end

Public Instance Methods

value() click to toggle source
Calls superclass method DBus::Data::Container#value
    # File lib/dbus/data.rb
578 def value
579   v = super
580   if type.child.sigtype == Type::DICT_ENTRY
581     # BTW this makes a copy so mutating it is pointless
582     v.to_h
583   else
584     v
585   end
586 end