0.0
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
With Lightning, you can set up an end-to-end highly customizable feature flagging system in <1 minute. It provides console and UI support for feature flag management.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 5.0.0
 Project Readme

⚡️ Lightning

Tests Gem Version

Get started with feature flags in <1 minute. Works with Ruby on Rails. Control who can access features from a simple Web UI or the console. Here's the Web UI:

2021-06-09 at 12 50 p m

2021-06-09 at 12 49 p m

  • Enable (or disable) a feature for everyone
  • Enable it for specific models in your database (you can configure which models can be feature flagged)
  • Easily hide certain features behind flags
  • Lightning stores data on your database so you don't have to worry about availablity (currently works only with ActiveRecord)

Install

Add the following link to Gemfile

gem 'lightningff', require: 'lightning'

and run bundle install.

Script Installation

Run the following script to install the entire feature flag functionality without manual setup for your models (i.e. User, Workspace)

rails lightning:install User Workspace

If you want more control over the setup, run the command below and check out Manual Installation and skip the migrations part

rails lightning:install

Manual Installation

Set up feature flag migrations by running the following lines

bin/rails lightning:install:migrations
bin/rails db:migrate SCOPE=lightning

Create config/initializers/lightning.rb and set your flaggable entities

Lightning.flaggable_entities = ["User", "Workspace"]

For each flaggable model, add include Lightning::Flaggable.

class User < ApplicationRecord
  include Lightning::Flaggable
end

Usage

user = User.create(name: 'Dummy user')

# Check if feature is enabled for entity
Lightning.enabled?(user, 'homepage_v2')

# Opt in an entity
Lightning.opt_in('homepage_v2', user)

# Opt out an entity
Lightning.opt_out('homepage_v2', user)

# List entities opted in to a feature
Lightning.opt_ins('hompage_v2')

UI Setup

Mount engine in routes.rb file

Rails.application.routes.draw do
  mount Lightning::Engine => "/lightning"
end

API

Create feature (state is disabled)

Lightning.create!('homepage_v2', 'New homepage with better logo')

Find a feature by key

Lightning.get('homepage_v2')

List all features

Lightning.list

Update feature state/description

Lightning.update('homepage_v2', { state: 'enabled_per_entity', description: 'Homepage with new nav' })

Delete feature

Lightning.delete('homepage_v2')

License

The gem is available as open source under the terms of the MIT License.