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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 491815dac66e84a9b49167bf18da77eeedc2d09678eaa2f9f0bff8d92412e3bd
4
- data.tar.gz: 6da5468fe1f8433300821b314d6f6290199b941020c8785c2b7c863692d26b99
3
+ metadata.gz: 746a97b6b6689e1ac4a1dd05217229576b5ee8151890f077390f9050a2d9dd39
4
+ data.tar.gz: 0bff11a8adb7f725b4832660e8f3b61d434869ee1df27e2d07c2e01967dc11c2
5
5
  SHA512:
6
- metadata.gz: bb45c8f5986cdbeb6c18aabdda320a58844c838eee932ed17f2db90493812d5c79ef4da5652e0f93f67d8f2b245c6c4f09c714c4be54a6bf55fd308a395ef323
7
- data.tar.gz: b7983574ee2e170fee966888b989cc9dd4603ccea54f479ef87325d1f1736766812041b45d806516466622f193f8c30dc935e0807afe04f655eb27211315daf0
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? do |features:, **options|
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? do |features:, **options|
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.features # Feature flags of the current class.
158
- info.groups # Feature flag groups of the current class.
159
- info.tree # Tree of feature flags from the current class.
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, :block
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
@@ -17,9 +17,10 @@ module Featury
17
17
 
18
18
  private
19
19
 
20
- def action(name)
20
+ def action(name, web: nil)
21
21
  collection_of_actions << Action.new(
22
22
  name,
23
+ web:,
23
24
  block: ->(features:, **options) { yield(features:, **options) }
24
25
  )
25
26
  end
@@ -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(
@@ -3,9 +3,33 @@
3
3
  module Featury
4
4
  module Info
5
5
  class Result
6
- attr_reader :features, :groups, :tree
6
+ class Actions
7
+ class Web
8
+ attr_reader :all,
9
+ :main
7
10
 
8
- def initialize(features:, groups:, tree:)
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
@@ -5,7 +5,7 @@ module Featury
5
5
  MAJOR = 1
6
6
  MINOR = 0
7
7
  PATCH = 0
8
- PRE = "rc17"
8
+ PRE = "rc18"
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join(".")
11
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: featury
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc17
4
+ version: 1.0.0.rc18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Sokolov