featury 1.0.0.rc17 → 1.0.0.rc18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +12 -7
 - data/lib/featury/actions/action.rb +13 -2
 - data/lib/featury/actions/collection.rb +9 -1
 - data/lib/featury/actions/dsl.rb +2 -1
 - data/lib/featury/info/dsl.rb +1 -0
 - data/lib/featury/info/result.rb +26 -2
 - data/lib/featury/version.rb +1 -1
 - metadata +1 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 746a97b6b6689e1ac4a1dd05217229576b5ee8151890f077390f9050a2d9dd39
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 0bff11a8adb7f725b4832660e8f3b61d434869ee1df27e2d07c2e01967dc11c2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9836aa3917bcafcf4648707baa4a71bdd1a99a73464b007ee9ee805ddacf4b08af6174350ef168131aac254b601b4ed7a6a7f0a1261ea67b3a6c1f8ee6bfd7ac
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: ba036730e1e6e51b1574d01591ade4941430308713e0e300ac0dc19e01951b7bc75222a0bb3536facfca3f9644394edf3f642c27c87fed1c6ab06399b52282af
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -40,22 +40,26 @@ In such a scenario, the base class could potentially be structured as follows: 
     | 
|
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
            ```ruby
         
     | 
| 
       42 
42 
     | 
    
         
             
            class ApplicationFeature < Featury::Base
         
     | 
| 
       43 
     | 
    
         
            -
              action :enabled 
     | 
| 
      
 43 
     | 
    
         
            +
              action :enabled?, web: :main do |features:, **options|
         
     | 
| 
       44 
44 
     | 
    
         
             
                features.all? { |feature| Flipper.enabled?(feature, *options.values) }
         
     | 
| 
       45 
45 
     | 
    
         
             
              end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
              action :disabled 
     | 
| 
      
 47 
     | 
    
         
            +
              action :disabled?, web: :use do |features:, **options|
         
     | 
| 
       48 
48 
     | 
    
         
             
                features.any? { |feature| !Flipper.enabled?(feature, *options.values) }
         
     | 
| 
       49 
49 
     | 
    
         
             
              end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
              action :enable do |features:, **options|
         
     | 
| 
      
 51 
     | 
    
         
            +
              action :enable, web: :use do |features:, **options|
         
     | 
| 
       52 
52 
     | 
    
         
             
                features.all? { |feature| Flipper.enable(feature, *options.values) }
         
     | 
| 
       53 
53 
     | 
    
         
             
              end
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
              action :disable do |features:, **options|
         
     | 
| 
      
 55 
     | 
    
         
            +
              action :disable, web: :use do |features:, **options|
         
     | 
| 
       56 
56 
     | 
    
         
             
                features.all? { |feature| Flipper.disable(feature, *options.values) }
         
     | 
| 
       57 
57 
     | 
    
         
             
              end
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
      
 59 
     | 
    
         
            +
              action :add do |features:, **options|
         
     | 
| 
      
 60 
     | 
    
         
            +
                features.all? { |feature| Flipper.add(feature, *options.values) }
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       59 
63 
     | 
    
         
             
              before do |action:, features:|
         
     | 
| 
       60 
64 
     | 
    
         
             
                Slack::API::Notify.call!(action:, features:)
         
     | 
| 
       61 
65 
     | 
    
         
             
              end
         
     | 
| 
         @@ -154,9 +158,10 @@ info = User::OnboardingFeature.info 
     | 
|
| 
       154 
158 
     | 
    
         
             
            ```
         
     | 
| 
       155 
159 
     | 
    
         | 
| 
       156 
160 
     | 
    
         
             
            ```ruby
         
     | 
| 
       157 
     | 
    
         
            -
            info. 
     | 
| 
       158 
     | 
    
         
            -
            info. 
     | 
| 
       159 
     | 
    
         
            -
            info. 
     | 
| 
      
 161 
     | 
    
         
            +
            info.actions      # Feature actions (all, web) of the current class.
         
     | 
| 
      
 162 
     | 
    
         
            +
            info.features     # Feature flags of the current class.
         
     | 
| 
      
 163 
     | 
    
         
            +
            info.groups       # Feature flag groups of the current class.
         
     | 
| 
      
 164 
     | 
    
         
            +
            info.tree         # Tree of feature flags from the current class.
         
     | 
| 
       160 
165 
     | 
    
         
             
            ```
         
     | 
| 
       161 
166 
     | 
    
         | 
| 
       162 
167 
     | 
    
         
             
            ## Contributing
         
     | 
| 
         @@ -3,12 +3,23 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Featury
         
     | 
| 
       4 
4 
     | 
    
         
             
              module Actions
         
     | 
| 
       5 
5 
     | 
    
         
             
                class Action
         
     | 
| 
       6 
     | 
    
         
            -
                  attr_reader :name, 
     | 
| 
      
 6 
     | 
    
         
            +
                  attr_reader :name,
         
     | 
| 
      
 7 
     | 
    
         
            +
                              :web,
         
     | 
| 
      
 8 
     | 
    
         
            +
                              :block
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                  def initialize(name, block:)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def initialize(name, web:, block:)
         
     | 
