ixtlan-guard 0.7.0 → 0.7.2

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.
Files changed (39) hide show
  1. data/features/generators.feature +0 -10
  2. data/features/step_definitions/simple_steps.rb +1 -82
  3. data/lib/ixtlan/guard/guard_ng.rb +77 -76
  4. data/lib/ixtlan/guard/guard_rails.rb +8 -8
  5. data/lib/ixtlan/guard/railtie.rb +1 -1
  6. data/spec/guard_cache_spec.rb +1 -1
  7. data/spec/guard_export_spec.rb +118 -90
  8. data/spec/guard_spec.rb +1 -16
  9. data/spec/guard_with_associations_spec.rb +114 -0
  10. data/spec/guard_with_associations_spec.rb~ +106 -0
  11. data/spec/guards/allow_all_defaults_guard.yml +1 -1
  12. data/spec/guards/defaults_guard.yml +1 -1
  13. data/spec/guards/no_defaults_guard.yml +1 -1
  14. data/spec/guards/only_defaults_guard.yml +1 -1
  15. data/spec/guards/regions_guard.yml +8 -0
  16. data/spec/guards/regions_guard.yml~ +2 -0
  17. data/spec/guards/users_guard.yml +1 -1
  18. metadata +8 -24
  19. data/lib/generators/active_record/templates/flavor_migration.rb +0 -13
  20. data/lib/generators/active_record/templates/flavor_model.rb +0 -8
  21. data/lib/generators/active_record/templates/group_model.rb +0 -43
  22. data/lib/generators/active_record/templates/group_user_migration.rb +0 -13
  23. data/lib/generators/active_record/templates/user_model.rb +0 -124
  24. data/lib/generators/active_record/user_management_models_generator.rb +0 -202
  25. data/lib/generators/erb/user_management_controller_generator.rb +0 -10
  26. data/lib/generators/ixtlan/maintenance_scaffold/USAGE +0 -8
  27. data/lib/generators/ixtlan/maintenance_scaffold/maintenance_scaffold_generator.rb +0 -40
  28. data/lib/generators/ixtlan/permissions_scaffold/USAGE +0 -8
  29. data/lib/generators/ixtlan/permissions_scaffold/permissions_scaffold_generator.rb +0 -33
  30. data/lib/generators/ixtlan/user_management_controller/USAGE +0 -8
  31. data/lib/generators/ixtlan/user_management_controller/user_management_controller_generator.rb +0 -23
  32. data/lib/generators/ixtlan/user_management_models/USAGE +0 -8
  33. data/lib/generators/ixtlan/user_management_models/user_management_models_generator.rb +0 -19
  34. data/lib/generators/ixtlan/user_management_scaffold/user_management_scaffold_generator.rb +0 -13
  35. data/lib/ixtlan/guard/controllers/maintenance_controller.rb +0 -45
  36. data/lib/ixtlan/guard/controllers/permissions_controller.rb +0 -41
  37. data/lib/ixtlan/guard/models/maintenance.rb +0 -55
  38. data/lib/ixtlan/guard/models/user_update_manager.rb +0 -95
  39. data/lib/ixtlan/guard/spec/user_management_models_spec.rb +0 -193
