0.0
No commit activity in last 3 years
No release in over 3 years
Declare and manage feature flags easily
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

~> 4.2
 Project Readme

Feature Toggle

Introduction

This gem allows to manage (enable/disable) application features on the fly depending on predefined states (e.g beta, paid user). There is a UI for toggling the relation (feature matrix) between features and states.

![Image of UI] (http://i.imgur.com/FC8zrvC.png)

Terms:

feature: Define a feature

state: Define a state (beta, paid user, etc...)

Usage

1) Install the Gem

Add to your Gemfile:

  gem 'feature_toggle', github: 'tienle/feature_toggle'

2) Configuration

Mount the feature management page to routes.rb

  mount FeatureToggle::Engine => "/feature_toggle"

Add an "feature_toggle.rb" initializer

Setup the feature toggle page

  FeatureToggle.setup do |config|
    config.layout = 'admin'
    config.authentication_method = :authenticate_admin!
  end

Describe the different features and states

  FeatureToggle.define do
    feature :employment_settings do
      desc "Employment settings"
    end

    feature :employee_file do
      desc "Access employee file"

      feature :create
      feature :destroy
    end

    state :premium do
      desc "Premium plan"
      value { current_user.premium? }
    end

    state :free do
      desc "Trial user"
      value { current_user.free? }
    end
  end

3) Usage

Include this mixins into your application_controller.rb

class ApplicationController < ActionController::Base
  include FeatureToggle::Controller
end

From the view (eg. Haml)

  - if feature? :employee_file
    = render 'employee_file_partial'

Or

FeatureToggle.on?(:employee_file, state_context)

With state_context is the self binding for state's value block.

So, the feature will be enabled if we have turned on it for one of the states that meet the value condition.

From the controller:

  class EmployeesController < ApplicationController
    require_feature! :employee_file
  end

It will raise an exception FeatureToggle::NotAuthorizedError if there are no states matched.

You could toggle feature programmatically by:

  FeatureToggle::Feature.create(feature: 'employee_file', state: 'premium', enable: true)

Happy coding!


This project rocks and uses MIT-LICENSE.