aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/inboxes/base_controller.rb6
-rw-r--r--app/models/inboxes/ability.rb38
-rw-r--r--inboxes.gemspec2
-rw-r--r--lib/inboxes.rb2
-rw-r--r--lib/inboxes/ability.rb6
-rw-r--r--lib/inboxes/engine.rb7
-rw-r--r--lib/inboxes/railtie.rb5
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