@@ -1,8 +0,0 @@
1
- Description:
2
- Explain the generator
3
-
4
- Example:
5
- rails generate guard Thing
6
-
7
- This will create:
8
- what/will/it/create
@@ -1,23 +0,0 @@
1
- require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'
2
- require 'generators/ixtlan/scaffold/scaffold_generator'
3
-
4
- module Ixtlan
5
- class UserManagementControllerGenerator < ScaffoldGenerator
6
-
7
- source_root File.expand_path('../../templates', __FILE__)
8
-
9
- class_option :orm, :banner => "NAME", :type => :string, :required => true,
10
- :desc => "ORM to generate the controller for"
11
- class_option :gwt, :banner => "PACKAGE_NAME", :type => :string,
12
- :desc => "given gwt package name will generate gwt code"
13
-
14
-
15
- def create_controller_files
16
- template 'controller.rb', File.join('app/controllers', class_path, "#{controller_file_name}_controller.rb")
17
- end
18
-
19
- hook_for :template_engine
20
-
21
- end
22
- end
23
-
@@ -1,8 +0,0 @@
1
- Description:
2
- Explain the generator
3
-
4
- Example:
5
- rails generate guard Thing
6
-
7
- This will create:
8
- what/will/it/create
@@ -1,19 +0,0 @@
1
- module Ixtlan
2
- class UserManagementModelsGenerator < Rails::Generators::NamedBase #metagenerator
3
- arguments.clear # clear name argument from NamedBase
4
- argument :params, :type => :array, :default => ['user'], :required => false, :banner => "user_model [field:type ..] [group_model [field:type ..] [flavor_model1 [field:type ..] flavor_model2 [field:type ..]]]", :desc => "group default: group with field name:string"
5
-
6
- class_option :gwt, :banner => "PACKAGE_NAME", :type => :string,
7
- :desc => "given gwt package name will generate gwt code"
8
-
9
- def name # set alias so NamedBase uses the model as its name
10
- @params[0].sub(/\s+.*/, '').singularize
11
- end
12
-
13
- attr_reader :params
14
-
15
- hook_for :orm, :required => true
16
-
17
- end
18
- end
19
-
@@ -1,13 +0,0 @@
1
- require 'generators/ixtlan/user_management_models/user_management_models_generator'
2
-
3
- module Ixtlan
4
- class UserManagementScaffoldGenerator < UserManagementModelsGenerator #metagenerator
5
-
6
- source_root File.expand_path('../../templates', __FILE__)
7
-
8
- hook_for :user_management_controller, :default => :user_management_controller
9
- hook_for :stylesheets, :in => :rails
10
- hook_for :gwt, :type => :boolean, :default => false
11
- end
12
- end
13
-
@@ -1,45 +0,0 @@
1
- require 'ixtlan/models/maintenance'
2
- module Ixtlan
3
- module Guard
4
- module Controllers
5
- module MaintenanceController
6
-
7
- # GET /maintenance
8
- # GET /maintenance.xml
9
- # GET /maintenance.json
10
- def index
11
- @maintenance = ::Ixtlan::Guard::Models::Maintenance.new
12
- @maintenance.groups = guard.blocked_groups
13
-
14
- respond_to do |format|
15
- format.html # index.html.erb
16
- format.xml { render :xml => @maintenance }
17
- format.json { render :json => @maintenance }
18
- end
19
- end
20
-
21
- # PUT /maintenance/block
22
- def block
23
- guard.block_groups(param[:groups])
24
-
25
- respond_to do |format|
26
- format.html { redirect_to(maintenance_url) }
27
- format.xml { head :ok }
28
- format.json { head :ok }
29
- end
30
- end
31
-
32
- # PUT /maintenance/resume
33
- def resume
34
- guard.block_groups([])
35
-
36
- respond_to do |format|
37
- format.html { redirect_to(maintenance_url) }
38
- format.xml { head :ok }
39
- format.json { head :ok }
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,41 +0,0 @@
1
- module Ixtlan
2
- module Guard
3
- module Controllers
4
- module PermissionsController
5
-
6
- # GET /permissions
7
- # GET /permissions.xml
8
- # GET /permissions.json
9
- def index
10
- respond_to do |format|
11
- format.html
12
- format.xml { render :xml => guard.permissions(self).to_xml }
13
- format.json { render :json => guard.permissions(self).to_json }
14
- end
15
- end
16
-
17
- # GET /permissions/1
18
- # GET /permissions/1.xml
19
- # GET /permissions/1.json
20
- def show
21
- controller = Object.new
22
- def controller.current_user(u = nil)
23
- @u = u if u
24
- @u
25
- end
26
- if defined? ::DataMapper
27
- controller.current_user(current_user.class.get(params[:id]))
28
- else
29
- controller.current_user(current_user.class.find(params[:id]))
30
- end
31
-
32
- respond_to do |format|
33
- format.html
34
- format.xml { render :xml => guard.permissions(controller).to_xml }
35
- format.json { render :json => guard.permissions(controller).to_json }
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,55 +0,0 @@
1
- unless String.respond_to? "plural"
2
- class String
3
- def plural
4
- self + "s"
5
- end
6
- end
7
- end
8
-
9
- module Ixtlan
10
- module SerializableModel
11
- def self.included(model)
12
- model.send :include, ActiveModel::Serializers::JSON
13
- model.send :include, ActiveModel::Serializers::Xml
14
- end
15
-
16
- def attributes=(attributes)
17
- attributes.each do |k, v|
18
- if k == k.plural
19
- v = case v
20
- when String
21
- [v]
22
- when Array
23
- v
24
- when Hash
25
- v.values.flatten
26
- end
27
- end
28
- send("#{k}=", v)
29
- end
30
- end
31
-
32
- def attributes
33
- map = instance_variables.collect do |name|
34
- [name[1,1000], send(name[1,1000].to_sym)]
35
- end.reject do |x|
36
- x[1] == nil
37
- end
38
- Hash[map]
39
- end
40
- end
41
- end
42
-
43
- module Ixtlan
44
- module Guard
45
- module Models
46
- class Maintenance
47
-
48
- include Ixtlan::SerializableModel
49
-
50
- attr_accessor :groups
51
-
52
- end
53
- end
54
- end
55
- end
@@ -1,95 +0,0 @@
1
- module Ixtlan
2
- module Guard
3
- module Models
4
- class UserUpdateManager
5
-
6
- def initialize(options)
7
- @group_model = options[:group_model]
8
- @user_id = options[:user_id].to_sym
9
- @plural_group_name = options[:plural_group_name].to_sym
10
- @group_id = options[:group_id].to_sym
11
- @group_ids = "#{options[:group_id]}s"
12
- end
13
-
14
- def update_groups(user, params = [])
15
- allowed_ids = user.current_user.all_groups.collect { |g| g.id.to_s }
16
-
17
- group_ids = params[@group_ids] || []
18
- group_ids = intersect(group_ids, allowed_ids)
19
-
20
- current_ids = user.send(@plural_group_name).collect { |g| g.id.to_s }
21
- current_ids = intersect(current_ids, allowed_ids)
22
-
23
- # add
24
- (group_ids - current_ids).each do |gid|
25
- user.send(@plural_group_name) << @group_model.find(gid)
26
- end
27
-
28
- #delete
29
- (current_ids - group_ids).each do |gid|
30
- user.groups.delete(@group_model.find(gid))
31
- end
32
-
33
- user.save
34
- end
35
-
36
- def update(user, params = {}, options = {})
37
- raise "no user" unless user
38
- user.current_user = params.delete("current_user") || params.delete(:current_user) unless user.current_user
39
- raise "'current_user' not set" unless user.current_user
40
-
41
- flavor_id = options[:flavor_id].to_sym
42
- flavor_ids = "#{options[:flavor_id]}s"
43
- association_model = options[:association_model]
44
- retrieve_flavors_method = options[:flavors_for_group].to_sym
45
-
46
- allowed_ids = user.current_user.send(retrieve_flavors_method, @group_model.admin_group).collect {|i| i.id }
47
- allowed_group_ids = user.current_user.all_groups.collect { |g| g.id.to_s }
48
-
49
- group_ids = params[@group_ids] || []
50
- group_ids = intersect(group_ids, allowed_group_ids)
51
- group_ids.each do |gid|
52
- g = @group_model.find(gid)
53
-
54
- # calculate intersection of current and allowed
55
- current_ids = user.send(retrieve_flavors_method, gid.to_i).collect { |d| d.id }
56
- current_ids = intersect(current_ids, allowed_ids)
57
-
58
- # calculate intersection of target and allowed
59
- target_ids = ((params.delete(g.to_name) || {})[flavor_ids] || []).collect { |i| i.to_i }
60
- target_ids = intersect(target_ids, allowed_ids)
61
-
62
- # delete
63
- (current_ids - target_ids).each do |id|
64
- return false unless association_model.delete_all(["user_id=? and group_id=? and #{flavor_id}=?", user.id, gid, id])
65
- end
66
-
67
- # add
68
- (target_ids - current_ids).each do |id|
69
- return false unless association_model.create(@user_id => user.id, @group_id => gid, flavor_id => id)
70
- end
71
- end
72
- true
73
- end
74
-
75
- def managed_flavors_for_group(user, group_or_id, options)
76
- retrieve_flavors_method = options[:flavors_for_group].to_sym
77
- group = @group_model.get(group_or_id)
78
- if group.root?
79
- []
80
- else
81
- existing = user.send(retrieve_flavors_method, group)
82
- managed = user.send(retrieve_flavors_method, @group_model.admin_group)
83
- intersect(managed, existing)
84
- end
85
- end
86
-
87
- private
88
-
89
- def intersect(set1, set2)
90
- set1 - (set1 - set2)
91
- end
92
- end
93
- end
94
- end
95
- end
@@ -1,193 +0,0 @@
1
- shared_examples_for 'integration-test' do
2
-
3
- describe "UserManagementModels" do
4
-
5
- before :all do
6
- @root = Group.find_by_name(Group::ROOT) || Group.create(:name => Group::ROOT)
7
- @admin = Group.find_by_name(Group::ADMIN) || Group.create(:name => Group::ADMIN)
8
- @translator = Group.find_by_name("translator") || Group.create(:name => "translator")
9
- @superuser = User.find_by_id(1)
10
- if @superuser.nil? || @superuser.groups == []
11
- @superuser = User.create!
12
- @superuser.groups << @root
13
- @superuser.save!
14
- end
15
- @main = Domain.find_by_name('main') || Domain.create(:name => 'main')
16
- @sub = Domain.find_by_name('sub') || Domain.create(:name => 'sub')
17
- DomainsGroupsUser.delete_all
18
- @adminuser = User.new('group_ids' => [@admin.id])
19
- @adminuser.current_user = @superuser
20
- @adminuser.save
21
- end
22
-
23
- describe "root user" do
24
- it 'should create user' do
25
- @adminuser.id.should_not be_nil
26
- @adminuser.groups.should == [@admin]
27
- @adminuser.domains_for_group(@admin).should == []
28
- end
29
-
30
- it 'should add domain to user via update' do
31
- @adminuser.domains_for_group(@admin).member?(@main).should be_false
32
- @adminuser.current_user = @superuser
33
- @adminuser.update_attributes(Group::ADMIN => { 'domain_ids' => [@main.id.to_s] }, 'group_ids' => [@admin.id.to_s])
34
- @adminuser.domains_for_group(@admin).member?(@main).should be_true
35
- @adminuser.current_user.should be_nil
36
- end
37
-
38
- it 'should raise error when adding a domain without current_user set' do
39
- @adminuser.current_user = nil
40
- lambda { @adminuser.update_attributes(Group::ADMIN => { 'domain_ids' => [@sub.id.to_s] }, 'group_ids' => [@admin.id.to_s]) }.should raise_error
41
- @adminuser.current_user.should be_nil
42
- end
43
-
44
- it 'should add new group through update' do
45
- @adminuser.groups.member?(@translator).should be_false
46
- @adminuser.current_user = @superuser
47
- @adminuser.update_attributes('group_ids' => [@translator.id.to_s])
48
- @adminuser.groups.member?(@translator).should be_true
49
- end
50
-
51
- it 'should raise error when adding new group' do
52
- @adminuser.groups.member?(@root).should be_false
53
- @adminuser.current_user = nil
54
- lambda{ @adminuser.update_attributes('group_ids' => [@translator.id.to_s])}.should raise_error
55
- @adminuser.current_user.should be_nil
56
- end
57
- end
58
-
59
- describe "admin user" do
60
-
61
- before :all do
62
- @locales = Group.find_by_name("locales") || Group.create(:name => "locales")
63
- @adminuser.current_user = @superuser
64
- @adminuser.update_attributes('group_ids' => [@admin.id.to_s, @locales.id.to_s], Group::ADMIN => {"domain_ids" => [@main.id.to_s]})
65
- @adminuser.save
66
- end
67
-
68
- it 'should create new users' do
69
- user = User.new('group_ids' => [@admin.id.to_s])
70
- user.current_user = @adminuser
71
- user.save.should be_true
72
- user.groups.member?(@admin).should be_true
73
- user.groups.size.should == 1
74
- end
75
-
76
- it 'should not add group via update_attributes which admin does not belong to' do
77
- user = User.create({:current_user => @adminuser, 'group_ids' => [@root.id.to_s]})
78
- user.id.should_not be_nil
79
-
80
- user.groups.member?(@root).should be_false
81
- user.groups.size.should == 0
82
- end
83
-
84
- it 'should not add group via update_attributes which admin does not belong to' do
85
- user = User.create(:current_user => @adminuser)
86
- user.id.should_not be_nil
87
-
88
- user.current_user = @adminuser
89
- user.update_attributes('group_ids' => [@root.id.to_s]).should be_true
90
-
91
- user.groups.member?(@root).should be_false
92
- user.groups.size.should == 0
93
- end
94
-
95
- it 'should be able to delete only groups belonging to admin, leave others alone' do
96
- user = User.create(:current_user => @superuser, 'group_ids' => [@translator.id.to_s])
97
- user.groups.member?(@translator).should be_true
98
-
99
- user.current_user = @adminuser
100
- user.update_attributes('group_ids' => []).should be_true
101
-
102
- user.groups.member?(@translator).should be_true
103
- user.groups.size.should == 1
104
- end
105
-
106
- it 'should be able to add and delete groups belonging to admin' do
107
- user = User.create(:current_user => @superuser, 'group_ids' => [@translator.id.to_s])
108
- user.id.should_not be_nil
109
- user.groups.member?(@translator).should be_true
110
-
111
- user.current_user = @adminuser
112
- user.update_attributes('group_ids' => [@admin.id.to_s, @locales.id.to_s]).should be_true
113
-
114
- user.groups.member?(@translator).should be_true
115
- user.groups.size.should == 3
116
-
117
- user.current_user = @adminuser
118
- user.update_attributes('group_ids' => [@locales.id.to_s]).should be_true
119
-
120
- user.groups.member?(@locales).should be_true
121
- user.groups.member?(@translator).should be_true
122
- user.groups.size.should == 2
123
- end
124
-
125
- it 'should create new users with domains' do
126
- # first create to have an ID
127
- user = User.create(:current_user => @adminuser)
128
- user.id.should_not be_nil
129
- # then add the domain
130
- user.update_attributes(:current_user => @adminuser, 'group_ids' => [@admin.id.to_s], "admin" => {"domain_ids" => [@main.id.to_s] })
131
-
132
- user.groups.member?(@admin).should be_true
133
- user.groups.size.should == 1
134
-
135
- user.domains_for_group(@admin).member?(@main).should be_true
136
- user.domains_for_group(@admin).size.should == 1
137
- end
138
-
139
- it 'should add only domains which belongs to admin' do
140
- # first create to have an ID
141
- user = User.create(:current_user => @adminuser, 'group_ids' => [@admin.id.to_s])
142
- user.id.should_not be_nil
143
- # then add the domain
144
- user.update_attributes(:current_user => @adminuser, 'group_ids' => [@admin.id.to_s], "admin" => {"domain_ids" => [@main.id.to_s, @sub.id.to_s] })
145
-
146
- user.groups.member?(@admin).should be_true
147
- user.groups.size.should == 1
148
-
149
- user.domains_for_group(@admin).member?(@main).should be_true
150
- user.domains_for_group(@admin).size.should == 1
151
- end
152
-
153
- it 'should add only domains belonging to the admin' do
154
- # first create to have an ID
155
- user = User.create(:current_user => @adminuser, 'group_ids' => [@admin.id.to_s])
156
- user.id.should_not be_nil
157
- # then add the domain
158
- user.update_attributes(:current_user => @adminuser, 'group_ids' => [@admin.id.to_s], "admin" => {"domain_ids" => [@main.id.to_s, @sub.id.to_s] })
159
-
160
- user.groups.member?(@admin).should be_true
161
- user.groups.size.should == 1
162
-
163
- user.domains_for_group(@admin).member?(@main).should be_true
164
- user.domains_for_group(@admin).size.should == 1
165
-
166
- user.update_attributes(:current_user => @adminuser, 'group_ids' => [@admin.id.to_s], "admin" => {"domain_ids" => [] })
167
- user.domains_for_group(@admin).size.should == 0
168
- end
169
-
170
- it 'should delete only domains belonging to the admin' do
171
- # first create to have an ID
172
- user = User.create(:current_user => @adminuser, 'group_ids' => [@admin.id.to_s])
173
- user.id.should_not be_nil
174
- # then add the domain
175
- user.update_attributes(:current_user => @superuser, 'group_ids' => [@admin.id.to_s], "admin" => {"domain_ids" => [@main.id.to_s, @sub.id.to_s] })
176
-
177
- user.groups.member?(@admin).should be_true
178
- user.groups.size.should == 1
179
-
180
- user.domains_for_group(@admin).member?(@main).should be_true
181
- user.domains_for_group(@admin).member?(@sub).should be_true
182
- user.domains_for_group(@admin).size.should == 2
183
-
184
- user.update_attributes(:current_user => @adminuser, 'group_ids' => [@admin.id.to_s], "admin" => {"domain_ids" => [] })
185
-
186
- user.domains_for_group(@admin).member?(@main).should be_false
187
- user.domains_for_group(@admin).member?(@sub).should be_true
188
- user.domains_for_group(@admin).size.should == 1
189
- end
190
- end
191
- end
192
- end
193
-