rules_engine_users 0.0.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 (85) hide show
  1. data/.document +5 -0
  2. data/.gitignore +22 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +47 -0
  6. data/VERSION +1 -0
  7. data/init.rb +1 -0
  8. data/lib/rules_engine/controller_user_mail.rb +29 -0
  9. data/lib/rules_engine/controller_users.rb +170 -0
  10. data/lib/rules_engine_users.rb +4 -0
  11. data/rails_generators/USAGE +97 -0
  12. data/rails_generators/manifests/rules_engine_users.rb +79 -0
  13. data/rails_generators/manifests/rules_engine_users.yml +32 -0
  14. data/rails_generators/rules_engine_users_generator.rb +21 -0
  15. data/rails_generators/templates/app/controllers/admin/users_controller.rb +64 -0
  16. data/rails_generators/templates/app/controllers/users_controller.rb +215 -0
  17. data/rails_generators/templates/app/models/user.rb +113 -0
  18. data/rails_generators/templates/app/models/user_mailer.rb +26 -0
  19. data/rails_generators/templates/app/models/user_observer.rb +19 -0
  20. data/rails_generators/templates/app/views/admin/users/_form.html.erb +6 -0
  21. data/rails_generators/templates/app/views/admin/users/edit.html.erb +18 -0
  22. data/rails_generators/templates/app/views/admin/users/index.html.erb +52 -0
  23. data/rails_generators/templates/app/views/admin/users/new.html.erb +17 -0
  24. data/rails_generators/templates/app/views/admin/users/show.html.erb +15 -0
  25. data/rails_generators/templates/app/views/user_mailer/forgot_password.html.erb +11 -0
  26. data/rails_generators/templates/app/views/user_mailer/welcome_message.html.erb +11 -0
  27. data/rails_generators/templates/app/views/users/change_form.html.erb +22 -0
  28. data/rails_generators/templates/app/views/users/details.html.erb +11 -0
  29. data/rails_generators/templates/app/views/users/login_form.html.erb +35 -0
  30. data/rails_generators/templates/app/views/users/pswd_change_form.html.erb +20 -0
  31. data/rails_generators/templates/app/views/users/pswd_forgot_form.html.erb +18 -0
  32. data/rails_generators/templates/app/views/users/pswd_reset_form.html.erb +22 -0
  33. data/rails_generators/templates/app/views/users/welcome_form.html.erb +21 -0
  34. data/rails_generators/templates/db/migrate/20100104014507_create_users.rb +41 -0
  35. data/rails_generators/templates/doc/README.rules_engine_users +122 -0
  36. data/rails_generators/templates/doc/README.rules_engine_users_paths +12 -0
  37. data/rails_generators/templates/features/admin/user/edit.feature +46 -0
  38. data/rails_generators/templates/features/admin/user/index.feature +78 -0
  39. data/rails_generators/templates/features/admin/user/new.feature +26 -0
  40. data/rails_generators/templates/features/admin/user/show.feature +22 -0
  41. data/rails_generators/templates/features/admin/user/step_definitions/edit_steps.rb +3 -0
  42. data/rails_generators/templates/features/admin/user/step_definitions/index_steps.rb +13 -0
  43. data/rails_generators/templates/features/admin/user/step_definitions/show_steps.rb +3 -0
  44. data/rails_generators/templates/features/support/blueprint_users.rb +14 -0
  45. data/rails_generators/templates/features/user/change.feature +37 -0
  46. data/rails_generators/templates/features/user/details.feature +15 -0
  47. data/rails_generators/templates/features/user/login.feature +65 -0
  48. data/rails_generators/templates/features/user/pswd_change.feature +46 -0
  49. data/rails_generators/templates/features/user/pswd_forgot.feature +32 -0
  50. data/rails_generators/templates/features/user/pswd_reset.feature +52 -0
  51. data/rails_generators/templates/features/user/step_definitions/login_steps.rb +46 -0
  52. data/rails_generators/templates/features/user/step_definitions/pswd_reset_steps.rb +15 -0
  53. data/rails_generators/templates/features/user/step_definitions/welcome_steps.rb +15 -0
  54. data/rails_generators/templates/features/user/welcome.feature +52 -0
  55. data/rails_generators/templates/spec/controllers/admin/users_controller_spec.rb +191 -0
  56. data/rails_generators/templates/spec/controllers/users_controller_spec.rb +579 -0
  57. data/rails_generators/templates/spec/models/user_mailer_spec.rb +39 -0
  58. data/rails_generators/templates/spec/models/user_observer_spec.rb +56 -0
  59. data/rails_generators/templates/spec/models/user_spec.rb +253 -0
  60. data/rails_generators/templates/spec/support/rules_engine_macros.rb +16 -0
  61. data/rules_engine_users.gemspec +141 -0
  62. data/spec/railsenv/app/controllers/application_controller.rb +10 -0
  63. data/spec/railsenv/config/boot.rb +110 -0
  64. data/spec/railsenv/config/database.yml +22 -0
  65. data/spec/railsenv/config/environment.rb +41 -0
  66. data/spec/railsenv/config/environments/development.rb +17 -0
  67. data/spec/railsenv/config/environments/production.rb +28 -0
  68. data/spec/railsenv/config/environments/test.rb +28 -0
  69. data/spec/railsenv/config/initializers/backtrace_silencers.rb +7 -0
  70. data/spec/railsenv/config/initializers/inflections.rb +10 -0
  71. data/spec/railsenv/config/initializers/mime_types.rb +5 -0
  72. data/spec/railsenv/config/initializers/new_rails_defaults.rb +19 -0
  73. data/spec/railsenv/config/initializers/session_store.rb +15 -0
  74. data/spec/railsenv/config/locales/en.yml +5 -0
  75. data/spec/railsenv/config/routes.rb +43 -0
  76. data/spec/railsenv/db/test.sqlite3 +1 -0
  77. data/spec/railsenv/log/debug.log +1 -0
  78. data/spec/railsenv/log/test.log +1 -0
  79. data/spec/rcov.opts +3 -0
  80. data/spec/rules_engine/controller_user_mail_spec.rb +43 -0
  81. data/spec/rules_engine/controller_users_spec.rb +337 -0
  82. data/spec/spec.opts +4 -0
  83. data/spec/spec_helper.rb +30 -0
  84. data/tasks/rspec.rake +18 -0
  85. metadata +180 -0
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ coverage.data
19
+ rdoc
20
+ pkg
21
+
22
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Chris Douglas
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,17 @@
1
+ = rules_engine_users
2
+
3
+ Description goes here.
4
+
5
+ == Note on Patches/Pull Requests
6
+
7
+ * Fork the project.
8
+ * Make your feature addition or bug fix.
9
+ * Add tests for it. This is important so I don't break it in a
10
+ future version unintentionally.
11
+ * Commit, do not mess with rakefile, version, or history.
12
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
+ * Send me a pull request. Bonus points for topic branches.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2010 Chris Douglas. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,47 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "rules_engine_users"
8
+ gem.summary = %Q{Manage users and authentication}
9
+ gem.description = %Q{Manage users and authentication}
10
+ gem.email = "dougo.chris@gmail.com"
11
+ gem.homepage = "http://github.com/dougochris/rules_engine_users"
12
+ gem.authors = ["Chris Douglas"]
13
+ gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
19
+ end
20
+
21
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
22
+
23
+ require 'spec/rake/spectask'
24
+ Spec::Rake::SpecTask.new(:spec) do |spec|
25
+ spec.libs << 'lib' << 'spec'
26
+ spec.spec_files = FileList['spec/**/*_spec.rb']
27
+ end
28
+
29
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
30
+ spec.libs << 'lib' << 'spec'
31
+ spec.pattern = 'spec/**/*_spec.rb'
32
+ spec.rcov = true
33
+ end
34
+
35
+ task :spec => :check_dependencies
36
+
37
+ task :default => :spec
38
+
39
+ require 'rake/rdoctask'
40
+ Rake::RDocTask.new do |rdoc|
41
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
42
+
43
+ rdoc.rdoc_dir = 'rdoc'
44
+ rdoc.title = "rules_engine_users #{version}"
45
+ rdoc.rdoc_files.include('README*')
46
+ rdoc.rdoc_files.include('lib/**/*.rb')
47
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/lib/rules_engine_users")
@@ -0,0 +1,29 @@
1
+ module RulesEngine
2
+ class ControllerUserMail
3
+
4
+ @@host = "localhost:3000"
5
+ def self.host
6
+ @@host
7
+ end
8
+ def self.host=(name)
9
+ @@host = name
10
+ end
11
+
12
+ @@from = "Do Not Reply <do_not_reply@localhost:3000>"
13
+ def self.from
14
+ @@from
15
+ end
16
+ def self.from=(from)
17
+ @@from = from
18
+ end
19
+
20
+ @@prefix = ""
21
+ def self.prefix
22
+ @@prefix
23
+ end
24
+ def self.prefix=(name)
25
+ @@prefix = name
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,170 @@
1
+ module RulesEngine
2
+ module ControllerUsers
3
+ ######### Requires the following paths
4
+ ######### root_path
5
+
6
+ USER_ACCESS_LEVEL = [
7
+ ["Administrator", User::ACCESS_LEVEL_ADMIN],
8
+ ["Account Disabled", User::ACCESS_LEVEL_DISABLED]
9
+ ]
10
+
11
+ # Inclusion hook to make #current_user #logged_in? and #logged_in_as_admin?
12
+ # available as ActionView helper methods.
13
+ def self.included(base)
14
+ base.send :helper_method, :current_user, :logged_in?, :logged_in_as_admin?, :logged_in_disabled?, :user_access_level, :user_access_levels
15
+ base.send :before_filter, :set_timezone
16
+
17
+ base.class_eval do
18
+ extend ClassMethods
19
+ end
20
+ end
21
+
22
+ # Accesses the current user from the session.
23
+ # Future calls avoid the database because nil is not equal to false.
24
+ def current_user
25
+ return nil if @current_user == false
26
+ @current_user || (login_from_session || login_from_basic_auth || login_from_cookie)
27
+ @current_user || nil
28
+ end
29
+
30
+ # Returns true or false if the user is logged in.
31
+ # Preloads @current_user with the user model if they're logged in.
32
+ def logged_in?
33
+ !!current_user
34
+ end
35
+
36
+ def logged_in_as_admin?
37
+ logged_in? && current_user.access_level == User::ACCESS_LEVEL_ADMIN
38
+ end
39
+
40
+ def logged_in_disabled?
41
+ logged_in? && current_user.access_level == User::ACCESS_LEVEL_DISABLED
42
+ end
43
+
44
+ def login_required
45
+ unless logged_in?
46
+ flash[:error]="This page requires you to login"
47
+ access_denied
48
+ end
49
+ end
50
+
51
+ def admin_access_required
52
+ login_required
53
+ return unless logged_in?
54
+ unless current_user.access_level == User::ACCESS_LEVEL_ADMIN
55
+ flash[:error]="This page requires administrator access"
56
+ user_access_denied
57
+ end
58
+ end
59
+
60
+ def user_access_level(user)
61
+ match = USER_ACCESS_LEVEL.find {|value| value[1] == user.access_level}
62
+ match.nil? ? "unknown" : match[0]
63
+ end
64
+
65
+ def user_access_levels
66
+ USER_ACCESS_LEVEL.sort {|a, b| a[1] <=> b[1]}
67
+ end
68
+
69
+ def set_timezone
70
+ Time.zone = logged_in? ? current_user.time_zone : "Eastern Time (US & Canada)"
71
+ end
72
+
73
+ module ClassMethods
74
+ def define_access_level name, access_level
75
+ (class << self; self end).instance_eval do
76
+ USER_ACCESS_LEVEL << [name.to_s.titleize, access_level]
77
+ end
78
+
79
+ (class << ActionController::Base; self end).instance_eval do
80
+ define_method "#{name}_access_level" do
81
+ access_level
82
+ end
83
+ end
84
+
85
+ define_method "logged_in_as_#{name}?" do
86
+ logged_in? && current_user.access_level >= access_level
87
+ end
88
+
89
+ define_method "#{name}_access_required" do
90
+ login_required
91
+ return unless logged_in?
92
+ unless current_user.access_level >= access_level
93
+ flash[:error]="This page requires #{name} access"
94
+ user_access_denied
95
+ end
96
+ end
97
+
98
+ self.send :helper_method, "logged_in_as_#{name}"
99
+ end
100
+ end
101
+
102
+ protected
103
+ # Store the given user id in the session.
104
+ def current_user=(new_user)
105
+
106
+ session[:user_id] = new_user ? new_user.id : nil
107
+ @current_user = new_user || false # store false
108
+ end
109
+
110
+ def access_denied
111
+ respond_to do |format|
112
+ format.html do
113
+ session[:return_to] = request.request_uri
114
+ redirect_to user_login_path
115
+ return
116
+ end
117
+ format.js do
118
+ render :update do |page|
119
+ page << "window.location.href = '#{user_login_path}';"
120
+ end
121
+ end
122
+ # format.any do
123
+ # request_http_basic_authentication 'Web Password'
124
+ # end
125
+ # end
126
+ end
127
+ end
128
+
129
+ def user_access_denied
130
+ respond_to do |format|
131
+ format.html do
132
+ redirect_to root_path
133
+ end
134
+ format.js do
135
+ render :update do |page|
136
+ page << "window.location.href = '#{root_path}';"
137
+ end
138
+ end
139
+ # format.any do
140
+ # request_http_basic_authentication 'Web Password'
141
+ # end
142
+ end
143
+ end
144
+
145
+ # Called from #current_user. First attempt to login by the user id stored in the session.
146
+ def login_from_session
147
+ self.current_user = User.find_by_id(session[:user_id]) if session[:user_id]
148
+ end
149
+
150
+ # Called from #current_user. Now, attempt to login by basic authentication information.
151
+ def login_from_basic_auth
152
+ authenticate_with_http_basic do |name, password|
153
+ self.current_user = User.authenticate_by_login(name, password) || User.authenticate_by_email(name, password)
154
+ end
155
+ end
156
+
157
+ # Called from #current_user. Finaly, attempt to login by an expiring token in the cookie.
158
+ def login_from_cookie
159
+ user = cookies[:auth_token] && User.authenticate_by_remember_token(cookies[:auth_token])
160
+ if user
161
+ cookies[:auth_token] = { :value => user.remember_token, :expires => user.remember_token_expires_at }
162
+ self.current_user = user
163
+ end
164
+ end
165
+ end
166
+ end
167
+
168
+ ActionController::Base.class_eval do
169
+ include RulesEngine::ControllerUsers
170
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/rules_engine/controller_users")
2
+ require File.expand_path(File.dirname(__FILE__) + "/rules_engine/controller_user_mail")
3
+
4
+
@@ -0,0 +1,97 @@
1
+ ***************************************************************************
2
+
3
+ *** EDIT config/routes.rb
4
+ map.root :controller => 'preview', :action => 'index' # only if map.root not set
5
+
6
+ map.with_options :controller => 'users', :path_prefix => '/user', :name_prefix => 'user_' do |user|
7
+ user.login '/', :action => 'login_form', :conditions => { :method => :get }
8
+ user.login '/', :action => 'login', :conditions => { :method => :post }
9
+ user.logout '/logout', :action => 'logout'
10
+ user.pswd_forgot '/pswd_forgot', :action => 'pswd_forgot_form', :conditions => { :method => :get }
11
+ user.pswd_forgot '/pswd_forgot', :action => 'pswd_forgot', :conditions => { :method => :post }
12
+ user.pswd_change '/pswd_change', :action => 'pswd_change_form', :conditions => { :method => :get }
13
+ user.pswd_change '/pswd_change', :action => 'pswd_change', :conditions => { :method => :post }
14
+ user.details '/user_details', :action => 'user_details', :conditions => { :method => :get }
15
+ user.change '/user_change', :action => 'user_change_form', :conditions => { :method => :get }
16
+ user.change '/user_change', :action => 'user_change', :conditions => { :method => :put }
17
+ user.pswd_reset '/pswd_reset', :action => 'pswd_reset_form', :conditions => { :method => :get }
18
+ user.pswd_reset '/pswd_reset', :action => 'pswd_reset', :conditions => { :method => :post }
19
+ user.welcome '/welcome', :action => 'welcome_form', :conditions => { :method => :get }
20
+ user.welcome '/welcome', :action => 'welcome', :conditions => { :method => :post }
21
+ end
22
+
23
+ map.namespace :admin do |admin|
24
+ admin.resources :users, :controller => 'users'
25
+ end
26
+
27
+ *** EDIT config/environment.rb
28
+ config.gem 'will_paginate'
29
+ config.gem 'dougo_view_helpers'
30
+ config.gem 'dougo_model_helpers'
31
+ config.gem 'dougo_user_helpers'
32
+
33
+ config.active_record.observers = :user_observer
34
+
35
+ ActionController::Base.define_access_level(:more_access, 70)
36
+ ActionController::Base.define_access_level(:less_access, 60)
37
+
38
+ *** EDIT config/environments/producton.rb
39
+ ActionMailer::Base.delivery_method = :smtp
40
+ ActionMailer::Base.smtp_settings = {
41
+ :address => '...',
42
+ :port => 25,
43
+ . . .
44
+ }
45
+
46
+ Dougo::ControllerUserMail.host = 'domain.com'
47
+ Dougo::ControllerUserMail.from = 'domain.com'
48
+ Dougo::ControllerUserMail.prefix = 'My Cool App'
49
+
50
+
51
+ *** EDIT config/environments/test.rb
52
+
53
+ config.gem 'cucumber-rails', :lib => false, :version => '>=0.3.0'
54
+ config.gem 'database_cleaner', :lib => false, :version => '>=0.5.0'
55
+ config.gem 'webrat', :lib => false, :version => '>=0.7.0'
56
+
57
+ config.gem "rspec", :version => '>=1.3.0', :lib => false
58
+ config.gem "rspec-rails", :version => '>=1.3.2', :lib => false
59
+ config.gem "faker", :version => '>=0.3.1', :lib => false
60
+
61
+ config.gem "machinist", :version => '>=1.0.6', :lib => false
62
+ config.gem 'rcov', :version => '>=0.9.8', :lib => false
63
+ config.gem 'remarkable_rails', :version => '>=3.1.13', :lib => false
64
+
65
+ require 'machinist/active_record'
66
+ require 'sham'
67
+ require 'faker'
68
+ require 'remarkable_rails'
69
+
70
+ *** EDIT spec/spec_helper.rb
71
+ Spec::Runner.configure do |config|
72
+ ...
73
+
74
+ config.before(:each, :behaviour_type => :controller) do
75
+ @controller.instance_eval { flash.stub!(:sweep) }
76
+ end
77
+
78
+ *** RUN rake db:migrate
79
+
80
+ *** EDIT app/views/preview/index.html.erb
81
+ <h1>User Pages</h1>
82
+ <ul>
83
+ <li><a href='/user/'>Login</a></li>
84
+ <li><a href='/user/logout'>Logout</a></li>
85
+ <li><a href='/user/user_details'>Your Details</a></li>
86
+ <li><a href='/user/pswd_forgot'>Password Forgot</a></li>
87
+ <li><a href='/user/pswd_change'>Password Change</a></li>
88
+ <li><a href='/user/pswd_reset'>Password Reset (Check logs for reset token)</a></li>
89
+ <li><a href='/user/welcome'>User Welcome (Check logs for reset token)</a></li>
90
+ <li></li>
91
+ <li><a href='/admin/users'>Admin Users</a></li>
92
+ </ul>
93
+
94
+ restart app and goto http://localhost:3000/preview
95
+
96
+ **************************************************************************
97
+
@@ -0,0 +1,79 @@
1
+ class RulesEngineUsersManifest
2
+ def self.populate_record(m)
3
+
4
+ %W(
5
+ app/controllers
6
+ app/controllers/admin
7
+ app/models
8
+ app/views/admin/users
9
+ app/views/user_mailer
10
+ app/views/users
11
+ db/migrate
12
+ doc
13
+ features/admin/user
14
+ features/admin/user/step_definitions
15
+ features/support
16
+ features/user
17
+ features/user/step_definitions
18
+ spec/controllers
19
+ spec/controllers/admin
20
+ spec/models
21
+ spec/support
22
+ ).each do |dirname|
23
+ m.directory dirname
24
+ end
25
+
26
+ %W(
27
+ app/controllers/admin/users_controller.rb
28
+ app/controllers/users_controller.rb
29
+ app/models/user.rb
30
+ app/models/user_mailer.rb
31
+ app/models/user_observer.rb
32
+ app/views/admin/users/_form.html.erb
33
+ app/views/admin/users/edit.html.erb
34
+ app/views/admin/users/index.html.erb
35
+ app/views/admin/users/new.html.erb
36
+ app/views/admin/users/show.html.erb
37
+ app/views/user_mailer/forgot_password.html.erb
38
+ app/views/user_mailer/welcome_message.html.erb
39
+ app/views/users/change_form.html.erb
40
+ app/views/users/details.html.erb
41
+ app/views/users/login_form.html.erb
42
+ app/views/users/pswd_change_form.html.erb
43
+ app/views/users/pswd_forgot_form.html.erb
44
+ app/views/users/pswd_reset_form.html.erb
45
+ app/views/users/welcome_form.html.erb
46
+ db/migrate/20100104014507_create_users.rb
47
+ doc/README.rules_engine_users
48
+ doc/README.rules_engine_users_paths
49
+ features/admin/user/edit.feature
50
+ features/admin/user/index.feature
51
+ features/admin/user/new.feature
52
+ features/admin/user/show.feature
53
+ features/admin/user/step_definitions/edit_steps.rb
54
+ features/admin/user/step_definitions/index_steps.rb
55
+ features/admin/user/step_definitions/show_steps.rb
56
+ features/support/blueprint_users.rb
57
+ features/user/change.feature
58
+ features/user/details.feature
59
+ features/user/login.feature
60
+ features/user/pswd_change.feature
61
+ features/user/pswd_forgot.feature
62
+ features/user/pswd_reset.feature
63
+ features/user/step_definitions/login_steps.rb
64
+ features/user/step_definitions/pswd_reset_steps.rb
65
+ features/user/step_definitions/welcome_steps.rb
66
+ features/user/welcome.feature
67
+ spec/controllers/admin/users_controller_spec.rb
68
+ spec/controllers/users_controller_spec.rb
69
+ spec/models/user_mailer_spec.rb
70
+ spec/models/user_observer_spec.rb
71
+ spec/models/user_spec.rb
72
+ spec/support/rules_engine_macros.rb
73
+ ).each do |filename|
74
+ m.file filename, filename
75
+ end
76
+
77
+
78
+ end
79
+ end
@@ -0,0 +1,32 @@
1
+ contents :
2
+ - app/views/admin/users
3
+ - app/views/user_mailer
4
+ - app/views/users
5
+
6
+ - features/user
7
+ - features/admin/user
8
+
9
+ files :
10
+ - doc/README.rules_engine_users
11
+ - doc/README.rules_engine_users_paths
12
+
13
+ - app/controllers/users_controller.rb
14
+
15
+ - app/controllers/admin/users_controller.rb
16
+
17
+ - app/models/user.rb
18
+ - app/models/user_mailer.rb
19
+ - app/models/user_observer.rb
20
+
21
+ - db/migrate/20100104014507_create_users.rb
22
+
23
+ - spec/controllers/users_controller_spec.rb
24
+ - spec/controllers/admin/users_controller_spec.rb
25
+
26
+ - spec/models/user_spec.rb
27
+ - spec/models/user_mailer_spec.rb
28
+ - spec/models/user_observer_spec.rb
29
+
30
+ - spec/support/rules_engine_macros.rb
31
+
32
+ - features/support/blueprint_users.rb
@@ -0,0 +1,21 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/manifests/rules_engine_users')
2
+
3
+ class RulesEngineUsersGenerator < Rails::Generator::Base
4
+
5
+ def initialize(runtime_args, runtime_options = {})
6
+ super
7
+ end
8
+
9
+ def after_generate
10
+ puts ''
11
+ puts '******************************************************'
12
+ puts 'open doc/README.rules_engine_users for more instructions'
13
+ puts ''
14
+ end
15
+
16
+ def manifest
17
+ record do |m|
18
+ RulesEngineUsersManifest.populate_record(m)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,64 @@
1
+ class Admin::UsersController < ApplicationController
2
+
3
+ # before_filter :login_required
4
+ before_filter :admin_access_required
5
+
6
+ before_filter :only => [:show, :edit, :update, :destroy] do |controller|
7
+ controller.re_load_model :user, {:param_id => :id, :redirect_path => :admin_users_path}
8
+ end
9
+
10
+ def index
11
+ klass = User
12
+
13
+ if params[:query_type] == 'email'
14
+ klass = klass.by_ge_email(params[:query]) unless params[:query].blank?
15
+ klass = klass.order_email
16
+ elsif params[:query_type] == 'login'
17
+ klass = klass.by_ge_login(params[:query]) unless params[:query].blank?
18
+ klass = klass.order_login
19
+ elsif params[:query_type] == 'full_name'
20
+ klass = klass.by_ge_full_name(params[:query]) unless params[:query].blank?
21
+ klass = klass.order_full_name
22
+ else
23
+ klass = klass.order_full_name
24
+ end
25
+
26
+ @users = klass.paginate(:page => params[:page], :per_page => 20)
27
+ end
28
+
29
+ def show
30
+ end
31
+
32
+ def new
33
+ @user = User.new(:time_zone => 'Eastern Time (US & Canada)', :access_level => User::ACCESS_LEVEL_DISABLED)
34
+ end
35
+
36
+ def create
37
+ @user = User.new(params[:user])
38
+ if @user.save
39
+ flash[:success] = "Welcome email sent to new user"
40
+ redirect_to(admin_user_path(@user))
41
+ else
42
+ render :action => "new"
43
+ end
44
+ end
45
+
46
+ def edit
47
+ end
48
+
49
+ def update
50
+ if @user.update_attributes(params[:user])
51
+ flash[:success] = 'User Updated'
52
+ redirect_to(admin_user_path(@user))
53
+ else
54
+ render :action => "edit"
55
+ end
56
+ end
57
+
58
+ def destroy
59
+ @user.destroy
60
+ flash[:success] = 'User Deleted'
61
+ redirect_to(admin_users_path)
62
+ end
63
+
64
+ end