simple_feature_flags 1.1.1 → 1.3.0

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: 64a488fbf34e74246e7256a469d99a257b6f20171f9e0f57c0f5186388937cc0
4
- data.tar.gz: 224dde8807aaf6aec346641e05106de0de0a88b3f0ba388e05bc51af93270664
3
+ metadata.gz: a84d6f21fb85142181cf9396572ffb07ba4cb6d1573064c3ea984ab339371ddc
4
+ data.tar.gz: ca84facde85a613ceb6ecd54a88139a5ff9996838d8463d607e2e8ef93a1ce8e
5
5
  SHA512:
6
- metadata.gz: 4596a45fc389a9235700db3b76260735f8a2ce71b0eb5bec19d8efb621ed842dc149c86246ab4701a5ee3d6205d99eb1f175a294e65ec028c8dc81373141391d
7
- data.tar.gz: a938f338faf71ff1048b88ca280f5800d530298873398840ced76231cad1a57501cfd58a424888769074e1a80657f758f5796403f7dda526581ca12a082752d1
6
+ metadata.gz: f74fb3b884d0523845038311ce962c5d41e24715f78f7580d1e45889c74eba9df1acd02ce37a6d6ac4e51208fb1d0b6dca0d76a097d90ebf8b367dbb46296996
7
+ data.tar.gz: e554a51da1a596189a62857ac4a4bf18ffac37578fece7680f5455222380763e4d1c55a952107b262955533cdfac8ebc7a0211f2c2378dad49d8768c7170da23
@@ -0,0 +1,74 @@
1
+ name: CI Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ 'main', 'develop' ]
6
+ pull_request:
7
+ branches: [ 'main', 'develop' ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ services:
13
+ # Label used to access the service container
14
+ redis:
15
+ # Docker Hub image
16
+ image: redis
17
+ # Set health checks to wait until redis has started
18
+ options: >-
19
+ --health-cmd "redis-cli ping"
20
+ --health-interval 10s
21
+ --health-timeout 5s
22
+ --health-retries 5
23
+ ports:
24
+ # Maps port 6379 on service container to the host
25
+ - 6379:6379
26
+ env:
27
+ CI: true
28
+ # The hostname used to communicate with the Redis service container
29
+ REDIS_HOST: localhost
30
+ # The default Redis port
31
+ REDIS_PORT: 6379
32
+ strategy:
33
+ matrix:
34
+ ruby-version: ['3.1', '3.2', '3.3']
35
+ steps:
36
+ - name: Checkout code
37
+ uses: actions/checkout@v3
38
+ - name: Install Ruby and gems
39
+ uses: ruby/setup-ruby@v1
40
+ with:
41
+ ruby-version: ${{ matrix.ruby-version }}
42
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
43
+ - name: Run unit tests
44
+ run: bundle exec rake test
45
+
46
+ lint:
47
+ runs-on: ubuntu-latest
48
+ env:
49
+ CI: true
50
+ steps:
51
+ - name: Checkout code
52
+ uses: actions/checkout@v3
53
+ - name: Install Ruby and gems
54
+ uses: ruby/setup-ruby@v1
55
+ with:
56
+ ruby-version: '3.3'
57
+ bundler-cache: true
58
+ - name: Lint Ruby files
59
+ run: bundle exec rubocop --parallel
60
+
61
+ typecheck:
62
+ runs-on: ubuntu-latest
63
+ env:
64
+ CI: true
65
+ steps:
66
+ - name: Checkout code
67
+ uses: actions/checkout@v3
68
+ - name: Install Ruby and gems
69
+ uses: ruby/setup-ruby@v1
70
+ with:
71
+ ruby-version: '3.3'
72
+ bundler-cache: true
73
+ - name: Typecheck Ruby files
74
+ run: bundle exec srb tc
data/.gitignore CHANGED
@@ -6,5 +6,6 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /.vscode
9
10
  .byebug_history
10
11
  my_examples
data/.rubocop.yml CHANGED
@@ -1,78 +1,32 @@
1
- Style/StringLiterals:
2
- Enabled: false
3
-
4
- Style/SingleArgumentDig:
5
- Enabled: false
6
-
7
- Layout/LineLength:
8
- Enabled: false
1
+ inherit_gem:
2
+ rubocop-espago: sorbet.yml
9
3
 
10
- Style/Documentation:
4
+ Metrics/MethodLength:
11
5
  Enabled: false
12
6
 
13
- Style/ClassAndModuleChildren:
14
- Enabled: false
15
-
16
- Style/MethodCallWithArgsParentheses:
17
- Enabled: false
18
-
19
- Style/ModuleFunction:
20
- EnforcedStyle: 'extend_self'
21
-
22
- Style/MissingElse:
7
+ Sorbet/RedundantExtendTSig:
23
8
  Enabled: false
24
9
 
25
- Lint/NumberConversion:
10
+ Sorbet/HasSigil:
26
11
  Enabled: false
27
12
 
28
- Lint/ConstantResolution:
13
+ Metrics/ClassLength:
29
14
  Enabled: false
30
15
 
31
- Style/RescueStandardError:
32
- Enabled: false
33
-
34
- Style/FormatStringToken:
35
- Enabled: false
36
-
37
- Style/FormatString:
38
- Enabled: false
39
-
40
- Style/DocumentationMethod:
41
- Enabled: false
42
-
43
- Style/Copyright:
44
- Enabled: false
45
-
46
- Style/StringHashKeys:
47
- Enabled: false
48
-
49
- Style/InlineComment:
50
- Enabled: false
51
-
52
- Layout/FirstHashElementLineBreak:
53
- Enabled: false
54
-
55
- Layout/FirstMethodArgumentLineBreak:
56
- Enabled: false
57
-
58
- Style/ConstantVisibility:
59
- Enabled: false
60
-
61
- Layout/FirstArrayElementLineBreak:
62
- Enabled: false
63
-
64
- Layout/MultilineMethodArgumentLineBreaks:
65
- Enabled: false
16
+ Sorbet/EnforceSignatures:
17
+ Exclude:
18
+ - 'bin/*'
19
+ - 'test/**/*'
66
20
 
67
- Layout/MultilineAssignmentLayout:
21
+ Sorbet/ForbidTUnsafe:
68
22
  Enabled: false
69
23
 
70
- Bundler/GemComment:
24
+ Naming/BlockForwarding:
71
25
  Enabled: false
72
26
 
73
27
  AllCops:
28
+ TargetRubyVersion: 3.1.0
74
29
  EnabledByDefault: true
75
30
  Exclude:
76
31
  - 'bin/*'
77
- - 'spec/**/*'
78
- - 'test/**/*'
32
+ - 'sorbet/**/*'
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.4
1
+ 3.3.6
@@ -13,5 +13,9 @@
13
13
  "optparse",
14
14
  "solargraph",
15
15
  "testtask"
16
- ]
16
+ ],
17
+ "sorbet.enabled": true,
18
+ "[ruby]": {
19
+ "editor.defaultFormatter": "Shopify.ruby-lsp"
20
+ }
17
21
  }
