roles_generic 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/README.markdown +63 -207
  2. data/Rakefile +6 -4
  3. data/VERSION +1 -1
  4. data/lib/generators/roles_model/roles/roles_generator.rb +4 -2
  5. data/lib/roles_generic/base.rb +11 -15
  6. data/lib/roles_generic/generic/role.rb +18 -0
  7. data/lib/roles_generic/generic/{class_methods.rb → user/class_methods.rb} +2 -3
  8. data/lib/roles_generic/generic/{util.rb → user/configuration.rb} +6 -6
  9. data/lib/roles_generic/generic/{implementation.rb → user/implementation.rb} +1 -1
  10. data/lib/roles_generic/generic/user.rb +22 -0
  11. data/lib/roles_generic/generic.rb +3 -68
  12. data/lib/roles_generic/namespaces.rb +13 -0
  13. data/lib/roles_generic/{many_roles.rb → strategy/multi/many_roles.rb} +3 -4
  14. data/lib/roles_generic/{role_strings.rb → strategy/multi/role_strings.rb} +9 -3
  15. data/lib/roles_generic/{roles_mask.rb → strategy/multi/roles_mask.rb} +2 -2
  16. data/lib/roles_generic/{roles_string.rb → strategy/multi/roles_string.rb} +2 -4
  17. data/lib/roles_generic/{admin_flag.rb → strategy/single/admin_flag.rb} +2 -2
  18. data/lib/roles_generic/{one_role.rb → strategy/single/one_role.rb} +3 -4
  19. data/lib/roles_generic/{role_string.rb → strategy/single/role_string.rb} +2 -2
  20. data/lib/roles_generic/strategy.rb +26 -0
  21. data/lib/roles_generic.rb +8 -1
  22. data/roles_generic.gemspec +124 -0
  23. data/spec/generators/admin_flag_generator_spec.rb +2 -2
  24. data/spec/generators/many_roles_generator_spec.rb +1 -1
  25. data/spec/generators/one_role_generator_spec.rb +1 -1
  26. data/spec/generators/role_string_generator_spec.rb +1 -1
  27. data/spec/generators/role_strings_generator_spec.rb +1 -1
  28. data/spec/generators/roles_mask_generator_spec.rb +1 -1
  29. data/spec/generators/roles_string_generator_spec.rb +1 -1
  30. data/spec/roles_generic/admin_flag_spec.rb +3 -3
  31. data/spec/roles_generic/many_roles_spec.rb +4 -3
  32. data/spec/roles_generic/one_role_spec.rb +4 -3
  33. data/spec/roles_generic/role_string_spec.rb +3 -3
  34. data/spec/roles_generic/role_strings_spec.rb +3 -3
  35. data/spec/roles_generic/roles_mask_spec.rb +3 -3
  36. data/spec/roles_generic/roles_string_spec.rb +3 -3
  37. data/spec/spec_helper.rb +1 -1
  38. data/wiki/strategies/admin_flag.textile +20 -0
  39. data/wiki/strategies/many_roles.textile +48 -0
  40. data/wiki/strategies/one_role.textile +40 -0
  41. data/wiki/strategies/role_string.textile +20 -0
  42. data/wiki/strategies/role_strings.textile +20 -0
  43. data/wiki/strategies/roles_mask.textile +20 -0
  44. data/wiki/strategies/roles_string.textile +20 -0
  45. metadata +61 -22
  46. data/lib/roles_generic/extensions/core_ext.rb +0 -19
  47. data/lib/roles_generic/role/class_methods.rb +0 -20
@@ -1,6 +1,4 @@
1
- require_all File.dirname(__FILE__) +'/roles_string'
2
-
3
- module RoleModels::Generic
1
+ module RoleStrategy::Generic
4
2
  module RolesString
5
3
  def self.default_role_attribute
6
4
  :roles_string
@@ -20,7 +18,7 @@ module RoleModels::Generic
20
18
  alias_method :roles_list, :roles
21
19
  end
22
20
 
23
- extend RoleModels::Generic::Base::Configuration
21
+ extend Roles::Generic::User::Configuration
24
22
  configure
25
23
  end
26
24
  end
@@ -1,4 +1,4 @@
1
- module RoleModels::Generic
1
+ module RoleStrategy::Generic
2
2
  module AdminFlag
3
3
  def self.default_role_attribute
4
4
  :admin_flag
@@ -20,7 +20,7 @@ module RoleModels::Generic
20
20
 
21
21
  end # Implementation
22
22
 
23
- extend RoleModels::Generic::Base::Configuration
23
+ extend extend Roles::Generic::User::Configuration
24
24
  configure :num => :single
