rolify 2.2.2 → 3.0.0
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/.travis.yml +11 -7
- data/CHANGELOG.rdoc +6 -0
- data/README.rdoc +36 -4
- data/UPGRADE.rdoc +22 -0
- data/lib/generators/rolify/role/role_generator.rb +5 -6
- data/lib/generators/rolify/role/templates/README-active_record +21 -0
- data/lib/generators/rolify/role/templates/README-mongoid +17 -0
- data/lib/generators/rolify/role/templates/initializer.rb +5 -6
- data/lib/generators/rolify/role/templates/{role.rb → role-active_record.rb} +0 -0
- data/lib/generators/rolify/role/templates/role-mongoid.rb +8 -0
- data/lib/rolify/adapters/active_record.rb +83 -0
- data/lib/rolify/adapters/base.rb +53 -0
- data/lib/rolify/adapters/mongoid.rb +87 -0
- data/lib/rolify/configure.rb +40 -0
- data/lib/rolify/dynamic.rb +21 -0
- data/lib/rolify/railtie.rb +20 -0
- data/lib/rolify/resource.rb +25 -0
- data/lib/rolify/role.rb +32 -110
- data/lib/rolify/version.rb +1 -1
- data/lib/rolify.rb +35 -0
- data/rolify.gemspec +3 -2
- data/spec/generators/rolify/role/role_generator_spec.rb +75 -16
- data/spec/rolify/config_spec.rb +189 -0
- data/spec/rolify/custom_spec.rb +15 -0
- data/spec/rolify/resource_spec.rb +317 -0
- data/spec/rolify/role_spec.rb +8 -495
- data/spec/rolify/shared_contexts.rb +74 -0
- data/spec/rolify/shared_examples/shared_examples_for_dynamic.rb +110 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_all_roles.rb +71 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_any_role.rb +71 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_no_role.rb +97 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_role_getter.rb +135 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_role_setter.rb +92 -0
- data/spec/rolify/shared_examples/shared_examples_for_roles.rb +80 -0
- data/spec/spec_helper.rb +10 -5
- data/spec/support/{models.rb → adapters/active_record.rb} +11 -8
- data/spec/support/adapters/mongoid.rb +56 -0
- data/spec/support/data.rb +14 -5
- metadata +76 -20
- data/benchmarks/performance.rb +0 -51
| @@ -0,0 +1,80 @@ | |
| 1 | 
            +
            require "rolify/shared_contexts"
         | 
| 2 | 
            +
            require "rolify/shared_examples/shared_examples_for_has_role_setter"
         | 
| 3 | 
            +
            require "rolify/shared_examples/shared_examples_for_has_role_getter"
         | 
| 4 | 
            +
            require "rolify/shared_examples/shared_examples_for_has_all_roles"
         | 
| 5 | 
            +
            require "rolify/shared_examples/shared_examples_for_has_any_role"
         | 
| 6 | 
            +
            require "rolify/shared_examples/shared_examples_for_has_no_role"
         | 
| 7 | 
            +
             | 
| 8 | 
            +
             | 
| 9 | 
            +
            shared_examples_for Rolify::Role do
         | 
| 10 | 
            +
              before(:all) do
         | 
| 11 | 
            +
                reset_defaults
         | 
| 12 | 
            +
                Rolify.dynamic_shortcuts = false
         | 
| 13 | 
            +
                user_class.rolify :role_cname => role_class.to_s
         | 
| 14 | 
            +
                role_class.destroy_all
         | 
| 15 | 
            +
                Forum.resourcify :role_cname => role_class.to_s
         | 
| 16 | 
            +
                Group.resourcify :role_cname => role_class.to_s
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              context "in a Instance level" do 
         | 
| 20 | 
            +
                before(:all) do
         | 
| 21 | 
            +
                  admin = user_class.first
         | 
| 22 | 
            +
                  admin.has_role "admin"
         | 