data/Gemfile CHANGED
@@ -1,6 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in simple_feature_flags.gemspec
6
6
  gemspec
7
+
8
+ gem 'byebug', '~> 11.1' # debugger
9
+ gem 'minitest', '~> 5.0' # test library
10
+ gem 'rake', '~> 13.0' # automation tasks
11
+ gem 'redis', '~> 5.3' # redis client
12
+ gem 'redis-namespace', '~> 1.11' # namespaces for redis
13
+ gem 'rubocop-espago', '~> 1.0' # ruby linter
14
+ gem 'rubocop-sorbet', '~> 0.8' # rubocop for sorbet
15
+ gem 'sorbet', '>= 0.5' # static typechecker
16
+ gem 'tapioca', '> 0.13' # RBI generator for sorbet
data/Gemfile.lock CHANGED
@@ -1,89 +1,101 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_feature_flags (1.1.1)
4
+ simple_feature_flags (1.3.0)
5
+ sorbet-runtime (> 0.5)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
10
  ast (2.4.2)
10
- backport (1.2.0)
11
- benchmark (0.1.1)
12
- bundler-audit (0.8.0)
13
- bundler (>= 1.2.0, < 3)
14
- thor (~> 1.0)
15
11
  byebug (11.1.3)
16
- diff-lcs (1.4.4)
17
- e2mmap (0.1.0)
18
- jaro_winkler (1.5.4)
19
- kramdown (2.3.1)
20
- rexml
21
- kramdown-parser-gfm (1.1.0)
22
- kramdown (~> 2.0)
23
- mini_portile2 (2.6.1)
24
- minitest (5.14.4)
25
- nokogiri (1.12.3)
26
- mini_portile2 (~> 2.6.1)
27
- racc (~> 1.4)
28
- parallel (1.20.1)
29
- parser (3.0.2.0)
12
+ connection_pool (2.4.1)
13
+ erubi (1.13.0)
14
+ json (2.8.2)
15
+ language_server-protocol (3.17.0.3)
16
+ minitest (5.25.1)
17
+ netrc (0.11.0)
18
+ parallel (1.26.3)
19
+ parser (3.3.6.0)
30
20
  ast (~> 2.4.1)
