From 63d7337228f04a2cb9d743e3ca0115aaca9619fe Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Thu, 25 Jan 2024 15:55:49 +0000 Subject: [PATCH] Initial commit --- MIT-LICENSE | 20 ++++++ README.md | 68 ++++++++++++++++++ flaggle_rock-0.1.0.gem | Bin 0 -> 6144 bytes flaggle_rock.gemspec | 11 +++ lib/flaggle_rock.rb | 49 +++++++++++++ .../flaggle_rock/install/install_generator.rb | 21 ++++++ .../install/templates/create_feature_flags.rb | 10 +++ 7 files changed, 179 insertions(+) create mode 100644 MIT-LICENSE create mode 100644 README.md create mode 100644 flaggle_rock-0.1.0.gem create mode 100644 flaggle_rock.gemspec create mode 100644 lib/flaggle_rock.rb create mode 100644 lib/generators/flaggle_rock/install/install_generator.rb create mode 100644 lib/generators/flaggle_rock/install/templates/create_feature_flags.rb diff --git a/MIT-LICENSE b/MIT-LICENSE new file mode 100644 index 0000000..a306f55 --- /dev/null +++ b/MIT-LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2023 David Heinemeier Hansson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7e51b58 --- /dev/null +++ b/README.md @@ -0,0 +1,68 @@ +# Flaggle Rock + +[View on RubyGems](https://rubygems.org/gems/flaggle_rock) + +Flaggle Rock is a simple feature flagging gem for use with Ruby on Rails applications. + +It is designed for easily hiding features from end users to help enable a fast-moving +CI workflow. It currently does not aim to support more advanced features such as A/B +testing. + +## Installation + +Add Flaggle Rock to your Gemfile: + +```ruby +gem "flaggle_rock" +``` + +And install + +```sh +bundle install +``` + +Generate the migrations, and run them to add feature flags to your database: +```sh +bundle exec rails generate flaggle_rock:install +bundle exec rails db:migrate +``` + +## Usage + +All flags are _off by default_. There is no need to explicitly create a new flag—turning +it on will do this. + +To enable/disable a flag: +```ruby +Rock.on(:flag_name) +Rock.off(:flag_name) +``` +To check whether a flag is on: +```ruby +Rock.on?(:flag_name) +Rock.off?(:flag_name) +``` + +To remove a flag which is no longer used: +```ruby +Rock.delete(:flag_name) +``` + +To remove all disabled flags: +```ruby +Rock.delete_all_disabled +``` + +## Future + +Goals with Flaggle Rock include the creation of a web UI for easily administering flags. + +## Compatibility + +Flaggle Rock has been tested with Rails 7 and PostgreSQL 11, but should work with older versions of +Rails and other database engines. + +## License + +Flaggle Rock is released under the [MIT License](MIT-LICENSE.md). diff --git a/flaggle_rock-0.1.0.gem b/flaggle_rock-0.1.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..192df8238e5500152d32cf73eee7ba5319d2311a GIT binary patch literal 6144 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 WCn