lib/cream/role.rb in cream-0.7.3 vs lib/cream/role.rb in cream-0.7.5

- old
+ new

@@ -5,20 +5,46 @@ module Role def self.available return Cream.available_roles if Cream.available_roles.present? return Cream.roles if Cream.roles.present? - if defined? ::Role - ::Role.all.map(&:name).to_symbols - elsif defined? ::User - ::User.roles.to_symbols - else - raise %q{Available roles could not be determined. Please do either of the following:\n + + puts "Cream didn't have available roles configured, now trying alternatives: User and Role" + + return try_role if try_role + return try_user if try_user + + raise %q{Available roles could not be determined. Please do either of the following:\n 1) Create a Cream.setup block 2) Set Cream.available_roles explicitly 3) Create Role instances and ensure a call to Role.all returns them 4) Set User.roles explicitly } + end + + protected + + def self.try_user + if !defined? ::User + puts "No User defined" + return nil end + + puts "User has roles available?" + return ::User.roles.to_symbols if ::User.respond_to?(:roles) + puts "User didn't have a #roles class method" + nil end + + def self.try_role + if !defined? ::Role + puts "No Role defined" + return nil + end + + puts "Role has roles available?" + return ::Role.all.map(&:name).to_symbols if ::Role.respond_to?(:all) + puts "Role didn't have an #all class method" + nil + end end end \ No newline at end of file