31
- racc (1.5.2)
32
- rainbow (3.0.0)
33
- rake (12.3.3)
34
- redis (4.4.0)
35
- redis-namespace (1.8.1)
36
- redis (>= 3.0.4)
37
- regexp_parser (2.1.1)
38
- reverse_markdown (2.0.0)
39
- nokogiri
40
- rexml (3.2.5)
41
- rubocop (1.19.0)
21
+ racc
22
+ prism (1.2.0)
23
+ racc (1.8.1)
24
+ rainbow (3.1.1)
25
+ rake (13.2.1)
26
+ rbi (0.2.1)
27
+ prism (~> 1.0)
28
+ sorbet-runtime (>= 0.5.9204)
29
+ redis (5.3.0)
30
+ redis-client (>= 0.22.0)
31
+ redis-client (0.22.2)
32
+ connection_pool
33
+ redis-namespace (1.11.0)
34
+ redis (>= 4)
35
+ regexp_parser (2.9.2)
36
+ rubocop (1.68.0)
37
+ json (~> 2.3)
38
+ language_server-protocol (>= 3.17.0)
42
39
  parallel (~> 1.10)
43
- parser (>= 3.0.0.0)
40
+ parser (>= 3.3.0.2)
44
41
  rainbow (>= 2.2.2, < 4.0)
45
- regexp_parser (>= 1.8, < 3.0)
46
- rexml
47
- rubocop-ast (>= 1.9.1, < 2.0)
42
+ regexp_parser (>= 2.4, < 3.0)
43
+ rubocop-ast (>= 1.32.2, < 2.0)
48
44
  ruby-progressbar (~> 1.7)
