class DBus::Data::Variant
A generic type.
Implementation note: @value is a {Data::Base}.
Attributes
member_type[R]
@return [Type]
Public Class Methods
alignment()
click to toggle source
# File lib/dbus/data.rb 717 def self.alignment 718 1 719 end
from_items(value, mode:, member_type:)
click to toggle source
@param member_type [Type]
# File lib/dbus/data.rb 726 def self.from_items(value, mode:, member_type:) 727 return value if mode == :plain 728 729 new(value, member_type: member_type) 730 end
from_typed(value, type:)
click to toggle source
@param value [::Object] @param type [Type] @return [Variant]
# File lib/dbus/data.rb 735 def self.from_typed(value, type:) 736 assert_type_matches_class(type) 737 738 # nil: decide on type of value 739 new(value, member_type: nil) 740 end
guess_type(value)
click to toggle source
Determine the type of value @param value [::Object] @return [Type] @api private See also {PacketMarshaller.make_variant}
# File lib/dbus/data.rb 763 def self.guess_type(value) 764 sct, = PacketMarshaller.make_variant(value) 765 DBus.type(sct) 766 end
new(value, member_type:)
click to toggle source
@param member_type [SingleCompleteType,Type,nil]
Calls superclass method
DBus::Data::Base::new
# File lib/dbus/data.rb 769 def initialize(value, member_type:) 770 member_type = Type::Factory.make_type(member_type) if member_type 771 # TODO: validate that the given *member_type* matches *value* 772 case value 773 when Data::Variant 774 # Copy the contained value instead of boxing it more 775 # TODO: except perhaps for round-tripping in exact mode? 776 @member_type = value.member_type 777 value = value.exact_value 778 when Data::Base 779 @member_type = member_type || value.type 780 raise ArgumentError, "Variant type #{@member_type} does not match value type #{value.type}" \ 781 unless @member_type == value.type 782 else 783 @member_type = member_type || self.class.guess_type(value) 784 value = Data.make_typed(@member_type, value) 785 end 786 super(value) 787 end
type()
click to toggle source
@return [Type]
# File lib/dbus/data.rb 743 def self.type 744 # memoize 745 @type ||= Type.new(type_code).freeze 746 end
type_code()
click to toggle source
# File lib/dbus/data.rb 713 def self.type_code 714 "v" 715 end
Public Instance Methods
[](index)
click to toggle source
Internal helpers to keep the {DBus.variant} method working. Formerly it returned just a pair of [DBus.type(string_type), value] so let’s provide [0], [1], .first, .last
# File lib/dbus/data.rb 792 def [](index) 793 case index 794 when 0 795 member_type 796 when 1 797 value 798 else 799 raise ArgumentError, "DBus.variant can only be indexed with 0 or 1, seen #{index.inspect}" 800 end 801 end
first()
click to toggle source
@see []
# File lib/dbus/data.rb 804 def first 805 self[0] 806 end
last()
click to toggle source
@see []
# File lib/dbus/data.rb 809 def last 810 self[1] 811 end
type()
click to toggle source
Note that for Variants type.to_s==“v”, for the specific see {Variant#member_type} @return [Type] the exact type of this value
# File lib/dbus/data.rb 751 def type 752 self.class.type 753 end
value()
click to toggle source
# File lib/dbus/data.rb 721 def value 722 @value.value 723 end