| 
       9 
11 
     | 
    
         
             
                    @name = name
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @web = web
         
     | 
| 
       10 
13 
     | 
    
         
             
                    @block = block
         
     | 
| 
       11 
14 
     | 
    
         
             
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def main_web?
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @web == :main
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def regular_web?
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @web == :use
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
       12 
23 
     | 
    
         
             
                end
         
     | 
| 
       13 
24 
     | 
    
         
             
              end
         
     | 
| 
       14 
25 
     | 
    
         
             
            end
         
     | 
| 
         @@ -4,16 +4,24 @@ module Featury 
     | 
|
| 
       4 
4 
     | 
    
         
             
              module Actions
         
     | 
| 
       5 
5 
     | 
    
         
             
                class Collection
         
     | 
| 
       6 
6 
     | 
    
         
             
                  extend Forwardable
         
     | 
| 
       7 
     | 
    
         
            -
                  def_delegators :@collection, :<<, :each, :map, :merge, :find
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def_delegators :@collection, :<<, :filter, :each, :map, :merge, :find
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                  def initialize(collection = Set.new)
         
     | 
| 
       10 
10 
     | 
    
         
             
                    @collection = collection
         
     | 
| 
       11 
11 
     | 
    
         
             
                  end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
      
 13 
     | 
    
         
            +
                  def for_web
         
     | 
| 
      
 14 
     | 
    
         
            +
                    Collection.new(filter { |action| action.main_web? || action.regular_web? })
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       13 
17 
     | 
    
         
             
                  def names
         
     | 
| 
       14 
18 
     | 
    
         
             
                    map(&:name)
         
     | 
| 
       15 
19 
     | 
    
         
             
                  end
         
     | 
| 
       16 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
                  def main_web
         
     | 
| 
      
 22 
     | 
    
         
            +
                    find(&:main_web?)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       17 
25 
     | 
    
         
             
                  def find_by(name:)
         
     | 
| 
       18 
26 
     | 
    
         
             
                    find { |action| action.name == name }
         
     | 
| 
       19 
27 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/featury/actions/dsl.rb
    CHANGED
    
    
    
        data/lib/featury/info/dsl.rb
    CHANGED
    
    | 
         @@ -10,6 +10,7 @@ module Featury 
     | 
|
| 
       10 
10 
     | 
    
         
             
                  module ClassMethods
         
     | 
| 
       11 
11 
     | 
    
         
             
                    def info
         
     | 
| 
       12 
12 
     | 
    
         
             
                      Featury::Info::Result.new(
         
     | 
| 
      
 13 
     | 
    
         
            +
                        actions: Featury::Info::Result::Actions.new(collection_of_actions),
         
     | 
| 
       13 
14 
     | 
    
         
             
                        features: collection_of_features.full_names,
         
     | 
| 
       14 
15 
     | 
    
         
             
                        groups: collection_of_groups.map(&:group),
         
     | 
| 
       15 
16 
     | 
    
         
             
                        tree: collection_of_features.full_names.concat(
         
     | 
    
        data/lib/featury/info/result.rb
    CHANGED
    
    | 
         @@ -3,9 +3,33 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Featury
         
     | 
| 
       4 
4 
     | 
    
         
             
              module Info
         
     | 
| 
       5 
5 
     | 
    
         
             
                class Result
         
     | 
| 
       6 
     | 
    
         
            -
                   
     | 
| 
      
 6 
     | 
    
         
            +
                  class Actions
         
     | 
| 
      
 7 
     | 
    
         
            +
                    class Web
         
     | 
| 
      
 8 
     | 
    
         
            +
                      attr_reader :all,
         
     | 
| 
      
 9 
     | 
    
         
            +
                                  :main
         
     | 
| 
       7 
10 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
                      def initialize(collection_of_actions)
         
     | 
| 
      
 12 
     | 
    
         
            +
                        @all = collection_of_actions.names
         
     | 
| 
      
 13 
     | 
    
         
            +
                        @main = collection_of_actions.main_web.name
         
     | 
| 
      
 14 
     | 
    
         
            +
                      end
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                    attr_reader :all,
         
     | 
| 
      
 18 
     | 
    
         
            +
                                :web
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    def initialize(collection_of_actions)
         
     | 
| 
      
 21 
     | 
    
         
            +
                      @all = collection_of_actions.names
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @web = Web.new(collection_of_actions.for_web)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  attr_reader :actions,
         
     | 
| 
      
 27 
     | 
    
         
            +
                              :features,
         
     | 
| 
      
 28 
     | 
    
         
            +
                              :groups,
         
     | 
| 
      
 29 
     | 
    
         
            +
                              :tree
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  def initialize(actions:, features:, groups:, tree:)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @actions = actions
         
     | 
| 
       9 
33 
     | 
    
         
             
                    @features = features
         
     | 
| 
       10 
34 
     | 
    
         
             
                    @groups = groups
         
     | 
| 
       11 
35 
     | 
    
         
             
                    @tree = tree
         
     | 
    
        data/lib/featury/version.rb
    CHANGED