49
- unicode-display_width (>= 1.4.0, < 3.0)
50
- rubocop-ast (1.9.1)
51
- parser (>= 3.0.1.1)
52
- ruby-progressbar (1.11.0)
53
- solargraph (0.43.0)
54
- backport (~> 1.2)
55
- benchmark
56
- bundler (>= 1.17.2)
57
- diff-lcs (~> 1.4)
58
- e2mmap
59
- jaro_winkler (~> 1.5)
60
- kramdown (~> 2.3)
61
- kramdown-parser-gfm (~> 1.1)
62
- parser (~> 3.0)
63
- reverse_markdown (>= 1.0.5, < 3)
64
- rubocop (>= 0.52)
65
- thor (~> 1.0)
66
- tilt (~> 2.0)
67
- yard (~> 0.9, >= 0.9.24)
68
- thor (1.1.0)
69
- tilt (2.0.10)
70
- unicode-display_width (2.0.0)
71
- yard (0.9.26)
45
+ unicode-display_width (>= 2.4.0, < 3.0)
46
+ rubocop-ast (1.36.1)
47
+ parser (>= 3.3.1.0)
48
+ rubocop-espago (1.1.5)
49
+ rubocop
50
+ rubocop-sorbet (0.8.7)
51
+ rubocop (>= 1)
52
+ ruby-progressbar (1.13.0)
53
+ sorbet (0.5.11647)
54
+ sorbet-static (= 0.5.11647)
55
+ sorbet-runtime (0.5.11647)
56
+ sorbet-static (0.5.11647-aarch64-linux)
57
+ sorbet-static (0.5.11647-universal-darwin)
58
+ sorbet-static (0.5.11647-x86_64-linux)
59
+ sorbet-static-and-runtime (0.5.11647)
60
+ sorbet (= 0.5.11647)
61
+ sorbet-runtime (= 0.5.11647)
62
+ spoom (1.5.0)
63
+ erubi (>= 1.10.0)
64
+ prism (>= 0.28.0)
65
+ sorbet-static-and-runtime (>= 0.5.10187)
66
+ thor (>= 0.19.2)
67
+ tapioca (0.16.4)
68
+ bundler (>= 2.2.25)
69
+ netrc (>= 0.11.0)
70
+ parallel (>= 1.21.0)
71
+ rbi (~> 0.2)
72
+ sorbet-static-and-runtime (>= 0.5.11087)
73
+ spoom (>= 1.2.0)
74
+ thor (>= 1.2.0)
75
+ yard-sorbet
76
+ thor (1.3.2)
77
+ unicode-display_width (2.6.0)
78
+ yard (0.9.37)
79
+ yard-sorbet (0.9.0)
80
+ sorbet-runtime
81
+ yard
72
82
 
73
83
  PLATFORMS
74
- ruby
84
+ aarch64-linux
85
+ universal-darwin
86
+ x86_64-linux
75
87
 
76
88
  DEPENDENCIES
77
- bundler
78
- bundler-audit
79
- byebug
89
+ byebug (~> 11.1)
80
90
  minitest (~> 5.0)
81
- rake (~> 12.0)
82
- redis
83
- redis-namespace
84
- rubocop
91
+ rake (~> 13.0)
92
+ redis (~> 5.3)
93
+ redis-namespace (~> 1.11)
94
+ rubocop-espago (~> 1.0)
95
+ rubocop-sorbet (~> 0.8)
85
96
  simple_feature_flags!
86
- solargraph
97
+ sorbet (>= 0.5)
98
+ tapioca (> 0.13)
87
99
 
88
100
  BUNDLED WITH
89
- 2.1.4
101
+ 2.5.22
data/README.md CHANGED
@@ -136,11 +136,19 @@ FEATURE_FLAGS.active?(:feature_name) #=> false
136
136
  FEATURE_FLAGS.active_globally?(:feature_name) #=> false
137
137
  FEATURE_FLAGS.active_partially?(:feature_name) #=> false
138
138
 
139
+ FEATURE_FLAGS.inactive?(:feature_name) #=> true
140
+ FEATURE_FLAGS.inactive_globally?(:feature_name) #=> true
141
+ FEATURE_FLAGS.inactive_partially?(:feature_name) #=> true
142
+
139
143
  FEATURE_FLAGS.activate(:feature_name) # or FEATURE_FLAGS.activate_globally(:feature_name)
140
144
 
141
145
  FEATURE_FLAGS.active?(:feature_name) #=> true
142
146
  FEATURE_FLAGS.active_globally?(:feature_name) #=> true
143
147
  FEATURE_FLAGS.active_partially?(:feature_name) #=> false
148
+
149
+ FEATURE_FLAGS.inactive?(:feature_name) #=> false
150
+ FEATURE_FLAGS.inactive_globally?(:feature_name) #=> false
151
+ FEATURE_FLAGS.inactive_partially?(:feature_name) #=> true
144
152
  ```
145
153
 
146
154
  #### Deactivate a feature
@@ -149,10 +157,12 @@ Deactivates a feature in the global scope
149
157
 
150
158
  ```ruby