| 23 | 
            +
                  admin.has_role "moderator", Forum.first
         | 
| 24 | 
            +
                  admin
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                subject do
         | 
| 28 | 
            +
                  user_class.first
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                it { should respond_to(:has_role).with(1).arguments }
         | 
| 32 | 
            +
                it { should respond_to(:has_role).with(2).arguments }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                it { should respond_to(:grant).with(1).arguments }
         | 
| 35 | 
            +
                it { should respond_to(:grant).with(2).arguments }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                it { should respond_to(:has_role?).with(1).arguments }
         | 
| 38 | 
            +
                it { should respond_to(:has_role?).with(2).arguments }
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                it { should respond_to(:has_all_roles?) }
         | 
| 41 | 
            +
                it { should respond_to(:has_all_roles?) }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                it { should respond_to(:has_any_role?) }
         | 
| 44 | 
            +
                it { should respond_to(:has_any_role?) }
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                it { should respond_to(:has_no_role).with(1).arguments }
         | 
| 47 | 
            +
                it { should respond_to(:has_no_role).with(2).arguments }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                it { should respond_to(:revoke).with(1).arguments }
         | 
| 50 | 
            +
                it { should respond_to(:revoke).with(2).arguments }
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                it { should_not respond_to(:is_admin?) }
         | 
| 53 | 
            +
                it { should_not respond_to(:is_moderator_of?) }
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              describe "#has_role" do 
         | 
| 57 | 
            +
                it_should_behave_like "#has_role_examples", "String", :to_s
         | 
| 58 | 
            +
                it_should_behave_like "#has_role_examples", "Symbol", :to_sym
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              describe "#has_role?" do    
         | 
| 62 | 
            +
                it_should_behave_like "#has_role?_examples", "String", :to_s
         | 
| 63 | 
            +
                it_should_behave_like "#has_role?_examples", "Symbol", :to_sym
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              describe "#has_all_roles?" do
         | 
| 67 | 
            +
                it_should_behave_like "#has_all_roles?_examples", "String", :to_s
         | 
| 68 | 
            +
                it_should_behave_like "#has_all_roles?_examples", "Symbol", :to_sym
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
              
         | 
| 71 | 
            +
              describe "#has_any_role?" do
         | 
| 72 | 
            +
                it_should_behave_like "#has_any_role?_examples", "String", :to_s
         | 
| 73 | 
            +
                it_should_behave_like "#has_any_role?_examples", "Symbol", :to_sym
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
              
         | 
| 76 | 
            +
              describe "#has_no_role" do
         | 
| 77 | 
            +
                it_should_behave_like "#has_no_role_examples", "String", :to_s
         | 
| 78 | 
            +
                it_should_behave_like "#has_no_role_examples", "Symbol", :to_sym
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -1,12 +1,17 @@ | |
| 1 1 | 
             
            require 'rubygems'
         | 
| 2 2 | 
             
            require 'bundler/setup'
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            require 'mongoid'
         | 
| 5 | 
            +
            Bundler.require(:default, :development, :test)
         | 
| 5 6 | 
             
            require 'rolify'
         | 
| 6 7 | 
             
            require 'ammeter/init'
         | 
| 7 8 |  | 
| 8 | 
            -
             | 
| 9 | 
            +
            ENV['ADAPTER'] ||= 'active_record'
         | 
| 9 10 |  | 
| 10 | 
            -
            load File.dirname(__FILE__) +  | 
| 11 | 
            -
            load File.dirname(__FILE__) + '/support/ | 
| 12 | 
            -
             | 
| 11 | 
            +
            load File.dirname(__FILE__) + "/support/adapters/#{ENV['ADAPTER']}.rb"
         | 
| 12 | 
            +
            load File.dirname(__FILE__) + '/support/data.rb'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            def reset_defaults
         | 
| 15 | 
            +
              Rolify.use_defaults
         | 
