class Cassandra::Types::UserDefined
Attributes
@private
@return [String] keyspace where this type is defined
@return [String] name of this type
Public Class Methods
@private
Cassandra::Type::new
# File lib/cassandra/types.rb 1257 def initialize(keyspace, name, fields) 1258 super(:udt) 1259 @keyspace = keyspace 1260 @name = name 1261 @fields = fields 1262 end
Public Instance Methods
Asserts that a given value is an Cassandra::UDT
@param value [Object] value to be validated @param message [String] error message to use when assertion fails @yieldreturn [String] error message to use when assertion fails @raise [ArgumentError] if the value is not an Cassandra::UDT
@return [void] @see Cassandra::Type#assert
# File lib/cassandra/types.rb 1334 def assert(value, message = nil, &block) 1335 Util.assert_instance_of(Cassandra::UDT, value, message, &block) 1336 Util.assert(value.size <= @fields.size, message, &block) 1337 @fields.each do |field| 1338 Util.assert_type(field.type, value[field.name], message, &block) 1339 end 1340 nil 1341 end
Yield or enumerate each field defined in this type @overload each_field
@yieldparam field [Cassandra::UserDefined::Field] field @return [Cassandra::Types::UserDefined] self
@overload each_field
@return [Array<Array<String, Cassandra::Type>>] a list of fields
# File lib/cassandra/types.rb 1276 def each_field(&block) 1277 if block_given? 1278 @fields.each(&block) 1279 self 1280 else 1281 @fields.dup 1282 end 1283 end
# File lib/cassandra/types.rb 1361 def eql?(other) 1362 other.is_a?(UserDefined) && 1363 @keyspace == other.keyspace && 1364 @name == other.name && 1365 @fields == other.fields 1366 end
@param name [String] field name @return [Cassandra::UserDefined::Field, nil] a field with this name or
nil
# File lib/cassandra/types.rb 1290 def field(name) 1291 @fields.find { |f| f.name == name } 1292 end
@param name [String] field name @return [Boolean] whether this type has a given field
# File lib/cassandra/types.rb 1266 def has_field?(name) 1267 @fields.any? { |f| f.name == name } 1268 end
# File lib/cassandra/types.rb 1350 def hash 1351 @hash ||= begin 1352 h = 17 1353 h = 31 * h + @kind.hash 1354 h = 31 * h + @keyspace.hash 1355 h = 31 * h + @name.hash 1356 h = 31 * h + @fields.hash 1357 h 1358 end 1359 end
Coerces the value to Cassandra::UDT
@param value [Object] original value @return [Cassandra::UDT] value @see Cassandra::Type#new
# File lib/cassandra/types.rb 1298 def new(*value) 1299 value = value.first if value.one? 1300 value = Array(value) unless value.is_a?(::Hash) 1301 1302 Util.assert(value.size <= @fields.size) do 1303 "too many values: #{value.size} out of #{@fields.size}" 1304 end 1305 1306 case value 1307 when ::Array 1308 result = ::Hash.new 1309 value.each_with_index do |v, i| 1310 f = @fields[i] 1311 Util.assert_type(f.type, v) 1312 result[f.name] = v 1313 end 1314 when ::Hash 1315 result = ::Hash.new 1316 @fields.each do |f| 1317 n = f.name 1318 v = value[n] 1319 Util.assert_type(f.type, v) 1320 result[n] = v 1321 end 1322 end 1323 1324 Cassandra::UDT::Strict.new(@keyspace, @name, @fields, result) 1325 end
Output this type in CQL
# File lib/cassandra/types.rb 1371 def to_cql 1372 cql = "CREATE TYPE #{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)} " \ 1373 "(\n" 1374 first = true 1375 1376 @fields.each do |field| 1377 if first 1378 first = false 1379 else 1380 cql << ",\n" unless first 1381 end 1382 cql << " #{field.name} #{type_to_cql(field.type)}" 1383 end 1384 1385 cql << "\n);" 1386 1387 cql 1388 end
@return [String] `“keyspace.name”` @see Cassandra::Type#to_s
# File lib/cassandra/types.rb 1345 def to_s 1346 "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)} " \ 1347 "{#{@fields.join(', ')}}" 1348 end
Private Instance Methods
@private
# File lib/cassandra/types.rb 1393 def type_to_cql(type) 1394 case type.kind 1395 when :tuple 1396 "frozen <#{type}>" 1397 when :udt 1398 if @keyspace == type.keyspace 1399 "frozen <#{Util.escape_name(type.name)}>" 1400 else 1401 "frozen <#{Util.escape_name(type.keyspace)}.#{Util.escape_name(type.name)}>" 1402 end 1403 else 1404 type.to_s 1405 end 1406 end