lockdown_vail 1.6.2.1

Sign up to get free protection for your applications and to get access to all the features.
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