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   validate_conf!(conf)
42 
43   if conf[:on]
44     define_custom_method(clazz, name, conf[:on])
45   elsif conf[:auto]
46     define_uuid_method(clazz, name)
47   elsif conf.empty?
48     define_property_method(clazz, name)
49   end
50 end

Private Instance Methods

clear_methods(clazz, name) click to toggle source
    # File lib/neo4j/active_node/id_property.rb
115 def clear_methods(clazz, name)
116   clazz.module_eval(%(undef_method :#{name}), __FILE__, __LINE__) if clazz.method_defined?(name)
117   clazz.module_eval(%(undef_property :#{name}), __FILE__, __LINE__) if clazz.attribute_names.include?(name.to_s)
118 end
define_custom_method(clazz, name, on) click to toggle source
    # File lib/neo4j/active_node/id_property.rb
 98 def define_custom_method(clazz, name, on)
 99   clear_methods(clazz, name)
100 
101   clazz.module_eval(%{
102     default_property :#{name} do |instance|
103       raise "Specifying custom id_property #{name} on non-existent method #{on}" unless instance.respond_to?(:#{on})
104       instance.#{on}
105     end
106 
107     def #{name}
108       default_property_value
109     end
110 
111     alias_method :id, :#{name}
112   }, __FILE__, __LINE__)
113 end
define_property_method(clazz, name) click to toggle source
   # File lib/neo4j/active_node/id_property.rb
69 def define_property_method(clazz, name)
70   clear_methods(clazz, name)
71 
72   clazz.module_eval(%(
73     def id
74       _persisted_obj ? #{name.to_sym == :id ? 'attribute(\'id\')' : name} : nil
75     end
76 
77     property :#{name}
78           ), __FILE__, __LINE__)
79 end
define_uuid_method(clazz, name) click to toggle source
   # File lib/neo4j/active_node/id_property.rb
82 def define_uuid_method(clazz, name)
83   clear_methods(clazz, name)
84 
85   clazz.module_eval(%(
86     default_property :#{name} do
87        ::SecureRandom.uuid
88     end
89 
90     def #{name}
91        default_property_value
92     end
93 
94     alias_method :id, :#{name}
95           ), __FILE__, __LINE__)
96 end
validate_conf!(conf) click to toggle source
   # File lib/neo4j/active_node/id_property.rb
54 def validate_conf!(conf)
55   fail "Expected a Hash, got #{conf.class} (#{conf}) for id_property" if !conf.is_a?(Hash)
56 
57   return if conf[:on]
58 
59   if conf[:auto]
60     fail "only :uuid auto id_property allowed, got #{conf[:auto]}" if conf[:auto] != :uuid
61     return
62   end
63 
64   return if conf.empty?
65 
66   fail "Illegal value #{conf.inspect} for id_property, expected :on or :auto"
67 end