Class: Burlesque::Role

Inherits:
ApplicationRecord show all
Defined in:
app/models/burlesque/role.rb

Constant Summary collapse

SPLITER =
'#'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.for(model) ⇒ Object

TODO Mejorar el retorno, para saber que paso, ej: si se agregaron los 5 roles o si ya existen



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'app/models/burlesque/role.rb', line 80

def self.for model
  if model.class == String
    resource = model.classify.constantize.model_name.to_s.underscore
  elsif model.class == Symbol
    resource = model.classify.constantize.model_name.to_s.underscore
  elsif model.class == Class
    resource = model.model_name.to_s.underscore
  end

  if resource
    self.find_or_create_by(name: "#{resource}#{SPLITER}read")
    self.find_or_create_by(name: "#{resource}#{SPLITER}create")
    self.find_or_create_by(name: "#{resource}#{SPLITER}update")
    self.find_or_create_by(name: "#{resource}#{SPLITER}destroy")
  else
    raise I18n.t('errors.messages.invalid_param', param: model.class)
  end
end

Instance Method Details

#action_symObject

Public: Entrega la accion asociada al rol.

Returns Symbol.



67
68
69
# File 'app/models/burlesque/role.rb', line 67

def action_sym
  name.split('#', 2).last.to_sym
end

#adminsObject

Public: Relacion a muchos usuarios

Se usa esta funcion dado que la tabla de administrador es polimorfica.

Returns los administradores que tienen el rol en cuestion.



26
27
28
# File 'app/models/burlesque/role.rb', line 26

def admins
  admin_roles.map &:authorizable
end

#get_action_and_modelObject

Public: Entrega la accion y modelo asociado al rol.

Returns Symbol.



74
75
76
# File 'app/models/burlesque/role.rb', line 74

def get_action_and_model
  [action_sym, resource_class]
end

#resource_classObject

Public: Entrega el recurso asociado al rol.

Returns Constant.



55
56
57
58
59
60
61
62
# File 'app/models/burlesque/role.rb', line 55

def resource_class
  model_name = name.split('#', 2).first
  begin
    model_name.pluralize.classify.constantize
  rescue
    model_name.to_sym
  end
end

#translate_nameObject

Public: Traduce el nombre de un rol.

Primero revisa si existe una traducción para el rol bajo el scope de autorizaciones, luego si el no existe una traducción intenta traducir el nombre del rol usando la traduccion de Burleque, que traduce la acción por defecto e intenta usar las traducciones definidas para cada modelo

Returns el nombre del rol ya traducido.



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/models/burlesque/role.rb', line 38

def translate_name
  translate = I18n.t(name.to_sym, scope: :authorizations)
  return translate unless translate.include?('translation missing:')

  begin
    translate = I18n.t(action_sym, scope: :authorizations) + ' ' + resource_class.model_name.human
  rescue
    translate = I18n.t(action_sym, scope: :authorizations) + ' ' + resource_class.to_s
  end

  return translate unless translate.include?('translation missing:')
  return name
end