this_feature 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,41 @@
1
+ # ThisFeature - Flipper Adapter
2
+
3
+ ## Installation
4
+
5
+ ```ruby
6
+ gem 'this_feature-adapters-flipper
7
+ ```
8
+
9
+ ## Configuration
10
+
11
+ ```ruby
12
+ # config/initializers/this_feature.rb
13
+ require 'this_feature'
14
+ require 'this_feature/adapters/flipper'
15
+
16
+ ThisFeature.configure do |config|
17
+ adapter = ThisFeature::Adapters::Flipper.new
18
+ config.adapters = [adapter]
19
+ config.default_adapter = adapter
20
+ end
21
+ ```
22
+
23
+ An existing Flipper client can be optionally passed to the initializer:
24
+
25
+ ```
26
+ ThisFeature::Adapters::Flipper.new(client: my_existing_client)
27
+ ```
28
+
29
+
30
+ ## API
31
+
32
+ The Flipper adapter supports the public API of `ThisFeature`.
33
+
34
+ The `context` argument is supported, but not `data`.
35
+
36
+ Read the following notes as well:
37
+
38
+ - **on?** / **off?**: Under the hood, calls `flipper_id` method on the `context`, if one was given.
39
+ - **control?** / **present?**: Flipper doesn't have a concept of "control", so we just implement it as `!present?`
40
+
41
+ It is possible to support `on!` and `off!` from Flipper but that's not implemented yet.
@@ -0,0 +1,65 @@
1
+ # ThisFeature - Memory Adapter
2
+
3
+ ## Installation
4
+
5
+ This adapter is included with the core gem:
6
+
7
+ ```ruby
8
+ gem 'this_feature
9
+ ```
10
+
11
+ ## Configuration
12
+
13
+ ```ruby
14
+ # config/initializers/this_feature.rb
15
+ require 'this_feature'
16
+ require 'this_feature/adapters/memory'
17
+
18
+ ThisFeature.configure do |config|
19
+ adapter = ThisFeature::Adapters::Memory.new
20
+ config.adapters = [adapter]
21
+ config.default_adapter = adapter
22
+ end
23
+ ```
24
+
25
+ The initializer takes an optional `context_key_method` argument. This is only relevant when using `context` -
26
+ it specifies a method name which should be called on the context object to determine its identity.
27
+ For example:
28
+
29
+ ```
30
+ # Say you have this method which you want to use as the "identity" of a context object:
31
+ module FeatureFlaggable
32
+ def this_feature_id
33
+ "#{self.class}-#{self.id}"
34
+ end
35
+ end
36
+
37
+ # Then you would refer to it like so in the initializer:
38
+ ThisFeature::Adapters::Memory.new(context_key_method: :this_feature_id)
39
+ ```
40
+
41
+ If this option is ommitted, then the context object uses its `self` as its "identity".
42
+
43
+ ## API
44
+
45
+ The Memory adapter supports the public API of `ThisFeature`.
46
+
47
+ The `context` argument is supported, but not `data`.
48
+
49
+ Read the following notes as well:
50
+
51
+ - **on?** / **off?**: Under the hood, calls `flipper_id` method on the `context`, if one was given.
52
+
53
+ - **control?** is not yet implemented
54
+
55
+ We also support two additional methods here that aren't present on the main adapter yet:
56
+
57
+ - **on!** / **off!**
58
+
59
+ Usage example of these:
60
+
61
+ ```
62
+ # If you have configured the in-memory adapter as the default
63
+ ThisFeature.default_adapter.on!(:flag_name, context: user) # with context
64
+ ThisFeature.default_adapter.off!(:flag_name) # without context
65
+ ```
File without changes
@@ -0,0 +1 @@
1
+ todo
@@ -34,4 +34,8 @@ class ThisFeature
34
34
  def self.adapters
35
35
  configuration.adapters
36
36
  end
37
+
38
+ def self.test_adapter
39
+ configuration.test_adapter
40
+ end
37
41
  end
@@ -1,11 +1,6 @@
1
1
  class ThisFeature
2
2
  module Adapters
3
3
  class Base
4
-
5
- def setup
6
- raise UnimplementedError.new(self, __method__)
7
- end
8
-
9
4
  def present?(flag_name)
10
5
  raise UnimplementedError.new(self, __method__)
11
6
  end
@@ -1,7 +1,6 @@
1
-
2
1
  class ThisFeature
3
2
  class Configuration
4
- attr_writer :adapters, :default_adapter
3
+ attr_writer :adapters, :default_adapter, :test_adapter
5
4
 
6
5
  def init
7
6
  validate_adapters!
@@ -20,5 +19,9 @@ class ThisFeature
20
19
  def default_adapter
21
20
  @default_adapter ||= adapters.first
22
21
  end
22
+
23
+ def test_adapter
24
+ @test_adapter ||= Adapters::Memory.new
25
+ end
23
26
  end
24
27
  end
@@ -1,3 +1,3 @@
1
1
  class ThisFeature
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: this_feature
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Pleaner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-11 00:00:00.000000000 Z
11
+ date: 2020-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -127,6 +127,11 @@ files:
127
127
  - Rakefile
128
128
  - bin/console
129
129
  - bin/setup
130
+ - docs/flipper.html
131
+ - docs/flipper.md
132
+ - docs/memory.md
133
+ - docs/splitio.md
134
+ - docs/writing_an_adapter.md
130
135
  - lib/this_feature.rb
131
136
  - lib/this_feature/adapters.rb
132
137
  - lib/this_feature/adapters/base.rb
@@ -145,7 +150,7 @@ licenses: []
145
150
  metadata:
146
151
  homepage_uri: https://github.com/hoverinc/this_feature
147
152
  source_code_uri: https://github.com/hoverinc/this_feature
148
- post_install_message:
153
+ post_install_message:
149
154
  rdoc_options: []
150
155
  require_paths:
151
156
  - lib
@@ -160,8 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
165
  - !ruby/object:Gem::Version
161
166
  version: '0'
162
167
  requirements: []
163
- rubygems_version: 3.1.2
164
- signing_key:
168
+ rubygems_version: 3.0.3
169
+ signing_key:
165
170
  specification_version: 4
166
171
  summary: Feature flag control
167
172
  test_files: []