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