diff options
| -rw-r--r-- | app/controllers/inboxes/base_controller.rb | 6 | ||||
| -rw-r--r-- | app/models/inboxes/ability.rb | 38 | ||||
| -rw-r--r-- | inboxes.gemspec | 2 | ||||
| -rw-r--r-- | lib/inboxes.rb | 2 | ||||
| -rw-r--r-- | lib/inboxes/ability.rb | 6 | ||||
| -rw-r--r-- | lib/inboxes/engine.rb | 7 | ||||
| -rw-r--r-- | lib/inboxes/railtie.rb | 5 |
7 files changed, 64 insertions, 2 deletions
diff --git a/app/controllers/inboxes/base_controller.rb b/app/controllers/inboxes/base_controller.rb index da116a0..680e38c 100644 --- a/app/controllers/inboxes/base_controller.rb +++ b/app/controllers/inboxes/base_controller.rb @@ -4,4 +4,10 @@ class Inboxes::BaseController < ApplicationController def init_discussion @discussion = Discussion.find(params[:discussion_id]) end + + # Needs to be overriden so that we use Spree's Ability rather than anyone else's. + def current_ability + # raise "Loading Ability" + @current_ability ||= Inboxes::Ability.new(current_user) + end end
\ No newline at end of file diff --git a/app/models/inboxes/ability.rb b/app/models/inboxes/ability.rb new file mode 100644 index 0000000..4d8408f --- /dev/null +++ b/app/models/inboxes/ability.rb @@ -0,0 +1,38 @@ +# Implementation class for Cancan gem. Instead of overriding this class, consider adding new permissions +# using the special +register_ability+ method which allows extensions to add their own abilities. +# +# See http://github.com/ryanb/cancan for more details on cancan. +module Inboxes + class Ability + include CanCan::Ability + + class_attribute :abilities + self.abilities = Set.new + + # Allows us to go beyond the standard cancan initialize method which makes it difficult for engines to + # modify the default +Ability+ of an application. The +ability+ argument must be a class that includes + # the +CanCan::Ability+ module. The registered ability should behave properly as a stand-alone class + # and therefore should be easy to test in isolation. + def self.register_ability(ability) + self.abilities.add(ability) + + end + + def initialize(user) + # raise "Initializing 3rd patry" + # self.clear_aliased_actions + + # can [:index, :create], Discussion + # can :read, Discussion do |discussion| + # discussion.can_participate?(user) + # end + + #include any abilities registered by extensions, etc. + + Ability.abilities.each do |clazz| + ability = clazz.send(:new, user) + @rules = rules + ability.send(:rules) + end + end + end +end diff --git a/inboxes.gemspec b/inboxes.gemspec index fac2df0..403d801 100644 --- a/inboxes.gemspec +++ b/inboxes.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| # specify any dependencies here; for example: # s.add_development_dependency "ruby-debug" s.add_runtime_dependency "haml-rails" - s.add_runtime_dependency "cancan" + s.add_runtime_dependency "cancan", ['>= 0'] # s.add_runtime_dependency "inherited_resources" # s.add_development_dependency 'dm-sqlite-adapter', ['>= 1.1.0'] diff --git a/lib/inboxes.rb b/lib/inboxes.rb index 133aa9c..f1b9c7a 100644 --- a/lib/inboxes.rb +++ b/lib/inboxes.rb @@ -1,8 +1,10 @@ require "inboxes/version" require "inboxes/railtie" +require "inboxes/ability" require "inboxes/engine" require "inboxes/active_record_extension" + module Inboxes def self.configure(&block) diff --git a/lib/inboxes/ability.rb b/lib/inboxes/ability.rb index 18fca88..9f74d78 100644 --- a/lib/inboxes/ability.rb +++ b/lib/inboxes/ability.rb @@ -1,9 +1,13 @@ +require "cancan" + module Inboxes class InboxesAbility - include CanCan::Ability + include ::CanCan::Ability def initialize(user) # Discussion + # raise "Registered!" + can [:index, :create], Discussion can :read, Discussion do |discussion| discussion.can_participate?(user) diff --git a/lib/inboxes/engine.rb b/lib/inboxes/engine.rb index 4395cde..564456c 100644 --- a/lib/inboxes/engine.rb +++ b/lib/inboxes/engine.rb @@ -2,8 +2,15 @@ require "inboxes/ability" module Inboxes class Engine < ::Rails::Engine + # raise "Engine Activated" def self.activate Ability.register_ability(InboxesAbility) + # raise "Activated" end + + def load_tasks + end + + config.to_prepare &method(:activate).to_proc end end
\ No newline at end of file diff --git a/lib/inboxes/railtie.rb b/lib/inboxes/railtie.rb index 9e5435e..673784e 100644 --- a/lib/inboxes/railtie.rb +++ b/lib/inboxes/railtie.rb @@ -1,4 +1,5 @@ require 'rails' +require "inboxes/ability" module Inboxes class Railtie < ::Rails::Railtie @@ -14,5 +15,9 @@ module Inboxes # app.config.middleware.insert_before "::Rails::Rack::Logger", "Inboxes::Middleware" end + + # def self.activate + # Ability.register_ability(InboxesAbility) + # end end end
\ No newline at end of file |