25
25
  end
26
26
  end
@@ -1,7 +1,6 @@
1
- require 'roles_generic/role/class_methods'
2
1
  require 'set'
3
2
 
4
- module RoleModels::Generic
3
+ module RoleStrategy::Generic
5
4
  module OneRole
6
5
  def self.default_role_attribute
7
6
  :one_role
@@ -30,11 +29,11 @@ module RoleModels::Generic
30
29
  end
31
30
  end
32
31
 
33
- extend RoleModels::Generic::Base::Configuration
32
+ extend Roles::Generic::User::Configuration
34
33
  configure :num => :single, :type => :role_class
35
34
 
36
35
  def self.included(base)
37
- base.extend RoleModels::Generic::Base::RoleClass::ClassMethods
36
+ base.extend Roles::Generic::Role::ClassMethods
38
37
  end
39
38
  end
40
39
  end
@@ -1,6 +1,6 @@
1
1
  require 'set'
2
2
 
3
- module RoleModels::Generic
3
+ module RoleStrategy::Generic
4
4
  module RoleString
5
5
  def self.default_role_attribute
6
6
  :role_string
@@ -23,7 +23,7 @@ module RoleModels::Generic
23
23
  alias_method :roles_list, :roles
24
24
  end
25
25
 
26
- extend RoleModels::Generic::Base::Configuration
26
+ extend Roles::Generic::User::Configuration
27
27
  configure :num => :single
28
28
  end
29
29
  end
@@ -0,0 +1,26 @@
1
+ require 'sugar-high/file'
2
+ require 'sugar-high/array'
3
+
4
+ module Roles::Strategy
5
+ def self.role_strategies cardinality
6
+ pattern = File.dirname(__FILE__) + "/strategy/#{cardinality}/*.rb"
7
+ Dir.glob(pattern).file_names(:rb).to_symbols
8
+ end
9
+
10
+ def self.has_strategy? cardinality, strategy
11
+ role_strategies(cardinality).include?(strategy)
12
+ end
13
+
14
+ def self.cardinality strategy
15
+ [:single, :multi].each do |cardinality|
16
+ return cardinality if has_strategy?(cardinality, strategy)
17
+ end
18
+ raise ArgumentError, "Strategy #{strategy} is not registered as either a single or multi cardinality role strategy"
19
+ end
20
+ end
21
+
22
+ def use_roles_strategy strategy
23
+ cardinality = Roles::Strategy.cardinality(strategy)
24
+ require "roles_generic/strategy/#{cardinality}/#{strategy}"
25
+ end
26
+
data/lib/roles_generic.rb CHANGED
@@ -1,2 +1,9 @@
1
+ require 'require_all'
2
+ require 'active_support/inflector'
3
+ require 'sugar-high/not'
4
+
5
+ require 'roles_generic/namespaces'
1
6
  require 'roles_generic/base'
