jakewendt-authorized 0.1.4

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.
@@ -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
+