class Cassandra::Types::UserDefined

Attributes

fields[R]

@private

keyspace[R]

@return [String] keyspace where this type is defined

name[R]

@return [String] name of this type

Public Class Methods

new(keyspace, name, fields) click to toggle source

@private

Calls superclass method 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

==(other)
Alias for: eql?
assert(value, message = nil, &block) click to toggle source

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
each_field(&block) click to toggle source

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
Also aliased as: fields
eql?(other) click to toggle source
     # 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
Also aliased as: ==
field(name) click to toggle source

@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
has_field?(name) click to toggle source

@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
hash() click to toggle source
     # 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
new(*value) click to toggle source

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
to_cql() click to toggle source

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
to_s() click to toggle source

@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

type_to_cql(type) click to toggle source

@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