featury 1.0.0.rc24 → 1.0.0.rc26

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: 0c1b72f8275c2ade5b4e3716b598937fa8c4f243dfa142c17c9cc675523b9f70
4
- data.tar.gz: 6112766f0f732d53a04b807e6f5af30f5125077a41a5ca043f43c0145bbba708
3
+ metadata.gz: b1642cef21dfc3b87b5dfc732bb40732d9b9ee44dcdc02181fbf51c2c999064f
4
+ data.tar.gz: c2f14a97ff82cbb66bd2c4408ed75af2fe3df5e2a3e7b0a3a9d3021539cf210c
5
5
  SHA512:
6
- metadata.gz: 4d3f21be19cfb9090f9c79ac9ce52d060eaea14ea014384ed2a3f1911f962058d58e87e796c36a28575b24841bf610dd0c2565d16f7a3c0a73a7343f6273b866
7
- data.tar.gz: 38df69d5f0c94cef5213279b39966c79c006dc1ddff5ccb54f715e51b07c4e42bd2d84858659e3273fe3ddf48efcbd08d244afa40908b5fbefb8a0d1bfb3cd58
6
+ metadata.gz: 6e3f684c65f99369730b5337a0c77d2dbba512c9b61ac75040a27f4d4c2fd72e5d945a298057a1fb72f230bee033c2a61f5a75fb94a864fa8bc17685c9633ec8
7
+ data.tar.gz: ad69be864c5751a156b629dc658d8e81ff3d0c3c5f4eb31fdb56ac8d2aa7a6908cf5420927355b8f565dfae678d4b55ceffda9805b6fa87a3ef270d1c495dbe7
data/README.md CHANGED
@@ -124,6 +124,12 @@ If a resource needs to be conveyed as a feature flag option, utilize the `option
124
124
  resource :user, type: User, option: true
125
125
  ```
126
126
 
127
+ To call a feature without passing a resource, use the `required: false` option (e.g., for managing the global state of the feature).
128
+
129
+ ```ruby
130
+ resource :user, type: User, option: true, required: false
131
+ ```
132
+
127
133
  To transfer a resource to a nested group, utilize the `nested` option:
128
134
 
129
135
  ```ruby
@@ -4,6 +4,7 @@ module Featury
4
4
  module Actions
5
5
  class Collection
6
6
  extend Forwardable
7
+
7
8
  def_delegators :@collection, :<<, :filter, :each, :map, :merge, :find
8
9
 
9
10
  def initialize(collection = Set.new)
@@ -21,12 +21,12 @@ module Featury
21
21
  @model_class.const_set(Builder::SERVICE_CLASS_NAME, class_sample)
22
22
  end
23
23
 
24
- def create_service_class # rubocop:disable Metrics/MethodLength, Metrics/AbcSize,Metrics/CyclomaticComplexity
24
+ def create_service_class # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
25
25
  collection_of_resources = @collection_of_resources
26
26
 
27
27
  Class.new(Featury::Service::Builder) do
28
28
  collection_of_resources.each do |resource|
29
- input resource.name, **resource.options
29
+ input resource.name, required: resource.required?, **resource.options
30
30
  end
31
31
 
32
32
  input :action, type: Featury::Actions::Action
@@ -75,19 +75,23 @@ module Featury
75
75
  end
76
76
  end
77
77
 
78
- def features_are_true
78
+ def features_are_true # rubocop:disable Metrics/AbcSize
79
79
  options = inputs.collection_of_resources.only_option.to_h do |resource|
80
80
  [resource.name, inputs.public_send(resource.name)]
81
81
  end
82
82
 
83
+ options = options.reject { |_, v| v.blank? }
84
+
83
85
  inputs.action.block.call(features: inputs.collection_of_features.names, **options)
84
86
  end
85
87
 
86
- def groups_are_true
88
+ def groups_are_true # rubocop:disable Metrics/AbcSize
87
89
  arguments = inputs.collection_of_resources.only_nested.to_h do |resource|
88
90
  [resource.name, inputs.public_send(resource.name)]
89
91
  end
90
92
 
93
+ arguments = arguments.reject { |_, v| v.blank? }
94
+
91
95
  inputs.collection_of_groups.all? do |group|
92
96
  group.group_class.public_send(inputs.action.name, **arguments)
93
97
  end
@@ -4,6 +4,7 @@ module Featury
4
4
  module Callbacks
5
5
  class Collection
6
6
  extend Forwardable
7
+
7
8
  def_delegators :@collection, :<<, :filter, :each, :map, :merge, :find
8
9
 
9
10
  def initialize(collection = Set.new)
@@ -4,6 +4,7 @@ module Featury
4
4
  module Conditions
5
5
  class Collection
6
6
  extend Forwardable
7
+
7
8
  def_delegators :@collection, :<<, :each, :merge, :all?
8
9
 
9
10
  def initialize(collection = Set.new)
@@ -4,6 +4,7 @@ module Featury
4
4
  module Features
5
5
  class Collection
6
6
  extend Forwardable
7
+
7
8
  def_delegators :@collection, :<<, :each, :map, :merge, :to_a, :empty?
8
9
 
9
10
  def initialize(collection = Set.new)
@@ -4,6 +4,7 @@ module Featury
4
4
  module Groups
5
5
  class Collection
6
6
  extend Forwardable
7
+
7
8
  def_delegators :@collection, :<<, :each, :map, :flat_map, :filter, :to_h, :merge, :to_a, :all?, :empty?
8
9
 
9
10
  def initialize(collection = Set.new)
@@ -4,6 +4,7 @@ module Featury
4
4
  module Resources
5
5
  class Collection
6
6
  extend Forwardable
7
+
7
8
  def_delegators :@collection, :<<, :each, :map, :filter, :to_h, :merge
8
9
 
9
10
  def initialize(collection = Set.new)
@@ -8,8 +8,9 @@ module Featury
8
8
  def initialize(name, **options)
9
9
  @name = name
10
10
 
11
- @nested = options.delete(:nested) || false
12
- @option = options.delete(:option) || false
11
+ @nested = options.delete(:nested) { false }
12
+ @option = options.delete(:option) { false }
13
+ @required = options.delete(:required) { true }
13
14
 
14
15
  @options = options
15
16
  end
@@ -21,6 +22,10 @@ module Featury
21
22
  def option?
22
23
  @option
23
24
  end
25
+
26
+ def required?
27
+ @required
28
+ end
24
29
  end
25
30
  end
26
31
  end
@@ -5,7 +5,7 @@ module Featury
5
5
  MAJOR = 1
6
6
  MINOR = 0
7
7
  PATCH = 0
8
- PRE = "rc24"
8
+ PRE = "rc26"
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.rc24
4
+ version: 1.0.0.rc26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Sokolov
@@ -49,14 +49,14 @@ dependencies:
49
49
  requirements:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: '2.15'
52
+ version: '2.16'
53
53
  type: :runtime
54
54
  prerelease: false
55
55
  version_requirements: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: '2.15'
59
+ version: '2.16'
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: zeitwerk
62
62
  requirement: !ruby/object:Gem::Requirement
@@ -212,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
212
  - !ruby/object:Gem::Version
213
213
  version: '0'
214
214
  requirements: []
215
- rubygems_version: 3.7.0
215
+ rubygems_version: 3.7.1
216
216
  specification_version: 4
217
217
  summary: A set of tools for building reliable services of any complexity
218
218
  test_files: []