Class: Neo4j::Wrapper::Rule::Rule

Inherits:
Object
  • Object
show all
Defined in:
lib/neo4j-wrapper/rule/rule.rb

Overview

Holds all defined rules added by the Neo4j::Rule::ClassMethods#rule method.

See Also:

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rule_name, props, &block) ⇒ Rule

Returns a new instance of Rule.



13
14
15
16
17
18
19
20
21
# File 'lib/neo4j-wrapper/rule/rule.rb', line 13

def initialize(rule_name, props, &block)
  @rule_name = rule_name
  @triggers = props[:triggers]
  @functions = props[:functions]
  @triggers = [@triggers] if @triggers && !@triggers.respond_to?(:each)
  @functions = [@functions] if @functions && !@functions.respond_to?(:each)
  @filter = block
  @bulk_update = !@functions.nil? && @functions.size == 1 && @functions.first.class.function_name == :count && @filter.nil?
end

Instance Attribute Details

#filterObject (readonly)

Returns the value of attribute filter.



11
12
13
# File 'lib/neo4j-wrapper/rule/rule.rb', line 11

def filter
  @filter
end

#functionsObject (readonly)

Returns the value of attribute functions.



11
12
13
# File 'lib/neo4j-wrapper/rule/rule.rb', line 11

def functions
  @functions
end

#rule_nameObject (readonly)

Returns the value of attribute rule_name.



11
12
13
# File 'lib/neo4j-wrapper/rule/rule.rb', line 11

def rule_name
  @rule_name
end

#triggersObject (readonly)

Returns the value of attribute triggers.



11
12
13
# File 'lib/neo4j-wrapper/rule/rule.rb', line 11

def triggers
  @triggers
end

Class Method Details

.add(clazz, rule_name, props, &block) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/neo4j-wrapper/rule/rule.rb', line 67

def add(clazz, rule_name, props, &block)
  rule_node = rule_node_for(clazz.to_s)
  rule_node.remove_rule(rule_name) # remove any previously inherited rules
  rule = Rule.new(rule_name, props, &block)
  rule_node.add_rule(rule)
  rule
end

.bulk_trigger_rules(classname, class_change, map) ⇒ Object



111
112
113
114
115
116
117
# File 'lib/neo4j-wrapper/rule/rule.rb', line 111

def bulk_trigger_rules(classname, class_change, map)
  rule_node = rule_node_for(classname)
  rule_node.classes_changed(class_change)
  if (clazz = rule_node.model_class.superclass) && clazz.include?(Neo4j::NodeMixin)
    bulk_trigger_rules(clazz.name, class_change, map) if clazz.to_s != "Neo4j::Rails::Model"
  end
end

.find_rule_node(node) ⇒ Object



85
86
87
# File 'lib/neo4j-wrapper/rule/rule.rb', line 85

def find_rule_node(node)
  @rule_nodes && @rule_nodes.values.find { |rn| rn.rule_node?(node) }
end

.inherit(parent_class, subclass) ⇒ Object



89
90
91
92
93
94
# File 'lib/neo4j-wrapper/rule/rule.rb', line 89

def inherit(parent_class, subclass)
  # copy all the rules
  if rule_node = rule_node_for(parent_class)
    rule_node.inherit(subclass)
  end
end

.rule_names_for(clazz) ⇒ Object



75
76
77
78
# File 'lib/neo4j-wrapper/rule/rule.rb', line 75

def rule_names_for(clazz)
  rule_node = rule_node_for(clazz)
  rule_node.rules.map { |rule| rule.rule_name }
end

.rule_node_for(clazz) ⇒ Object



80
81
82
83
# File 'lib/neo4j-wrapper/rule/rule.rb', line 80

def rule_node_for(clazz)
  return nil if clazz.nil?
  @rule_nodes[clazz.to_s] ||= RuleNode.new(clazz)
end

.trigger?(node) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
99
# File 'lib/neo4j-wrapper/rule/rule.rb', line 96

def trigger?(node)
  classname = node[:_classname]
  @rule_nodes && classname && rule_node_for(classname) && !rule_node_for(classname).bulk_update?
end

.trigger_rules(node, *changes) ⇒ Object



101
102
103
104
105
106
107
108
109
# File 'lib/neo4j-wrapper/rule/rule.rb', line 101

def trigger_rules(node, *changes)
  classname = node[:_classname]
  return unless classname # there are no rules if there is not a :_classname property
  rule_node = rule_node_for(classname)
  rule_node.execute_rules(node, *changes)

  # recursively add relationships for all the parent classes with rules that also pass for this node
  recursive(node, rule_node.model_class, *changes)
end

Instance Method Details

#bulk_update?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/neo4j-wrapper/rule/rule.rb', line 55

def bulk_update?
  @bulk_update
end

#execute_filter(node) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/neo4j-wrapper/rule/rule.rb', line 45

def execute_filter(node)
  if @filter.nil?
    true
  elsif @filter.arity != 1
    node.wrapper.instance_eval(&@filter)
  else
    @filter.call(node)
  end
end

#find_function(function_name, function_id) ⇒ Object



27
28
29
30
# File 'lib/neo4j-wrapper/rule/rule.rb', line 27

def find_function(function_name, function_id)
  function_id = function_id.to_s
  @functions && @functions.find { |f| f.function_id == function_id && f.class.function_name == function_name }
end

#functions_for(property) ⇒ Object



41
42
43
# File 'lib/neo4j-wrapper/rule/rule.rb', line 41

def functions_for(property)
  @functions && @functions.find_all { |f| f.calculate?(property) }
end

#propsObject

Reconstruct the properties given when created this rule Needed when inheriting a rule and we want to duplicate a rule



34
35
36
37
38
39
# File 'lib/neo4j-wrapper/rule/rule.rb', line 34

def props
  props = {}
  props[:triggers] = @triggers if @triggers
  props[:functions] = @functions if @functions
  props
end

#to_sObject



23
24
25
# File 'lib/neo4j-wrapper/rule/rule.rb', line 23

def to_s
  "Rule #{rule_name} props=#{props.inspect}"
end