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 1216 def initialize(keyspace, name, fields) 1217 super(:udt) 1218 @keyspace = keyspace 1219 @name = name 1220 @fields = fields 1221 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 1293 def assert(value, message = nil, &block) 1294 Util.assert_instance_of(Cassandra::UDT, value, message, &block) 1295 Util.assert(value.size <= @fields.size, message, &block) 1296 @fields.each do |field| 1297 Util.assert_type(field.type, value[field.name], message, &block) 1298 end 1299 nil 1300 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 1235 def each_field(&block) 1236 if block_given? 1237 @fields.each(&block) 1238 self 1239 else 1240 @fields.dup 1241 end 1242 end
# File lib/cassandra/types.rb 1320 def eql?(other) 1321 other.is_a?(UserDefined) && 1322 @keyspace == other.keyspace && 1323 @name == other.name && 1324 @fields == other.fields 1325 end
@param name [String] field name @return [Cassandra::UserDefined::Field, nil] a field with this name or
nil
# File lib/cassandra/types.rb 1249 def field(name) 1250 @fields.find { |f| f.name == name } 1251 end
@param name [String] field name @return [Boolean] whether this type has a given field
# File lib/cassandra/types.rb 1225 def has_field?(name) 1226 @fields.any? { |f| f.name == name } 1227 end
# File lib/cassandra/types.rb 1309 def hash 1310 @hash ||= begin 1311 h = 17 1312 h = 31 * h + @kind.hash 1313 h = 31 * h + @keyspace.hash 1314 h = 31 * h + @name.hash 1315 h = 31 * h + @fields.hash 1316 h 1317 end 1318 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 1257 def new(*value) 1258 value = value.first if value.one? 1259 value = Array(value) unless value.is_a?(::Hash) 1260 1261 Util.assert(value.size <= @fields.size) do 1262 "too many values: #{value.size} out of #{@fields.size}" 1263 end 1264 1265 case value 1266 when ::Array 1267 result = ::Hash.new 1268 value.each_with_index do |v, i| 1269 f = @fields[i] 1270 Util.assert_type(f.type, v) 1271 result[f.name] = v 1272 end 1273 when ::Hash 1274 result = ::Hash.new 1275 @fields.each do |f| 1276 n = f.name 1277 v = value[n] 1278 Util.assert_type(f.type, v) 1279 result[n] = v 1280 end 1281 end 1282 1283 Cassandra::UDT::Strict.new(@keyspace, @name, @fields, result) 1284 end
Output this type in CQL
# File lib/cassandra/types.rb 1330 def to_cql 1331 cql = "CREATE TYPE #{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)} " \ 1332 "(\n" 1333 first = true 1334 1335 @fields.each do |field| 1336 if first 1337 first = false 1338 else 1339 cql << ",\n" unless first 1340 end 1341 cql << " #{field.name} #{type_to_cql(field.type)}" 1342 end 1343 1344 cql << "\n);" 1345 1346 cql 1347 end
@return [String] `“keyspace.name”` @see Cassandra::Type#to_s
# File lib/cassandra/types.rb 1304 def to_s 1305 "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)} " \ 1306 "{#{@fields.join(', ')}}" 1307 end
Private Instance Methods
@private
# File lib/cassandra/types.rb 1352 def type_to_cql(type) 1353 case type.kind 1354 when :tuple 1355 "frozen <#{type}>" 1356 when :udt 1357 if @keyspace == type.keyspace 1358 "frozen <#{Util.escape_name(type.name)}>" 1359 else 1360 "frozen <#{Util.escape_name(type.keyspace)}.#{Util.escape_name(type.name)}>" 1361 end 1362 else 1363 type.to_s 1364 end 1365 end