module ActiveGraph::Node::IdProperty::TypeMethods

Public Instance Methods

define_id_methods(clazz, name, conf) click to toggle source
   # File lib/active_graph/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/active_graph/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/active_graph/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/active_graph/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/active_graph/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/active_graph/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