Module: ActiveGraph::Shared::TypeConverters
Defined Under Namespace
Classes: BaseConverter, BigDecimalConverter, Boolean, BooleanConverter, DateConverter, DateTimeConverter, EnumConverter, FloatConverter, IntegerConverter, JSONConverter, ObjectConverter, StringConverter, TimeConverter, YAMLConverter
Constant Summary
collapse
- CONVERTERS =
{}
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.converter_for(type) ⇒ Object
422
423
424
|
# File 'lib/active_graph/shared/type_converters.rb', line 422
def converter_for(type)
type.respond_to?(:db_type) ? type : CONVERTERS[type]
end
|
Attempts to determine whether conversion should be skipped because the object is already of the anticipated output type.
429
430
431
432
|
# File 'lib/active_graph/shared/type_converters.rb', line 429
def formatted_for_db?(found_converter, value)
return false unless found_converter.respond_to?(:db_type)
found_converter.respond_to?(:converted?) ? found_converter.converted?(value) : value.is_a?(found_converter.db_type)
end
|
.included(_) ⇒ Object
395
396
397
398
399
400
|
# File 'lib/active_graph/shared/type_converters.rb', line 395
def included(_)
ActiveGraph::Shared::TypeConverters.constants.each do |constant_name|
constant = ActiveGraph::Shared::TypeConverters.const_get(constant_name)
register_converter(constant) if constant.respond_to?(:convert_type)
end
end
|
.register_converter(converter) ⇒ Object
434
435
436
|
# File 'lib/active_graph/shared/type_converters.rb', line 434
def register_converter(converter)
CONVERTERS[converter.convert_type] = converter
end
|
.to_other(direction, value, type) ⇒ Object
414
415
416
417
418
419
420
|
# File 'lib/active_graph/shared/type_converters.rb', line 414
def to_other(direction, value, type)
fail "Unknown direction given: #{direction}" unless direction == :to_ruby || direction == :to_db
found_converter = converter_for(type)
return value unless found_converter
return value if direction == :to_db && formatted_for_db?(found_converter, value)
found_converter.send(direction, value)
end
|
.typecast_attribute(typecaster, value) ⇒ Object
402
403
404
405
406
|
# File 'lib/active_graph/shared/type_converters.rb', line 402
def typecast_attribute(typecaster, value)
fail ArgumentError, "A typecaster must be given, #{typecaster} is invalid" unless typecaster.respond_to?(:to_ruby)
return value if value.nil?
typecaster.to_ruby(value)
end
|
.typecaster_for(primitive_type) ⇒ Object
408
409
410
411
|
# File 'lib/active_graph/shared/type_converters.rb', line 408
def typecaster_for(primitive_type)
return nil if primitive_type.nil?
CONVERTERS[primitive_type]
end
|
Instance Method Details
#convert_properties_to(obj, medium, properties) ⇒ Object
Modifies a hash’s values to be of types acceptable to Neo4j or matching what the user defined using type in property definitions.
335
336
337
338
339
340
341
342
343
344
345
346
347
|
# File 'lib/active_graph/shared/type_converters.rb', line 335
def convert_properties_to(obj, medium, properties)
direction = medium == :ruby ? :to_ruby : :to_db
properties.to_h.each_pair do |key, value|
next if skip_conversion?(obj, key, value)
converted_value = convert_property(key, value, direction)
if properties.is_a?(ActiveGraph::AttributeSet)
properties.write_cast_value(key, converted_value)
else
properties[key] = converted_value
end
end
end
|
#convert_property(key, value, direction) ⇒ Object
Converts a single property from its current format to its db- or Ruby-expected output type.
353
354
355
|
# File 'lib/active_graph/shared/type_converters.rb', line 353
def convert_property(key, value, direction)
converted_property(primitive_type(key.to_sym), value, direction)
end
|
#supports_array?(key) ⇒ Boolean
357
358
359
360
|
# File 'lib/active_graph/shared/type_converters.rb', line 357
def supports_array?(key)
type = primitive_type(key.to_sym)
type.respond_to?(:supports_array?) && type.supports_array?
end
|
#typecast_attribute(typecaster, value) ⇒ Object
#typecaster_for(value) ⇒ Object