troles 0.5.0 → 0.5.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/Gemfile.lock +1 -1
- data/README.textile +75 -16
- data/VERSION +1 -1
- data/lib/trole/adapters/active_record/config.rb +3 -3
- data/lib/trole/adapters/mongoid/config.rb +5 -5
- data/lib/trole/config.rb +2 -2
- data/lib/trole_groups.rb +10 -0
- data/lib/trole_groups/READ THIS.textile +4 -0
- data/lib/trole_groups/Rolegroups design.textile +218 -0
- data/lib/trole_groups/adapters/active_record.rb +8 -0
- data/lib/trole_groups/adapters/active_record/config.rb +0 -0
- data/lib/trole_groups/adapters/active_record/storage.rb +0 -0
- data/lib/trole_groups/adapters/active_record/strategy.rb +11 -0
- data/lib/trole_groups/adapters/mongoid.rb +8 -0
- data/lib/trole_groups/adapters/mongoid/config.rb +0 -0
- data/lib/trole_groups/api.rb +29 -0
- data/lib/trole_groups/api/cache.rb +13 -0
- data/lib/trole_groups/api/config.rb +4 -0
- data/lib/trole_groups/api/core.rb +50 -0
- data/lib/trole_groups/api/event.rb +29 -0
- data/lib/trole_groups/api/read.rb +56 -0
- data/lib/trole_groups/api/validation.rb +44 -0
- data/lib/trole_groups/api/write.rb +60 -0
- data/lib/trole_groups/config.rb +134 -0
- data/lib/trole_groups/config/schema.rb +65 -0
- data/lib/trole_groups/config/schema/helpers.rb +11 -0
- data/lib/trole_groups/config/schema/role_group_helpers.rb +11 -0
- data/lib/trole_groups/config/valid_role_groups.rb +21 -0
- data/lib/trole_groups/macros.rb +42 -0
- data/lib/trole_groups/macros/configuration.rb +89 -0
- data/lib/trole_groups/macros/configuration/base_loader.rb +35 -0
- data/lib/trole_groups/macros/configuration/config_loader.rb +19 -0
- data/lib/trole_groups/macros/configuration/storage_loader.rb +20 -0
- data/lib/trole_groups/macros/configuration/strategy_loader.rb +38 -0
- data/lib/trole_groups/macros/static_roles.rb +9 -0
- data/lib/trole_groups/macros/strategy_options.rb +21 -0
- data/lib/trole_groups/operations.rb +25 -0
- data/lib/trole_groups/operations/read.rb +36 -0
- data/lib/trole_groups/operations/write.rb +42 -0
- data/lib/trole_groups/storage.rb +27 -0
- data/lib/trole_groups/storage/base_many.rb +93 -0
- data/lib/trole_groups/storage/embed_many.rb +58 -0
- data/lib/trole_groups/storage/ref_many.rb +47 -0
- data/lib/trole_groups/strategy.rb +30 -0
- data/lib/troles/adapters/active_record/config.rb +32 -9
- data/lib/troles/adapters/mongoid/config.rb +7 -7
- data/lib/troles/common/api/core.rb +1 -1
- data/lib/troles/common/config.rb +49 -14
- data/lib/troles/common/config/schema.rb +17 -23
- data/lib/troles/common/config/schema/helpers.rb +77 -0
- data/lib/troles/common/config/schema/role_helpers.rb +27 -0
- data/lib/troles/common/config/static_roles.rb +4 -4
- data/lib/troles/common/macros.rb +4 -4
- data/lib/troles/common/macros/configuration.rb +8 -8
- data/lib/troles/common/macros/strategy_options.rb +4 -4
- data/lib/troles/common/storage.rb +1 -0
- data/lib/troles/config.rb +2 -2
- data/lib/troles/storage/ref_many.rb +2 -3
- data/spec/active_record/models/ref_many.rb +3 -0
- data/spec/active_record/strategies/many/ref_many_spec.rb +2 -1
- data/spec/generic/models/role.rb +2 -1
- data/spec/trole_groups/api/core_api_spec.rb +14 -0
- data/spec/trole_groups/api/read_api_spec.rb +36 -0
- data/spec/trole_groups/api/write_api_spec.rb +19 -0
- data/spec/trole_groups/api_spec.rb +27 -0
- data/spec/trole_groups/generic/models.rb +3 -0
- data/spec/trole_groups/generic/models/role_group.rb +44 -0
- data/spec/trole_groups/generic/models/user.rb +9 -0
- data/spec/trole_groups/strategies/ref_many.rb +51 -0
- data/spec/trole_groups/strategy_helper.rb +9 -0
- data/spec/trole_groups_spec.rb +11 -0
- data/spec/trole_spec_helper.rb +9 -0
- data/spec/troles/api_spec.rb +12 -18
- data/troles.gemspec +52 -4
- metadata +85 -37
- data/development.sqlite3 +0 -0
- data/lib/troles/common/config/schema_helpers.rb +0 -95
@@ -0,0 +1,42 @@
|
|
1
|
+
# @author Kristian Mandrup
|
2
|
+
module TroleGroups
|
3
|
+
class Operations
|
4
|
+
module Write
|
5
|
+
|
6
|
+
# Test role_groups equality
|
7
|
+
# @param [Array<Symbol>] role_groups list to test
|
8
|
+
def == *role_groups
|
9
|
+
rolegroup_subject.rolegroup_list == role_groups.to_symbols_uniq
|
10
|
+
end
|
11
|
+
alias_method :equal, :"=="
|
12
|
+
alias_method :same_as, :"=="
|
13
|
+
|
14
|
+
# Add a set of role_groups to the role subject
|
15
|
+
# @param [Array<Symbol>] role_groups list to add
|
16
|
+
# @return [true, false, Error] true if added, false if static or invalid, Error on some error
|
17
|
+
def + *role_groups
|
18
|
+
rolegroup_subject.add_role_groups role_groups.to_symbols_uniq
|
19
|
+
end
|
20
|
+
alias_method :<<, :+
|
21
|
+
alias_method :add, :+
|
22
|
+
alias_method :add!, :+
|
23
|
+
|
24
|
+
# Remove a set of role_groups from the role subject
|
25
|
+
# @param [Array<Symbol>] role_groups list to add
|
26
|
+
# @return [true, false, Error] true if removed, false if static or invalid, Error on some error
|
27
|
+
def - *role_groups
|
28
|
+
rolegroup_subject.remove_role_groups role_groups.to_symbols_uniq
|
29
|
+
end
|
30
|
+
alias_method :remove, :-
|
31
|
+
alias_method :remove!, :-
|
32
|
+
|
33
|
+
# Clear all the role_groups from the role subject
|
34
|
+
# @param [Array<Symbol>] role_groups list to add
|
35
|
+
# @return [true, false, Error] true if removed, false if static or invalid, Error on some error
|
36
|
+
def clear
|
37
|
+
rolegroup_subject.clear_role_groups!
|
38
|
+
end
|
39
|
+
alias_method :clear!, :clear
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module TroleGroups
|
2
|
+
module Storage
|
3
|
+
autoload :BaseMany, 'trole_groups/storage/base_many'
|
4
|
+
# autoload :BitMany, 'trole_groups/storage/bit_many'
|
5
|
+
autoload :EmbedMany, 'trole_groups/storage/embed_many'
|
6
|
+
autoload :RefMany, 'trole_groups/storage/ref_many'
|
7
|
+
# autoload :StringMany, 'trole_groups/storage/string_many'
|
8
|
+
|
9
|
+
class BaseMany < Troles::Common::Storage
|
10
|
+
protected
|
11
|
+
|
12
|
+
# get matching list of Role instances
|
13
|
+
# @param [Array<Symbol>] list of role names to find Roles for
|
14
|
+
# @return [Array<Role>] references to Role instances
|
15
|
+
def find_rolegroups *rolegroups
|
16
|
+
rolegroup_model.where(:name => rolegroups.flatten).all
|
17
|
+
end
|
18
|
+
|
19
|
+
# get list of embedded Role instances
|
20
|
+
# @param [Array<Symbol>] list of role names
|
21
|
+
# @return [Array<Role>] Role instances generated
|
22
|
+
def rolegroups_to_embed *rolegroups
|
23
|
+
raise "Must be implemented by embed storage to generate a set of rolegroups to embed"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# @author Kristian Mandrup
|
2
|
+
#
|
3
|
+
# Troles base storage for Many roles strategies
|
4
|
+
#
|
5
|
+
module TroleGroups
|
6
|
+
module Storage
|
7
|
+
class BaseMany
|
8
|
+
attr_reader :rolegroup_subject
|
9
|
+
|
10
|
+
# initializes storage with reference to role subject
|
11
|
+
# @param [Object] the role subject (fx a User or UserAccount)
|
12
|
+
def initialize rolegroup_subject
|
13
|
+
@rolegroup_subject = rolegroup_subject
|
14
|
+
end
|
15
|
+
|
16
|
+
# valid roles of the role subjects class (fx account - i.e the account rules!)
|
17
|
+
# @return [Array<Symbol>] the list of valid roles
|
18
|
+
def valid_roles
|
19
|
+
rolegroup_subject.class.valid_roles
|
20
|
+
end
|
21
|
+
|
22
|
+
# name/type of storage
|
23
|
+
# @return [Symbol]
|
24
|
+
def name
|
25
|
+
:generic
|
26
|
+
end
|
27
|
+
|
28
|
+
# sets the value of the role field (@trole or @troles) and persists the value (in the data store)
|
29
|
+
# @param [Object] the value to set on the role field of the role subject
|
30
|
+
def set_ds_field value
|
31
|
+
return if ds_field_value == value
|
32
|
+
rolegroup_subject.send(:"#{ds_field_name}=", value)
|
33
|
+
persist_role_changes!
|
34
|
+
end
|
35
|
+
|
36
|
+
# the name of the role field
|
37
|
+
# @return [Symbol] the name
|
38
|
+
def ds_field_name
|
39
|
+
rolegroup_field
|
40
|
+
end
|
41
|
+
|
42
|
+
# the current value of the role field
|
43
|
+
# @return [Object] the value
|
44
|
+
def ds_field_value
|
45
|
+
rolegroup_subject.send(ds_field_name)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Attempts to persist the role field changes
|
49
|
+
# @return [true, false, error] true if saved, false if no save! method, Error on some error
|
50
|
+
def persist_role_changes!
|
51
|
+
return false if !rolegroup_subject.respond_to? :save!
|
52
|
+
rolegroup_subject.save!
|
53
|
+
rolegroup_subject.publish_change :role_groups
|
54
|
+
end
|
55
|
+
|
56
|
+
protected
|
57
|
+
|
58
|
+
def trolegroups_config
|
59
|
+
rolegroup_subject.class.trolegroups_config
|
60
|
+
end
|
61
|
+
|
62
|
+
def rolegroup_field
|
63
|
+
trolegroups_config.rolegroup_field
|
64
|
+
end
|
65
|
+
|
66
|
+
def rolegroup_model
|
67
|
+
trolegroups_config.rolegroup_model
|
68
|
+
end
|
69
|
+
|
70
|
+
def rolegroup_list
|
71
|
+
rolegroup_subject.rolegroup_list
|
72
|
+
end
|
73
|
+
|
74
|
+
def role_list
|
75
|
+
rolegroup_subject.role_list
|
76
|
+
end
|
77
|
+
|
78
|
+
# get matching list of Role instances
|
79
|
+
# @param [Array<Symbol>] list of role names to find Roles for
|
80
|
+
# @return [Array<Role>] references to Role instances
|
81
|
+
def find_rolegroups *names
|
82
|
+
rolegroup_model.where(:name => names.flatten).all
|
83
|
+
end
|
84
|
+
|
85
|
+
# get list of embedded Role instances
|
86
|
+
# @param [Array<Symbol>] list of role names
|
87
|
+
# @return [Array<Role>] Role instances generated
|
88
|
+
def rolegroups_to_embed *roles
|
89
|
+
raise "Must be implemented by embed storage to generate a set of roles to embed"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# @author Kristian Mandrup
|
2
|
+
#
|
3
|
+
# Many role storage for storing (embedding) multiple Role instances in a list on the role subject
|
4
|
+
#
|
5
|
+
# @note all methods potentially operate directly on values in the data store
|
6
|
+
#
|
7
|
+
module TroleGroups::Storage
|
8
|
+
class EmbedMany < BaseMany
|
9
|
+
|
10
|
+
# constructor
|
11
|
+
# @param [Object] the role subject
|
12
|
+
def initialize rolegroupsubject
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def rolegroups_to_embed *rolegroups
|
17
|
+
rolegroups.flatten.inject([]) do |res, role|
|
18
|
+
res << create_role(role)
|
19
|
+
res
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# display the rolegroups as a list of symbols
|
24
|
+
# @return [Array<Symbol>] rolegroups list
|
25
|
+
def display_rolegroups
|
26
|
+
return [] if !ds_field_value?
|
27
|
+
ds_field_value.map{|rolegroup| rolegroup.name.to_sym }
|
28
|
+
end
|
29
|
+
|
30
|
+
# is it set?
|
31
|
+
def ds_field_value?
|
32
|
+
ds_field_value && !ds_field_value.empty?
|
33
|
+
end
|
34
|
+
|
35
|
+
# saves the rolegroups for the role subject in the data store
|
36
|
+
# @param [Array<Symbol>] rolegroups list
|
37
|
+
def set_rolegroups *rolegroups
|
38
|
+
# creates and embeds new Role instances from symbols
|
39
|
+
set_ds_field rolegroups_to_embed(*rolegroups)
|
40
|
+
end
|
41
|
+
|
42
|
+
# clears the role of the user in the data store
|
43
|
+
def clear!
|
44
|
+
set_ds_field []
|
45
|
+
end
|
46
|
+
|
47
|
+
# sets the role to its default state
|
48
|
+
def set_default_role!
|
49
|
+
clear!
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
def create_role name
|
55
|
+
rolegroup_model.create name
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module TroleGroups::Storage
|
2
|
+
class RefMany < BaseMany
|
3
|
+
def initialize rolegroup_subject
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def display_roles
|
8
|
+
display_roles_for rolegroup_list
|
9
|
+
end
|
10
|
+
|
11
|
+
def display_roles_for *names
|
12
|
+
groups = find_rolegroups names.to_symbols_uniq
|
13
|
+
groups.inject([]) {|res, group| res << group.roles }.flat_uniq
|
14
|
+
end
|
15
|
+
|
16
|
+
# display the roles as a list of symbols
|
17
|
+
# @return [Array<Symbol>] roles list
|
18
|
+
def display_rolegroups
|
19
|
+
return [] if !ds_field_value?
|
20
|
+
ds_field_value.flatten.map do |rolegroup|
|
21
|
+
rolegroup.name.to_sym
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# is it set?
|
26
|
+
def ds_field_value?
|
27
|
+
ds_field_value && !ds_field_value.empty?
|
28
|
+
end
|
29
|
+
|
30
|
+
# saves the role for the user in the data store
|
31
|
+
def set_rolegroups *rolegroups
|
32
|
+
# finds and sets references to existing Role instances from symbols
|
33
|
+
found = find_rolegroups(*rolegroups)
|
34
|
+
set_ds_field found
|
35
|
+
end
|
36
|
+
|
37
|
+
# clears the role of the user in the data store
|
38
|
+
def clear!
|
39
|
+
set_ds_field []
|
40
|
+
end
|
41
|
+
|
42
|
+
# sets the role to default setting
|
43
|
+
def set_default_role!
|
44
|
+
clear!
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# @author Kristian Mandrup
|
2
|
+
#
|
3
|
+
# Base module for Many roles strategies
|
4
|
+
#
|
5
|
+
module TroleGroups
|
6
|
+
module Strategy
|
7
|
+
module BaseMany
|
8
|
+
#
|
9
|
+
# a Many role strategy is included by a role subject (fx a UserAccount class)
|
10
|
+
# a Many role strategy should always include BaseMany
|
11
|
+
# when BaseMany is included, it ensures that the complete
|
12
|
+
# Troles API is also included into the role subject
|
13
|
+
#
|
14
|
+
# @note the Trole::Api also includes the Troles::Common::Api
|
15
|
+
#
|
16
|
+
# @param [Class] the role subject class for which to include the Role strategy (fx User Account)
|
17
|
+
#
|
18
|
+
def self.included(base)
|
19
|
+
base.send :include, TroleGroups::Api
|
20
|
+
end
|
21
|
+
|
22
|
+
# The storage to use
|
23
|
+
# @return [Troles::Storage] a storage subclass instance matching the needs of the strategy
|
24
|
+
def group_store
|
25
|
+
@group_store ||= group_storage.new self
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
module Troles::ActiveRecord
|
2
2
|
class Config < Troles::Common::Config
|
3
|
-
|
4
|
-
attr_accessor :role_join_model
|
5
3
|
|
6
|
-
def initialize
|
4
|
+
def initialize subject_class, options = {}
|
7
5
|
super
|
8
6
|
end
|
9
7
|
|
@@ -11,7 +9,7 @@ module Troles::ActiveRecord
|
|
11
9
|
case strategy
|
12
10
|
when :ref_many
|
13
11
|
return configure_join_model if role_join_model
|
14
|
-
has_and_belongs_many
|
12
|
+
has_and_belongs_many subject_class, object_model, :key => :accounts
|
15
13
|
when :embed_many
|
16
14
|
raise "Embed many configuration not yet implemented for ActiveRecord"
|
17
15
|
end
|
@@ -23,26 +21,51 @@ module Troles::ActiveRecord
|
|
23
21
|
|
24
22
|
protected
|
25
23
|
|
24
|
+
def object_model
|
25
|
+
role_model
|
26
|
+
end
|
27
|
+
|
28
|
+
def role_join_model
|
29
|
+
@join_model_found ||= begin
|
30
|
+
models = [@join_model, join_model_best_guess].select do |class_name|
|
31
|
+
try_class(class_name.to_s.camelize)
|
32
|
+
end.compact
|
33
|
+
# puts "role models found: #{models}"
|
34
|
+
raise "No #{subject_class} to #{object_model} join class defined, define a #{join_model_best_guess} model class or set which class to use, using the :role_join_model option on configuration" if models.empty?
|
35
|
+
models.first.to_s.constantize
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def join_model_best_guess
|
40
|
+
"#{subject_class.to_s.pluralize}#{object_model.to_s.pluralize}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def role_join_model= model_class
|
44
|
+
@join_model = model_class and return if model_class.any_kind_of?(Class, String, Symbol)
|
45
|
+
raise "The role model must be a Class, was: #{model_class}"
|
46
|
+
end
|
47
|
+
|
48
|
+
|
26
49
|
def join_key
|
27
50
|
make_key role_join_model
|
28
51
|
end
|
29
52
|
|
30
|
-
def
|
53
|
+
def configure_join_model
|
31
54
|
# UserAccount
|
32
55
|
# has_many :troles, :class_name => 'Role', :through => :users_roles
|
33
|
-
has_many_for
|
56
|
+
has_many_for subject_class, role_model, :through => join_key
|
34
57
|
# has_many :user_roles, :class_name => 'UserRole'
|
35
|
-
has_many_for
|
58
|
+
has_many_for subject_class, role_join_model, :key => join_key
|
36
59
|
|
37
60
|
# UserRole (custom join class name)
|
38
61
|
# belongs_to :user, :class_name => 'UserAccount'
|
39
|
-
belongs_to_for role_join_model,
|
62
|
+
belongs_to_for role_join_model, subject_class
|
40
63
|
# belongs_to :role, :class_name => 'Role'
|
41
64
|
belongs_to_for role_join_model, role_model
|
42
65
|
|
43
66
|
# Role
|
44
67
|
# has_many :accounts, :class_name => 'User', :through => :user_roles
|
45
|
-
has_many_for role,
|
68
|
+
has_many_for role, subject_class, :through => join_key, :key => :accounts
|
46
69
|
|
47
70
|
# has_many :user_roles, :class_name => 'UserRole'
|
48
71
|
has_many_for role, role_join_model, :key => join_key
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Troles::Mongoid
|
2
2
|
class Config < Troles::Common::Config
|
3
3
|
|
4
|
-
def initialize
|
4
|
+
def initialize subject_class, options = {}
|
5
5
|
super
|
6
6
|
end
|
7
7
|
|
@@ -9,15 +9,15 @@ module Troles::Mongoid
|
|
9
9
|
def configure_relation
|
10
10
|
case strategy
|
11
11
|
when :ref_many
|
12
|
-
has_many_for
|
12
|
+
has_many_for subject_class, :role, :through => join_key
|
13
13
|
|
14
|
-
belongs_to_for join_model,
|
15
|
-
belongs_to_for join_model,
|
14
|
+
belongs_to_for join_model, subject_class
|
15
|
+
belongs_to_for join_model, object_model
|
16
16
|
|
17
|
-
has_many_for role,
|
17
|
+
has_many_for role, subject_class, :through => join_key
|
18
18
|
|
19
19
|
when :embed_many
|
20
|
-
embeds_many
|
20
|
+
embeds_many subject_class, object_model
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -29,7 +29,7 @@ module Troles::Mongoid
|
|
29
29
|
String
|
30
30
|
end
|
31
31
|
# field :name, :type => String
|
32
|
-
|
32
|
+
subject_class.send(:field, role_field, type_opts(type)) if type
|
33
33
|
end
|
34
34
|
|
35
35
|
def type_opts type
|
data/lib/troles/common/config.rb
CHANGED
@@ -13,11 +13,11 @@ module Troles::Common
|
|
13
13
|
send :include, "Troles::Common::Config::#{name.to_s.camelize}".constantize
|
14
14
|
end
|
15
15
|
|
16
|
-
attr_accessor :
|
16
|
+
attr_accessor :subject_class, :strategy, :log_on, :generic, :auto_relations
|
17
17
|
attr_writer :orm
|
18
18
|
|
19
|
-
def initialize
|
20
|
-
@
|
19
|
+
def initialize subject_class, options = {}
|
20
|
+
@subject_class = subject_class
|
21
21
|
# set instance var for each pair in options
|
22
22
|
apply_options! options
|
23
23
|
end
|
@@ -42,12 +42,58 @@ module Troles::Common
|
|
42
42
|
def auto_load?
|
43
43
|
@auto_load
|
44
44
|
end
|
45
|
+
|
46
|
+
def auto_config
|
47
|
+
auto_config_setings
|
48
|
+
end
|
49
|
+
|
50
|
+
def auto_config? name
|
51
|
+
auto_config_setings[name]
|
52
|
+
end
|
53
|
+
|
54
|
+
protected
|
55
|
+
|
56
|
+
|
57
|
+
def auto_config_setings
|
58
|
+
@auto_config_setings ||= auto_config_defaults
|
59
|
+
end
|
60
|
+
|
61
|
+
# default auto_config settings
|
62
|
+
def auto_config_defaults
|
63
|
+
{:models => true, :relations => true, :fields => true}
|
64
|
+
end
|
45
65
|
end
|
46
66
|
|
47
67
|
def log_on?
|
48
68
|
log_on || Troles::Config.log_on
|
49
69
|
end
|
50
70
|
|
71
|
+
def auto_config
|
72
|
+
auto_config_setings
|
73
|
+
end
|
74
|
+
|
75
|
+
def auto_config? name
|
76
|
+
return auto_config_setings[name] if !auto_config_setings[name].nil?
|
77
|
+
Troles::Config.auto_config?(name)
|
78
|
+
end
|
79
|
+
|
80
|
+
def apply_options! options = {}
|
81
|
+
options.each_pair do |key, value|
|
82
|
+
send("#{key}=", value) if self.respond_to?(:"#{key}")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def configure! options = {}
|
87
|
+
apply_options! options
|
88
|
+
configure_models if auto_config?(:models)
|
89
|
+
end
|
90
|
+
|
91
|
+
# protected
|
92
|
+
|
93
|
+
def auto_config_setings
|
94
|
+
@auto_config_setings ||= {}
|
95
|
+
end
|
96
|
+
|
51
97
|
def role_field
|
52
98
|
@role_field ||= begin
|
53
99
|
default_role_field
|
@@ -68,12 +114,6 @@ module Troles::Common
|
|
68
114
|
@orm || self.class.default_orm
|
69
115
|
end
|
70
116
|
|
71
|
-
def apply_options! options = {}
|
72
|
-
options.each_pair do |key, value|
|
73
|
-
send("#{key}=", value) if self.respond_to?(:"#{key}")
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
117
|
def singularity
|
78
118
|
@singularity ||= (strategy =~ /_many$/) ? :many : :one
|
79
119
|
end
|
@@ -82,11 +122,6 @@ module Troles::Common
|
|
82
122
|
# raise ArgumentError, "Must be :many or :one" if ![:one, :many].include?(value)
|
83
123
|
# @singularity ||= value
|
84
124
|
# end
|
85
|
-
|
86
|
-
def configure! options = {}
|
87
|
-
apply_options! options
|
88
|
-
configure_role_field
|
89
|
-
end
|
90
125
|
|
91
126
|
def generic?
|
92
127
|
return true if orm.nil?
|