lockdown_vail 1.6.2.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.
Files changed (67) hide show
  1. data/.gitignore +6 -0
  2. data/README.txt +36 -0
  3. data/Rakefile +38 -0
  4. data/VERSION +1 -0
  5. data/lib/lockdown/context.rb +41 -0
  6. data/lib/lockdown/database.rb +41 -0
  7. data/lib/lockdown/errors.rb +11 -0
  8. data/lib/lockdown/frameworks/rails/controller.rb +187 -0
  9. data/lib/lockdown/frameworks/rails/view.rb +50 -0
  10. data/lib/lockdown/frameworks/rails.rb +114 -0
  11. data/lib/lockdown/helper.rb +111 -0
  12. data/lib/lockdown/orms/active_record.rb +68 -0
  13. data/lib/lockdown/permission.rb +222 -0
  14. data/lib/lockdown/references.rb +19 -0
  15. data/lib/lockdown/rspec_helper.rb +114 -0
  16. data/lib/lockdown/rules.rb +372 -0
  17. data/lib/lockdown/session.rb +66 -0
  18. data/lib/lockdown/system.rb +58 -0
  19. data/lib/lockdown.rb +87 -0
  20. data/lockdown.gemspec +118 -0
  21. data/lockdown_vail.gemspec +120 -0
  22. data/rails_generators/lockdown/lockdown_generator.rb +274 -0
  23. data/rails_generators/lockdown/templates/app/controllers/permissions_controller.rb +22 -0
  24. data/rails_generators/lockdown/templates/app/controllers/sessions_controller.rb +39 -0
  25. data/rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb +122 -0
  26. data/rails_generators/lockdown/templates/app/controllers/users_controller.rb +117 -0
  27. data/rails_generators/lockdown/templates/app/helpers/permissions_helper.rb +2 -0
  28. data/rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb +2 -0
  29. data/rails_generators/lockdown/templates/app/helpers/users_helper.rb +2 -0
  30. data/rails_generators/lockdown/templates/app/models/permission.rb +13 -0
  31. data/rails_generators/lockdown/templates/app/models/profile.rb +10 -0
  32. data/rails_generators/lockdown/templates/app/models/user.rb +95 -0
  33. data/rails_generators/lockdown/templates/app/models/user_group.rb +15 -0
  34. data/rails_generators/lockdown/templates/app/views/permissions/index.html.erb +16 -0
  35. data/rails_generators/lockdown/templates/app/views/permissions/show.html.erb +26 -0
  36. data/rails_generators/lockdown/templates/app/views/sessions/new.html.erb +12 -0
  37. data/rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb +33 -0
  38. data/rails_generators/lockdown/templates/app/views/user_groups/index.html.erb +20 -0
  39. data/rails_generators/lockdown/templates/app/views/user_groups/new.html.erb +31 -0
  40. data/rails_generators/lockdown/templates/app/views/user_groups/show.html.erb +29 -0
  41. data/rails_generators/lockdown/templates/app/views/users/edit.html.erb +51 -0
  42. data/rails_generators/lockdown/templates/app/views/users/index.html.erb +22 -0
  43. data/rails_generators/lockdown/templates/app/views/users/new.html.erb +50 -0
  44. data/rails_generators/lockdown/templates/app/views/users/show.html.erb +33 -0
  45. data/rails_generators/lockdown/templates/config/initializers/lockit.rb +1 -0
  46. data/rails_generators/lockdown/templates/db/migrate/create_admin_user.rb +17 -0
  47. data/rails_generators/lockdown/templates/db/migrate/create_permissions.rb +19 -0
  48. data/rails_generators/lockdown/templates/db/migrate/create_profiles.rb +26 -0
  49. data/rails_generators/lockdown/templates/db/migrate/create_user_groups.rb +19 -0
  50. data/rails_generators/lockdown/templates/db/migrate/create_users.rb +17 -0
  51. data/rails_generators/lockdown/templates/lib/lockdown/README +42 -0
  52. data/rails_generators/lockdown/templates/lib/lockdown/init.rb +136 -0
  53. data/spec/lockdown/context_spec.rb +191 -0
  54. data/spec/lockdown/database_spec.rb +66 -0
  55. data/spec/lockdown/frameworks/rails/controller_spec.rb +240 -0
  56. data/spec/lockdown/frameworks/rails/view_spec.rb +87 -0
  57. data/spec/lockdown/frameworks/rails_spec.rb +163 -0
  58. data/spec/lockdown/permission_spec.rb +156 -0
  59. data/spec/lockdown/rspec_helper_spec.rb +41 -0
  60. data/spec/lockdown/rules_spec.rb +245 -0
  61. data/spec/lockdown/session_spec.rb +125 -0
  62. data/spec/lockdown/system_spec.rb +51 -0
  63. data/spec/lockdown_spec.rb +19 -0
  64. data/spec/rcov.opts +5 -0
  65. data/spec/spec.opts +3 -0
  66. data/spec/spec_helper.rb +8 -0
  67. metadata +140 -0
