burlesque 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -2,3 +2,6 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+
6
+ # Mac OS X
7
+ .DS_Store
@@ -0,0 +1,49 @@
1
+ Burlesque
2
+ =========
3
+
4
+ Crea estructura de roles y grupos para cualquier modelo, considera además las 3 tablas de _join_ que pudiesen darse.
5
+
6
+ Installation
7
+ ------------
8
+
9
+ Before you can use the generator, add the gem to your project's Gemfile as follows:
10
+
11
+ ```
12
+ gem 'burlesque', :git => 'git@gitlab.acid.cl:burlesque.git'
13
+ ```
14
+
15
+ Then install it by running:
16
+
17
+ ```
18
+ bundle install
19
+ ```
20
+
21
+ Finally, bootstrap your Rails app, for example:
22
+
23
+ ```
24
+ rails generate burlesque:install
25
+ rake db:migrate
26
+ ```
27
+
28
+ CanCan
29
+ ------
30
+
31
+ Burlesque makes no assumption about how auhtorizations are handled in your application. However it integrates nicely with [CanCan][cancan]; all you have to do is define the `Ability` model as follows:
32
+
33
+ ```ruby
34
+ class Ability
35
+ include CanCan::Ability
36
+
37
+ def initialize(user)
38
+ if user
39
+ user.roles.each do |role|
40
+ action = role.name.split('_', 2).first
41
+ model = role.name.split('_', 2).last.pluralize.classify.constantize
42
+ can action.to_sym, model
43
+ end
44
+ end
45
+ end
46
+ end
47
+ ```
48
+
49
+ [cancan]: https://github.com/ryanb/cancan
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["mespina"]
9
9
  s.email = ["mespina.icc@gmail.com"]
10
10
  s.homepage = ""
11
- s.summary = "Rolos y grupos para cancan"
12
- s.description = "Rolos y grupos para cancan"
11
+ s.summary = "Roles y Grupos"
12
+ s.description = "Crea estructura de roles y grupos para caulquier modelo, considera ademas las 3 tablas de join que pudiesen darse"
13
13
 
14
14
  s.rubyforge_project = "burlesque"
15
15
 
@@ -0,0 +1,32 @@
1
+ en:
2
+ errors: &errors
3
+ messages:
4
+ role_taken: already assigned
5
+ group_taken: already assigned
6
+ invalid_param: '<%{param}> invalid, try with <Class>, <String> or <Symbol>'
7
+ access_denied: You are not authorized to perform this action.
8
+ activerecord:
9
+ models:
10
+ role:
11
+ one: Privilege
12
+ other: Privileges
13
+ group:
14
+ one: Group
15
+ other: Groups
16
+ attributes:
17
+ role:
18
+ name: Name
19
+ created_at: created
20
+ updated_at: updated
21
+ group:
22
+ name: Name
23
+ roles: Privileges
24
+ created_at: created
25
+ updated_at: updated
26
+ authorizations:
27
+ read: List
28
+ show: Show
29
+ create: Create
30
+ update: Update
31
+ destroy: Destroy
32
+ manage: Manage
@@ -23,10 +23,10 @@
23
23
  roles: Privilegios
24
24
  created_at: Creado
25
25
  updated_at: Última actualización
26
- internal: Uso exclusivo de Latamticket
27
26
  authorizations:
28
27
  read: Listar
29
28
  show: Mostrar
30
29
  create: Crear
31
30
  update: Actualizar
32
- destroy: Eliminar
31
+ destroy: Eliminar
32
+ manage: Administrar
@@ -1,5 +1,8 @@
1
+ require "burlesque/admin_group"
2
+ require "burlesque/authorization"
3
+ require "burlesque/group"
4
+ require "burlesque/role"
5
+ require "burlesque/role_group"
6
+ require "burlesque/locale"
7
+ require "burlesque/admin"
1
8
  require "burlesque/version"
