Module: ErpTechSvcs::Extensions::ActiveRecord::HasCapabilityAccessors::InstanceMethods

Defined in:
lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb

Instance Method Summary collapse

Instance Method Details

#add_capabilities(_capabilities) ⇒ Object Also known as: grant_capabilities

Add multiple capabilities

Parameters:

  • _capabilities (Array)

    Array of Capbilities



99
100
101
102
103
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 99

def add_capabilities(_capabilities)
  _capabilities.each do |capability|
    add_capability(capability)
  end
end

#add_capability(*capability) ⇒ Object Also known as: grant_capability

pass in (capability_type_iid, klass) or (capability) object



108
109
110
111
112
113
114
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 108

def add_capability(*capability)
  capability_type_iid = capability.first.is_a?(Symbol) ? capability.first.to_s : capability.first
  capability = capability_type_iid.is_a?(String) ? get_or_create_capability(capability_type_iid, capability.second) : capability.first
  ca = CapabilityAccessor.find_or_create_by_capability_accessor_record_type_and_capability_accessor_record_id_and_capability_id(get_superclass, self.id, capability.id)
  self.reload
  ca
end

#all_capabilitiesObject

method to get all capabilities for this model



57
58
59
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 57

def all_capabilities
  capabilities
end

#capabilitiesObject



46
47
48
49
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 46

def capabilities
  Capability.joins(:capability_type).joins(:capability_accessors).
    where(:capability_accessors => { :capability_accessor_record_type => self.class.name, :capability_accessor_record_id => self.id })
end

#capabilities_notObject

method to get capabilities this instance does NOT have



26
27
28
29
30
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 26

def capabilities_not
  Capability.joins(:capability_type).
    joins("LEFT JOIN capability_accessors ON capability_accessors.capability_id = capabilities.id AND capability_accessors.capability_accessor_record_type = '#{self.class.name}' AND capability_accessors.capability_accessor_record_id = #{self.id}").
    where("capability_accessors.id IS NULL")
end

#class_capabilitiesObject

method to get only class capabilities for this model



62
63
64
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 62

def class_capabilities
  scope_capabilities('class')
end

#class_capabilities_notObject

method to get only class capabilities this instance does NOT have



38
39
40
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 38

def class_capabilities_not
  scope_capabilities_not('class')
end

#get_capability(capability_type_iid, klass) ⇒ Object



86
87
88
89
90
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 86

def get_capability(capability_type_iid, klass)
  capability_type = convert_capability_type(capability_type_iid)
  scope_type = ScopeType.find_by_internal_identifier('class')
  Capability.find_by_capability_resource_type_and_capability_type_id_and_scope_type_id(klass, capability_type.id, scope_type.id)
end

#get_or_create_capability(capability_type_iid, klass) ⇒ Object



76
77
78
79
80
81
82
83
84
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 76

def get_or_create_capability(capability_type_iid, klass)
  capability_type = convert_capability_type(capability_type_iid)
  if klass.is_a?(String)
    scope_type = ScopeType.find_by_internal_identifier('class')
    Capability.find_or_create_by_capability_resource_type_and_capability_type_id_and_scope_type_id(klass, capability_type.id, scope_type.id)
  else
    klass.add_capability(capability_type_iid) # create instance capability
  end
end

#has_capabilities?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 92

def has_capabilities?
  !capability_accessors.empty?
end

#instance_capabilitiesObject

method to get only instance capabilities for this model



72
73
74
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 72

def instance_capabilities
  scope_capabilities('instance')
end

#query_capabilitiesObject

method to get only query capabilities for this model



67
68
69
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 67

def query_capabilities
  scope_capabilities('query')
end

#query_capabilities_notObject



42
43
44
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 42

def query_capabilities_not
  scope_capabilities_not('query')
end

#remove_all_capabilitiesObject Also known as: revoke_all_capabilities

Remove all current capabilities



143
144
145
146
147
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 143

def remove_all_capabilities
  capabilities.each do |capability|
    remove_capability(capability)
  end
end

#remove_capabilities(_capabilities) ⇒ Object Also known as: revoke_capabilities

Remove multiple capabilities

Parameters:

  • _capabilities (Array)

    Array of Capbilities



133
134
135
136
137
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 133

def remove_capabilities(_capabilities)
  _capabilities.each do |capability|
    remove_capability(capability)
  end
end

#remove_capability(*capability) ⇒ Object Also known as: revoke_capability

pass in (capability_type_iid, klass) or (capability) object



119
120
121
122
123
124
125
126
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 119

def remove_capability(*capability)
  capability_type_iid = capability.first.is_a?(Symbol) ? capability.first.to_s : capability.first
  capability = capability_type_iid.is_a?(String) ? get_or_create_capability(capability_type_iid, capability.second) : capability.first
  ca = capability_accessors.where(:capability_accessor_record_type => get_superclass, :capability_accessor_record_id => self.id, :capability_id => capability.id).first
  ca.destroy unless ca.nil?
  self.reload
  ca
end

#scope_capabilities(scope_type_iid) ⇒ Object



51
52
53
54
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 51

def scope_capabilities(scope_type_iid)
  scope_type = ScopeType.find_by_internal_identifier(scope_type_iid)
  capabilities.where(:scope_type_id => scope_type.id)
end

#scope_capabilities_not(scope_type_iid) ⇒ Object



32
33
34
35
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 32

def scope_capabilities_not(scope_type_iid)
  scope_type = ScopeType.find_by_internal_identifier(scope_type_iid)
  capabilities_not.where(:scope_type_id => scope_type.id)
end