roles 0.0.1
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 +8 -0
- data/.travis.yml +14 -0
- data/CHANGELOG.rdoc +2 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +103 -0
- data/Rakefile +9 -0
- data/UPGRADE.rdoc +2 -0
- data/lib/generators/roles/role/role_generator.rb +47 -0
- data/lib/generators/roles/role/templates/README +7 -0
- data/lib/generators/roles/role/templates/README-active_record +17 -0
- data/lib/generators/roles/role/templates/migration.rb +15 -0
- data/lib/generators/roles/role/templates/role-active_record.rb +5 -0
- data/lib/roles/railtie.rb +20 -0
- data/lib/roles/resource.rb +25 -0
- data/lib/roles/role.rb +85 -0
- data/lib/roles/version.rb +3 -0
- data/lib/roles.rb +40 -0
- data/roles.gemspec +32 -0
- metadata +160 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.rdoc
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012 Liu Fengyun
|
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/README.md
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
# Roles
|
2
|
+
|
3
|
+
Roles is an extremely simple roles gem inspired by rolify.
|
4
|
+
|
5
|
+
This library is recommended to be used with [CanCan](https://github.com/ryanb/cancan) and [devise](https://github.com/plataformatec/devise).
|
6
|
+
|
7
|
+
## Quick Start
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
|
11
|
+
# query roles
|
12
|
+
user.has_role?(:admin) # if user is admin globally
|
13
|
+
user.has_role?(:admin, Organization) # if user is admin for Organization type
|
14
|
+
user.has_role?(:admin, Organization.first) # if user is not admin of the first organization
|
15
|
+
|
16
|
+
# grant roles
|
17
|
+
user.add_role(:admin) # a global admin
|
18
|
+
user.add_role(:admin, Organization) # admin for type Organization
|
19
|
+
user.add_role(:admin, Organization.first) # admin for the first organization
|
20
|
+
|
21
|
+
# revoke roles
|
22
|
+
user.remove_role(:admin) # remove global admin
|
23
|
+
user.remove_role(:admin, Organization) # remove admin for type Organization
|
24
|
+
user.remove_role(:admin, Organization.first) # remove admin for the first organization
|
25
|
+
|
26
|
+
# global role DON'T overrides resource role request
|
27
|
+
user = User.find(4)
|
28
|
+
user.add_role :moderator # sets a global role
|
29
|
+
user.has_role? :moderator, Forum # => false
|
30
|
+
user.add_role :moderator, Forum # sets a role on resource type
|
31
|
+
user.has_role? :moderator, Forum.first # => false
|
32
|
+
user.has_role? :moderator, Forum.last # => false
|
33
|
+
|
34
|
+
# query about users
|
35
|
+
Forum.users_with_role(role = nil) => returns all users with roles defined on Forum
|
36
|
+
forum.users_with_role => returns users with a role defined of current instance
|
37
|
+
User.with_role(role, resource = nil) => returns all users with the given role, optionally scoped by Class, instance or non-scoped(globally)
|
38
|
+
|
39
|
+
# query about resources
|
40
|
+
user.resouces(resource_class, :role_name = nil) => returns all resources of type resource_class for a given user, optionally filtered by role_name.
|
41
|
+
|
42
|
+
```
|
43
|
+
|
44
|
+
## Requirements
|
45
|
+
|
46
|
+
* Rails >= 3.1
|
47
|
+
* ActiveRecord >= 3.1
|
48
|
+
* supports ruby 1.9, JRuby 1.6.0+ (in 1.9 mode) and Rubinius 2.0.0dev (in 1.9 mode)
|
49
|
+
|
50
|
+
## Installation
|
51
|
+
|
52
|
+
Add this to your Gemfile and run the +bundle+ command.
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
gem "roles"
|
56
|
+
```
|
57
|
+
|
58
|
+
## Getting Started
|
59
|
+
|
60
|
+
### 1. Generate Role Model
|
61
|
+
|
62
|
+
First, create your Role model and migration file using this generator:
|
63
|
+
|
64
|
+
```
|
65
|
+
rails g rolify:role Role User
|
66
|
+
```
|
67
|
+
|
68
|
+
Role and User classes are the default. You can specify any Role class name you want. This is completly a new file so any name can do the job.
|
69
|
+
For the User class name, you would probably use the one provided by your authentication solution. rolify just adds some class methods in an existing User class.
|
70
|
+
|
71
|
+
|
72
|
+
### 2. Run the migration
|
73
|
+
|
74
|
+
```
|
75
|
+
rake db:migrate
|
76
|
+
```
|
77
|
+
|
78
|
+
### 3.1 Configure your user model
|
79
|
+
|
80
|
+
This gem adds the `rolify` method to your User class.
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
class User < ActiveRecord::Base
|
84
|
+
rolify
|
85
|
+
end
|
86
|
+
```
|
87
|
+
|
88
|
+
### 3.2 Configure your resource models
|
89
|
+
|
90
|
+
In the resource models you want to apply roles on, just add ``resourcify`` method.
|
91
|
+
For example, on this ActiveRecord class:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
class Forum < ActiveRecord::Base
|
95
|
+
resourcify
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
## Resources
|
100
|
+
|
101
|
+
* [Rolify](https://github.com/EppO/rolify)
|
102
|
+
* [Amazing tutorial](http://railsapps.github.com/tutorial-rails-bootstrap-devise-cancan.html) provided by [RailsApps](http://railsapps.github.com/)
|
103
|
+
|
data/Rakefile
ADDED
data/UPGRADE.rdoc
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rails/generators/migration'
|
2
|
+
|
3
|
+
module Roles
|
4
|
+
module Generators
|
5
|
+
class RoleGenerator < Rails::Generators::Base
|
6
|
+
include Rails::Generators::Migration
|
7
|
+
|
8
|
+
source_root File.expand_path('../templates', __FILE__)
|
9
|
+
argument :role_cname, :type => :string, :default => "Role"
|
10
|
+
argument :user_cname, :type => :string, :default => "User"
|
11
|
+
argument :orm_adapter, :type => :string, :default => "active_record"
|
12
|
+
|
13
|
+
desc "Generates a model with the given NAME and a migration file."
|
14
|
+
|
15
|
+
def generate_role
|
16
|
+
template "role-#{orm_adapter}.rb", "app/models/#{role_cname.underscore}.rb"
|
17
|
+
inject_into_file(model_path, :after => inject_roles_method) do
|
18
|
+
" roles" + (role_cname == "Role" ? "" : " :role_cname => '#{role_cname.camelize}'") + "\n"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def copy_role_file
|
23
|
+
migration_template "migration.rb", "db/migrate/roles_create_#{role_cname.tableize}" if orm_adapter == "active_record"
|
24
|
+
end
|
25
|
+
|
26
|
+
def model_path
|
27
|
+
File.join("app", "models", "#{user_cname.underscore}.rb")
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.next_migration_number(path)
|
31
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
32
|
+
end
|
33
|
+
|
34
|
+
def show_readme
|
35
|
+
readme "README-#{orm_adapter}" if behavior == :invoke
|
36
|
+
end
|
37
|
+
|
38
|
+
def inject_roles_method
|
39
|
+
if orm_adapter == "active_record"
|
40
|
+
/class #{user_cname.camelize}\n|class #{user_cname.camelize} .*\n/
|
41
|
+
else
|
42
|
+
/include Mongoid::Document\n|include Mongoid::Document .*\n/
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
===============================================================================
|
2
|
+
|
3
|
+
A Role class has been been created in app/models (with the name you gave as
|
4
|
+
argument otherwise the default is role.rb), you can add your own business logic
|
5
|
+
inside.
|
6
|
+
|
7
|
+
Inside your User class (or the name you gave as argument otherwise the default
|
8
|
+
is user.rb), roles method has been inserted to provide roles methods.
|
9
|
+
|
10
|
+
Now, if you just have to run the migration using rake command:
|
11
|
+
|
12
|
+
rake db:migrate
|
13
|
+
|
14
|
+
and you will be able to add the resourcify method inside all models you want
|
15
|
+
scoped by a role.
|
16
|
+
|
17
|
+
===============================================================================
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class RolesCreate<%= role_cname.pluralize.camelize %> < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table(:<%= role_cname.tableize %>) do |t|
|
4
|
+
t.string :name
|
5
|
+
t.references :resource, :polymorphic => true
|
6
|
+
t.references :<%= user_cname.underscore.singularize %>
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
|
11
|
+
add_index(:<%= role_cname.tableize %>, :name)
|
12
|
+
add_index(:<%= role_cname.tableize %>, [ :name, :resource_type, :resource_id ])
|
13
|
+
add_index(:<%= role_cname.tableize %>, [ :<%= user_cname.underscore.singularize %>_id, :name ])
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'roles'
|
2
|
+
require 'rails'
|
3
|
+
|
4
|
+
module Rolies
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
initializer 'roles.initialize' do
|
7
|
+
ActiveSupport.on_load(:active_record) do
|
8
|
+
ActiveRecord::Base.send :extend, Roles
|
9
|
+
end
|
10
|
+
|
11
|
+
config.before_initialize do
|
12
|
+
::Mongoid::Document.module_eval do
|
13
|
+
def self.included(base)
|
14
|
+
base.extend Roles
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end if defined?(Mongoid)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Roles
|
2
|
+
module Resource
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def users_with_role(role_name = nil)
|
9
|
+
if role_name.nil?
|
10
|
+
self.user_class.joins(:roles).where("roles.resource_type LIKE '%s'", self.to_s).where("roles.resource_id IS NULL")
|
11
|
+
else
|
12
|
+
self.user_class.joins(:roles).where("roles.resource_type LIKE '%s'", self.to_s).where("roles.resource_id IS NULL").where("roles.name LIKE '%s'", role_name.to_s)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def users_with_role(role_name = nil)
|
18
|
+
if role_name.nil?
|
19
|
+
self.class.user_class.joins(:roles).where("roles.resource_type LIKE '%s'", self.class.to_s).where("roles.resource_id = %s", self.id)
|
20
|
+
else
|
21
|
+
self.class.user_class.joins(:roles).where("roles.resource_type LIKE '%s'", self.class.to_s).where("roles.resource_id = %s", self.id).where("roles.name LIKE '%s'", role_name.to_s)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/roles/role.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
module Roles
|
2
|
+
module Role
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def with_role(role_name, resource = nil)
|
9
|
+
if resource.nil?
|
10
|
+
self.joins(:roles).where("roles.name LIKE '%s'", role_name.to_s).where("roles.resource_type IS NULL").where("roles.resource_id IS NULL")
|
11
|
+
elsif resource.is_a? Class
|
12
|
+
self.joins(:roles).where("roles.name LIKE '%s'", role_name.to_s).where("roles.resource_type = '%s'", resource.to_s).where("roles.resource_id IS NULL")
|
13
|
+
else
|
14
|
+
self.joins(:roles).where("roles.name LIKE '%s'", role_name.to_s).where("roles.resource_type = '%s'", resource.to_s).where("roles.resource_id = %s", resource.id)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_role(role_name, resource = nil)
|
20
|
+
if resource.nil?
|
21
|
+
self.roles.where(:resource_type => nil).where(:resource_id => nil).find_or_create_by_name(:name => role_name.to_s)
|
22
|
+
elsif resource.is_a? Class
|
23
|
+
self.roles.where(:resource_type => resource.to_s).where(:resource_id => nil).find_or_create_by_name(:name => role_name.to_s)
|
24
|
+
else
|
25
|
+
self.roles.where(:resource_type => resource.class.to_s).where(:resource_id => resource.id).find_or_create_by_name(:name => role_name.to_s)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
alias_method :grant, :add_role
|
29
|
+
|
30
|
+
def has_role?(role_name, resource = nil)
|
31
|
+
if new_record?
|
32
|
+
self.roles.detect { |r| r.name == role_name.to_s && (r.resource == resource || resource.nil?) }.present?
|
33
|
+
else
|
34
|
+
if resource.nil?
|
35
|
+
self.roles.where(:name => role_name.to_s).where(:resource_type => nil).where(:resource_id => nil).size > 0
|
36
|
+
elsif resource.is_a? Class
|
37
|
+
self.roles.where(:name => role_name.to_s).where(:resource_type => resource.to_s).where(:resource_id => nil).size > 0
|
38
|
+
else
|
39
|
+
self.roles.where(:name => role_name.to_s).where(:resource_type => resource.class.to_s).where(:resource_id => resource.id).size > 0
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def remove_role(role_name, resource = nil)
|
45
|
+
if resource.nil?
|
46
|
+
self.roles.where(:name => role_name.to_s).where(:resource_type => nil).where(:resource_id => nil).destroy_all
|
47
|
+
elsif resource.is_a? Class
|
48
|
+
self.roles.where(:name => role_name.to_s).where(:resource_type => resource.to_s).where(:resource_id => nil).destroy_all
|
49
|
+
else
|
50
|
+
self.roles.where(:name => role_name.to_s).where(:resource_type => resource.class.to_s).where(:resource_id => resource.id).destroy_all
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
alias_method :revoke, :remove_role
|
55
|
+
|
56
|
+
def role_names(resource = nil)
|
57
|
+
if resource.nil?
|
58
|
+
self.roles.where(:resource_type => nil).where(:resource_id => nil).select(:name).map { |r| r.name }
|
59
|
+
elsif resource.is_a? Class
|
60
|
+
self.roles.where(:resource_type => resource.name).where(:resource_id => nil).select(:name).map { |r| r.name }
|
61
|
+
else
|
62
|
+
self.roles.where(:resource_type => resource.class.to_s).where(:resource_id => resource.id).select(:name).map { |r| r.name }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def resources(resource_class, role_name = nil)
|
67
|
+
if role_name.nil?
|
68
|
+
resource_class.joins(:roles).where("roles.#{self.class.user_cname.underscore.singularize}_id = %s", self.id).where("roles.resource_type LIKE '%s'", resource_class.to_s)
|
69
|
+
else
|
70
|
+
resource_class.joins(:roles).where("roles.#{self.class.user_cname.underscore.singularize}_id = %s", self.id).where("roles.resource_type LIKE '%s'", resource_class.to_s).where("roles.name LIKE '%s'", role_name.to_s)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def method_missing(method, *args, &block)
|
75
|
+
if method.to_s.match(/^is_(\w+)_of[?]$/) || method.to_s.match(/^is_(\w+)[?]$/)
|
76
|
+
if self.class.role_class.where(:name => $1).count > 0
|
77
|
+
resource = args.first
|
78
|
+
return has_role?("#{$1}", resource)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
super
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
data/lib/roles.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'roles/railtie' if defined?(Rails)
|
2
|
+
require 'roles/role'
|
3
|
+
require 'roles/resource'
|
4
|
+
|
5
|
+
module Roles
|
6
|
+
attr_accessor :role_cname
|
7
|
+
attr_accessor :user_cname
|
8
|
+
|
9
|
+
def roles(options = {})
|
10
|
+
include Role
|
11
|
+
|
12
|
+
options.reverse_merge!({:role_cname => 'Role'})
|
13
|
+
|
14
|
+
roles_options = { :class_name => options[:role_cname].camelize }
|
15
|
+
roles_options.merge!(options.select{ |k,v| [:before_add, :after_add, :before_remove, :after_remove].include? k.to_sym })
|
16
|
+
|
17
|
+
has_many :roles, roles_options
|
18
|
+
|
19
|
+
self.role_cname = options[:role_cname]
|
20
|
+
end
|
21
|
+
|
22
|
+
def resourcify(options = {})
|
23
|
+
include Resource
|
24
|
+
|
25
|
+
options.reverse_merge!({ :role_cname => 'Role', :dependent => :destroy })
|
26
|
+
resourcify_options = { :class_name => options[:role_cname].camelize, :as => :resource, :dependent => options[:dependent] }
|
27
|
+
has_many :roles, resourcify_options
|
28
|
+
|
29
|
+
self.role_cname = options[:role_cname]
|
30
|
+
self.user_cname = options[:user_cname] || 'User'
|
31
|
+
end
|
32
|
+
|
33
|
+
def user_class
|
34
|
+
self.user_cname.constantize
|
35
|
+
end
|
36
|
+
|
37
|
+
def role_class
|
38
|
+
self.role_cname.constantize
|
39
|
+
end
|
40
|
+
end
|
data/roles.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "roles/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "roles"
|
7
|
+
s.version = Roles::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["liufengyun"]
|
10
|
+
s.email = ["liufengyunchina@gmail.com"]
|
11
|
+
s.homepage = "http://github.com/liufengyun/roles"
|
12
|
+
s.summary = %q{Roles library with resource scoping}
|
13
|
+
s.description = %q{An extremely simple roles library inspired by rolify}
|
14
|
+
|
15
|
+
s.rubyforge_project = s.name
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
|
23
|
+
s.add_development_dependency "activerecord-jdbcsqlite3-adapter"
|
24
|
+
else
|
25
|
+
s.add_development_dependency "sqlite3"
|
26
|
+
end
|
27
|
+
s.add_development_dependency "activerecord", ">= 3.1.0"
|
28
|
+
s.add_development_dependency "rake"
|
29
|
+
s.add_development_dependency "rspec", ">= 2.0"
|
30
|
+
s.add_development_dependency "rspec-rails", ">= 2.0"
|
31
|
+
s.add_development_dependency "bundler"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: roles
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- liufengyun
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sqlite3
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activerecord
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.1.0
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 3.1.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '2.0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec-rails
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '2.0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '2.0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: bundler
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
description: An extremely simple roles library inspired by rolify
|
111
|
+
email:
|
112
|
+
- liufengyunchina@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- .gitignore
|
118
|
+
- .travis.yml
|
119
|
+
- CHANGELOG.rdoc
|
120
|
+
- Gemfile
|
121
|
+
- LICENSE
|
122
|
+
- README.md
|
123
|
+
- Rakefile
|
124
|
+
- UPGRADE.rdoc
|
125
|
+
- lib/generators/roles/role/role_generator.rb
|
126
|
+
- lib/generators/roles/role/templates/README
|
127
|
+
- lib/generators/roles/role/templates/README-active_record
|
128
|
+
- lib/generators/roles/role/templates/migration.rb
|
129
|
+
- lib/generators/roles/role/templates/role-active_record.rb
|
130
|
+
- lib/roles.rb
|
131
|
+
- lib/roles/railtie.rb
|
132
|
+
- lib/roles/resource.rb
|
133
|
+
- lib/roles/role.rb
|
134
|
+
- lib/roles/version.rb
|
135
|
+
- roles.gemspec
|
136
|
+
homepage: http://github.com/liufengyun/roles
|
137
|
+
licenses: []
|
138
|
+
post_install_message:
|
139
|
+
rdoc_options: []
|
140
|
+
require_paths:
|
141
|
+
- lib
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
none: false
|
144
|
+
requirements:
|
145
|
+
- - ! '>='
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '0'
|
148
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
|
+
none: false
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements: []
|
155
|
+
rubyforge_project: roles
|
156
|
+
rubygems_version: 1.8.24
|
157
|
+
signing_key:
|
158
|
+
specification_version: 3
|
159
|
+
summary: Roles library with resource scoping
|
160
|
+
test_files: []
|