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_capability(*capability) ⇒ Object

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



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

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



59
60
61
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 59

def all_capabilities
  capabilities
end

#capabilitiesObject



48
49
50
51
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 48

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



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

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



64
65
66
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 64

def class_capabilities
  scope_capabilities('class')
end

#class_capabilities_notObject

method to get only class capabilities this instance does NOT have



40
41
42
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 40

def class_capabilities_not
  scope_capabilities_not('class')
end

#get_capability(capability_type_iid, klass) ⇒ Object



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

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



91
92
93
94
95
96
97
98
99
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 91

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

#grant_capability(*capability) ⇒ Object



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

def grant_capability(*capability)
  add_capability(*capability)
end

#has_capabilities?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 121

def has_capabilities?
  !capability_accessors.empty?
end

#instance_capabilitiesObject

method to get only instance capabilities for this model



74
75
76
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 74

def instance_capabilities
  scope_capabilities('instance')
end

#query_capabilitiesObject

method to get only query capabilities for this model



69
70
71
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 69

def query_capabilities
  scope_capabilities('query')
end

#query_capabilities_notObject



44
45
46
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 44

def query_capabilities_not
  scope_capabilities_not('query')
end

#remove_capability(*capability) ⇒ Object

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



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

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

#revoke_capability(*capability) ⇒ Object



117
118
119
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 117

def revoke_capability(*capability)
  remove_capability(*capability)
end

#scope_capabilities(scope_type_iid) ⇒ Object



53
54
55
56
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 53

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



34
35
36
37
# File 'lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb', line 34

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