lib/dbus/data.rb in ruby-dbus-0.18.0.beta2 vs lib/dbus/data.rb in ruby-dbus-0.18.0.beta3

- old
+ new

@@ -163,23 +163,22 @@ # Format strings for String#unpack, both little- and big-endian. Format = ::Struct.new(:little, :big) # Represents integers class Int < Fixed + # @!method self.range + # @return [Range] the full range of allowed values + # @param value [::Integer,DBus::Data::Int] # @raise RangeError def initialize(value) value = value.value if value.is_a?(self.class) r = self.class.range raise RangeError, "#{value.inspect} is not a member of #{r}" unless r.member?(value) super(value) end - - def self.range - raise NotImplementedError, "Abstract" - end end # Byte. # # TODO: a specialized ByteArray for `ay` may be useful, @@ -540,11 +539,11 @@ # TODO: Dict?? items = value.map do |i| Data.make_typed(member_type, i) end - new(items) # initialize(::Array<Data::Base>) + new(items, member_type: member_type) # initialize(::Array<Data::Base>) end # FIXME: should Data::Array be mutable? # if it is, is its type mutable too? @@ -601,12 +600,10 @@ # @return [Struct] def self.from_typed(value, member_types:) # TODO: validation raise unless value.size == member_types.size - @member_types = member_types - items = member_types.zip(value).map do |item_type, item| Data.make_typed(item_type, item) end new(items, member_types: member_types) # initialize(::Array<Data::Base>) @@ -641,18 +638,24 @@ # @return [Variant] def self.from_typed(value, member_types:) # rubocop:disable Lint/UnusedMethodArgument # assert member_types.empty? # decide on type of value - new(value) + new(value, member_type: nil) end - # Note that for Variants type=="v", + # @return [Type] + def self.type + # memoize + @type ||= Type.new(type_code).freeze + end + + # Note that for Variants type.to_s=="v", # for the specific see {Variant#member_type} # @return [Type] the exact type of this value def type - "v" + self.class.type end # @return [Type] attr_reader :member_type @@ -704,9 +707,25 @@ # @param value [::Array] def self.from_items(value, mode:, member_types:) # rubocop:disable Lint/UnusedMethodArgument value.freeze # DictEntry ignores the :exact mode value + end + + # @param value [::Object] (#size, #each) + # @param member_types [::Array<Type>] + # @return [DictEntry] + def self.from_typed(value, member_types:) + # assert member_types.size == 2 + # TODO: duplicated from Struct. Inherit/delegate? + # TODO: validation + raise unless value.size == member_types.size + + items = member_types.zip(value).map do |item_type, item| + Data.make_typed(item_type, item) + end + + new(items, member_types: member_types) # initialize(::Array<Data::Base>) end def initialize(value, member_types:) @member_types = member_types @type = nil