151
159
  FEATURE_FLAGS.active?(:feature_name) #=> true
160
+ FEATURE_FLAGS.inactive?(:feature_name) #=> false
152
161
 
153
162
  FEATURE_FLAGS.deactivate(:feature_name)
154
163
 
155
164
  FEATURE_FLAGS.active?(:feature_name) #=> false
165
+ FEATURE_FLAGS.inactive?(:feature_name) #=> true
156
166
  ```
157
167
 
158
168
  #### Activate a feature for a particular record/object
@@ -162,11 +172,19 @@ FEATURE_FLAGS.active_partially?(:feature_name) #=> true
162
172
  FEATURE_FLAGS.active_for?(:feature_name, User.first) #=> false
163
173
  FEATURE_FLAGS.active_for?(:feature_name, User.last) #=> false
164
174
 
175
+ FEATURE_FLAGS.inactive_partially?(:feature_name) #=> false
176
+ FEATURE_FLAGS.inactive_for?(:feature_name, User.first) #=> true
177
+ FEATURE_FLAGS.inactive_for?(:feature_name, User.last) #=> true
178
+
165
179
  FEATURE_FLAGS.activate_for(:feature_name, User.first) #=> true
166
180
 
167
181
  FEATURE_FLAGS.active_partially?(:feature_name) #=> true
168
182
  FEATURE_FLAGS.active_for?(:feature_name, User.first) #=> true
169
183
  FEATURE_FLAGS.active_for?(:feature_name, User.last) #=> false
184
+
185
+ FEATURE_FLAGS.inactive_partially?(:feature_name) #=> false
186
+ FEATURE_FLAGS.inactive_for?(:feature_name, User.first) #=> false
187
+ FEATURE_FLAGS.inactive_for?(:feature_name, User.last) #=> true
170
188
  ```
171
189
 
172
190
  Note that the flag itself has to be active `partially` for any record/object specific settings to work.
@@ -299,6 +317,10 @@ if FEATURE_FLAGS.active?(:feature_name)
299
317
  number += 1
300
318
  end
301
319
 
320
+ if FEATURE_FLAGS.inactive?(:feature_name)
321
+ number += 1
322
+ end
323
+
302
324
  # or using a block
303
325
 
304
326
  # this code will run only when the :feature_name flag is active (either partially or globally)
@@ -306,27 +328,52 @@ FEATURE_FLAGS.when_active(:feature_name) do
306
328
  number += 1
307
329
  end
308
330
 
331
+ # the opposite
332
+ FEATURE_FLAGS.when_inactive(:feature_name) do
333
+ number += 1
334
+ end
335
+
309
336
  # this code will run only when the :feature_name flag is active globally
310
337
  FEATURE_FLAGS.when_active_globally(:feature_name) do
311
338
  number += 1
312
339
  end
313
340
 
341
+ # the opposite
342
+ FEATURE_FLAGS.when_inactive_globally(:feature_name) do
343
+ number += 1
344
+ end
345
+
314
346
  # this code will run only when the :feature_name flag is active partially (only for specific records/users)
315
347
  FEATURE_FLAGS.when_active_partially(:feature_name) do
316
348
  number += 1
317
349
  end
318
350
 
319
- # this code will run only if the :feature_name flag is active partially for the first User
351
+ # the opposite
352
+ FEATURE_FLAGS.when_inactive_partially(:feature_name) do
353
+ number += 1
354
+ end
355
+
356
+ # this code will run only if the :feature_name flag is active for the first User
320
357
  FEATURE_FLAGS.when_active_for(:feature_name, User.first) do
321
358
  number += 1
322
359
  end
323
360
 
361
+ # the opposite
362
+ FEATURE_FLAGS.when_inactive_for(:feature_name, User.first) do
363
+ number += 1
364
+ end
365
+
324
366
  # feature flags that don't exist will return false
325
367
  FEATURE_FLAGS.active?(:non_existant) #=> false
