Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/digitalnz/plug
🔌 A Rails engine to turn on/off features (Feature flipper).
https://github.com/digitalnz/plug
feature-flags feature-flipper feature-toggles flipper gem mysql plug rails rails-engine ruby ruby-on-rails
Last synced: 21 days ago
JSON representation
🔌 A Rails engine to turn on/off features (Feature flipper).
- Host: GitHub
- URL: https://github.com/digitalnz/plug
- Owner: DigitalNZ
- License: mit
- Created: 2017-10-29T22:27:11.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2024-07-25T01:35:18.000Z (7 months ago)
- Last Synced: 2025-01-16T19:16:13.841Z (29 days ago)
- Topics: feature-flags, feature-flipper, feature-toggles, flipper, gem, mysql, plug, rails, rails-engine, ruby, ruby-on-rails
- Language: Ruby
- Homepage:
- Size: 279 KB
- Stars: 4
- Watchers: 8
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: MIT-LICENSE
Awesome Lists containing this project
README
# Plug [![Maintainability](https://api.codeclimate.com/v1/badges/6246b1cd8e42603c42f6/maintainability)](https://codeclimate.com/github/DigitalNZ/plug/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/6246b1cd8e42603c42f6/test_coverage)](https://codeclimate.com/github/DigitalNZ/plug/test_coverage)
A Rails engine to turn on/off features (Feature flipper).
### Features
- Manage features with notices
- Manage site notices with themes### Prerequisites
- Rails version 5 and above
- MySQL### Getting Started
Add this line to your application's Gemfile:
```ruby
gem 'plug'
```Execute:
```bash
→ bundle
```And run the install generator:
```bash
→ rails g plug:install
→ rails plug:install:migrations
→ rails db:migrate
→ rails s
```### Usage
Go to `localhost:3000/plug` and start creating features.
Use the provided method to check if the feature is enabled.
```ruby
Plug.enabled?('my-awesome-feature-slug')
```If you wanted to restrict routes, you can use `Plug::Constraint` class
```ruby
Rails.application.routes.draw do
resources :blog, constraint: Plug::Constraint.new('my-awesome-feature-slug')
end
```Notices can be displayed using the `Plug.notice` method.
```erb
<%= Plug.notice('my-awesome-feature-slug') %>
```If you have custom HTML for notice, you can pass a block.
```erb
<% Plug.notice('my-awesome-feature-slug') do |notice| %>
<%= notice %>
<% end %>
```#### Buttons
Add buttons to the config block to perform rake tasks from the plug dashboard```ruby
config.buttons = [
{ label: 'Clear cache', task: 'tmp:cache:clear' }
]
```#### Themes
Themes can be added in Site Notices. Themes are just string stored in the database. You still need to style the theme.By default, we have `default` and `dark` in `config/plug.rb`. Below is an example on how you can utilise the theme string.
```haml
- theme_class = "site-notice--#{site_notice.theme}".site-notice{ class: theme_class }
%p My site notice
``````scss
// BEM
.site-notice {
@include modifier('default') {
...
}
@include modifier('dark') {
...
}
}
```### Creating new migrations
```bash
→ rails g migration MyAwesomeMigration
→ rails g model MyModel name:string slug:string:index
→ rails db:migrate
→ rails db:migrate RAILS_ENV=test
→ rake plug:install:migrations # Run this on the app to copy the new migrations
```### Running the tests
```bash
→ bundle exec rspec spec
```### Publishing to `rubygems.org`
Make sure to **bump** the version. Rubygems don't accept version overrides.
```bash
→ gem build plug.gemspec
→ gem push plug-.gem
```### Publishing to `npmjs.com`
Make sure to match the version with the Rubygems version.
```bash
→ npm login
→ npm publish --access public
```### TODOs
- Ability to disable all features using one button
- Add screenshot
- Allow block parameters for `enabled?` method
- Versioning of features
- History of feature activities### Questions/Issues?
File a new [issue](https://github.com/digitalnz/plug/issues/new) if you have questions or issues.
### Contributing
1. Fork it ( https://github.com/boost/digitalnz/fork )
2. Create your feature branch (`git checkout -b my-awesome-feature`)
3. Commit your changes (`git commit -am 'Add my awesome feature!'`)
4. Push to the branch (`git push origin my-awesome-feature`)
5. Create a new Pull Request