Short description and motivation.
How to use my plugin.
Add this line to your application's Gemfile:
gem 'signum'
Add signum to your package.json:
yarn add signum
Add signum to your application.js:
import { Signum } from "@entdec/signum"
// application is a Stimulus application
Signum.start(application)
In controllers, or from background jobs, basically anywhere you want you can use the following methods:
Signum.signal(Current.user, text: "Hello world!")
Signum.info(Current.user, text: "We're still here!")
Signum.error(Current.user, text: "Houston, we have a problem!")
Signum.success(Current.user, text: "The Eagle has landed!")
You can make a signal sticky, keeping it on the screen until you click it away:
s = Signum.signal(Current.user, text: "Hello World New", sticky: true, title: "Sticky")
You can add icons:
s = Signum.signal(Current.user, text: "Hello World New", title: "Icon", icon:'fa-regular fa-t-rex')
Buttons and links:
s = Signum.success(Current.user, text: "Hello World New", title: "Link1", buttons:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}], links:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"}])
s = Signum.signal(Current.user, text: "Hello World New", title: "Link2", buttons:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}], links:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"}], icon: 'fa-regular fa-t-rex')
s = Signum.signal(Current.user, text: "Hello World New", title: "Link2", buttons:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}], links:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"},{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"},{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"}])
You can also show a progressbar, this is based on count and total. Setting the count to total completes the progressbar.
s = Signum.success(Current.user, text: "Hello World New", title: "this is test title", buttons:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}], links:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"}], count: 75, total: 150)
You can also attach attachments
attachment = {io: File.open("notes.txt"),
content_type: "text/plain", filename: "notes.txt"}
s = Signum.success(Current.user, text: "Hello World New", title: "this is test title", attachments: [attachment])
Signum returns you the signal object. You can update these signals and they will be rebroadcasted again.
Next to using a User (or any other model) another option is to use keys instead. You could signal all users using the following:
s = Signum.signal(:all, text: "Hello World New", title: "Icon", icon:'fa-regular fa-t-rex')
The key all is supported out of the box, any other key needs you to pass it in the Notifications::Component, here we're using the session.id:
= render(Signum::Notifications::Component.new([request.session.id]))
Contribution directions go here.
The gem is available as open source under the terms of the MIT License.