2
-
3
- module Burlesque
4
- # Your code goes here...
5
- end
@@ -0,0 +1,112 @@
1
+ require 'active_support/concern'
2
+
3
+ module Burlesque
4
+ module Admin
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_many :authorizations, as: :authorizable, dependent: :destroy
9
+ has_many :roles, through: :authorizations
10
+
11
+ has_many :admin_groups, as: :adminable, dependent: :destroy
12
+ has_many :groups, through: :admin_groups, after_remove: :remove_roles_from_admin
13
+
14
+ attr_accessible :group_ids,
15
+ :role_ids
16
+ end
17
+
18
+ module InstanceMethods
19
+ # Public: Indica si tiene un rol en particular.
20
+ #
21
+ # role - el rol que se quiere consultar, puede ser un Role o Role.name
22
+ #
23
+ # Returns Boolean.
24
+ def role? role
25
+ role_name = role.respond_to?(:name) ? role.name : role
26
+ self.roles.map(&:name).include?(role_name.to_s)
27
+ end
28
+
29
+ # Public: Indica si tiene un grupo en particular.
30
+ #
31
+ # group - el grupo que se quiere consultar, puede ser un Group o Group.name
32
+ #
33
+ # Returns Boolean.
34
+ def group? group
35
+ group_name = group.respond_to?(:name) ? group.name : group
36
+ self.groups.map(&:name).include?(group_name.to_s)
37
+ end
38
+
39
+ # Public: Indica si un rol en particular esta presente en los grupos que tiene asignados.
40
+ #
41
+ # role - el rol que se quiere consultar, puede ser un Role o Role.name
42
+ #
43
+ # Returns Boolean.
44
+ def role_in_groups? role
45
+ role_name = role.respond_to?(:name) ? role.name : role
46
+ groups.each do |group|
47
+ return true if group.role?(role_name)
48
+ end
49
+ false
50
+ end
51
+
52
+ # Public: Permite setear los grupos que se indican.
53
+ # Eliminando los grupos que no esten en la lista.
54
+ #
55
+ # ids - id's de los Roles que se desean asignar destructivamente.
56
+ #
57
+ # Returns nothing.
58
+ def group_ids=(ids)
59
+ ids.each do |group_id|
60
+ group = ::Group.find(group_id)
61
+ self.groups << group unless self.groups.include?(group)
62
+ end
63
+
64
+ to_deletes = []
65
+ self.groups.each do |group|
66
+ to_deletes << group unless ids.include?(group.id.to_s)# or ids.include?(group.id)
67
+ end
68
+
69
+ to_deletes.each do |group|
70
+ self.groups.delete(group) if self.group?(group)
71
+ end
72
+ end
73
+
74
+ # Public: Permite setear los roles que se indican.
75
+ # Eliminando los roles que no esten en la lista,
76
+ # salvo en caso de estar presente por asignacion de un grupo.
77
+ #
78
+ # ids - id's de los Roles que se desean asignar destructivamente.
79
+ #
80
+ # Returns nothing.
81
+ def role_ids=(ids)
82
+ ids.each do |role_id|
83
+ role = ::Role.find(role_id)
84
+ self.roles << role unless self.role?(role)
85
+ end
86
+
87
+ to_deletes = []
88
+ self.roles.each do |role|
89
+ to_deletes << role unless ids.include?(role.id.to_s) or self.role_in_groups?(role)# or ids.include?(role.id)
90
+ end
91
+
92
+ to_deletes.each do |role|
93
+ self.roles.delete(role) if self.roles.include?(role)
94
+ end
95
+ end
96
+
97
+ private
98
+ # Public: Permite eliminar los roles de un grupo eliminado.
99
+ #
100
+ # group - El grupo que se elimino.
101
+ #
102
+ # Returns nothing.
103
+ def remove_roles_from_admin group
104
+ group.roles.each do |role|
105
+ if authorizations.map(&:role).include?(role) and not role_in_groups?(role.name)
106
+ authorizations.find_by_role_id(role.id).destroy
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,25 @@
1
+ require 'active_support/concern'
2
+
3
+ module Burlesque
4
+ module AdminGroup
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ belongs_to :group
9
+ belongs_to :adminable, polymorphic: true
10
+
11
+ validates_uniqueness_of :group_id, scope: [:adminable_id, :adminable_type], message: I18n.t('errors.messages.group_taken')
12
+
13
+ after_create :add_new_roles_to_admin
14
+ end
15
+
16
+ module InstanceMethods
17
+ private
18
+ def add_new_roles_to_admin
19
+ group.roles.each do |role|
20
+ adminable.roles << role unless adminable.roles.include? role
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ require 'active_support/concern'
2
+ module Burlesque
3
+ module Authorization
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ belongs_to :role
8
+ belongs_to :authorizable, polymorphic: true
9
+
10
+ validates_uniqueness_of :role_id, scope: [:authorizable_id, :authorizable_type], message: I18n.t('errors.messages.role_taken')
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,89 @@
1
+ require 'active_support/concern'
2
+
3
+ module Burlesque
4
+ module Group
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_many :role_groups
9
+ has_many :roles, through: :role_groups, dependent: :destroy, after_remove: :remove_roles_from_admin
10
+
11
+ has_many :admin_groups, dependent: :destroy
12
+ # for has_many :admins relations see admins function
13
+
14
+ attr_accessible :name, :role_ids, :internal
15
+
16
+ validates :name, presence: true, uniqueness: true
17
+ end
18
+
19
+ module InstanceMethods
20
+ # Public: Relacion a muchos usuarios
21
+ #
22
+ # Se usa esta funcion dado que la tabla de administrador es polimorfica.
23
+ #
24
+ # Returns los administradores que tienen el rol en cuestion.
25
+ def admins
26
+ admin_groups.map &:adminable
27
+ end
28
+
29
+ # Public: Indica si el grupo tiene un rol en particular.
30
+ #
31
+ # role - el rol que se quiere consultar, puede ser un Role o Role.name
32
+ #
33
+ # Returns Boolean.
34
+ def role? role
35
+ role_name = role.respond_to?(:name) ? role.name : role
36
+ self.roles.map(&:name).include?(role_name.to_s)
37
+ end
38
+
39
+ # Public: Setea los roles que se indican al grupo.
40
+ # Eliminando los roles que no esten en la lista.
41
+ #
42
+ # ids - id's de los Roles que se desean asignar destructivamente.
43
+ #
44
+ # Returns nothing.
45
+ def role_ids=(ids)
46
+ ids.each do |ri|
47
+ role = ::Role.find(ri)
48
+ self.roles << role unless self.roles.include? role
49
+ end
50
+
51
+ to_deletes = []
52
+ role_groups.each do |rg|
53
+ role = rg.role
54
+ to_deletes << role unless ids.include?(role.id.to_s) or ids.include?(role.id)
55
+ end
56
+
57
+ to_deletes.each do |role|
58
+ self.roles.delete(role) if self.roles.include?(role)
59
+ end
60
+ end
61
+
62
+ # Public: Permite agregar un grupo de Roles al Grupo
63
+ # No elimina los roles que no esten en la lista, solo agrega los que no estan.
64
+ #
65
+ # new_roles - el arreglo de roles que se quiere agregar al grupo
66
+ #
67
+ # Returns nothing.
68
+ def push_roles new_roles
69
+ new_roles.each do |role|
70
+ self.roles << role unless self.roles.include? role
71
+ end
72
+ end
73
+
74
+ private
75
+ # Public: Permite que al eliminar un rol de un grupo, tambien se modifiquen los roles de los administradores asociados a ese grupo.
76
+ #
77
+ # role - el rol que se elimino del grupo.
78
+ #
79
+ # Returns nothing.
80
+ def remove_roles_from_admin role
81
+ admins.each do |admin|
82
+ if admin.authorizations.map(&:role_id).include?(role.id) and not admin.role_in_groups?(role.name)
83
+ admin.authorizations.find_by_role_id(role.id).destroy
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,8 @@
1
+ module Burlesque
2
+ class Railtie < ::Rails::Railtie #:nodoc:
3
+ initializer 'rails-i18n' do |app|
4
+ I18n.load_path << Dir[File.join(File.expand_path(File.dirname(__FILE__) + '/../../config/locales'), '*.yml')]
5
+ I18n.load_path.flatten!
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,80 @@
1
+ require 'active_support/concern'
2
+
3
+ module Burlesque
4
+ module Role
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_many :role_groups
9
+ has_many :groups, through: :role_groups, dependent: :destroy
10
+
11
+ has_many :authorizations, dependent: :destroy
12
+ # for has_many :admins relations see admins function
13
+
14
+ attr_accessible :name
15
+ validates :name, presence: true, uniqueness: true
16
+
17
+
18
+ scope :action, lambda { |action| where('name LIKE ?', "#{action}_%") }
19
+ scope :not_action, lambda { |action| where('name NOT LIKE ?', "#{action}_%") }
20
+ scope :resource, lambda { |model| where('name LIKE ? or name LIKE ?', "%_#{model.to_s.singularize}", "%_#{model.to_s.pluralize}") }
21
+ scope :not_resource, lambda { |model| where('name NOT LIKE ? AND name NOT LIKE ?', "%_#{model.to_s.singularize}", "%_#{model.to_s.pluralize}") }
22
+ end
23
+
24
+ module InstanceMethods
25
+ # Public: Relacion a muchos usuarios
26
+ #
27
+ # Se usa esta funcion dado que la tabla de administrador es polimorfica.
28
+ #
29
+ # Returns los administradores que tienen el rol en cuestion.
30
+ def admins
31
+ authorizations.map &:authorizable
32
+ end
33
+
34
+ # Public: Traduce el nombre de un rol.
35
+ #
36
+ # Primero revisa si existe una traducción para el rol bajo el scope de autorizaciones,
37
+ # luego si el no existe una traducción intenta traducir el nombre del rol usando la
38
+ # traduccion de Burleque, que traduce la acción por defecto e intenta usar las traducciones
39
+ # definidas para cada modelo
40
+ #
41
+ # Returns el nombre del rol ya traducido.
42
+ def translate_name
43
+ translate = I18n.t(name.to_sym, scope: :authorizations)
44
+ return translate unless translate.include?('translation missing:')
45
+
46
+
47
+ action, model = name.split('_', 2)
48
+
49
+ count = (model == model.pluralize) ? 2 : 1
50
+ model = model.pluralize
51
+
52
+ translate = I18n.t(action.to_sym, scope: :authorizations) + ' ' + model.classify.constantize.model_name.human(count: count)
53
+ end
54
+ end
55
+
56
+ module ClassMethods
57
+ # TODO
58
+ # Mejorar el retorno, para saber que paso, ej: si se agregaron los 5 roles o si ya existen
59
+ def for model
60
+ if model.class == String
61
+ resource = model.classify.constantize.model_name.underscore
62
+ elsif model.class == Symbol
63
+ resource = model.to_s.classify.constantize.model_name.underscore
64
+ elsif model.class == Class
65
+ resource = model.model_name.underscore
66
+ end
67
+
68
+ if resource
69
+ self.create(name: "read_#{resource.pluralize}") unless self.where(name: "read_#{resource.pluralize}").any?
70
+ self.create(name: "show_#{resource}") unless self.where(name: "show_#{resource}").any?
71
+ self.create(name: "create_#{resource}") unless self.where(name: "create_#{resource}").any?
72
+ self.create(name: "update_#{resource}") unless self.where(name: "update_#{resource}").any?
73
+ self.create(name: "destroy_#{resource}") unless self.where(name: "destroy_#{resource}").any?
74
+ else
75
+ raise I18n.t('errors.messages.invalid_param', param: model.class)
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,30 @@
1
+ require 'active_support/concern'
2
+
3
+ module Burlesque
4
+ module RoleGroup
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ belongs_to :role
9
+ belongs_to :group
10
+
11
+ validates_uniqueness_of :role_id, scope: :group_id, message: I18n.t('errors.messages.role_taken')
12
+
13
+ after_save :add_new_roles_to_admin
14
+ end
15
+
16
+
17
+ module InstanceMethods
18
+ private
19
+
20
+ # Public: Actualiza los roles de los administradores luego de haber actualizado el grupo de roles.
21
+ #
22
+ # Returns nothing.
23
+ def add_new_roles_to_admin
24
+ group.admins.each do |admin|
25
+ admin.roles << self.role unless admin.roles.include?(self.role)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,3 @@
1
1
  module Burlesque
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,85 @@
1
+ require 'rails/generators/migration'
2
+ require 'thor/shell/basic.rb'
3
+
4
+ module Burlesque
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ def copy_model_and_migration
11
+ ######## Role #######
12
+ # Crea el modelo Role
13
+ copy_file "role.rb", "app/models/role.rb"
14
+
15
+ # Crea la tabla del modelo
16
+ if not role = Dir.glob("db/migrate/[0-9]*_*.rb").grep(/\d+_create_roles.rb$/).first
17
+ migration_template "create_roles.rb", "db/migrate/create_roles.rb"
18
+ else
19
+ Thor::Shell::Basic.new.say_status :exist, role, :blue
20
+ end
21
+
22
+ ######## Authorization #######
23
+ # Crea el modelo Authorization
24
+ copy_file "authorization.rb", "app/models/authorization.rb"
25
+
26
+ # Crea la tabla del modelo
27
+ if not authorization = Dir.glob("db/migrate/[0-9]*_*.rb").grep(/\d+_create_authorizations.rb$/).first
28
+ migration_template "create_authorizations.rb", "db/migrate/create_authorizations.rb"
29
+ else
30
+ Thor::Shell::Basic.new.say_status :exist, authorization, :blue
31
+ end
32
+
33
+ ######## Group #######
34
+ # Crea el modelo Group
35
+ copy_file "group.rb", "app/models/group.rb"
36
+
37
+ # Crea la tabla del modelo
38
+ if not group = Dir.glob("db/migrate/[0-9]*_*.rb").grep(/\d+_create_groups.rb$/).first
39
+ migration_template "create_groups.rb", "db/migrate/create_groups.rb"
40
+ else
41
+ Thor::Shell::Basic.new.say_status :exist, group, :blue
42
+ end
43
+
44
+ ######## Role-Group #######
45
+ # Crea el modelo Role-Group
46
+ copy_file "role_group.rb", "app/models/role_group.rb"
47
+
48
+ # Crea la tabla del modelo
49
+ if not role_group = Dir.glob("db/migrate/[0-9]*_*.rb").grep(/\d+_create_role_groups.rb$/).first
50
+ migration_template "create_role_groups.rb", "db/migrate/create_role_groups.rb"
51
+ else
52
+ Thor::Shell::Basic.new.say_status :exist, role_group, :blue
53
+ end
54
+
55
+ ######## Admin-Group #######
56
+ # Crea el modelo Admin-Group
57
+ copy_file "admin_group.rb", "app/models/admin_group.rb"
58
+
59
+ # Crea la tabla del modelo
60
+ if not admin_group = Dir.glob("db/migrate/[0-9]*_*.rb").grep(/\d+_create_admin_groups.rb$/).first
61
+ migration_template "create_admin_groups.rb", "db/migrate/create_admin_groups.rb"
62
+ else
63
+ Thor::Shell::Basic.new.say_status :exist, admin_group, :blue
64
+ end
65
+ end
66
+
67
+
68
+ def self.next_migration_number path
69
+ # unless @prev_migration_nr
70
+ # @prev_migration_nr = Dir.glob("#{Rails.root}/db/migrate/[0-9]*_*.rb").inject(0) do |max, file_path|
71
+ # n = File.basename(file_path).split('_', 2).first.to_i
72
+ # if n > max then n else max end
73
+ # end
74
+ # else
75
+ # @prev_migration_nr += 1
76
+ # end
77
+
78
+ # ActiveRecord::Migration.new.next_migration_number(@prev_migration_nr.to_s)
79
+
80
+ next_migration_number = current_migration_number(path) + 1
81
+ ActiveRecord::Migration.next_migration_number(next_migration_number)
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,3 @@
1
+ class AdminGroup < ActiveRecord::Base
2
+ include Burlesque::AdminGroup
3
+ end
@@ -0,0 +1,3 @@
1
+ class Authorization < ActiveRecord::Base
2
+ include Burlesque::Authorization
3
+ end
@@ -0,0 +1,13 @@
1
+ class CreateAdminGroups < ActiveRecord::Migration
2
+ def change
3
+ create_table :admin_groups do |t|
4
+ t.references :group
5
+ t.integer :adminable_id
6
+ t.string :adminable_type
7
+
8
+ t.timestamps
9
+ end
10
+ add_index :admin_groups, :group_id
11
+ add_index :admin_groups, [:adminable_id, :adminable_type], name: 'by_adminable'
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ class CreateAuthorizations < ActiveRecord::Migration
2
+ def change
3
+ create_table :authorizations do |t|
4
+ t.references :role
5
+ t.integer :authorizable_id
6
+ t.string :authorizable_type
7
+
8
+ t.timestamps
9
+ end
10
+ add_index :authorizations, :role_id
11
+ add_index :authorizations, [:authorizable_id, :authorizable_type], name: 'by_authorizable'
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ class CreateGroups < ActiveRecord::Migration
2
+ def change
3
+ create_table :groups do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ class CreateRoleGroups < ActiveRecord::Migration
2
+ def change
3
+ create_table :role_groups do |t|
4
+ t.references :role
5
+ t.references :group
6
+
7
+ t.timestamps
8
+ end
9
+ add_index :role_groups, :role_id
10
+ add_index :role_groups, :group_id
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class CreateRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table :roles do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ class Group < ActiveRecord::Base
2
+ include Burlesque::Group
3
+ end
@@ -0,0 +1,3 @@
1
+ class Role < ActiveRecord::Base
2
+ include Burlesque::Role
3
+ end
@@ -0,0 +1,3 @@
1
+ class RoleGroup < ActiveRecord::Base
2
+ include Burlesque::RoleGroup
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: burlesque
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,9 +9,10 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-28 00:00:00.000000000 Z
12
+ date: 2013-08-29 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Rolos y grupos para cancan
14
+ description: Crea estructura de roles y grupos para caulquier modelo, considera ademas
15
+ las 3 tablas de join que pudiesen darse
15
16
  email:
