Class: CustomActiveRecordObserver::Schema

Inherits:
Object
  • Object
show all
Defined in:
lib/custom_active_record_observer/schema.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(schema = {}) ⇒ Schema

{

'User' =>
  {
    update: [[rule_1, handler], [rule_2, handler]],
    create: [[rule_3, handler]]
  }
'Article' =>
  {
    destroy: [[rule5, handler]],
  }

}



18
19
20
# File 'lib/custom_active_record_observer/schema.rb', line 18

def initialize(schema = {})
  @schema = schema
end

Instance Attribute Details

#schemaObject (readonly)

Returns the value of attribute schema.



3
4
5
# File 'lib/custom_active_record_observer/schema.rb', line 3

def schema
  @schema
end

Instance Method Details

#add_rule(class_name, action, rules, handler) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/custom_active_record_observer/schema.rb', line 22

def add_rule(class_name, action, rules, handler)
  unless class_name.is_a?(Symbol)
    class_name = class_name.to_s.to_sym
  end

  schema[class_name] ||= {}
  schema[class_name][action] ||= []

  Array(rules).each do |rule|
    schema[class_name][action] << [rule, handler]
  end
end

#classesObject



44
45
46
# File 'lib/custom_active_record_observer/schema.rb', line 44

def classes
  schema.keys.map { |name| name.to_s.constantize }
end

#get_rules(class_name, action, raw_changes = {}) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/custom_active_record_observer/schema.rb', line 35

def get_rules(class_name, action, raw_changes = {})
  changes = raw_changes.symbolize_keys

  schema.fetch(class_name.to_sym, {}).
         fetch(action, []).select do |(rule, handler)|
    rule.allowed?(changes)
  end
end