| 16 | 
            +
              Rolify.use_mongoid if ENV['ADAPTER'] == "mongoid"
         | 
| 17 | 
            +
            end
         | 
| @@ -1,7 +1,11 @@ | |
| 1 | 
            +
            ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
         | 
| 2 | 
            +
            ActiveRecord::Base.extend Rolify
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            load File.dirname(__FILE__) + '/../schema.rb'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            # ActiveRecord models
         | 
| 1 7 | 
             
            class User < ActiveRecord::Base
         | 
| 2 | 
            -
               | 
| 3 | 
            -
              include Rolify::Roles
         | 
| 4 | 
            -
              extend Rolify::Dynamic
         | 
| 8 | 
            +
              rolify
         | 
| 5 9 | 
             
            end
         | 
| 6 10 |  | 
| 7 11 | 
             
            class Role < ActiveRecord::Base
         | 
| @@ -10,19 +14,18 @@ class Role < ActiveRecord::Base | |
| 10 14 | 
             
            end
         | 
| 11 15 |  | 
| 12 16 | 
             
            class Forum < ActiveRecord::Base
         | 
| 17 | 
            +
              #resourcify done during specs setup to be able to use custom user classes
         | 
| 13 18 | 
             
            end
         | 
| 14 19 |  | 
| 15 20 | 
             
            class Group < ActiveRecord::Base
         | 
| 21 | 
            +
              #resourcify done during specs setup to be able to use custom user classes
         | 
| 16 22 | 
             
            end
         | 
| 17 23 |  | 
| 18 24 | 
             
            class Customer < ActiveRecord::Base
         | 
| 19 | 
            -
               | 
| 20 | 
            -
              include Rolify::Roles
         | 
| 21 | 
            -
              extend Rolify::Dynamic
         | 
| 25 | 
            +
              rolify :role_cname => "Privilege"
         | 
| 22 26 | 
             
            end
         | 
| 23 27 |  | 
| 24 28 | 
             
            class Privilege < ActiveRecord::Base
         | 
| 25 29 | 
             
              has_and_belongs_to_many :customers, :join_table => :customers_privileges
         | 
| 26 30 | 
             
              belongs_to :resource, :polymorphic => true
         | 
| 27 | 
            -
            end
         | 
| 28 | 
            -
             | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,56 @@ | |
| 1 | 
            +
            Mongoid.configure do |config|
         | 
| 2 | 
            +
              config.master = Mongo::Connection.new.db("godfather")
         | 
| 3 | 
            +
            end
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ::Mongoid::Document.module_eval do
         | 
| 6 | 
            +
              def self.included(base)
         | 
| 7 | 
            +
                base.extend Rolify
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
            end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Rolify.use_mongoid
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            # Mongoid models
         | 
| 14 | 
            +
            class User
         | 
| 15 | 
            +
              include Mongoid::Document
         | 
| 16 | 
            +
              rolify
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              field :login, :type => String
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            class Role
         | 
| 22 | 
            +
              include Mongoid::Document
         | 
| 23 | 
            +
              has_and_belongs_to_many :users
         | 
| 24 | 
            +
              belongs_to :resource, :polymorphic => true
         | 
| 25 | 
            +
              
         | 
| 26 | 
            +
              field :name, :type => String
         | 
| 27 | 
            +
            end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            class Forum
         | 
| 30 | 
            +
              include Mongoid::Document
         | 
| 31 | 
            +
              #resourcify done during specs setup to be able to use custom user classes
         | 
| 32 | 
            +
              
         | 
| 33 | 
            +
              field :name, :type => String
         | 
| 34 | 
            +
            end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            class Group
         | 
| 37 | 
            +
              include Mongoid::Document
         | 
| 38 | 
            +
              #resourcify done during specs setup to be able to use custom user classes
         | 
| 39 | 
            +
              
         | 
| 40 | 
            +
              field :name, :type => String
         | 
| 41 | 
            +
            end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            class Customer
         | 
