jakewendt-authorized 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ Dir["#{File.dirname(__FILE__)}/../tasks/**/*.rake"].sort.each { |ext| load ext }
@@ -0,0 +1,144 @@
1
+ module Authorized
2
+ module UserModel
3
+
4
+ def self.included(base)
5
+ base.extend(PrepMethod)
6
+ # base.send(:include, InstanceMethods)
7
+ # base.class_eval do
8
+ # alias_method_chain :reset_persistence_token, :uniqueness
9
+ # end
10
+ end
11
+
12
+ module PrepMethod
13
+ def authorized(options={})
14
+
15
+ include Authorized::UserModel::InstanceMethods
16
+ extend Authorized::UserModel::ClassMethods
17
+
18
+ has_and_belongs_to_many :roles, :uniq => true
19
+
20
+ end
21
+ end
22
+
23
+ module ClassMethods
24
+
25
+ # def search(options={})
26
+ # conditions = {}
27
+ # includes = joins = []
28
+ # if !options[:role_name].blank?
29
+ # includes = [:roles]
30
+ # if Role.all.collect(&:name).include?(options[:role_name])
31
+ # joins = [:roles]
32
+ # conditions = ["roles.name = '#{options[:role_name]}'"]
33
+ # # else
34
+ # # @errors = "No such role '#{options[:role_name]}'"
35
+ # end
36
+ # end
37
+ # self.all(
38
+ # :joins => joins,
39
+ # :include => includes,
40
+ # :conditions => conditions )
41
+ # end
42
+
43
+ end
44
+
45
+ module InstanceMethods
46
+
47
+ def role_names
48
+ roles.collect(&:name).uniq
49
+ end
50
+
51
+ def deputize
52
+ roles << Role.find_or_create_by_name('administrator')
53
+ end
54
+
55
+ # The 4 common CCLS roles are ....
56
+ def is_superuser?(*args)
57
+ self.role_names.include?('superuser')
58
+ end
59
+ alias_method :is_super_user?, :is_superuser?
60
+
61
+ def is_administrator?(*args)
62
+ self.role_names.include?('administrator')
63
+ end
64
+
65
+ def is_editor?(*args)
66
+ self.role_names.include?('editor')
67
+ end
68
+
69
+ def is_interviewer?(*args)
70
+ self.role_names.include?('interviewer')
71
+ end
72
+
73
+ def is_reader?(*args)
74
+ self.role_names.include?('reader')
75
+ end
76
+
77
+ def is_user?(user=nil)
78
+ !user.nil? && self == user
79
+ end
80
+ alias_method :may_be_user?, :is_user?
81
+
82
+ def may_administrate?(*args)
83
+ (self.role_names & ['superuser','administrator']).length > 0
84
+ end
85
+ alias_method :may_view_permissions?, :may_administrate?
86
+ alias_method :may_create_user_invitations?, :may_administrate?
87
+ alias_method :may_view_users?, :may_administrate?
88
+ alias_method :may_assign_roles?, :may_administrate?
89
+
90
+ def may_edit?(*args)
91
+ (self.role_names &
92
+ ['superuser','administrator','editor']
93
+ ).length > 0
94
+ end
95
+ alias_method :may_maintain_pages?, :may_edit?
96
+
97
+
98
+ # Add tests for may_interview and may_read
99
+ def may_interview?(*args)
100
+ (self.role_names &
101
+ ['superuser','administrator','editor','interviewer']
102
+ ).length > 0
103
+ end
104
+
105
+ # This is pretty lame as all current roles can read
106
+ def may_read?(*args)
107
+ (self.role_names &
108
+ ['superuser','administrator','editor','interviewer','reader']
109
+ ).length > 0
110
+ end
111
+ alias_method :may_view?, :may_read?
112
+
113
+
114
+
115
+ def may_view_user?(user=nil)
116
+ self.is_user?(user) || self.may_administrate?
117
+ end
118
+
119
+
120
+
121
+
122
+ def may_share_document?(document=nil)
123
+ document && (
124
+ self.is_administrator? ||
125
+ ( document.owner && self == document.owner )
126
+ )
127
+ end
128
+
129
+ def may_view_document?(document=nil)
130
+ document
131
+
132
+
133
+
134
+
135
+
136
+ end
137
+
138
+ protected
139
+
140
+ end
141
+
142
+ end
143
+ end
144
+ ActiveRecord::Base.send( :include, Authorized::UserModel )
@@ -0,0 +1,40 @@
1
+ namespace :app do
2
+
3
+ # task :args_as_array do
4
+ # args = $*.dup.slice(1..-1)
5
+ # puts args.collect {|arg| "X:" << arg }.join("\n")
6
+ # exit
7
+ # end
8
+
9
+ desc "Add some expected users."
10
+ task :add_users => :environment do
11
+ puts "Adding users"
12
+ %w( 859908 228181 855747 214766 180918 66458 808 768475
13
+ 10883 86094 754783 769067 854720 16647 ).each do |uid|
14
+ puts " - Adding user with uid:#{uid}:"
15
+ User.find_create_and_update_by_uid(uid)
16
+ end
17
+ end
18
+
19
+ desc "Deputize user by UID"
20
+ task :deputize => :environment do
21
+ puts
22
+ if ENV['uid'].blank?
23
+ puts "User's CalNet UID required."
24
+ puts "Usage: rake #{$*} uid=INTEGER"
25
+ puts
26
+ exit
27
+ end
28
+ if !User.exists?(:uid => ENV['uid'])
29
+ puts "No user found with uid=#{ENV['uid']}."
30
+ puts
31
+ exit
32
+ end
33
+ user = User.find(:first, :conditions => { :uid => ENV['uid'] })
34
+ puts "Found user #{user.displayname}. Deputizing..."
35
+ user.deputize
36
+ puts "User deputized: #{user.is_administrator?}"
37
+ puts
38
+ end
39
+
40
+ end
@@ -0,0 +1,52 @@
1
+ namespace :db do
2
+
3
+ desc "Create yml fixtures for given model in database\n" <<
4
+ "rake db:extract_fixtures_from pages"
5
+ task :extract_fixtures_from => :environment do
6
+ me = $*.shift
7
+ while( table_name = $*.shift )
8
+ File.open("#{RAILS_ROOT}/db/#{table_name}.yml", 'w') do |file|
9
+ data = table_name.singularize.capitalize.constantize.find(
10
+ :all).collect(&:attributes)
11
+ file.write data.inject({}) { |hash, record|
12
+ record.delete('created_at')
13
+ record.delete('updated_at')
14
+ hash["#{table_name}_#{record['id']}"] = record
15
+ hash
16
+ }.to_yaml
17
+ end
18
+ end
19
+ exit
20
+ end
21
+
22
+ desc "Dump MYSQL table descriptions."
23
+ task :describe => :environment do
24
+ puts
25
+ puts "FYI: This task ONLY works on MYSQL databases."
26
+ puts
27
+ config = ActiveRecord::Base.connection.instance_variable_get(:@config)
28
+ #=> {:adapter=>"mysql", :host=>"localhost", :password=>nil, :username=>"root", :database=>"my_development", :encoding=>"utf8"}
29
+
30
+ tables = ActiveRecord::Base.connection.execute('show tables;')
31
+ while( table = tables.fetch_row ) do
32
+ puts "Table: #{table}"
33
+
34
+ # may have to include host and port
35
+ system("mysql --table=true " <<
36
+ "--user=#{config[:username]} " <<
37
+ "--password='#{config[:password]}' " <<
38
+ "--execute='describe #{table}' " <<
39
+ config[:database]);
40
+
41
+ #
42
+ # mysql formats the table well so doing it by hand is something that
43
+ # will have to wait until I feel like wasting my time
44
+ #
45
+ # columns = ActiveRecord::Base.connection.execute("describe #{table};")
46
+ # while( column = columns.fetch_hash ) do
47
+ # puts column.keys Extra Default Null Type Field Key
48
+ # end
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,68 @@
1
+ #
2
+ # This file has been copied from rails
3
+ # .../rails-2.3.5/lib/tasks/documentation.rake
4
+ # so that parts of it could be modified.
5
+
6
+ namespace :doc do |doc|
7
+
8
+ # Rake::RDocTask.new("app") { |rdoc|
9
+ #
10
+ # We cannot overwrite or override an RDoc rake task.
11
+ # Redefining it here actually creates another
12
+ # of the same name and both are run when
13
+ # `rake doc:app` is called. The Rakefile
14
+ # is modified to handle the modifications.
15
+ #
16
+ # Actually, that's not entirely true. This would
17
+ # add another task, but you can remove and override
18
+ # a task. The rdoc_rails plugin was overriding my
19
+ # override, which caused all the frustration!!!
20
+ #
21
+ # }
22
+
23
+ plugins = FileList['vendor/plugins/**'].collect { |plugin|
24
+ File.basename(plugin) }
25
+
26
+ namespace :plugins do
27
+ # Define doc tasks for each plugin
28
+ plugins.each do |plugin|
29
+
30
+ # clear rails' Rake::Task of the same name
31
+ Rake::Task[plugin].clear_actions
32
+ Rake::Task[plugin].clear_prerequisites
33
+
34
+ Rake::RDocTask.new(plugin) { |rdoc|
35
+ plugin_base = "vendor/plugins/#{plugin}"
36
+ ENV['format'] ||= 'railsfish'
37
+ rdoc.rdoc_dir = "doc/plugins/#{plugin}"
38
+ rdoc.template = ENV['template'] if ENV['template']
39
+ rdoc.title = "#{plugin.titlecase} Plugin Documentation"
40
+ rdoc.options << '--line-numbers' << '--inline-source'
41
+ rdoc.options << '--charset' << 'utf-8'
42
+ rdoc.options << '--format' << ENV['format']
43
+ rdoc.rdoc_files.include("#{plugin_base}/lib/**/*.rb")
44
+ rdoc.rdoc_files.include("#{plugin_base}/app/**/*.rb")
45
+
46
+ %w( README README.rdoc ).each do |readme|
47
+ if File.exist?("#{plugin_base}/#{readme}")
48
+ rdoc.main = "#{plugin_base}/#{readme}"
49
+ break
50
+ end
51
+ end
52
+ %w( TODO.org MIT-LICENSE LICENSE CHANGELOG README README.rdoc ).each do |possible_file|
53
+ if File.exist?("#{plugin_base}/#{possible_file}")
54
+ rdoc.rdoc_files.include("#{plugin_base}/#{possible_file}")
55
+ end
56
+ end
57
+ }
58
+
59
+ end
60
+ end
61
+
62
+ task :parse_readme => :environment do
63
+ require 'rdoc/markup/to_html'
64
+ h = RDoc::Markup::ToHtml.new
65
+ puts h.convert( File.read('README.rdoc') )
66
+ end
67
+
68
+ end
@@ -0,0 +1,41 @@
1
+ #
2
+ # This is from Advanced Rails Recipes, page 277
3
+ #
4
+ namespace :test do
5
+
6
+ desc 'Tracks test coverage with rcov'
7
+ task :coverage do
8
+ rm_f "coverage"
9
+ rm_f "coverage.data"
10
+
11
+ unless PLATFORM['i386-mswin32']
12
+ rcov = "rcov --sort coverage --rails --aggregate coverage.data " <<
13
+ "--text-summary -Ilib -T " <<
14
+ "-x gems/*,db/migrate/*,jrails/*/*" <<
15
+ ',\(eval\),\(recognize_optimized\),\(erb\)' << # needed in jruby
16
+ ",yaml,yaml/*,lib/tmail/parser.y,jruby.jar!/*" << # needed in jruby
17
+ ",html_test/*/*" <<
18
+ ",html_test_extension/*/*"
19
+ else
20
+ rcov = "rcov.cmd --sort coverage --rails --aggregate " <<
21
+ "coverage.data --text-summary -Ilib -T"
22
+ end
23
+
24
+ dirs = Dir.glob("test/**/*_test.rb").collect{|f|File.dirname(f)}.uniq
25
+ lastdir = dirs.pop
26
+ dirs.each do |dir|
27
+ system("#{rcov} --no-html #{dir}/*_test.rb")
28
+ end
29
+ system("#{rcov} --html #{lastdir}/*_test.rb") unless lastdir.nil?
30
+
31
+ unless PLATFORM['i386-mswin32']
32
+ # jruby-1.5.0.RC1 > PLATFORM
33
+ # => "java"
34
+ # system("open coverage/index.html") if PLATFORM['darwin']
35
+ system("open coverage/index.html")
36
+ else
37
+ system("\"C:/Program Files/Mozilla Firefox/firefox.exe\" " +
38
+ "coverage/index.html")
39
+ end
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,276 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jakewendt-authorized
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 4
10
+ version: 0.1.4
11
+ platform: ruby
12
+ authors:
13
+ - George 'Jake' Wendt
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-25 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: i18n
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 29
30
+ segments:
31
+ - 0
32
+ - 3
33
+ - 7
34
+ version: 0.3.7
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: rails
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 7
46
+ segments:
47
+ - 2
48
+ version: "2"
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: activerecord
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 7
60
+ segments:
61
+ - 2
62
+ version: "2"
63
+ type: :runtime
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: activeresource
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ~>
72
+ - !ruby/object:Gem::Version
73
+ hash: 7
74
+ segments:
75
+ - 2
76
+ version: "2"
77
+ type: :runtime
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: activesupport
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ hash: 7
88
+ segments:
89
+ - 2
90
+ version: "2"
91
+ type: :runtime
92
+ version_requirements: *id005
93
+ - !ruby/object:Gem::Dependency
94
+ name: actionmailer
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ hash: 7
102
+ segments:
103
+ - 2
104
+ version: "2"
105
+ type: :runtime
106
+ version_requirements: *id006
107
+ - !ruby/object:Gem::Dependency
108
+ name: actionpack
109
+ prerelease: false
110
+ requirement: &id007 !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ~>
114
+ - !ruby/object:Gem::Version
115
+ hash: 7
116
+ segments:
117
+ - 2
118
+ version: "2"
119
+ type: :runtime
120
+ version_requirements: *id007
121
+ - !ruby/object:Gem::Dependency
122
+ name: jakewendt-rails_helpers
123
+ prerelease: false
124
+ requirement: &id008 !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ type: :runtime
134
+ version_requirements: *id008
135
+ - !ruby/object:Gem::Dependency
136
+ name: jakewendt-ruby_extension
137
+ prerelease: false
138
+ requirement: &id009 !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ hash: 3
144
+ segments:
145
+ - 0
146
+ version: "0"
147
+ type: :runtime
148
+ version_requirements: *id009
149
+ - !ruby/object:Gem::Dependency
150
+ name: ryanb-acts-as-list
151
+ prerelease: false
152
+ requirement: &id010 !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ hash: 3
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ type: :runtime
162
+ version_requirements: *id010
163
+ - !ruby/object:Gem::Dependency
164
+ name: thoughtbot-factory_girl
165
+ prerelease: false
166
+ requirement: &id011 !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ hash: 3
172
+ segments:
173
+ - 0
174
+ version: "0"
175
+ type: :runtime
176
+ version_requirements: *id011
177
+ - !ruby/object:Gem::Dependency
178
+ name: jakewendt-assert_this_and_that
179
+ prerelease: false
180
+ requirement: &id012 !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ hash: 3
186
+ segments:
187
+ - 0
188
+ version: "0"
189
+ type: :runtime
190
+ version_requirements: *id012
191
+ - !ruby/object:Gem::Dependency
192
+ name: jakewendt-calnet_authenticated
193
+ prerelease: false
194
+ requirement: &id013 !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ hash: 3
200
+ segments:
201
+ - 0
202
+ version: "0"
203
+ type: :runtime
204
+ version_requirements: *id013
205
+ description: longer description of your gem
206
+ email: github@jake.otherinbox.com
207
+ executables: []
208
+
209
+ extensions: []
210
+
211
+ extra_rdoc_files:
212
+ - README.rdoc
213
+ files:
214
+ - app/controllers/roles_controller.rb
215
+ - app/models/role.rb
216
+ - config/routes.rb
217
+ - generators/authorized/USAGE
218
+ - generators/authorized/authorized_generator.rb
219
+ - generators/authorized/templates/functional/roles_controller_test.rb
220
+ - generators/authorized/templates/migrations/create_roles.rb
221
+ - generators/authorized/templates/migrations/create_roles_users.rb
222
+ - generators/authorized/templates/stylesheets/authorized.css
223
+ - generators/authorized/templates/unit/role_test.rb
224
+ - lib/authorized.rb
225
+ - lib/authorized/authorization.rb
226
+ - lib/authorized/controller.rb
227
+ - lib/authorized/core_extension.rb
228
+ - lib/authorized/factories.rb
229
+ - lib/authorized/factory_test_helper.rb
230
+ - lib/authorized/helper.rb
231
+ - lib/authorized/pending.rb
232
+ - lib/authorized/permissive_controller.rb
233
+ - lib/authorized/resourceful_controller.rb
234
+ - lib/authorized/tasks.rb
235
+ - lib/authorized/user_model.rb
236
+ - lib/tasks/application.rake
237
+ - lib/tasks/database.rake
238
+ - lib/tasks/documentation.rake
239
+ - lib/tasks/rcov.rake
240
+ - README.rdoc
241
+ has_rdoc: true
242
+ homepage: http://github.com/jakewendt/authorized
243
+ licenses: []
244
+
245
+ post_install_message:
246
+ rdoc_options:
247
+ - --charset=UTF-8
248
+ require_paths:
249
+ - lib
250
+ required_ruby_version: !ruby/object:Gem::Requirement
251
+ none: false
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ hash: 3
256
+ segments:
257
+ - 0
258
+ version: "0"
259
+ required_rubygems_version: !ruby/object:Gem::Requirement
260
+ none: false
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ hash: 3
265
+ segments:
266
+ - 0
267
+ version: "0"
268
+ requirements: []
269
+
270
+ rubyforge_project:
271
+ rubygems_version: 1.3.7
272
+ signing_key:
273
+ specification_version: 3
274
+ summary: one-line summary of your gem
275
+ test_files: []
276
+