368
+ FEATURE_FLAGS.inactive?(:non_existant) #=> true
326
369
 
327
370
  if FEATURE_FLAGS.active_for?(:feature_name, User.first)
328
371
  number += 1
329
372
  end
373
+
374
+ if FEATURE_FLAGS.inactive_for?(:feature_name, User.first)
375
+ number += 1
376
+ end
330
377
  ```
331
378
 
332
379
  #### Adding feature flags
@@ -340,7 +387,7 @@ FEATURE_FLAGS.add(:feature_name, 'Description')
340
387
  FEATURE_FLAGS.active?(:feature_name) #=> false
341
388
  FEATURE_FLAGS.active_partially?(:feature_name) #=> false
342
389
  FEATURE_FLAGS.active_globally?(:feature_name) #=> false
343
- FEATURE_FLAGS.active_for?(:feature_active_partially, User.first) #=> false
390
+ FEATURE_FLAGS.active_for?(:feature_name, User.first) #=> false
344
391
 
345
392
  # add a new globally active flag
346
393
  FEATURE_FLAGS.add(:active_feature, 'Description', :globally)
@@ -370,6 +417,10 @@ FEATURE_FLAGS.remove(:feature_name)
370
417
  FEATURE_FLAGS.active?(:feature_name) #=> false
371
418
  FEATURE_FLAGS.active_partially?(:feature_name) #=> false
372
419
  FEATURE_FLAGS.active_globally?(:feature_name) #=> false
420
+
421
+ FEATURE_FLAGS.inactive?(:feature_name) #=> true
422
+ FEATURE_FLAGS.inactive_partially?(:feature_name) #=> true
423
+ FEATURE_FLAGS.inactive_globally?(:feature_name) #=> true
373
424
  ```
374
425
 
375
426
 
data/Rakefile CHANGED
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
4
- require "rake/testtask"
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
5
 
6
6
  Rake::TestTask.new(:test) do |t|
7
- t.libs << "test"
8
- t.libs << "lib"
9
- t.test_files = FileList["test/**/*_test.rb"]
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.test_files = FileList['test/**/*_test.rb']
10
10
  end
11
11
 
12
12
  task default: :test
data/bin/tapioca ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'tapioca' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
+
13
+ bundle_binstub = File.expand_path("bundle", __dir__)
14
+
15
+ if File.file?(bundle_binstub)
16
+ if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
17
+ load(bundle_binstub)
18
+ else
19
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
+ end
22
+ end
23
+
24
+ require "rubygems"
25
+ require "bundler/setup"
26
+
27
+ load Gem.bin_path("tapioca", "tapioca")
data/bin/test ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle exec rubocop --parallel --color
7
+ bundle exec srb tc
8
+ bundle exec rake test
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Redis has 16 DBs (0 to 15)
3
4
 
4
5
  FEATURE_FLAGS = if ::Rails.env.test?
5
6
  # Use RamStorage in tests to make them faster
6
- ::SimpleFeatureFlags::RamStorage.new("#{::Rails.root.to_s}/config/simple_feature_flags.yml")
7
+ ::SimpleFeatureFlags::RamStorage.new("#{::Rails.root}/config/simple_feature_flags.yml")
7
8
  else
8
- redis = ::Redis.new(host: '127.0.0.1', port: 6379, db: 0)
9
+ redis = ::Redis.new(host: '127.0.0.1', port: 6379, db: 0) # rubocop:disable Style/IpAddresses
9
10
  # We recommend using the `redis-namespace` gem to avoid key conflicts with Sidekiq or Resque
10
11
  # redis = ::Redis::Namespace.new(:simple_feature_flags, redis: redis)
11
12
 
12
- ::SimpleFeatureFlags::RedisStorage.new(redis, "#{::Rails.root.to_s}/config/simple_feature_flags.yml")
13
+ ::SimpleFeatureFlags::RedisStorage.new(redis, "#{::Rails.root}/config/simple_feature_flags.yml")
13
14
  end