| 44 | 
            +
              include Mongoid::Document
         | 
| 45 | 
            +
              rolify :role_cname => "Privilege"
         | 
| 46 | 
            +
              
         | 
| 47 | 
            +
              field :login, :type => String
         | 
| 48 | 
            +
            end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            class Privilege
         | 
| 51 | 
            +
              include Mongoid::Document
         | 
| 52 | 
            +
              has_and_belongs_to_many :customers
         | 
| 53 | 
            +
              belongs_to :resource, :polymorphic => true
         | 
| 54 | 
            +
              
         | 
| 55 | 
            +
              field :name, :type => String
         | 
| 56 | 
            +
            end
         | 
    
        data/spec/support/data.rb
    CHANGED
    
    | @@ -1,16 +1,25 @@ | |
| 1 | 
            +
            User.destroy_all
         | 
| 2 | 
            +
            Role.destroy_all
         | 
| 3 | 
            +
            Forum.destroy_all
         | 
| 4 | 
            +
            Group.destroy_all
         | 
| 5 | 
            +
            Privilege.destroy_all
         | 
| 6 | 
            +
            Customer.destroy_all
         | 
| 7 | 
            +
             | 
| 1 8 | 
             
            # Users
         | 
| 2 9 | 
             
            User.create(:login => "admin")
         | 
| 3 10 | 
             
            User.create(:login => "moderator")
         | 
| 4 11 | 
             
            User.create(:login => "god")
         | 
