roles_mongoid 0.2.4

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.
@@ -0,0 +1,10 @@
1
+ require 'roles_generic'
2
+ require 'require_all'
3
+ require 'set'
4
+ require 'sugar-high/array'
5
+ require 'sugar-high/kind_of'
6
+ require 'mongoid'
7
+ require 'bson'
8
+ require 'roles_mongoid/namespaces'
9
+ require 'roles_mongoid/base'
10
+ require 'roles_mongoid/strategy'
@@ -0,0 +1,105 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{roles_mongoid}
8
+ s.version = "0.2.4"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Kristian Mandrup"]
12
+ s.date = %q{2010-10-06}
13
+ s.description = %q{Makes it easy to set a role strategy on your User model in Mongoid}
14
+ s.email = %q{kmandrup@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".bundle/config",
21
+ ".document",
22
+ ".gitignore",
23
+ ".rspec",
24
+ "Gemfile",
25
+ "LICENSE",
26
+ "README.markdown",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "lib/generators/mongoid/roles/roles_generator.rb",
30
+ "lib/roles_mongoid.rb",
31
+ "lib/roles_mongoid/base.rb",
32
+ "lib/roles_mongoid/namespaces.rb",
33
+ "lib/roles_mongoid/role.rb",
34
+ "lib/roles_mongoid/strategy.rb",
35
+ "lib/roles_mongoid/strategy/multi/many_roles.rb",
36
+ "lib/roles_mongoid/strategy/multi/role_strings.rb",
37
+ "lib/roles_mongoid/strategy/multi/roles_mask.rb",
38
+ "lib/roles_mongoid/strategy/single/admin_flag.rb",
39
+ "lib/roles_mongoid/strategy/single/one_role.rb",
40
+ "lib/roles_mongoid/strategy/single/role_string.rb",
41
+ "roles_mongoid.gemspec",
42
+ "sandbox/roles_assign.rb",
43
+ "sandbox/single_role.rb",
44
+ "sandbox/test.rb",
45
+ "spec/generator_spec_helper.rb",
46
+ "spec/generators/roles_generator_spec.rb",
47
+ "spec/roles_mongoid/admin_flag_spec.rb",
48
+ "spec/roles_mongoid/many_roles_spec.rb",
49
+ "spec/roles_mongoid/one_role_spec.rb",
50
+ "spec/roles_mongoid/role_string_spec.rb",
51
+ "spec/roles_mongoid/role_strings_spec.rb",
52
+ "spec/roles_mongoid/roles_mask_spec.rb",
53
+ "spec/spec_helper.rb",
54
+ "tmp/rails/app/models/user.rb",
55
+ "tmp/rails/config/routes.rb"
56
+ ]
57
+ s.homepage = %q{http://github.com/kristianmandrup/roles_mongoid}
58
+ s.rdoc_options = ["--charset=UTF-8"]
59
+ s.require_paths = ["lib"]
60
+ s.rubygems_version = %q{1.3.7}
61
+ s.summary = %q{Implementation of Roles generic API for Mongoid}
62
+ s.test_files = [
63
+ "spec/generator_spec_helper.rb",
64
+ "spec/generators/roles_generator_spec.rb",
65
+ "spec/roles_mongoid/admin_flag_spec.rb",
66
+ "spec/roles_mongoid/many_roles_spec.rb",
67
+ "spec/roles_mongoid/one_role_spec.rb",
68
+ "spec/roles_mongoid/role_string_spec.rb",
69
+ "spec/roles_mongoid/role_strings_spec.rb",
70
+ "spec/roles_mongoid/roles_mask_spec.rb",
71
+ "spec/spec_helper.rb"
72
+ ]
73
+
74
+ if s.respond_to? :specification_version then
75
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
76
+ s.specification_version = 3
77
+
78
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
79
+ s.add_development_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
80
+ s.add_runtime_dependency(%q<mongoid>, ["~> 2.0.0.beta.18"])
81
+ s.add_runtime_dependency(%q<bson>, ["~> 1.0.7"])
82
+ s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0"])
83
+ s.add_runtime_dependency(%q<require_all>, ["~> 1.2.0"])
84
+ s.add_runtime_dependency(%q<sugar-high>, ["~> 0.2.11"])
85
+ s.add_runtime_dependency(%q<roles_generic>, ["~> 0.2.7"])
86
+ else
87
+ s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
88
+ s.add_dependency(%q<mongoid>, ["~> 2.0.0.beta.18"])
89
+ s.add_dependency(%q<bson>, ["~> 1.0.7"])
90
+ s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
91
+ s.add_dependency(%q<require_all>, ["~> 1.2.0"])
92
+ s.add_dependency(%q<sugar-high>, ["~> 0.2.11"])
93
+ s.add_dependency(%q<roles_generic>, ["~> 0.2.7"])
94
+ end
95
+ else
96
+ s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
97
+ s.add_dependency(%q<mongoid>, ["~> 2.0.0.beta.18"])
98
+ s.add_dependency(%q<bson>, ["~> 1.0.7"])
99
+ s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
100
+ s.add_dependency(%q<require_all>, ["~> 1.2.0"])
101
+ s.add_dependency(%q<sugar-high>, ["~> 0.2.11"])
102
+ s.add_dependency(%q<roles_generic>, ["~> 0.2.7"])
103
+ end
104
+ end
105
+
@@ -0,0 +1,54 @@
1
+ require 'mongoid'
2
+
3
+ Mongoid.configure do |config|
4
+ config.master = Mongo::Connection.new.db('testing')
5
+ end
6
+
7
+ Mongoid.database.collections.each do |coll|
8
+ coll.remove
9
+ end
10
+
11
+
12
+ class Role
13
+ include Mongoid::Document
14
+ field :name, :type => String
15
+
16
+ class << self
17
+ def find_roles(*role_names)
18
+ where(:name.in => role_names.flatten).to_a #.map(&:_id)
19
+ end
20
+ alias_method :find_role, :find_roles
21
+ end
22
+ end
23
+
24
+ module Blip
25
+ def self.included(base)
26
+ base.extend ClassMethods
27
+ end
28
+
29
+ module ClassMethods
30
+ def do_it
31
+ instance_eval "references_many :many_roles, :stored_as => :array, :class_name => 'Role'"
32
+ end
33
+ end
34
+ end
35
+
36
+ class User
37
+ include Mongoid::Document
38
+ include Blip
39
+ field :name, :type => String
40
+
41
+ do_it
42
+
43
+ end
44
+
45
+ Role.create :name => 'guest'
46
+ Role.create :name => 'admin'
47
+
48
+ user = User.create :name => 'Kristian'
49
+
50
+ user.many_roles << Role.find_role(:guest)
51
+ user.many_roles << Role.find_role(:admin)
52
+
53
+ puts user.many_roles.inspect
54
+
@@ -0,0 +1,68 @@
1
+ require 'mongoid'
2
+
3
+ Mongoid.configure do |config|
4
+ config.master = Mongo::Connection.new.db('testing')
5
+ end
6
+
7
+ Mongoid.database.collections.each do |coll|
8
+ coll.remove
9
+ end
10
+
11
+
12
+ class Role
13
+ include Mongoid::Document
14
+ field :name, :type => String
15
+ referenced_in :user
16
+
17
+ class << self
18
+ def find_roles(*role_names)
19
+ where(:name.in => role_names.flatten).to_a #.map(&:_id)
20
+ end
21
+ alias_method :find_role, :find_roles
22
+ end
23
+ end
24
+
25
+ module Blip
26
+ def self.included(base)
27
+ base.extend ClassMethods
28
+ end
29
+
30
+ module ClassMethods
31
+ def do_it
32
+ instance_eval "references_one :role" # :class_name => 'Role'
33
+ end
34
+ end
35
+ end
36
+
37
+ class User
38
+ include Mongoid::Document
39
+ include Blip
40
+ field :name, :type => String
41
+ references_one :role
42
+ # do_it
43
+
44
+ end
45
+
46
+ user = User.create
47
+ role = Role.create
48
+
49
+ puts "role: #{role.inspect}"
50
+ user.role = role
51
+
52
+ user.save
53
+
54
+ # Role.create :name => 'guest'
55
+ # Role.create :name => 'admin'
56
+ #
57
+ # user = User.create :name => 'Kristian'
58
+ #
59
+ # puts user.inspect
60
+ #
61
+ # user.role.create :name => :guest
62
+ # user.save
63
+
64
+ # user.role = Role.find_role(:guest).first
65
+ # user.save
66
+
67
+ puts user.role.inspect
68
+
data/sandbox/test.rb ADDED
@@ -0,0 +1,47 @@
1
+ require 'mongoid'
2
+
3
+ Mongoid.configure do |config|
4
+ config.master = Mongo::Connection.new.db('testing')
5
+ end
6
+
7
+ Mongoid.database.collections.each do |coll|
8
+ coll.remove
9
+ end
10
+
11
+ class User
12
+ include Mongoid::Document
13
+ field :name
14
+ references_many :roles, :stored_as => :array
15
+
16
+ def self.find_roles *ids
17
+ arr_ids = ids.flatten
18
+ all.to_a.select do |user|
19
+ user.roles.to_a.any? do |role|
20
+ arr_ids.include?(role._id)
21
+ end
22
+ end
23
+ end
24
+
25
+ def self.get_roles(*ids)
26
+ arr = ids.flatten
27
+ criteria.in(:role_ids => arr).to_a
28
+ end
29
+
30
+ end
31
+
32
+ class Role
33
+ include Mongoid::Document
34
+ field :name
35
+ end
36
+
37
+ user = User.create(:name => 'Kristian')
38
+ user.roles.create(:name => 'guest')
39
+ user.save
40
+ #
41
+ puts "user roles: #{User.first.roles.map(&:_id)}"
42
+
43
+ role_id = user.roles.to_a.first._id
44
+
45
+ p role_id
46
+ p User.find_roles role_id
47
+ p User.get_roles role_id
@@ -0,0 +1,13 @@
1
+ require 'rspec'
2
+ require 'rspec/autorun'
3
+ require 'rails3_artifactor'
4
+ require 'generator-spec'
5
+ require 'roles_generic'
6
+
7
+ RSpec::Generator.configure do |config|
8
+ config.debug = false
9
+ config.remove_temp_dir = false # true
10
+ config.default_rails_root(__FILE__)
11
+ config.lib = File.dirname(__FILE__) + '/../lib'
12
+ config.logger = :stdout
13
+ end
@@ -0,0 +1,59 @@
1
+ require 'generator_spec_helper'
2
+ require_generator :mongoid => :roles
3
+
4
+ # root_dir = Rails3::Assist::Directory.rails_root
5
+ root_dir = File.join(Rails.application.config.root_dir, 'rails')
6
+
7
+ describe 'role strategy generator: admin_flag' do
8
+ describe 'ORM: mongoid' do
9
+ use_orm :mongoid
10
+
11
+ before :each do
12
+ setup_generator 'mongoid_roles_generator' do
13
+ tests Mongoid::Generators::RolesGenerator
14
+ end
15
+ remove_model :user
16
+ end
17
+
18
+ after :each do
19
+ # remove_model :user
20
+ end
21
+
22
+ it "should configure 'admin_flag' strategy" do
23
+ create_model :user do
24
+ '# content'
25
+ end
26
+ with_generator do |g|
27
+ arguments = "User --strategy admin_flag --roles admin user"
28
+ puts "arguments: #{arguments}"
29
+ g.run_generator arguments.args
30
+ root_dir.should have_model :user do |clazz|
31
+ clazz.should include_module 'Mongoid::Document'
32
+ clazz.should include_module 'Roles::Mongoid'
33
+ puts "clazz: #{clazz}"
34
+ clazz.should have_call :valid_roles_are, :args => ':admin, :guest, :user'
35
+ clazz.should have_call :strategy, :args => ":admin_flag"
36
+ end
37
+ end
38
+ end
39
+
40
+ it "should configure 'one_role' strategy" do
41
+ create_model :user do
42
+ '# content'
43
+ end
44
+ with_generator do |g|
45
+ arguments = "User --strategy one_role --roles admin user"
46
+ puts "arguments: #{arguments}"
47
+ g.run_generator arguments.args
48
+ root_dir.should have_model :user do |clazz|
49
+ clazz.should include_module 'Mongoid::Document'
50
+ clazz.should include_module 'Roles::Mongoid'
51
+ puts "clazz: #{clazz}"
52
+ clazz.should have_call :valid_roles_are, :args => ':admin, :guest, :user'
53
+ clazz.should have_call :strategy, :args => ":one_role"
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+ use_roles_strategy :admin_flag
3
+
4
+ class User
5
+ include Mongoid::Document
6
+ include Roles::Mongoid
7
+
8
+ strategy :admin_flag, :default
9
+ valid_roles_are :admin, :guest
10
+
11
+ field :name, :type => String
12
+ end
13
+
14
+ describe "Roles for Mongoid" do
15
+ after :each do
16
+ Database.teardown
17
+ end
18
+
19
+ before :each do
20
+ @user = User.create(:name => 'Kristian')
21
+ @user.roles = :guest
22
+ @user.save
23
+
24
+ @admin_user = User.create(:name => 'Admin user')
25
+ @admin_user.roles = :admin
26
+ @admin_user.save
27
+ end
28
+
29
+ describe "Admin flag strategy " do
30
+
31
+ describe '#in_role' do
32
+ it "should return first user maching role" do
33
+ User.in_role(:guest).first.name.should == 'Kristian'
34
+ User.in_role(:admin).first.name.should == 'Admin user'
35
+ end
36
+ end
37
+
38
+ describe 'roles API' do
39
+ it "should have admin user role to :admin" do
40
+ @admin_user.role.should == :admin
41
+ @admin_user.roles.should == [:admin]
42
+ @admin_user.admin?.should be_true
43
+
44
+ @admin_user.class.valid_roles.should == [:admin, :guest]
45
+
46
+ @admin_user.has_role?(:guest).should be_false
47
+
48
+ @admin_user.has_role?(:admin).should be_true
49
+ @admin_user.is?(:admin).should be_true
50
+ @admin_user.has_roles?(:admin).should be_true
51
+ @admin_user.has?(:admin).should be_true
52
+ end
53
+
54
+ it "should have user role to :guest" do
55
+ @user.roles.should == [:guest]
56
+ @user.admin?.should be_false
57
+
58
+ @user.has_role?(:guest).should be_true
59
+ @user.has_role?(:admin).should be_false
60
+ @user.is?(:admin).should be_false
61
+
62
+ @user.has_roles?(:guest).should be_true
63
+ @user.has?(:admin).should be_false
64
+ end
65
+
66
+ it "should set user role to :admin using =" do
67
+ @user.roles = :admin
68
+ @user.role.should == :admin
69
+ @user.has_role?(:admin).should be_true
70
+ end
71
+ end
72
+ end
73
+ end
74
+
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+ use_roles_strategy :many_roles
3
+
4
+ class User
5
+ include Mongoid::Document
6
+ include Roles::Mongoid
7
+
8
+ strategy :many_roles, :default
9
+ role_class :role
10
+
11
+ valid_roles_are :admin, :guest
12
+
13
+ field :name, :type => String
14
+ end
15
+
16
+ describe "Roles for Mongoid" do
17
+
18
+ after :each do
19
+ Database.teardown
20
+ end
21
+
22
+ context "default setup" do
23
+
24
+ before do
25
+ @user = User.create(:name => 'Kristian')
26
+ @user.add_roles :guest
27
+ @user.save
28
+
29
+ @admin_user = User.create(:name => 'Admin user')
30
+ @admin_user.roles = :admin
31
+ @admin_user.save
32
+ end
33
+
34
+ describe '#in_role' do
35
+ it "should return first user matching role" do
36
+ User.in_role(:guest).first.name.should == 'Kristian'
37
+ User.in_role(:admin).first.name.should == 'Admin user'
38
+ end
39
+ end
40
+
41
+ describe "Role API" do
42
+ it "should have admin user role to :admin" do
43
+ @admin_user.roles_list.first.should == :admin
44
+ @admin_user.admin?.should be_true
45
+
46
+ @admin_user.has_role?(:guest).should be_false
47
+
48
+ @admin_user.has_role?(:admin).should be_true
49
+ @admin_user.is?(:admin).should be_true
50
+ @admin_user.has_roles?(:admin).should be_true
51
+ @admin_user.has?(:admin).should be_true
52
+ end
53
+
54
+ it "should have user role to :guest" do
55
+ @user.roles_list.first.should == :guest
56
+ @user.admin?.should be_false
57
+
58
+ @user.has_role?(:guest).should be_true
59
+ @user.has_role?(:admin).should be_false
60
+ @user.is?(:admin).should be_false
61
+
62
+ @user.has_roles?(:admin).should be_false
63
+ @user.has?(:admin).should be_false
64
+ end
65
+
66
+ it "should set user role to :admin using roles=" do
67
+ @user.roles = :admin
68
+ @user.roles_list.first.should == :admin
69
+ @user.has_role?(:admin).should be_true
70
+ end
71
+ end
72
+ end
73
+ end
74
+
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+ use_roles_strategy :one_role
3
+
4
+ class User
5
+ include Mongoid::Document
6
+ include Roles::Mongoid
7
+
8
+ strategy :one_role, :default
9
+ role_class :role
10
+
11
+ valid_roles_are :admin, :guest
12
+
13
+ field :name, :type => String
14
+ end
15
+
16
+ describe "Roles for Mongoid" do
17
+
18
+ after :each do
19
+ Database.teardown
20
+ end
21
+
22
+ context "default setup" do
23
+
24
+ before do
25
+ @user = User.create(:name => 'Kristian')
26
+ @user.role = :guest
27
+ @user.save
28
+
29
+ @admin_user = User.create(:name => 'Admin user')
30
+ @admin_user.role = Role.where(:name => :admin).to_a.first
31
+ @admin_user.save
32
+ end
33
+
34
+ describe '#in_role' do
35
+ it "should return first user matching role" do
36
+ User.in_role(:guest).first.name.should == 'Kristian'
37
+ User.in_role(:admin).first.name.should == 'Admin user'
38
+ end
39
+ end
40
+
41
+ describe "Role API" do
42
+ it "should have admin user role to :admin" do
43
+ @admin_user.roles_list.first.should == :admin
44
+ @admin_user.admin?.should be_true
45
+
46
+ @admin_user.has_role?(:guest).should be_false
47
+
48
+ @admin_user.has_role?(:admin).should be_true
49
+ @admin_user.is?(:admin).should be_true
50
+ @admin_user.has_roles?(:admin).should be_true
51
+ @admin_user.has?(:admin).should be_true
52
+ end
53
+
54
+ it "should have user role to :guest" do
55
+ @user.roles_list.first.should == :guest
56
+ @user.admin?.should be_false
57
+
58
+ @user.has_role?(:guest).should be_true
59
+ @user.has_role?(:admin).should be_false
60
+ @user.is?(:admin).should be_false
61
+
62
+ @user.has_roles?(:admin).should be_false
63
+ @user.has?(:admin).should be_false
64
+ end
65
+
66
+ it "should set user role to :admin using roles=" do
67
+ @user.roles = :admin
68
+ @user.roles_list.first.should == :admin
69
+ @user.has_role?(:admin).should be_true
70
+ end
71
+ end
72
+ end
73
+ end
74
+
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+ use_roles_strategy :role_string
3
+
4
+ class User
5
+ include Mongoid::Document
6
+ include Roles::Mongoid
7
+
8
+ strategy :role_string, :default
9
+
10
+ valid_roles_are :admin, :guest
11
+
12
+ field :name, :type => String
13
+ end
14
+
15
+ describe "Roles for Mongoid" do
16
+
17
+ after :each do
18
+ Database.teardown
19
+ end
20
+
21
+ context "default setup" do
22
+
23
+ before do
24
+ @user = User.create(:name => 'Kristian')
25
+ @user.role = :guest
26
+ @user.save
27
+
28
+ @admin_user = User.create(:name => 'Admin user')
29
+ @admin_user.roles = :admin
30
+ @admin_user.save
31
+ end
32
+
33
+ describe '#in_role' do
34
+ it "should return first user matching role" do
35
+ User.in_role(:guest).first.name.should == 'Kristian'
36
+ User.in_role(:admin).first.name.should == 'Admin user'
37
+ end
38
+ end
39
+
40
+ describe "Role API" do
41
+ it "should have admin user role to :admin" do
42
+ @admin_user.roles_list.first.should == :admin
43
+ @admin_user.admin?.should be_true
44
+
45
+ @admin_user.has_role?(:guest).should be_false
46
+
47
+ @admin_user.has_role?(:admin).should be_true
48
+ @admin_user.is?(:admin).should be_true
49
+ @admin_user.has_roles?(:admin).should be_true
50
+ @admin_user.has?(:admin).should be_true
51
+ end
52
+
53
+ it "should have user role to :guest" do
54
+ @user.roles_list.first.should == :guest
55
+ @user.admin?.should be_false
56
+
57
+ @user.has_role?(:guest).should be_true
58
+ @user.has_role?(:admin).should be_false
59
+ @user.is?(:admin).should be_false
60
+
61
+ @user.has_roles?(:admin).should be_false
62
+ @user.has?(:admin).should be_false
63
+ end
64
+
65
+ it "should set user role to :admin using roles=" do
66
+ @user.roles = :admin
67
+ @user.roles_list.first.should == :admin
68
+ @user.has_role?(:admin).should be_true
69
+ end
70
+ end
71
+ end
72
+ end
73
+