module Neo4j::ActiveNode::IdProperty::TypeMethods
Public Instance Methods
define_id_methods(clazz, name, conf)
click to toggle source
# File lib/neo4j/active_node/id_property.rb 40 def define_id_methods(clazz, name, conf) 41 return if name == :neo_id 42 43 validate_conf!(conf) 44 45 if conf[:on] 46 define_custom_method(clazz, name, conf[:on]) 47 elsif conf[:auto] 48 define_uuid_method(clazz, name) 49 elsif conf.empty? 50 define_property_method(clazz, name) 51 end 52 end
Private Instance Methods
clear_methods(clazz, name)
click to toggle source
# File lib/neo4j/active_node/id_property.rb 117 def clear_methods(clazz, name) 118 clazz.module_eval(%(undef_method :#{name}), __FILE__, __LINE__) if clazz.method_defined?(name) 119 clazz.module_eval(%(undef_property :#{name}), __FILE__, __LINE__) if clazz.attribute_names.include?(name.to_s) 120 end
define_custom_method(clazz, name, on)
click to toggle source
# File lib/neo4j/active_node/id_property.rb 100 def define_custom_method(clazz, name, on) 101 clear_methods(clazz, name) 102 103 clazz.module_eval(%{ 104 default_property :#{name} do |instance| 105 raise "Specifying custom id_property #{name} on non-existent method #{on}" unless instance.respond_to?(:#{on}) 106 instance.#{on} 107 end 108 109 def #{name} 110 default_property_value 111 end 112 113 alias_method :id, :#{name} 114 }, __FILE__, __LINE__) 115 end
define_property_method(clazz, name)
click to toggle source
# File lib/neo4j/active_node/id_property.rb 71 def define_property_method(clazz, name) 72 clear_methods(clazz, name) 73 74 clazz.module_eval(%( 75 def id 76 _persisted_obj ? #{name.to_sym == :id ? 'attribute(\'id\')' : name} : nil 77 end 78 79 property :#{name} 80 ), __FILE__, __LINE__) 81 end
define_uuid_method(clazz, name)
click to toggle source
# File lib/neo4j/active_node/id_property.rb 84 def define_uuid_method(clazz, name) 85 clear_methods(clazz, name) 86 87 clazz.module_eval(%( 88 default_property :#{name} do 89 ::SecureRandom.uuid 90 end 91 92 def #{name} 93 default_property_value 94 end 95 96 alias_method :id, :#{name} 97 ), __FILE__, __LINE__) 98 end
validate_conf!(conf)
click to toggle source
# File lib/neo4j/active_node/id_property.rb 56 def validate_conf!(conf) 57 fail "Expected a Hash, got #{conf.class} (#{conf}) for id_property" if !conf.is_a?(Hash) 58 59 return if conf[:on] 60 61 if conf[:auto] 62 fail "only :uuid auto id_property allowed, got #{conf[:auto]}" if conf[:auto] != :uuid 63 return 64 end 65 66 return if conf.empty? 67 68 fail "Illegal value #{conf.inspect} for id_property, expected :on or :auto" 69 end