| 5 12 | 
             
            User.create(:login => "zombie")
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            Customer.create(:login => " | 
| 8 | 
            -
            Customer.create(:login => " | 
| 9 | 
            -
            Customer.create(:login => " | 
| 13 | 
            +
             | 
| 14 | 
            +
            Customer.create(:login => "admin")
         | 
| 15 | 
            +
            Customer.create(:login => "moderator")
         | 
| 16 | 
            +
            Customer.create(:login => "god")
         | 
| 17 | 
            +
            Customer.create(:login => "zombie")
         | 
| 10 18 |  | 
| 11 19 | 
             
            # Resources
         | 
| 12 20 | 
             
            Forum.create(:name => "forum 1")
         | 
| 13 21 | 
             
            Forum.create(:name => "forum 2")
         | 
| 14 22 | 
             
            Forum.create(:name => "forum 3")
         | 
| 23 | 
            +
             | 
| 15 24 | 
             
            Group.create(:name => "group 1")
         | 
| 16 | 
            -
            Group.create(:name => "group 2")
         | 
| 25 | 
            +
            Group.create(:name => "group 2")
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rolify
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 3.0.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,22 +9,44 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012-02 | 
| 12 | 
            +
            date: 2012-04-02 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: sqlite3
         | 
| 16 | 
            +
              requirement: &70312381195700 !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: *70312381195700
         | 
| 14 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 26 | 
             
              name: activerecord
         | 
| 16 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &70312381193740 !ruby/object:Gem::Requirement
         | 
| 17 28 | 
             
                none: false
         | 
| 18 29 | 
             
                requirements:
         | 
| 19 30 | 
             
                - - ! '>='
         | 
| 20 31 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 32 | 
             
                    version: 3.1.0
         | 
| 22 | 
            -
              type: : | 
| 33 | 
            +
              type: :development
         | 
| 23 34 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *70312381193740
         | 
| 25 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 | 
            -
              name:  | 
| 27 | 
            -
              requirement: & | 
| 37 | 
            +
              name: mongoid
         | 
| 38 | 
            +
              requirement: &70312381191900 !ruby/object:Gem::Requirement
         | 
| 39 | 
            +
                none: false
         | 
| 40 | 
            +
                requirements:
         | 
| 41 | 
            +
                - - ! '>='
         | 
| 42 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            +
                    version: '2.3'
         | 
| 44 | 
            +
              type: :development
         | 
| 45 | 
            +
              prerelease: false
         | 
| 46 | 
            +
              version_requirements: *70312381191900
         | 
| 47 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 48 | 
            +
              name: bson_ext
         | 
| 49 | 
            +
              requirement: &70312381191220 !ruby/object:Gem::Requirement
         | 
| 28 50 | 
             
                none: false
         | 
| 29 51 | 
             
                requirements:
         | 
| 30 52 | 
             
                - - ! '>='
         | 
| @@ -32,10 +54,10 @@ dependencies: | |
| 32 54 | 
             
                    version: '0'
         | 
| 33 55 | 
             
              type: :development
         | 
| 34 56 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *70312381191220
         | 
| 36 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 59 | 
             
              name: ammeter
         | 
| 38 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &70312381190320 !ruby/object:Gem::Requirement
         | 
| 39 61 | 
             
                none: false
         | 
| 40 62 | 
             
                requirements:
         | 
| 41 63 | 
             
                - - ! '>='
         | 
| @@ -43,10 +65,10 @@ dependencies: | |
| 43 65 | 
             
                    version: '0'
         | 
| 44 66 | 
             
              type: :development
         | 
| 45 67 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *70312381190320
         | 
| 47 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 70 | 
             
              name: rake
         | 
| 49 | 
            -
              requirement: & | 
| 71 | 
            +
              requirement: &70312381189180 !ruby/object:Gem::Requirement
         | 
| 50 72 | 
             
                none: false
         | 
| 51 73 | 
             
                requirements:
         | 
| 52 74 | 
             
                - - ! '>='
         | 
| @@ -54,10 +76,10 @@ dependencies: | |
| 54 76 | 
             
                    version: '0'
         | 
| 55 77 | 
             
              type: :development
         | 
| 56 78 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 79 | 
            +
              version_requirements: *70312381189180
         | 
| 58 80 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 59 81 | 
             
              name: rspec
         | 
| 60 | 
            -
              requirement: & | 
| 82 | 
            +
              requirement: &70312381188380 !ruby/object:Gem::Requirement
         | 
| 61 83 | 
             
                none: false
         | 
| 62 84 | 
             
                requirements:
         | 
| 63 85 | 
             
                - - ! '>='
         | 
| @@ -65,10 +87,10 @@ dependencies: | |
| 65 87 | 
             
                    version: '0'
         | 
| 66 88 | 
             
              type: :development
         | 
| 67 89 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 90 | 
            +
              version_requirements: *70312381188380
         | 
| 69 91 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 92 | 
             
              name: bundler
         | 
| 71 | 
            -
              requirement: & | 
| 93 | 
            +
              requirement: &70312381187520 !ruby/object:Gem::Requirement
         | 
| 72 94 | 
             
                none: false
         | 
| 73 95 | 
             
                requirements:
         | 
| 74 96 | 
             
                - - ! '>='
         | 
| @@ -76,7 +98,7 @@ dependencies: | |
| 76 98 | 
             
                    version: '0'
         | 
| 77 99 | 
             
              type: :development
         | 
| 78 100 | 
             
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: * | 
| 101 | 
            +
              version_requirements: *70312381187520
         | 
| 80 102 | 
             
            description: ! 'Very simple Roles library without any authorization enforcement (built
         | 
| 81 103 | 
             
              to use with cancan) supporting scope on resource: user.is_moderator?(Forum.first)
         | 
| 82 104 | 
             
              => # return false if user is moderator of another Forum '
         | 
| @@ -93,21 +115,43 @@ files: | |
| 93 115 | 
             
            - LICENSE
         | 
| 94 116 | 
             
            - README.rdoc
         | 
| 95 117 | 
             
            - Rakefile
         | 
| 96 | 
            -
            -  | 
| 118 | 
            +
            - UPGRADE.rdoc
         | 
| 97 119 | 
             
            - lib/generators/rolify/role/role_generator.rb
         | 
| 98 120 | 
             
            - lib/generators/rolify/role/templates/README
         | 
| 121 | 
            +
            - lib/generators/rolify/role/templates/README-active_record
         | 
| 122 | 
            +
            - lib/generators/rolify/role/templates/README-mongoid
         | 
| 99 123 | 
             
            - lib/generators/rolify/role/templates/initializer.rb
         | 
| 100 124 | 
             
            - lib/generators/rolify/role/templates/migration.rb
         | 
| 101 | 
            -
            - lib/generators/rolify/role/templates/role.rb
         | 
| 125 | 
            +
            - lib/generators/rolify/role/templates/role-active_record.rb
         | 
| 126 | 
            +
            - lib/generators/rolify/role/templates/role-mongoid.rb
         | 
| 102 127 | 
             
            - lib/rolify.rb
         | 
| 128 | 
            +
            - lib/rolify/adapters/active_record.rb
         | 
| 129 | 
            +
            - lib/rolify/adapters/base.rb
         | 
| 130 | 
            +
            - lib/rolify/adapters/mongoid.rb
         | 
| 131 | 
            +
            - lib/rolify/configure.rb
         | 
| 132 | 
            +
            - lib/rolify/dynamic.rb
         | 
| 133 | 
            +
            - lib/rolify/railtie.rb
         | 
| 134 | 
            +
            - lib/rolify/resource.rb
         | 
| 103 135 | 
             
            - lib/rolify/role.rb
         | 
| 104 136 | 
             
            - lib/rolify/version.rb
         | 
| 105 137 | 
             
            - rolify.gemspec
         | 
| 106 138 | 
             
            - spec/generators/rolify/role/role_generator_spec.rb
         | 
| 139 | 
            +
            - spec/rolify/config_spec.rb
         | 
| 140 | 
            +
            - spec/rolify/custom_spec.rb
         | 
| 141 | 
            +
            - spec/rolify/resource_spec.rb
         | 
| 107 142 | 
             
            - spec/rolify/role_spec.rb
         | 
| 143 | 
            +
            - spec/rolify/shared_contexts.rb
         | 
| 144 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_dynamic.rb
         | 
| 145 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_all_roles.rb
         | 
| 146 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_any_role.rb
         | 
| 147 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_no_role.rb
         | 
| 148 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_role_getter.rb
         | 
| 149 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_role_setter.rb
         | 
| 150 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_roles.rb
         | 
| 108 151 | 
             
            - spec/spec_helper.rb
         | 
| 152 | 
            +
            - spec/support/adapters/active_record.rb
         | 
| 153 | 
            +
            - spec/support/adapters/mongoid.rb
         | 
| 109 154 | 
             
            - spec/support/data.rb
         | 
| 110 | 
            -
            - spec/support/models.rb
         | 
| 111 155 | 
             
            - spec/support/schema.rb
         | 
| 112 156 | 
             
            homepage: https://github.com/EppO/rolify
         | 
| 113 157 | 
             
            licenses: []
         | 
| @@ -135,8 +179,20 @@ specification_version: 3 | |
| 135 179 | 
             
            summary: Roles library with resource scoping
         | 
| 136 180 | 
             
            test_files:
         | 
| 137 181 | 
             
            - spec/generators/rolify/role/role_generator_spec.rb
         | 
| 182 | 
            +
            - spec/rolify/config_spec.rb
         | 
| 183 | 
            +
            - spec/rolify/custom_spec.rb
         | 
| 184 | 
            +
            - spec/rolify/resource_spec.rb
         | 
| 138 185 | 
             
            - spec/rolify/role_spec.rb
         | 
| 186 | 
            +
            - spec/rolify/shared_contexts.rb
         | 
| 187 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_dynamic.rb
         | 
| 188 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_all_roles.rb
         | 
| 189 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_any_role.rb
         | 
| 190 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_no_role.rb
         | 
| 191 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_role_getter.rb
         | 
| 192 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_has_role_setter.rb
         | 
| 193 | 
            +
            - spec/rolify/shared_examples/shared_examples_for_roles.rb
         | 
| 139 194 | 
             
            - spec/spec_helper.rb
         | 
| 195 | 
            +
            - spec/support/adapters/active_record.rb
         | 
| 196 | 
            +
            - spec/support/adapters/mongoid.rb
         | 
| 140 197 | 
             
            - spec/support/data.rb
         | 
| 141 | 
            -
            - spec/support/models.rb
         | 
| 142 198 | 
             
            - spec/support/schema.rb
         | 
    
        data/benchmarks/performance.rb
    DELETED
    
    | @@ -1,51 +0,0 @@ | |
| 1 | 
            -
            require 'bundler/setup'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            Bundler.require(:default, :test)
         | 
| 4 | 
            -
            require 'rolify'
         | 
| 5 | 
            -
            require 'benchmark'
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            require './spec/spec_helper'
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            def seed_roles(n, resources)
         | 
| 10 | 
            -
              resource = resources[rand(resources.count)]
         | 
| 11 | 
            -
              resource_type = resource.is_a?(Class) ? resource.to_s : resource.class.to_s if resource
         | 
| 12 | 
            -
              resource_id = resource.is_a?(Class) ? nil : resource.id if resource
         | 
| 13 | 
            -
              n.times { Role.create(:name => "role_#{rand(9999999)}", :resource_type => resource_type, :resource_id => resource_id) }
         | 
| 14 | 
            -
            end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
            def bench_it(user, n, roles)
         | 
| 17 | 
            -
              Benchmark.bmbm do |x| 
         | 
| 18 | 
            -
                requested_roles = []
         | 
| 19 | 
            -
                2.times { requested_roles += roles  }
         | 
| 20 | 
            -
                puts "requesting ##{requested_roles.count} roles in #{Role.count} total roles"
         | 
| 21 | 
            -
                x.report("v1.x") { 
         | 
| 22 | 
            -
                  n.times { user.has_all_roles? *requested_roles } 
         | 
| 23 | 
            -
                }
         | 
| 24 | 
            -
                x.report("v2.0") { 
         | 
| 25 | 
            -
                  n.times { user.has_all_roles_v2? *requested_roles } 
         | 
| 26 | 
            -
                }
         | 
| 27 | 
            -
              end
         | 
| 28 | 
            -
            end
         | 
| 29 | 
            -
             | 
| 30 | 
            -
            n = 1000
         | 
| 31 | 
            -
            user = User.first
         | 
| 32 | 
            -
            user.has_role "admin"
         | 
| 33 | 
            -
            user.has_role "moderator", Forum.first
         | 
| 34 | 
            -
            user.has_role "manager", Group
         | 
| 35 | 
            -
            resources = [ nil, Forum, Forum.first, Forum.last, Group, Group.first, Group.last, nil ]
         | 
| 36 | 
            -
            roles = [ "admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Group } ]
         | 
| 37 | 
            -
             | 
| 38 | 
            -
            seed_roles(2, resources)
         | 
| 39 | 
            -
            bench_it(user, n, roles)
         | 
| 40 | 
            -
             | 
| 41 | 
            -
            seed_roles(15, resources)
         | 
| 42 | 
            -
            bench_it(user, n, roles)
         | 
| 43 | 
            -
             | 
| 44 | 
            -
            seed_roles(80, resources)
         | 
| 45 | 
            -
            bench_it(user, n, roles)
         | 
| 46 | 
            -
             | 
| 47 | 
            -
            seed_roles(900, resources)
         | 
| 48 | 
            -
            bench_it(user, n, roles)
         | 
| 49 | 
            -
             | 
| 50 | 
            -
            seed_roles(9000, resources)
         | 
| 51 | 
            -
            bench_it(user, n, roles)
         |