core_models 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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +34 -0
- data/lib/core_models.rb +4 -0
- data/lib/core_models/models/concerns/group_concerns.rb +31 -0
- data/lib/core_models/models/concerns/role_concerns.rb +31 -0
- data/lib/core_models/models/concerns/user_concerns.rb +102 -0
- data/lib/core_models/models/group.rb +25 -0
- data/lib/core_models/models/group_membership.rb +16 -0
- data/lib/core_models/models/groups_role.rb +15 -0
- data/lib/core_models/models/permission.rb +24 -0
- data/lib/core_models/models/role.rb +33 -0
- data/lib/core_models/models/roles_permission.rb +15 -0
- data/lib/core_models/models/user.rb +63 -0
- data/lib/core_models/version.rb +3 -0
- data/lib/generators/core_models_setup_generator.rb +19 -0
- data/lib/tasks/core_models_tasks.rake +4 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +26 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +23 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/friendly_id.rb +88 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +56 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20150220064247_create_friendly_id_slugs.rb +15 -0
- data/spec/dummy/db/schema.rb +93 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +256 -0
- data/spec/dummy/log/test.log +21878 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/test.sqlite3 +0 -0
- data/spec/models/group_spec.rb +94 -0
- data/spec/models/permission_spec.rb +49 -0
- data/spec/models/role_spec.rb +113 -0
- data/spec/models/user_spec.rb +139 -0
- data/spec/rails_helper.rb +57 -0
- data/spec/schema.rb +103 -0
- data/spec/spec_helper.rb +85 -0
- data/spec/support/factories.rb +54 -0
- data/spec/support/model_classes.rb +36 -0
- data/spec/support/setup.rb +48 -0
- data/spec/test.sqlite3 +0 -0
- metadata +294 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cf3f58b587e3777e45aec16369a533180e2b42a0
|
4
|
+
data.tar.gz: 763caf91792393472bbe867505f4a8aa35707cb2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0d85d1815a6cb0cd28248ad40e6edf877193507e328d751b84d1fca783e5588a315d238c7b876c5add4df3b88efee573086b32c109096a27b9986b5a732d99a1
|
7
|
+
data.tar.gz: b72f6ed31f012c38fbfa3e89acb9128811b0aa6846115faf879f4123232835354c8cc7314b9eb3f67c4f5a3eab2670b686f8921ebd61319303bce47514d4a85f
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2015 Adam Balan
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'CoreModels'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
Bundler::GemHelper.install_tasks
|
23
|
+
|
24
|
+
require 'rake/testtask'
|
25
|
+
|
26
|
+
Rake::TestTask.new(:test) do |t|
|
27
|
+
t.libs << 'lib'
|
28
|
+
t.libs << 'test'
|
29
|
+
t.pattern = 'test/**/*_test.rb'
|
30
|
+
t.verbose = false
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
task default: :test
|
data/lib/core_models.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module CoreModels
|
2
|
+
module Models
|
3
|
+
module Concerns
|
4
|
+
module GroupConcerns
|
5
|
+
def has_role?(name)
|
6
|
+
self.roles.where(role_name: name).any?
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_role(name)
|
10
|
+
self.roles.find(name.parameterize)
|
11
|
+
end
|
12
|
+
|
13
|
+
def role_names
|
14
|
+
self.roles.pluck(:role_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_role=(name)
|
18
|
+
self.roles << self.roles.klass.find_by(role_name: name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def change_roles=(names)
|
22
|
+
self.roles =self.roles.klass.where(role_name: names)
|
23
|
+
end
|
24
|
+
|
25
|
+
def remove_role=(name)
|
26
|
+
self.roles.delete(self.roles.klass.find_by(role_name: name))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module CoreModels
|
2
|
+
module Models
|
3
|
+
module Concerns
|
4
|
+
module RoleConcerns
|
5
|
+
def has_permission?(name)
|
6
|
+
self.permissions.where(permission_name: name).any?
|
7
|
+
end
|
8
|
+
|
9
|
+
def has_group?(name)
|
10
|
+
self.groups.where(group_name: name).any?
|
11
|
+
end
|
12
|
+
|
13
|
+
def permission_names
|
14
|
+
self.permissions.pluck(:permission_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_permission=(name)
|
18
|
+
self.permissions << self.permissions.klass.find_by(permission_name: name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def change_permissions=(names)
|
22
|
+
self.permissions = self.permissions.klass.where(permission_name: names)
|
23
|
+
end
|
24
|
+
|
25
|
+
def remove_permission=(name)
|
26
|
+
self.permissions.delete(self.permissions.klass.find_by(permission_name: name))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module CoreModels
|
2
|
+
module Models
|
3
|
+
module Concerns
|
4
|
+
module UserConcerns
|
5
|
+
def has_group?(name)
|
6
|
+
self.groups.each do |g|
|
7
|
+
if g.group_name == name
|
8
|
+
return true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
return false
|
13
|
+
end
|
14
|
+
|
15
|
+
def has_role?(name)
|
16
|
+
self.roles.each do |r|
|
17
|
+
if r.role_name == name
|
18
|
+
return true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
return false
|
23
|
+
end
|
24
|
+
|
25
|
+
def has_role_for_group?(name, group_name)
|
26
|
+
if self.groups.where(group_name: group_name).any?
|
27
|
+
if self.groups.find(group_name.parameterize).roles.where(role_name: name).any?
|
28
|
+
self.has_role?(name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_group_membership(group, role)
|
34
|
+
self.group_memberships.create!(group_id: group.id, role_id: role.id)
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_role_from_group_membership(group_id)
|
38
|
+
self.group_memberships.find_by!(group_id: group_id).role
|
39
|
+
end
|
40
|
+
|
41
|
+
def remove_group_membership(group_name)
|
42
|
+
group = self.groups.klass.find_by!(group_name: group_name)
|
43
|
+
self.group_memberships.where(group_id: group.id).delete_all
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_group=(group_name)
|
47
|
+
self.groups << self.groups.klass.find_by(group_name: group_name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def role
|
51
|
+
self.roles.first.try(:role_name)
|
52
|
+
end
|
53
|
+
|
54
|
+
def group
|
55
|
+
self.groups.first.try(:group_name)
|
56
|
+
end
|
57
|
+
|
58
|
+
def group_names
|
59
|
+
associated_groups = Array.new
|
60
|
+
self.groups.each do |group|
|
61
|
+
associated_groups.push(group.group_name)
|
62
|
+
end
|
63
|
+
|
64
|
+
associated_groups
|
65
|
+
end
|
66
|
+
|
67
|
+
def role_names
|
68
|
+
associated_roles = Array.new
|
69
|
+
self.roles.each do |role|
|
70
|
+
associated_roles.push(role.role_name)
|
71
|
+
end
|
72
|
+
|
73
|
+
associated_roles
|
74
|
+
end
|
75
|
+
|
76
|
+
def uniq_permissions
|
77
|
+
permission_array = Array.new
|
78
|
+
|
79
|
+
self.roles.each do |role|
|
80
|
+
role.permissions.each do |permission|
|
81
|
+
permission_array.push(permission.permission_name)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
permission_array.uniq
|
86
|
+
end
|
87
|
+
|
88
|
+
def permissions
|
89
|
+
permission_array = Array.new
|
90
|
+
|
91
|
+
self.roles.each do |role|
|
92
|
+
role.permissions.each do |permission|
|
93
|
+
permission_array.push(permission.permission_name)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
permission_array
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'concerns/group_concerns'
|
2
|
+
require 'active_support/concern'
|
3
|
+
|
4
|
+
module CoreModels
|
5
|
+
module Models
|
6
|
+
module Group
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
include CoreModels::Models::Concerns::GroupConcerns
|
9
|
+
|
10
|
+
included do
|
11
|
+
extend FriendlyId
|
12
|
+
friendly_id :group_name, use: [:slugged, :finders, :history]
|
13
|
+
|
14
|
+
has_many :group_memeberships
|
15
|
+
has_many :users, :through => :group_memberships
|
16
|
+
|
17
|
+
has_many :groups_roles
|
18
|
+
has_many :roles, :through => :groups_roles
|
19
|
+
|
20
|
+
validates :group_name, presence: true, uniqueness: true
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module CoreModels
|
4
|
+
module Models
|
5
|
+
module Permission
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
extend FriendlyId
|
10
|
+
friendly_id :permission_name, use: [:slugged, :finders, :history]
|
11
|
+
|
12
|
+
has_many :roles_permissions
|
13
|
+
has_many :roles, :through => :roles_permissions
|
14
|
+
|
15
|
+
validates :permission_name, presence: true, uniqueness: true
|
16
|
+
end
|
17
|
+
|
18
|
+
def should_generate_new_friendly_id?
|
19
|
+
permission_name_changed?
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'concerns/role_concerns'
|
2
|
+
require 'active_support/concern'
|
3
|
+
|
4
|
+
module CoreModels
|
5
|
+
module Models
|
6
|
+
module Role
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
include CoreModels::Models::Concerns::RoleConcerns
|
9
|
+
|
10
|
+
included do
|
11
|
+
extend FriendlyId
|
12
|
+
|
13
|
+
friendly_id :role_name, use: [:slugged, :finders, :history]
|
14
|
+
|
15
|
+
has_many :group_memberships
|
16
|
+
has_many :users, :through => :group_memberships
|
17
|
+
|
18
|
+
has_many :groups_roles
|
19
|
+
has_many :groups, :through => :groups_roles
|
20
|
+
|
21
|
+
has_many :roles_permissions
|
22
|
+
has_many :permissions, :through => :roles_permissions
|
23
|
+
|
24
|
+
validates :role_name, presence: true
|
25
|
+
validates_uniqueness_of :role_name
|
26
|
+
end
|
27
|
+
|
28
|
+
def should_generate_new_friendly_id?
|
29
|
+
role_name_changed?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative 'concerns/user_concerns'
|
2
|
+
require 'active_support/concern'
|
3
|
+
require 'bcrypt'
|
4
|
+
|
5
|
+
module CoreModels
|
6
|
+
module Models
|
7
|
+
module User
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
include CoreModels::Models::Concerns::UserConcerns
|
10
|
+
|
11
|
+
included do
|
12
|
+
extend FriendlyId
|
13
|
+
friendly_id :first_name, use: [:slugged, :finders, :history]
|
14
|
+
|
15
|
+
before_save :encrypt_password
|
16
|
+
|
17
|
+
has_many :group_memberships, :dependent => :delete_all
|
18
|
+
has_many :groups, :through => :group_memberships, :dependent => :delete_all
|
19
|
+
has_many :roles, :through => :group_memberships, :dependent => :delete_all
|
20
|
+
|
21
|
+
validates :first_name, presence: true
|
22
|
+
validates :user_name, uniqueness: true, presence: true, length: {minimum: 5}
|
23
|
+
validates :email, presence: true, confirmation: true, uniqueness: true
|
24
|
+
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
|
25
|
+
validates :password, presence: true, confirmation: true, length: { minimum: 10 }, if: :new_record?
|
26
|
+
|
27
|
+
before_create{ generate_token(:auth_token) }
|
28
|
+
end
|
29
|
+
|
30
|
+
class_methods do
|
31
|
+
def authenticate_user(user_name, password)
|
32
|
+
user = self.find_by_user_name(user_name)
|
33
|
+
if(user && (user.password == BCrypt::Engine.hash_secret(password, user.salt)))
|
34
|
+
user
|
35
|
+
else
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def encrypt_password
|
42
|
+
if password.present?
|
43
|
+
self.salt = BCrypt::Engine.generate_salt
|
44
|
+
self.password = BCrypt::Engine.hash_secret(password, salt)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def send_password_reset
|
49
|
+
generate_token(:password_reset_token)
|
50
|
+
self.password_reset_timestamp = Time.zone.now
|
51
|
+
save!
|
52
|
+
UserMailer.password_reset(self).deliver
|
53
|
+
end
|
54
|
+
|
55
|
+
protected
|
56
|
+
def generate_token(column)
|
57
|
+
begin
|
58
|
+
self[column] = SecureRandom.urlsafe_base64
|
59
|
+
end while self.class.exists?(column => self[column])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|