data/lib/lockdown.rb ADDED
@@ -0,0 +1,87 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'logger'
4
+
5
+ require File.join("lockdown", "errors")
6
+ require File.join("lockdown", "helper")
7
+ require File.join("lockdown", "session")
8
+ require File.join("lockdown", "context")
9
+ require File.join("lockdown", "permission")
10
+ require File.join("lockdown", "database")
11
+ require File.join("lockdown", "rules")
12
+ require File.join("lockdown", "system")
13
+ require File.join("lockdown", "references")
14
+
15
+ module Lockdown
16
+ extend Lockdown::References
17
+ extend Lockdown::Helper
18
+
19
+ VERSION = '1.6.2.1'
20
+
21
+ class << self
22
+ attr_accessor :logger
23
+
24
+ # Returns the version string for the library.
25
+ def version
26
+ VERSION
27
+ end
28
+
29
+ def major_version
30
+ version.split('.')[0].to_i
31
+ end
32
+
33
+ def minor_version
34
+ version.split('.')[1].to_i
35
+ end
36
+
37
+ def patch_version
38
+ version.split('.')[2].to_i
39
+ end
40
+
41
+ # Mixin Lockdown code to the appropriate framework and ORM
42
+ def mixin
43
+ if mixin_resource?("frameworks")
44
+ unless mixin_resource?("orms")
45
+ raise NotImplementedError, "ORM unknown to Lockdown!"
46
+ end
47
+ else
48
+ Lockdown.logger.info "=> Note:: Lockdown cannot determine framework and therefore is not active.\n"
49
+ end
50
+ end # mixin
51
+
52
+ def maybe_parse_init
53
+ return if Lockdown::System.initialized?
54
+
55
+ if File.exists?(Lockdown.init_file)
56
+ Lockdown.logger.info "=> Requiring Lockdown rules engine: #{Lockdown.init_file} \n"
57
+ load Lockdown.init_file
58
+ else
59
+ Lockdown.logger.info "=> Note:: Lockdown couldn't find init file: #{Lockdown.init_file}\n"
60
+ end
61
+ end
62
+
63
+ private
64
+
65
+ def mixin_resource?(str)
66
+ wildcard_path = File.join( File.dirname(__FILE__), 'lockdown', str , '*.rb' )
67
+ Dir[wildcard_path].each do |f|
68
+ require f
69
+ module_name = File.basename(f).split(".")[0]
70
+ module_class = eval("Lockdown::#{str.capitalize}::#{Lockdown.camelize(module_name)}")
71
+ if module_class.use_me?
72
+ include module_class
73
+ return true
74
+ end
75
+ end
76
+ false
77
+ end # mixin_resource?
78
+ end # class block
79
+
80
+ self.logger = Logger.new(STDOUT)
81
+
82
+ end # Lockdown
83
+
84
+ Lockdown.logger.info "=> Mixing in Lockdown version: #{Lockdown.version} \n"
85
+ Lockdown.mixin
86
+
87
+
data/lockdown.gemspec ADDED
@@ -0,0 +1,118 @@
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{lockdown}
8
+ s.version = "1.6.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Andrew Stone"]
12
+ s.date = %q{2009-11-28}
13
+ s.description = %q{Restrict access to your controller actions. Supports basic model level restrictions as well}
14
+ s.email = %q{andy@stonean.com}
15
+ s.extra_rdoc_files = [
16
+ "README.txt"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "README.txt",
21
+ "Rakefile",
22
+ "lib/lockdown.rb",
23
+ "lib/lockdown/context.rb",
24
+ "lib/lockdown/database.rb",
25
+ "lib/lockdown/errors.rb",
26
+ "lib/lockdown/frameworks/rails.rb",
27
+ "lib/lockdown/frameworks/rails/controller.rb",
28
+ "lib/lockdown/frameworks/rails/view.rb",
29
+ "lib/lockdown/helper.rb",
30
+ "lib/lockdown/orms/active_record.rb",
31
+ "lib/lockdown/permission.rb",
32
+ "lib/lockdown/references.rb",
33
+ "lib/lockdown/rspec_helper.rb",
34
+ "lib/lockdown/rules.rb",
35
+ "lib/lockdown/session.rb",
36
+ "lib/lockdown/system.rb",
37
+ "lockdown.gemspec",
38
+ "rails_generators/lockdown/lockdown_generator.rb",
39
+ "rails_generators/lockdown/templates/app/controllers/permissions_controller.rb",
40
+ "rails_generators/lockdown/templates/app/controllers/sessions_controller.rb",
41
+ "rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb",
42
+ "rails_generators/lockdown/templates/app/controllers/users_controller.rb",
43
+ "rails_generators/lockdown/templates/app/helpers/permissions_helper.rb",
44
+ "rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb",
45
+ "rails_generators/lockdown/templates/app/helpers/users_helper.rb",
46
+ "rails_generators/lockdown/templates/app/models/permission.rb",
47
+ "rails_generators/lockdown/templates/app/models/profile.rb",
48
+ "rails_generators/lockdown/templates/app/models/user.rb",
49
+ "rails_generators/lockdown/templates/app/models/user_group.rb",
50
+ "rails_generators/lockdown/templates/app/views/permissions/index.html.erb",
51
+ "rails_generators/lockdown/templates/app/views/permissions/show.html.erb",
52
+ "rails_generators/lockdown/templates/app/views/sessions/new.html.erb",
53
+ "rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb",
54
+ "rails_generators/lockdown/templates/app/views/user_groups/index.html.erb",
55
+ "rails_generators/lockdown/templates/app/views/user_groups/new.html.erb",
56
+ "rails_generators/lockdown/templates/app/views/user_groups/show.html.erb",
57
+ "rails_generators/lockdown/templates/app/views/users/edit.html.erb",
58
+ "rails_generators/lockdown/templates/app/views/users/index.html.erb",
59
+ "rails_generators/lockdown/templates/app/views/users/new.html.erb",
60
+ "rails_generators/lockdown/templates/app/views/users/show.html.erb",
61
+ "rails_generators/lockdown/templates/config/initializers/lockit.rb",
62
+ "rails_generators/lockdown/templates/db/migrate/create_admin_user.rb",
63
+ "rails_generators/lockdown/templates/db/migrate/create_permissions.rb",
64
+ "rails_generators/lockdown/templates/db/migrate/create_profiles.rb",
65
+ "rails_generators/lockdown/templates/db/migrate/create_user_groups.rb",
66
+ "rails_generators/lockdown/templates/db/migrate/create_users.rb",
67
+ "rails_generators/lockdown/templates/lib/lockdown/README",
68
+ "rails_generators/lockdown/templates/lib/lockdown/init.rb",
69
+ "spec/lockdown/context_spec.rb",
70
+ "spec/lockdown/database_spec.rb",
71
+ "spec/lockdown/frameworks/rails/controller_spec.rb",
72
+ "spec/lockdown/frameworks/rails/view_spec.rb",
73
+ "spec/lockdown/frameworks/rails_spec.rb",
74
+ "spec/lockdown/permission_spec.rb",
75
+ "spec/lockdown/rspec_helper_spec.rb",
76
+ "spec/lockdown/rules_spec.rb",
77
+ "spec/lockdown/session_spec.rb",
78
+ "spec/lockdown/system_spec.rb",
79
+ "spec/lockdown_spec.rb",
80
+ "spec/rcov.opts",
81
+ "spec/spec.opts",
82
+ "spec/spec_helper.rb"
83
+ ]
84
+ s.homepage = %q{http://stonean.com/wiki/lockdown}
85
+ s.rdoc_options = ["--charset=UTF-8"]
86
+ s.require_paths = ["lib"]
87
+ s.rubyforge_project = %q{lockdown}
88
+ s.rubygems_version = %q{1.3.5}
89
+ s.summary = %q{Authorization system for Rails 2.x}
90
+ s.test_files = [
91
+ "spec/lockdown/context_spec.rb",
92
+ "spec/lockdown/database_spec.rb",
93
+ "spec/lockdown/frameworks/rails/controller_spec.rb",
94
+ "spec/lockdown/frameworks/rails/view_spec.rb",
95
+ "spec/lockdown/frameworks/rails_spec.rb",
96
+ "spec/lockdown/permission_spec.rb",
97
+ "spec/lockdown/rspec_helper_spec.rb",
98
+ "spec/lockdown/rules_spec.rb",
99
+ "spec/lockdown/session_spec.rb",
100
+ "spec/lockdown/system_spec.rb",
101
+ "spec/lockdown_spec.rb",
102
+ "spec/spec_helper.rb"
103
+ ]
104
+
105
+ if s.respond_to? :specification_version then
106
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
107
+ s.specification_version = 3
108
+
109
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
110
+ s.add_development_dependency(%q<rspec>, [">= 0"])
111
+ else
112
+ s.add_dependency(%q<rspec>, [">= 0"])
113
+ end
114
+ else
115
+ s.add_dependency(%q<rspec>, [">= 0"])
116
+ end
117
+ end
118
+
@@ -0,0 +1,120 @@
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{lockdown_vail}
8
+ s.version = "1.6.2.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Andrew Stone"]
12
+ s.date = %q{2010-03-12}
13
+ s.description = %q{Restrict access to your controller actions. Supports basic model level restrictions as well}
14
+ s.email = %q{andy@stonean.com}
15
+ s.extra_rdoc_files = [
16
+ "README.txt"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "README.txt",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "lib/lockdown.rb",
24
+ "lib/lockdown/context.rb",
25
+ "lib/lockdown/database.rb",
26
+ "lib/lockdown/errors.rb",
27
+ "lib/lockdown/frameworks/rails.rb",
28
+ "lib/lockdown/frameworks/rails/controller.rb",
29
+ "lib/lockdown/frameworks/rails/view.rb",
30
+ "lib/lockdown/helper.rb",
31
+ "lib/lockdown/orms/active_record.rb",
32
+ "lib/lockdown/permission.rb",
33
+ "lib/lockdown/references.rb",
34
+ "lib/lockdown/rspec_helper.rb",
35
+ "lib/lockdown/rules.rb",
36
+ "lib/lockdown/session.rb",
37
+ "lib/lockdown/system.rb",
38
+ "lockdown.gemspec",
39
+ "lockdown_vail.gemspec",
40
+ "rails_generators/lockdown/lockdown_generator.rb",
41
+ "rails_generators/lockdown/templates/app/controllers/permissions_controller.rb",
42
+ "rails_generators/lockdown/templates/app/controllers/sessions_controller.rb",
43
+ "rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb",
44
+ "rails_generators/lockdown/templates/app/controllers/users_controller.rb",
45
+ "rails_generators/lockdown/templates/app/helpers/permissions_helper.rb",
46
+ "rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb",
47
+ "rails_generators/lockdown/templates/app/helpers/users_helper.rb",
48
+ "rails_generators/lockdown/templates/app/models/permission.rb",
49
+ "rails_generators/lockdown/templates/app/models/profile.rb",
50
+ "rails_generators/lockdown/templates/app/models/user.rb",
51
+ "rails_generators/lockdown/templates/app/models/user_group.rb",
52
+ "rails_generators/lockdown/templates/app/views/permissions/index.html.erb",
53
+ "rails_generators/lockdown/templates/app/views/permissions/show.html.erb",
54
+ "rails_generators/lockdown/templates/app/views/sessions/new.html.erb",
55
+ "rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb",
56
+ "rails_generators/lockdown/templates/app/views/user_groups/index.html.erb",
57
+ "rails_generators/lockdown/templates/app/views/user_groups/new.html.erb",
58
+ "rails_generators/lockdown/templates/app/views/user_groups/show.html.erb",
59
+ "rails_generators/lockdown/templates/app/views/users/edit.html.erb",
60
+ "rails_generators/lockdown/templates/app/views/users/index.html.erb",
61
+ "rails_generators/lockdown/templates/app/views/users/new.html.erb",
62
+ "rails_generators/lockdown/templates/app/views/users/show.html.erb",
63
+ "rails_generators/lockdown/templates/config/initializers/lockit.rb",
64
+ "rails_generators/lockdown/templates/db/migrate/create_admin_user.rb",
65
+ "rails_generators/lockdown/templates/db/migrate/create_permissions.rb",
66
+ "rails_generators/lockdown/templates/db/migrate/create_profiles.rb",
67
+ "rails_generators/lockdown/templates/db/migrate/create_user_groups.rb",
68
+ "rails_generators/lockdown/templates/db/migrate/create_users.rb",
69
+ "rails_generators/lockdown/templates/lib/lockdown/README",
70
+ "rails_generators/lockdown/templates/lib/lockdown/init.rb",
71
+ "spec/lockdown/context_spec.rb",
72
+ "spec/lockdown/database_spec.rb",
73
+ "spec/lockdown/frameworks/rails/controller_spec.rb",
74
+ "spec/lockdown/frameworks/rails/view_spec.rb",
75
+ "spec/lockdown/frameworks/rails_spec.rb",
76
+ "spec/lockdown/permission_spec.rb",
77
+ "spec/lockdown/rspec_helper_spec.rb",
78
+ "spec/lockdown/rules_spec.rb",
79
+ "spec/lockdown/session_spec.rb",
80
+ "spec/lockdown/system_spec.rb",
81
+ "spec/lockdown_spec.rb",
82
+ "spec/rcov.opts",
83
+ "spec/spec.opts",
84
+ "spec/spec_helper.rb"
85
+ ]
86
+ s.homepage = %q{http://stonean.com/wiki/lockdown}
87
+ s.rdoc_options = ["--charset=UTF-8"]
88
+ s.require_paths = ["lib"]
89
+ s.rubyforge_project = %q{lockdown}
90
+ s.rubygems_version = %q{1.3.5}
91
+ s.summary = %q{Authorization system for Rails 2.x}
92
+ s.test_files = [
93
+ "spec/lockdown/context_spec.rb",
94
+ "spec/lockdown/database_spec.rb",
95
+ "spec/lockdown/frameworks/rails/controller_spec.rb",
96
+ "spec/lockdown/frameworks/rails/view_spec.rb",
97
+ "spec/lockdown/frameworks/rails_spec.rb",
98
+ "spec/lockdown/permission_spec.rb",
99
+ "spec/lockdown/rspec_helper_spec.rb",
100
+ "spec/lockdown/rules_spec.rb",
101
+ "spec/lockdown/session_spec.rb",
102
+ "spec/lockdown/system_spec.rb",
103
+ "spec/lockdown_spec.rb",
104
+ "spec/spec_helper.rb"
105
+ ]
106
+
107
+ if s.respond_to? :specification_version then
108
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
109
+ s.specification_version = 3
110
+
111
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
112
+ s.add_development_dependency(%q<rspec>, [">= 0"])
113
+ else
114
+ s.add_dependency(%q<rspec>, [">= 0"])
115
+ end
116
+ else
117
+ s.add_dependency(%q<rspec>, [">= 0"])
118
+ end
119
+ end
120
+
@@ -0,0 +1,274 @@
1
+ @override_next_migration_string = false
2
+
3
+ if Rails::VERSION::MAJOR >= 2 && Rails::VERSION::MINOR >= 1
4
+ if Rails::VERSION::TINY == 0
5
+ @override_next_migration_string = true
6
+ elsif ActiveRecord::Base.timestamped_migrations
7
+ @override_next_migration_string = true
8
+ end
9
+ end
10
+
11
+ if @override_next_migration_string
12
+ class Rails::Generator::Commands::Base
13
+ protected
14
+ def next_migration_string(padding = 3)
15
+ sleep(1)
16
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
17
+ end
18
+ end
19
+ end
20
+
21
+ class LockdownGenerator < Rails::Generator::Base
22
+ attr_accessor :file_name, :action_name, :namespace, :view_path, :controller_path
23
+
24
+ def initialize(runtime_args, runtime_options = {})
25
+ super
26
+ if Rails::VERSION::MAJOR >= 2 && Rails::VERSION::MINOR >= 1
27
+ @action_name = "action_name"
28
+ else
29
+ @action_name = "@action_name"
30
+ end
31
+
32
+ @namespace = options[:namespace] if options[:namespace]
33
+
34
+ # so if the namespace option exists it sets the correct view path and controller path
35
+ @view_path = "app/views"
36
+ @controller_path = "app/controllers"
37
+ @helper_path = "app/helpers"
38
+ @lib_path = "lib/lockdown"
39
+
40
+ @initializer = "config/environment.rb"
41
+
42
+ if @namespace
43
+ @view_path += "/#{@namespace}"
44
+ @controller_path += "/#{@namespace}"
45
+ @helper_path += "/#{@namespace}"
46
+ end
47
+ end
48
+
49
+ def manifest
50
+ record do |m|
51
+ @m = m
52
+ # Ensure appropriate folder(s) exists
53
+ @m.directory @view_path
54
+ @m.directory @controller_path
55
+ @m.directory @helper_path
56
+ @m.directory @lib_path
57
+
58
+ unless options[:skip_rules]
59
+ @m.file "lib/lockdown/README", "lib/lockdown/README"
60
+ @m.file "lib/lockdown/init.rb", "lib/lockdown/init.rb"
61
+ end
62
+
63
+ add_management if options[:add_management]
64
+
65
+ add_login if options[:add_login]
66
+
67
+ add_models
68
+
69
+ @m.file "config/initializers/lockit.rb", "config/initializers/lockit.rb"
70
+ end #record do |m|
71
+ end
72
+
73
+ protected
74
+
75
+ def add_management
76
+ @m.directory "#{@view_path}/users"
77
+ @m.directory "#{@view_path}/user_groups"
78
+ @m.directory "#{@view_path}/permissions"
79
+
80
+ write_controller("permissions")
81
+ write_controller("users")
82
+ write_controller("user_groups")
83
+
84
+ copy_views("users")
85
+
86
+ copy_views("user_groups")
87
+
88
+ @m.template "app/views/permissions/index.html.erb",
89
+ "#{@view_path}/permissions/index.html.erb"
90
+
91
+ @m.template "app/views/permissions/show.html.erb",
92
+ "#{@view_path}/permissions/show.html.erb"
93
+
94
+ add_management_routes
95
+ add_management_permissions
96
+ end
97
+
98
+ def add_login
99
+ @m.directory "app/views/sessions"
100
+
101
+ @m.template "app/controllers/sessions_controller.rb",
102
+ "app/controllers/sessions_controller.rb"
103
+
104
+ @m.template "app/views/sessions/new.html.erb",
105
+ "app/views/sessions/new.html.erb"
106
+
107
+ add_login_routes
108
+ add_login_permissions
109
+ end
110
+
111
+ def add_models
112
+ @m.directory 'app/models'
113
+
114
+ write_model("user_group")
115
+ write_model("permission")
116
+
117
+ if options[:add_lockdown_authentication]
118
+ write_model("user")
119
+ write_model("profile")
120
+ end
121
+
122
+ unless options[:skip_migrations]
123
+ write_migration("create_user_groups")
124
+ write_migration("create_permissions")
125
+
126
+ if options[:add_lockdown_authentication]
127
+ write_migration("create_profiles")
128
+ write_migration("create_users")
129
+ write_migration("create_admin_user")
130
+ end
131
+ end
132
+ end
133
+
134
+ def copy_views(vw)
135
+ @m.template "app/views/#{vw}/index.html.erb", "#{@view_path}/#{vw}/index.html.erb"
136
+ @m.template "app/views/#{vw}/show.html.erb", "#{@view_path}/#{vw}/show.html.erb"
137
+ @m.template "app/views/#{vw}/edit.html.erb", "#{@view_path}/#{vw}/edit.html.erb"
138
+ @m.template "app/views/#{vw}/new.html.erb", "#{@view_path}/#{vw}/new.html.erb"
139
+ end
140
+
141
+ def add_login_permissions
142
+ add_permissions "set_permission(:sessions_management).with_controller(:sessions)"
143
+
144
+ add_predefined_user_group "set_public_access :sessions_management"
145
+ end
146
+
147
+ def add_management_routes
148
+ if @namespace.blank?
149
+ permissions = %Q(\tmap.resources :permissions)
150
+ users = %Q(\tmap.resources :users)
151
+ user_groups = %Q(\tmap.resources :user_groups)
152
+ routes = [permissions, user_groups, users].join("\n\n")
153
+ else
154
+ routes = %Q(\tmap.namespace :#{@namespace} do |#{@namespace}|\n\t\t#{@namespace}.resources :permissions\n\t\t#{@namespace}.resources :users\n\t\t#{@namespace}.resources :user_groups\n\tend)
155
+ end
156
+
157
+ write_routes_file(routes)
158
+ end
159
+
160
+ def add_management_permissions
161
+ perms = []
162
+ perms << "set_permission(:users_management).with_controller(:#{@namespace.blank? ? "users" : "#{@namespace}__users"})"
163
+ perms << "set_permission(:user_groups_management).with_controller(:#{@namespace.blank? ? "user_groups" : "#{@namespace}__user_groups"})"
164
+ perms << "set_permission(:permissions_management).with_controller(:#{@namespace.blank? ? "permissions" : "#{@namespace}__permissions"})"
165
+ perms << "set_permission(:my_account).with_controller(:#{@namespace.blank? ? "users" : "#{@namespace}__users"}).only_methods(:edit, :update, :show)"
166
+
167
+ add_permissions perms.join("\n ")
168
+
169
+ add_predefined_user_group "set_protected_access :my_account"
170
+ end
171
+
172
+ def add_permissions(str)
173
+ sentinel = '# Define your permissions here:'
174
+ write_init_file(sentinel, str)
175
+ end
176
+
177
+ def add_predefined_user_group(str)
178
+ sentinel = '# Define the built-in user groups here:'
179
+ write_init_file(sentinel, str)
180
+ end
181
+
182
+ def add_login_routes
183
+ sessions = %Q(\tmap.resources :sessions)
184
+ home = %Q(\tmap.home '', :controller => 'sessions', :action => 'new')
185
+ login = %Q(\tmap.login '/login', :controller => 'sessions', :action => 'new')
186
+ logout = %Q(\tmap.logout '/logout', :controller => 'sessions', :action => 'destroy')
187
+ routes = [sessions, home, login, logout].join("\n\n")
188
+
189
+ write_routes_file(routes)
190
+ end
191
+
192
+ def banner
193
+ <<-EOS
194
+ Installs the lockdown framework to managing users user_groups
195
+ and viewing permissions. Also includes a login screen.
196
+
197
+ By default the entire set of stubs are installed.
198
+
199
+ Please use the appropriate options to customize your install.
200
+
201
+ USAGE: #{$0} #{spec.name}
202
+ EOS
203
+ end
204
+
205
+ def add_options!(opt)
206
+ opt.separator ''
207
+ opt.separator 'Options:'
208
+
209
+ opt.on("--namespace=admin",
210
+ "Install lockdown templates with a namespace, in this example 'admin'.") do |v|
211
+ options[:namespace] = v
212
+ end
213
+
214
+ opt.on("--add-lockdown-authentication",
215
+ "Create user model + --add-login functionality.") do |v|
216
+ options[:add_lockdown_authentication] = v
217
+ end
218
+
219
+ opt.on("--add-management",
220
+ "Create user, user_group, permission management controllers and views.") do |v|
221
+ options[:add_management] = v
222
+ end
223
+
224
+ opt.on("--add-login",
225
+ "Create session controller and views.") do |v|
226
+ options[:add_login] = v
227
+ end
228
+
229
+ opt.on("--skip-rules",
230
+ "Skip installation of lib/lockdown/init.rb lib/lockdown/session.rb") do |v|
231
+ options[:skip_rules] = v
232
+ end
233
+
234
+ opt.on("--skip-migrations",
235
+ "Skip migrations installation") do |v|
236
+ options[:skip_migrations] = v
237
+ end
238
+ end
239
+
240
+ def write_migration(str)
241
+ @m.migration_template "db/migrate/#{str}.rb", "db/migrate",
242
+ :migration_file_name => str
243
+ end
244
+
245
+ def write_model(str)
246
+ @m.file "app/models/#{str}.rb", "app/models/#{str}.rb"
247
+ end
248
+
249
+ def write_controller(str)
250
+ @m.template "app/controllers/#{str}_controller.rb",
251
+ "#{@controller_path}/#{str}_controller.rb"
252
+ write_helper(str)
253
+ end
254
+
255
+ def write_helper(str)
256
+ @m.template "app/helpers/#{str}_helper.rb",
257
+ "#{@helper_path}/#{str}_helper.rb"
258
+ end
259
+
260
+ def write_routes_file(routes)
261
+ sentinel = 'ActionController::Routing::Routes.draw do |map|'
262
+
263
+ @m.gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
264
+ "#{match}\n #{routes}\n"
265
+ end
266
+ end
267
+
268
+ def write_init_file(sentinel, str)
269
+ @m.gsub_file 'lib/lockdown/init.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
270
+ "#{match}\n #{str}"
271
+ end
272
+ end
273
+
274
+ end