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
1216 def initialize(keyspace, name, fields)
1217   super(:udt)
1218   @keyspace = keyspace
1219   @name = name
1220   @fields = fields
1221 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
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
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
1235 def each_field(&block)
1236   if block_given?
1237     @fields.each(&block)
1238     self
1239   else
1240     @fields.dup
1241   end
1242 end
Also aliased as: fields
eql?(other) click to toggle source
     # 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
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
1249 def field(name)
1250   @fields.find { |f| f.name == name }
1251 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
1225 def has_field?(name)
1226   @fields.any? { |f| f.name == name }
1227 end
hash() click to toggle source
     # 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
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
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
to_cql() click to toggle source

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

@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

type_to_cql(type) click to toggle source

@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