canvas-lms/gems/broadcast_policy
Dave Gynn 34380c8f7f Support class reloading with BroadcastPolicy
Since Notification and NotificationPolicy can be reloaded,
BroadcastPolicy needs to re-cache the references on reload.

To test:
You can experience a reloading error before applying this patch
by triggering a notification after a reload.
- rails console
- reload!
- Course.last.enroll_student(User.last).accept!
This will cause `ArgumentError: A copy of Notifier has been removed from the module tree but is still active!`

With this patch applied, there should be no error (assuming
that student can be enrolled in that class).
2016-02-11 11:08:17 -05:00
..
lib Support class reloading with BroadcastPolicy 2016-02-11 11:08:17 -05:00
spec rails 4.2: use AR#connection on class instead of model 2016-01-05 13:53:41 +00:00
.rspec-local gemify broadcast policy 2014-09-24 11:35:33 +00:00
Gemfile gemify broadcast policy 2014-09-24 11:35:33 +00:00
README.md Support class reloading with BroadcastPolicy 2016-02-11 11:08:17 -05:00
broadcast_policy.gemspec determine recipients and queue notifications _after_ transaction commit 2015-08-20 15:26:21 +00:00
test.sh simplify gem test harnesses 2016-01-19 17:52:58 +00:00

README.md

BroadcastPolicy

This allows us to do something like:

class Model < ActiveRecord::Base has_a_broadcast_policy

set_broadcast_policy do |p| p.dispatch :notification_name p.to { some_endpoints } p.whenever { |record| record.foo_is_true? && record.bar_is_false? } end

end

Usage

In order to use the gem in Rails, you'll need an initializer something like this:

config/initializers/broadcast_policy.rb

require 'broadcast_policy' Rails.configuration.to_prepare do BroadcastPolicy.notifier = lambda { Notifier.new } BroadcastPolicy.notification_finder = lambda { NotificationFinder.new(Notification.all_cached) } end ActiveRecord::Base.send(:extend, BroadcastPolicy::ClassMethods)

The two BroadcastPolicy services are necessary to supply the canvas domain objects for integrating with the notification system License

Copyright (C) 2014 Instructure, Inc.

This file is part of Canvas.

Canvas is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License.

Canvas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.