2
- require 'roles_generic/generic'
7
+ require 'roles_generic/generic'
8
+ require 'roles_generic/strategy'
9
+
@@ -0,0 +1,124 @@
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_generic}
8
+ s.version = "0.2.0"
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-09-04}
13
+ s.description = %q{Generic role strategies sharing the same API. Easy to insert in any model}
14
+ s.email = %q{kmandrup@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ ".rspec",
23
+ "LICENSE",
24
+ "README.markdown",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/generators/roles_model/roles/roles_generator.rb",
28
+ "lib/roles_generic.rb",
29
+ "lib/roles_generic/base.rb",
30
+ "lib/roles_generic/generic.rb",
31
+ "lib/roles_generic/generic/role.rb",
32
+ "lib/roles_generic/generic/user.rb",
33
+ "lib/roles_generic/generic/user/class_methods.rb",
34
+ "lib/roles_generic/generic/user/configuration.rb",
35
+ "lib/roles_generic/generic/user/implementation.rb",
36
+ "lib/roles_generic/namespaces.rb",
37
+ "lib/roles_generic/strategy.rb",
38
+ "lib/roles_generic/strategy/multi/many_roles.rb",
39
+ "lib/roles_generic/strategy/multi/role_strings.rb",
40
+ "lib/roles_generic/strategy/multi/roles_mask.rb",
41
+ "lib/roles_generic/strategy/multi/roles_string.rb",
42
+ "lib/roles_generic/strategy/single/admin_flag.rb",
43
+ "lib/roles_generic/strategy/single/one_role.rb",
44
+ "lib/roles_generic/strategy/single/role_string.rb",
45
+ "roles_generic.gemspec",
46
+ "spec/generator_spec_helper.rb",
47
+ "spec/generators/admin_flag_generator_spec.rb",
48
+ "spec/generators/many_roles_generator_spec.rb",
49
+ "spec/generators/one_role_generator_spec.rb",
50
+ "spec/generators/role_string_generator_spec.rb",
51
+ "spec/generators/role_strings_generator_spec.rb",
52
+ "spec/generators/roles_mask_generator_spec.rb",
53
+ "spec/generators/roles_string_generator_spec.rb",
54
+ "spec/model/role.rb",
55
+ "spec/roles_generic/admin_flag_spec.rb",
56
+ "spec/roles_generic/many_roles_spec.rb",
57
+ "spec/roles_generic/one_role_spec.rb",
58
+ "spec/roles_generic/role_string_spec.rb",
59
+ "spec/roles_generic/role_strings_spec.rb",
60
+ "spec/roles_generic/roles_mask_spec.rb",
61
+ "spec/roles_generic/roles_string_spec.rb",
62
+ "spec/spec_helper.rb",
63
+ "wiki/strategies/admin_flag.textile",
64
+ "wiki/strategies/many_roles.textile",
65
+ "wiki/strategies/one_role.textile",
66
+ "wiki/strategies/role_string.textile",
67
+ "wiki/strategies/role_strings.textile",
68
+ "wiki/strategies/roles_mask.textile",
69
+ "wiki/strategies/roles_string.textile"
70
+ ]
71
+ s.homepage = %q{http://github.com/kristianmandrup/roles_for_mm}
72
+ s.rdoc_options = ["--charset=UTF-8"]
73
+ s.require_paths = ["lib"]
74
+ s.rubygems_version = %q{1.3.7}
75
+ s.summary = %q{Generic role strategies sharing the same API}
76
+ s.test_files = [
77
+ "spec/generator_spec_helper.rb",
78
+ "spec/generators/admin_flag_generator_spec.rb",
79
+ "spec/generators/many_roles_generator_spec.rb",
80
+ "spec/generators/one_role_generator_spec.rb",
81
+ "spec/generators/role_string_generator_spec.rb",
82
+ "spec/generators/role_strings_generator_spec.rb",
83
+ "spec/generators/roles_mask_generator_spec.rb",
84
+ "spec/generators/roles_string_generator_spec.rb",
85
+ "spec/model/role.rb",
86
+ "spec/roles_generic/admin_flag_spec.rb",
87
+ "spec/roles_generic/many_roles_spec.rb",
88
+ "spec/roles_generic/one_role_spec.rb",
89
+ "spec/roles_generic/role_string_spec.rb",
90
+ "spec/roles_generic/role_strings_spec.rb",
91
+ "spec/roles_generic/roles_mask_spec.rb",
92
+ "spec/roles_generic/roles_string_spec.rb",
93
+ "spec/spec_helper.rb"
94
+ ]
95
+
96
+ if s.respond_to? :specification_version then
97
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
98
+ s.specification_version = 3
99
+
100
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
101
+ s.add_development_dependency(%q<rspec>, ["~> 2.0.0.beta.19"])
102
+ s.add_development_dependency(%q<generator-spec>, ["~> 0.5.1"])
103
+ s.add_runtime_dependency(%q<require_all>, ["~> 1.1.0"])
104
+ s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0"])
105
+ s.add_runtime_dependency(%q<sugar-high>, ["~> 0.2.2"])
106
+ s.add_runtime_dependency(%q<rails3_artifactor>, ["~> 0.1.1"])
107
+ else
108
+ s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.19"])
109
+ s.add_dependency(%q<generator-spec>, ["~> 0.5.1"])
110
+ s.add_dependency(%q<require_all>, ["~> 1.1.0"])
111
+ s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
112
+ s.add_dependency(%q<sugar-high>, ["~> 0.2.2"])
113
+ s.add_dependency(%q<rails3_artifactor>, ["~> 0.1.1"])
114
+ end
115
+ else
116
+ s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.19"])
117
+ s.add_dependency(%q<generator-spec>, ["~> 0.5.1"])
118
+ s.add_dependency(%q<require_all>, ["~> 1.1.0"])
119
+ s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
120
+ s.add_dependency(%q<sugar-high>, ["~> 0.2.2"])
121
+ s.add_dependency(%q<rails3_artifactor>, ["~> 0.1.1"])
122
+ end
123
+ end
124
+
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
1
+ require 'generator_spec_helper'
2
2
  require_generator :roles_model => :roles
3
3
 
4
4
  describe 'role strategy generator: admin_flag' do
@@ -30,7 +30,7 @@ describe 'role strategy generator: admin_flag' do
30
30
  puts "arguments: #{arguments}"
31
31
  g.run_generator arguments.args
32
32
  g.should generate_model :user do |clazz|
33
- clazz.should include_module 'RoleModels::Generic'
33
+ clazz.should include_module 'Roles::Generic'
34
34
  puts "clazz: #{clazz}"
35
35
  clazz.should have_call :roles, :args => ':admin, :user'
36
36
  clazz.should have_call :role_strategy, :args => ":#{strategy}"
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
1
+ require 'generator_spec_helper'
2
2
  require_generator :roles_model => :roles
3
3
 
4
4
  describe 'helper_generator' do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
1
+ require 'generator_spec_helper'
2
2
  require_generator :roles_model => :roles
3
3
 
4
4
  describe 'helper_generator' do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
1
+ require 'generator_spec_helper'
2
2
  require_generator :roles_model => :roles
3
3
 
4
4
  describe 'helper_generator' do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
1
+ require 'generator_spec_helper'
2
2
  require_generator :roles_model => :roles
3
3
 
4
4
  describe 'helper_generator' do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
1
+ require 'generator_spec_helper'
2
2
  require_generator :roles_model => :roles
3
3
 
4
4
  describe 'helper_generator' do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
1
+ require 'generator_spec_helper'
2
2
  require_generator :roles_model => :roles
3
3
 
4
4
  describe 'helper_generator' do
@@ -1,8 +1,8 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'roles_generic/admin_flag'
1
+ require 'spec_helper'
2
+ use_roles_strategy :admin_flag
3
3
 
4
4
  class User
5
- include RoleModels::Generic
5
+ include Roles::Generic
6
6
 
7
7
  attr_accessor :name, :admin_flag
8
8
 
@@ -1,9 +1,10 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'roles_generic/many_roles'
1
+ require 'spec_helper'
2
+ use_roles_strategy :many_roles
3
+
3
4
  require 'model/role'
4
5
 
5
6
  class User
6
- include RoleModels::Generic
7
+ include Roles::Generic
7
8
  role_strategy :many_roles, :default
8
9
 
9
10
  role_class :role
@@ -1,9 +1,10 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'roles_generic/one_role'
1
+ require 'spec_helper'
2
+ use_roles_strategy :one_role
3
+
3
4
  require 'model/role'
4
5
 
5
6
  class User
6
- include RoleModels::Generic
7
+ include Roles::Generic
7
8
  role_strategy :one_role, :default
8
9
 
9
10
  role_class :role
@@ -1,8 +1,8 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'roles_generic/role_string'
1
+ require 'spec_helper'
2
+ use_roles_strategy :role_string
3
3
 
4
4
  class User
5
- include RoleModels::Generic
5
+ include Roles::Generic
6
6
 
7
7
  attr_accessor :name, :role_string
8
8
 
@@ -1,8 +1,8 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'roles_generic/role_strings'
1
+ require 'spec_helper'
2
+ use_roles_strategy :role_strings
3
3
 
4
4
  class User
5
- include RoleModels::Generic
5
+ include Roles::Generic
6
6
 
7
7
  attr_accessor :name, :role_strings
8
8
 
@@ -1,8 +1,8 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'roles_generic/roles_mask'
1
+ require 'spec_helper'
2
+ use_roles_strategy :roles_mask
3
3
 
4
4
  class User
5
- include RoleModels::Generic
5
+ include Roles::Generic
6
6
 
7
7
  attr_accessor :name, :roles_mask
8
8
 
@@ -1,8 +1,8 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'roles_generic/roles_string'
1
+ require 'spec_helper'
2
+ use_roles_strategy :roles_string
3
3
 
4
4
  class User
5
- include RoleModels::Generic
5
+ include Roles::Generic
6
6
 
7
7
  attr_accessor :name, :roles_string
8
8
 
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,7 @@ require 'rspec/autorun'
3
3
  require 'roles_generic'
4
4
 
5
5
  RSpec.configure do |config|
6
-
6
+ config.mock_with :mocha
7
7
  end
8
8
 
9
9
 
@@ -0,0 +1,20 @@
1
+ h2. Example : admin_flag
2
+
3
+ Creates and uses a binary field 'admin_flag', which when true signals that this user is an administrator and otherwise a normal user.
4
+
5
+ <pre>
6
+ class User
7
+ include RoleModels::Generic
8
+
9
+ attr_accessor :name, :admin_flag
10
+
11
+ role_strategy :admin_flag, :default
12
+
13
+ roles :admin, :user
14
+
15
+ def initialize name, *new_roles
16
+ self.name = name
17
+ self.roles = new_roles
18
+ end
19
+ end
20
+ </pre>
@@ -0,0 +1,48 @@
1
+ h2. Example : many_roles
2
+
3
+ Creates and uses a single relation to a Role model for each user
4
+
5
+ <pre>
6
+ class Role
7
+ attr_accessor :name
8
+
9
+ def self.find_role role_name
10
+ roles.to_a.select{|r| r.name == role_name}.first
11
+ end
12
+
13
+ def self.find_roles *role_names
14
+ result = Set.new
15
+ role_names.flatten.each do |role_name|
16
+ found_role = find_role(role_name)
17
+ result << found_role if found_role
18
+ end
19
+ result
20
+ end
21
+
22
+ class << self
23
+ attr_accessor :roles
24
+ end
25
+
26
+ def initialize name
27
+ @name = name
28
+ self.class.roles ||= Set.new
29
+ self.class.roles << self
30
+ end
31
+ end
32
+
33
+ class User
34
+ include RoleModels::Generic
35
+ role_strategy :many_roles, :default
36
+
37
+ role_class :role
38
+
39
+ attr_accessor :name, :many_roles
40
+
41
+ roles :admin, :user
42
+
43
+ def initialize name, *new_roles
44
+ self.name = name
45
+ self.roles = new_roles
46
+ end
47
+ end
48
+ </pre>
@@ -0,0 +1,40 @@
1
+ h2. Example : one_role
2
+
3
+ Creates and uses a single relation to a Role model for each user
4
+
5
+ <pre>
6
+ class Role
7
+ attr_accessor :name
8
+
9
+ def self.find_role role_name
10
+ roles.to_a.select{|r| r.name == role_name}.first
11
+ end
12
+
13
+ class << self
14
+ attr_accessor :roles
15
+ end
16
+
17
+ def initialize name
18
+ @name = name
19
+ self.class.roles ||= Set.new
20
+ self.class.roles << self
21
+ end
22
+
23
+ end
24
+
25
+ class User
26
+ include RoleModels::Generic
27
+ role_strategy :one_role, :default
28
+
29
+ role_class :role
30
+
31
+ attr_accessor :name, :one_role
32
+
33
+ roles :admin, :user
34
+
35
+ def initialize name, *new_roles
36
+ self.name = name
37
+ self.roles = new_roles
38
+ end
39
+ end
40
+ </pre>
@@ -0,0 +1,20 @@
1
+ h2. Example : role_string
2
+
3
+ Creates and uses a single role name, a string
4
+
5
+ <pre>
6
+ class User
7
+ include RoleModels::Generic
8
+
9
+ attr_accessor :name, :role_string
10
+
11
+ role_strategy :role_string, :default
12
+
13
+ roles :admin, :user
14
+
15
+ def initialize name, *new_roles
16
+ self.name = name
17
+ self.roles = new_roles
18
+ end
19
+ end
20
+ </pre>
@@ -0,0 +1,20 @@
1
+ h2. Example : role_strings
2
+
3
+ Creates and uses an Set of role names as strings
4
+
5
+ <pre>
6
+ class User
7
+ include RoleModels::Generic
8
+
9
+ attr_accessor :name, :role_strings
10
+
11
+ role_strategy :role_strings, :default
12
+
13
+ roles :admin, :user
14
+
15
+ def initialize name, *new_roles
16
+ self.name = name
17
+ self.roles = new_roles
18
+ end
19
+ end
20
+ </pre>
@@ -0,0 +1,20 @@
1
+ h2. Example : roles_mask
2
+
3
+ Creates and uses an Integer field where each on bit signifies a role
4
+
5
+ <pre>
6
+ class User
7
+ include RoleModels::Generic
8
+
9
+ attr_accessor :name, :roles_mask
10
+
11
+ role_strategy :roles_mask, :default
12
+
13
+ roles :admin, :user
14
+
15
+ def initialize name, *new_roles
16
+ self.name = name
17
+ self.roles = new_roles
18
+ end
19
+ end
20
+ </pre>
@@ -0,0 +1,20 @@
1
+ h2. Example : roles_string
2
+
3
+ Creates and uses single comma separated String of role names
4
+
5
+ <pre>
6
+ class User
7
+ include RoleModels::Generic
8
+
9
+ attr_accessor :name, :roles_string
10
+
11
+ role_strategy :roles_string, :default
12
+
13
+ roles :admin, :user
14
+
15
+ def initialize name, *new_roles
16
+ self.name = name
17
+ self.roles = new_roles
18
+ end
19
+ end
20
+ </pre>