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