16
17
  - mespina.icc@gmail.com
17
18
  executables: []
@@ -20,11 +21,31 @@ extra_rdoc_files: []
20
21
  files:
21
22
  - .gitignore
22
23
  - Gemfile
24
+ - README.md
23
25
  - Rakefile
24
26
  - burlesque.gemspec
27
+ - config/locales/burlesque.en.yml
25
28
  - config/locales/burlesque.es-CL.yml
26
29
  - lib/burlesque.rb
30
+ - lib/burlesque/admin.rb
31
+ - lib/burlesque/admin_group.rb
32
+ - lib/burlesque/authorization.rb
33
+ - lib/burlesque/group.rb
34
+ - lib/burlesque/locale.rb
35
+ - lib/burlesque/role.rb
36
+ - lib/burlesque/role_group.rb
27
37
  - lib/burlesque/version.rb
38
+ - lib/generators/burlesque/install_generator.rb
39
+ - lib/generators/burlesque/templates/admin_group.rb
40
+ - lib/generators/burlesque/templates/authorization.rb
41
+ - lib/generators/burlesque/templates/create_admin_groups.rb
42
+ - lib/generators/burlesque/templates/create_authorizations.rb
43
+ - lib/generators/burlesque/templates/create_groups.rb
44
+ - lib/generators/burlesque/templates/create_role_groups.rb
45
+ - lib/generators/burlesque/templates/create_roles.rb
46
+ - lib/generators/burlesque/templates/group.rb
47
+ - lib/generators/burlesque/templates/role.rb
48
+ - lib/generators/burlesque/templates/role_group.rb
28
49
  homepage: ''
29
50
  licenses: []
30
51
  post_install_message:
@@ -45,8 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
66
  version: '0'
46
67
  requirements: []
47
68
  rubyforge_project: burlesque
48
- rubygems_version: 1.8.24
69
+ rubygems_version: 1.8.25
49
70
  signing_key:
50
71
  specification_version: 3
51
- summary: Rolos y grupos para cancan
72
+ summary: Roles y Grupos
52
73
  test_files: []