flipper 0.16.0 → 1.4.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.
Files changed (285) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +1 -0
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/dependabot.yml +6 -0
  5. data/.github/workflows/ci.yml +110 -0
  6. data/.github/workflows/examples.yml +105 -0
  7. data/.github/workflows/release.yml +54 -0
  8. data/.rspec +1 -0
  9. data/CLAUDE.md +87 -0
  10. data/Changelog.md +2 -215
  11. data/Dockerfile +1 -1
  12. data/Gemfile +28 -20
  13. data/README.md +72 -62
  14. data/Rakefile +13 -3
  15. data/benchmark/enabled_ips.rb +10 -0
  16. data/benchmark/enabled_multiple_actors_ips.rb +20 -0
  17. data/benchmark/enabled_profile.rb +20 -0
  18. data/benchmark/instrumentation_ips.rb +21 -0
  19. data/benchmark/typecast_ips.rb +27 -0
  20. data/docker-compose.yml +37 -34
  21. data/docs/DockerCompose.md +0 -1
  22. data/docs/README.md +1 -0
  23. data/docs/images/banner.jpg +0 -0
  24. data/docs/images/flipper_cloud.png +0 -0
  25. data/examples/api/basic.ru +18 -0
  26. data/examples/api/custom_memoized.ru +36 -0
  27. data/examples/api/memoized.ru +42 -0
  28. data/examples/basic.rb +1 -12
  29. data/examples/cloud/app.ru +12 -0
  30. data/examples/cloud/backoff_policy.rb +13 -0
  31. data/examples/cloud/basic.rb +22 -0
  32. data/examples/cloud/cloud_setup.rb +20 -0
  33. data/examples/cloud/forked.rb +36 -0
  34. data/examples/cloud/import.rb +17 -0
  35. data/examples/cloud/poll_interval/README.md +111 -0
  36. data/examples/cloud/poll_interval/client.rb +108 -0
  37. data/examples/cloud/poll_interval/server.rb +98 -0
  38. data/examples/cloud/threaded.rb +33 -0
  39. data/examples/configuring_default.rb +2 -5
  40. data/examples/dsl.rb +10 -35
  41. data/examples/enabled_for_actor.rb +10 -15
  42. data/examples/expressions.rb +237 -0
  43. data/examples/group.rb +3 -6
  44. data/examples/group_dynamic_lookup.rb +5 -19
  45. data/examples/group_with_members.rb +4 -14
  46. data/examples/importing.rb +1 -1
  47. data/examples/individual_actor.rb +2 -5
  48. data/examples/instrumentation.rb +2 -2
  49. data/examples/instrumentation_last_accessed_at.rb +38 -0
  50. data/examples/memoizing.rb +35 -0
  51. data/examples/mirroring.rb +59 -0
  52. data/examples/percentage_of_actors.rb +6 -16
  53. data/examples/percentage_of_actors_enabled_check.rb +7 -10
  54. data/examples/percentage_of_actors_group.rb +5 -18
  55. data/examples/percentage_of_time.rb +3 -6
  56. data/examples/strict.rb +18 -0
  57. data/exe/flipper +5 -0
  58. data/flipper-cloud.gemspec +19 -0
  59. data/flipper.gemspec +10 -7
  60. data/lib/flipper/actor.rb +10 -3
  61. data/lib/flipper/adapter.rb +50 -8
  62. data/lib/flipper/adapter_builder.rb +44 -0
  63. data/lib/flipper/adapters/actor_limit.rb +54 -0
  64. data/lib/flipper/adapters/cache_base.rb +161 -0
  65. data/lib/flipper/adapters/dual_write.rb +63 -0
  66. data/lib/flipper/adapters/failover.rb +85 -0
  67. data/lib/flipper/adapters/failsafe.rb +72 -0
  68. data/lib/flipper/adapters/http/client.rb +64 -7
  69. data/lib/flipper/adapters/http/error.rb +19 -1
  70. data/lib/flipper/adapters/http.rb +97 -43
  71. data/lib/flipper/adapters/instrumented.rb +47 -26
  72. data/lib/flipper/adapters/memoizable.rb +44 -40
  73. data/lib/flipper/adapters/memory.rb +75 -111
  74. data/lib/flipper/adapters/operation_logger.rb +22 -78
  75. data/lib/flipper/adapters/poll/poller.rb +2 -0
  76. data/lib/flipper/adapters/poll.rb +52 -0
  77. data/lib/flipper/adapters/pstore.rb +27 -17
  78. data/lib/flipper/adapters/read_only.rb +8 -41
  79. data/lib/flipper/adapters/strict.rb +45 -0
  80. data/lib/flipper/adapters/sync/feature_synchronizer.rb +14 -1
  81. data/lib/flipper/adapters/sync/interval_synchronizer.rb +2 -7
  82. data/lib/flipper/adapters/sync/synchronizer.rb +13 -6
  83. data/lib/flipper/adapters/sync.rb +23 -29
  84. data/lib/flipper/adapters/wrapper.rb +54 -0
  85. data/lib/flipper/cli.rb +314 -0
  86. data/lib/flipper/cloud/configuration.rb +271 -0
  87. data/lib/flipper/cloud/dsl.rb +27 -0
  88. data/lib/flipper/cloud/message_verifier.rb +95 -0
  89. data/lib/flipper/cloud/middleware.rb +63 -0
  90. data/lib/flipper/cloud/migrate.rb +71 -0
  91. data/lib/flipper/cloud/routes.rb +14 -0
  92. data/lib/flipper/cloud/telemetry/backoff_policy.rb +96 -0
  93. data/lib/flipper/cloud/telemetry/instrumenter.rb +22 -0
  94. data/lib/flipper/cloud/telemetry/metric.rb +39 -0
  95. data/lib/flipper/cloud/telemetry/metric_storage.rb +30 -0
  96. data/lib/flipper/cloud/telemetry/submitter.rb +100 -0
  97. data/lib/flipper/cloud/telemetry.rb +191 -0
  98. data/lib/flipper/cloud.rb +54 -0
  99. data/lib/flipper/configuration.rb +54 -7
  100. data/lib/flipper/dsl.rb +58 -47
  101. data/lib/flipper/engine.rb +102 -0
  102. data/lib/flipper/errors.rb +3 -21
  103. data/lib/flipper/export.rb +24 -0
  104. data/lib/flipper/exporter.rb +17 -0
  105. data/lib/flipper/exporters/json/export.rb +32 -0
  106. data/lib/flipper/exporters/json/v1.rb +33 -0
  107. data/lib/flipper/expression/builder.rb +73 -0
  108. data/lib/flipper/expression/constant.rb +25 -0
  109. data/lib/flipper/expression.rb +71 -0
  110. data/lib/flipper/expressions/all.rb +9 -0
  111. data/lib/flipper/expressions/any.rb +9 -0
  112. data/lib/flipper/expressions/boolean.rb +9 -0
  113. data/lib/flipper/expressions/comparable.rb +13 -0
  114. data/lib/flipper/expressions/equal.rb +9 -0
  115. data/lib/flipper/expressions/feature_enabled.rb +34 -0
  116. data/lib/flipper/expressions/greater_than.rb +9 -0
  117. data/lib/flipper/expressions/greater_than_or_equal_to.rb +9 -0
  118. data/lib/flipper/expressions/less_than.rb +9 -0
  119. data/lib/flipper/expressions/less_than_or_equal_to.rb +9 -0
  120. data/lib/flipper/expressions/not_equal.rb +9 -0
  121. data/lib/flipper/expressions/now.rb +9 -0
  122. data/lib/flipper/expressions/number.rb +9 -0
  123. data/lib/flipper/expressions/percentage.rb +9 -0
  124. data/lib/flipper/expressions/percentage_of_actors.rb +12 -0
  125. data/lib/flipper/expressions/property.rb +9 -0
  126. data/lib/flipper/expressions/random.rb +9 -0
  127. data/lib/flipper/expressions/string.rb +9 -0
  128. data/lib/flipper/expressions/time.rb +16 -0
  129. data/lib/flipper/feature.rb +95 -28
  130. data/lib/flipper/feature_check_context.rb +10 -6
  131. data/lib/flipper/gate.rb +13 -11
  132. data/lib/flipper/gate_values.rb +5 -18
  133. data/lib/flipper/gates/actor.rb +10 -17
  134. data/lib/flipper/gates/boolean.rb +1 -1
  135. data/lib/flipper/gates/expression.rb +75 -0
  136. data/lib/flipper/gates/group.rb +5 -7
  137. data/lib/flipper/gates/percentage_of_actors.rb +10 -13
  138. data/lib/flipper/gates/percentage_of_time.rb +1 -2
  139. data/lib/flipper/identifier.rb +17 -0
  140. data/lib/flipper/instrumentation/log_subscriber.rb +35 -8
  141. data/lib/flipper/instrumentation/statsd.rb +4 -2
  142. data/lib/flipper/instrumentation/statsd_subscriber.rb +2 -4
  143. data/lib/flipper/instrumentation/subscriber.rb +8 -5
  144. data/lib/flipper/instrumenters/memory.rb +6 -2
  145. data/lib/flipper/metadata.rb +8 -1
  146. data/lib/flipper/middleware/memoizer.rb +46 -27
  147. data/lib/flipper/middleware/setup_env.rb +13 -3
  148. data/lib/flipper/model/active_record.rb +23 -0
  149. data/lib/flipper/poller.rb +157 -0
  150. data/lib/flipper/serializers/gzip.rb +22 -0
  151. data/lib/flipper/serializers/json.rb +17 -0
  152. data/lib/flipper/spec/shared_adapter_specs.rb +122 -56
  153. data/lib/flipper/test/shared_adapter_test.rb +120 -52
  154. data/lib/flipper/test_help.rb +43 -0
  155. data/lib/flipper/typecast.rb +59 -18
  156. data/lib/flipper/types/actor.rb +19 -13
  157. data/lib/flipper/types/group.rb +12 -5
  158. data/lib/flipper/types/percentage.rb +1 -1
  159. data/lib/flipper/version.rb +11 -1
  160. data/lib/flipper.rb +71 -12
  161. data/lib/generators/flipper/setup_generator.rb +68 -0
  162. data/lib/generators/flipper/templates/initializer.rb +45 -0
  163. data/lib/generators/flipper/templates/update/migrations/01_create_flipper_tables.rb.erb +22 -0
  164. data/lib/generators/flipper/templates/update/migrations/02_change_flipper_gates_value_to_text.rb.erb +18 -0
  165. data/lib/generators/flipper/update_generator.rb +35 -0
  166. data/package-lock.json +41 -0
  167. data/package.json +10 -0
  168. data/spec/fixtures/environment.rb +1 -0
  169. data/spec/fixtures/flipper_pstore_1679087600.json +46 -0
  170. data/spec/flipper/actor_spec.rb +10 -2
  171. data/spec/flipper/adapter_builder_spec.rb +72 -0
  172. data/spec/flipper/adapter_spec.rb +52 -6
  173. data/spec/flipper/adapters/actor_limit_spec.rb +75 -0
  174. data/spec/flipper/adapters/dual_write_spec.rb +82 -0
  175. data/spec/flipper/adapters/failover_spec.rb +141 -0
  176. data/spec/flipper/adapters/failsafe_spec.rb +58 -0
  177. data/spec/flipper/adapters/http/client_spec.rb +61 -0
  178. data/spec/flipper/adapters/http_spec.rb +402 -65
  179. data/spec/flipper/adapters/instrumented_spec.rb +31 -13
  180. data/spec/flipper/adapters/memoizable_spec.rb +51 -33
  181. data/spec/flipper/adapters/memory_spec.rb +33 -5
  182. data/spec/flipper/adapters/operation_logger_spec.rb +38 -12
  183. data/spec/flipper/adapters/poll_spec.rb +41 -0
  184. data/spec/flipper/adapters/pstore_spec.rb +0 -2
  185. data/spec/flipper/adapters/read_only_spec.rb +32 -18
  186. data/spec/flipper/adapters/strict_spec.rb +64 -0
  187. data/spec/flipper/adapters/sync/feature_synchronizer_spec.rb +39 -1
  188. data/spec/flipper/adapters/sync/interval_synchronizer_spec.rb +4 -5
  189. data/spec/flipper/adapters/sync/synchronizer_spec.rb +87 -1
  190. data/spec/flipper/adapters/sync_spec.rb +17 -6
  191. data/spec/flipper/cli_spec.rb +217 -0
  192. data/spec/flipper/cloud/configuration_spec.rb +257 -0
  193. data/spec/flipper/cloud/dsl_spec.rb +90 -0
  194. data/spec/flipper/cloud/message_verifier_spec.rb +104 -0
  195. data/spec/flipper/cloud/middleware_spec.rb +307 -0
  196. data/spec/flipper/cloud/migrate_spec.rb +160 -0
  197. data/spec/flipper/cloud/telemetry/backoff_policy_spec.rb +107 -0
  198. data/spec/flipper/cloud/telemetry/metric_spec.rb +87 -0
  199. data/spec/flipper/cloud/telemetry/metric_storage_spec.rb +58 -0
  200. data/spec/flipper/cloud/telemetry/submitter_spec.rb +145 -0
  201. data/spec/flipper/cloud/telemetry_spec.rb +208 -0
  202. data/spec/flipper/cloud_spec.rb +186 -0
  203. data/spec/flipper/configuration_spec.rb +37 -3
  204. data/spec/flipper/dsl_spec.rb +67 -80
  205. data/spec/flipper/engine_spec.rb +374 -0
  206. data/spec/flipper/export_spec.rb +13 -0
  207. data/spec/flipper/exporter_spec.rb +16 -0
  208. data/spec/flipper/exporters/json/export_spec.rb +60 -0
  209. data/spec/flipper/exporters/json/v1_spec.rb +33 -0
  210. data/spec/flipper/expression/builder_spec.rb +248 -0
  211. data/spec/flipper/expression_spec.rb +188 -0
  212. data/spec/flipper/expressions/all_spec.rb +15 -0
  213. data/spec/flipper/expressions/any_spec.rb +15 -0
  214. data/spec/flipper/expressions/boolean_spec.rb +15 -0
  215. data/spec/flipper/expressions/equal_spec.rb +24 -0
  216. data/spec/flipper/expressions/greater_than_or_equal_to_spec.rb +28 -0
  217. data/spec/flipper/expressions/greater_than_spec.rb +28 -0
  218. data/spec/flipper/expressions/less_than_or_equal_to_spec.rb +28 -0
  219. data/spec/flipper/expressions/less_than_spec.rb +32 -0
  220. data/spec/flipper/expressions/not_equal_spec.rb +15 -0
  221. data/spec/flipper/expressions/now_spec.rb +11 -0
  222. data/spec/flipper/expressions/number_spec.rb +21 -0
  223. data/spec/flipper/expressions/percentage_of_actors_spec.rb +20 -0
  224. data/spec/flipper/expressions/percentage_spec.rb +15 -0
  225. data/spec/flipper/expressions/property_spec.rb +13 -0
  226. data/spec/flipper/expressions/random_spec.rb +9 -0
  227. data/spec/flipper/expressions/string_spec.rb +11 -0
  228. data/spec/flipper/expressions/time_spec.rb +29 -0
  229. data/spec/flipper/feature_check_context_spec.rb +18 -20
  230. data/spec/flipper/feature_spec.rb +461 -48
  231. data/spec/flipper/gate_spec.rb +0 -2
  232. data/spec/flipper/gate_values_spec.rb +2 -34
  233. data/spec/flipper/gates/actor_spec.rb +0 -2
  234. data/spec/flipper/gates/boolean_spec.rb +1 -3
  235. data/spec/flipper/gates/expression_spec.rb +190 -0
  236. data/spec/flipper/gates/group_spec.rb +2 -5
  237. data/spec/flipper/gates/percentage_of_actors_spec.rb +61 -7
  238. data/spec/flipper/gates/percentage_of_time_spec.rb +2 -4
  239. data/spec/flipper/identifier_spec.rb +12 -0
  240. data/spec/flipper/instrumentation/log_subscriber_spec.rb +24 -7
  241. data/spec/flipper/instrumentation/statsd_subscriber_spec.rb +26 -3
  242. data/spec/flipper/instrumenters/memory_spec.rb +18 -1
  243. data/spec/flipper/instrumenters/noop_spec.rb +14 -8
  244. data/spec/flipper/middleware/memoizer_spec.rb +199 -62
  245. data/spec/flipper/middleware/setup_env_spec.rb +23 -5
  246. data/spec/flipper/model/active_record_spec.rb +72 -0
  247. data/spec/flipper/poller_spec.rb +390 -0
  248. data/spec/flipper/registry_spec.rb +0 -1
  249. data/spec/flipper/serializers/gzip_spec.rb +13 -0
  250. data/spec/flipper/serializers/json_spec.rb +13 -0
  251. data/spec/flipper/typecast_spec.rb +121 -7
  252. data/spec/flipper/types/actor_spec.rb +63 -47
  253. data/spec/flipper/types/boolean_spec.rb +0 -1
  254. data/spec/flipper/types/group_spec.rb +24 -3
  255. data/spec/flipper/types/percentage_of_actors_spec.rb +0 -1
  256. data/spec/flipper/types/percentage_of_time_spec.rb +0 -1
  257. data/spec/flipper/types/percentage_spec.rb +0 -1
  258. data/spec/{integration_spec.rb → flipper_integration_spec.rb} +301 -59
  259. data/spec/flipper_spec.rb +123 -29
  260. data/spec/{helper.rb → spec_helper.rb} +23 -21
  261. data/spec/support/actor_names.yml +1 -0
  262. data/spec/support/descriptions.yml +1 -0
  263. data/spec/support/fail_on_output.rb +8 -0
  264. data/spec/support/fake_backoff_policy.rb +15 -0
  265. data/spec/support/skippable.rb +18 -0
  266. data/spec/support/spec_helpers.rb +53 -6
  267. data/test/adapters/actor_limit_test.rb +20 -0
  268. data/test/test_helper.rb +2 -1
  269. data/test_rails/generators/flipper/setup_generator_test.rb +69 -0
  270. data/test_rails/generators/flipper/update_generator_test.rb +96 -0
  271. data/test_rails/helper.rb +31 -0
  272. data/test_rails/system/test_help_test.rb +52 -0
  273. metadata +200 -82
  274. data/.rubocop.yml +0 -54
  275. data/.rubocop_todo.yml +0 -199
  276. data/docs/Adapters.md +0 -124
  277. data/docs/Caveats.md +0 -4
  278. data/docs/Gates.md +0 -167
  279. data/docs/Instrumentation.md +0 -27
  280. data/docs/Optimization.md +0 -114
  281. data/docs/api/README.md +0 -849
  282. data/docs/http/README.md +0 -35
  283. data/docs/read-only/README.md +0 -21
  284. data/examples/example_setup.rb +0 -8
  285. data/test/helper.rb +0 -11
@@ -0,0 +1,52 @@
1
+ require_relative "../helper"
2
+
3
+ # Not worth trying to test on old Rails versions
4
+ return unless Rails::VERSION::MAJOR >= 7
5
+
6
+ require "capybara/cuprite"
7
+ require "flipper"
8
+ require "flipper/test_help"
9
+ require "action_controller/railtie"
10
+
11
+ require 'action_dispatch/system_testing/server'
12
+ ActionDispatch::SystemTesting::Server.silence_puma = true
13
+
14
+ class TestApp < Rails::Application
15
+ config.load_defaults "#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}"
16
+ config.eager_load = false
17
+ config.logger = ActiveSupport::Logger.new(StringIO.new)
18
+ routes.append do
19
+ root to: "features#index"
20
+ end
21
+ end
22
+
23
+ TestApp.initialize!
24
+
25
+ class FeaturesController < ActionController::Base
26
+ def index
27
+ render json: Flipper.enabled?(:test) ? "Enabled" : "Disabled"
28
+ end
29
+ end
30
+
31
+ class TestHelpTest < ActionDispatch::SystemTestCase
32
+ # Any driver that runs the app in a separate thread will test what we want here.
33
+ driven_by :cuprite, options: { process_timeout: 60 }
34
+
35
+ setup do
36
+ # Reconfigure Flipper since other tests change the adapter.
37
+ flipper_configure
38
+
39
+ # Ensure this test uses this app instance
40
+ Rails.application = TestApp.instance
41
+ end
42
+
43
+ test "configures a shared adapter between tests and app" do
44
+ Flipper.disable(:test)
45
+ visit "/"
46
+ assert_selector "*", text: "Disabled"
47
+
48
+ Flipper.enable(:test)
49
+ visit "/"
50
+ assert_selector "*", text: "Enabled"
51
+ end
52
+ end
metadata CHANGED
@@ -1,27 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
- autorequire:
9
- bindir: bin
8
+ autorequire:
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-01 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Feature flipper is the act of enabling/disabling features in your application,
14
- ideally without re-deploying or changing anything in your code base. Flipper makes
15
- this extremely easy to do with any backend you would like to use.
16
- email:
17
- - nunemaker@gmail.com
18
- executables: []
11
+ date: 2026-02-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: concurrent-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "<"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "<"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ description:
28
+ email: support@flippercloud.io
29
+ executables:
30
+ - flipper
19
31
  extensions: []
20
32
  extra_rdoc_files: []
21
33
  files:
22
34
  - ".codeclimate.yml"
23
- - ".rubocop.yml"
24
- - ".rubocop_todo.yml"
35
+ - ".github/FUNDING.yml"
36
+ - ".github/dependabot.yml"
37
+ - ".github/workflows/ci.yml"
38
+ - ".github/workflows/examples.yml"
39
+ - ".github/workflows/release.yml"
40
+ - ".rspec"
41
+ - CLAUDE.md
25
42
  - CODE_OF_CONDUCT.md
26
43
  - Changelog.md
27
44
  - Dockerfile
@@ -29,35 +46,60 @@ files:
29
46
  - LICENSE
30
47
  - README.md
31
48
  - Rakefile
49
+ - benchmark/enabled_ips.rb
50
+ - benchmark/enabled_multiple_actors_ips.rb
51
+ - benchmark/enabled_profile.rb
52
+ - benchmark/instrumentation_ips.rb
53
+ - benchmark/typecast_ips.rb
32
54
  - docker-compose.yml
33
- - docs/Adapters.md
34
- - docs/Caveats.md
35
55
  - docs/DockerCompose.md
36
- - docs/Gates.md
37
- - docs/Instrumentation.md
38
- - docs/Optimization.md
39
- - docs/api/README.md
40
- - docs/http/README.md
41
- - docs/read-only/README.md
56
+ - docs/README.md
57
+ - docs/images/banner.jpg
58
+ - docs/images/flipper_cloud.png
59
+ - examples/api/basic.ru
60
+ - examples/api/custom_memoized.ru
61
+ - examples/api/memoized.ru
42
62
  - examples/basic.rb
63
+ - examples/cloud/app.ru
64
+ - examples/cloud/backoff_policy.rb
65
+ - examples/cloud/basic.rb
66
+ - examples/cloud/cloud_setup.rb
67
+ - examples/cloud/forked.rb
68
+ - examples/cloud/import.rb
69
+ - examples/cloud/poll_interval/README.md
70
+ - examples/cloud/poll_interval/client.rb
71
+ - examples/cloud/poll_interval/server.rb
72
+ - examples/cloud/threaded.rb
43
73
  - examples/configuring_default.rb
44
74
  - examples/dsl.rb
45
75
  - examples/enabled_for_actor.rb
46
- - examples/example_setup.rb
76
+ - examples/expressions.rb
47
77
  - examples/group.rb
48
78
  - examples/group_dynamic_lookup.rb
49
79
  - examples/group_with_members.rb
50
80
  - examples/importing.rb
51
81
  - examples/individual_actor.rb
52
82
  - examples/instrumentation.rb
83
+ - examples/instrumentation_last_accessed_at.rb
84
+ - examples/memoizing.rb
85
+ - examples/mirroring.rb
53
86
  - examples/percentage_of_actors.rb
54
87
  - examples/percentage_of_actors_enabled_check.rb
55
88
  - examples/percentage_of_actors_group.rb
56
89
  - examples/percentage_of_time.rb
90
+ - examples/strict.rb
91
+ - exe/flipper
92
+ - flipper-cloud.gemspec
57
93
  - flipper.gemspec
58
94
  - lib/flipper.rb
59
95
  - lib/flipper/actor.rb
60
96
  - lib/flipper/adapter.rb
97
+ - lib/flipper/adapter_builder.rb
98
+ - lib/flipper/adapters/actor_limit.rb
99
+ - lib/flipper/adapters/cache_base.rb
100
+ - lib/flipper/adapters/dual_write.rb
101
+ - lib/flipper/adapters/failover.rb
102
+ - lib/flipper/adapters/failsafe.rb
61
103
  - lib/flipper/adapters/http.rb
62
104
  - lib/flipper/adapters/http/client.rb
63
105
  - lib/flipper/adapters/http/error.rb
@@ -65,24 +107,71 @@ files:
65
107
  - lib/flipper/adapters/memoizable.rb
66
108
  - lib/flipper/adapters/memory.rb
67
109
  - lib/flipper/adapters/operation_logger.rb
110
+ - lib/flipper/adapters/poll.rb
111
+ - lib/flipper/adapters/poll/poller.rb
68
112
  - lib/flipper/adapters/pstore.rb
69
113
  - lib/flipper/adapters/read_only.rb
114
+ - lib/flipper/adapters/strict.rb
70
115
  - lib/flipper/adapters/sync.rb
71
116
  - lib/flipper/adapters/sync/feature_synchronizer.rb
72
117
  - lib/flipper/adapters/sync/interval_synchronizer.rb
73
118
  - lib/flipper/adapters/sync/synchronizer.rb
119
+ - lib/flipper/adapters/wrapper.rb
120
+ - lib/flipper/cli.rb
121
+ - lib/flipper/cloud.rb
122
+ - lib/flipper/cloud/configuration.rb
123
+ - lib/flipper/cloud/dsl.rb
124
+ - lib/flipper/cloud/message_verifier.rb
125
+ - lib/flipper/cloud/middleware.rb
126
+ - lib/flipper/cloud/migrate.rb
127
+ - lib/flipper/cloud/routes.rb
128
+ - lib/flipper/cloud/telemetry.rb
129
+ - lib/flipper/cloud/telemetry/backoff_policy.rb
130
+ - lib/flipper/cloud/telemetry/instrumenter.rb
131
+ - lib/flipper/cloud/telemetry/metric.rb
132
+ - lib/flipper/cloud/telemetry/metric_storage.rb
133
+ - lib/flipper/cloud/telemetry/submitter.rb
74
134
  - lib/flipper/configuration.rb
75
135
  - lib/flipper/dsl.rb
136
+ - lib/flipper/engine.rb
76
137
  - lib/flipper/errors.rb
138
+ - lib/flipper/export.rb
139
+ - lib/flipper/exporter.rb
140
+ - lib/flipper/exporters/json/export.rb
141
+ - lib/flipper/exporters/json/v1.rb
142
+ - lib/flipper/expression.rb
143
+ - lib/flipper/expression/builder.rb
144
+ - lib/flipper/expression/constant.rb
145
+ - lib/flipper/expressions/all.rb
146
+ - lib/flipper/expressions/any.rb
147
+ - lib/flipper/expressions/boolean.rb
148
+ - lib/flipper/expressions/comparable.rb
149
+ - lib/flipper/expressions/equal.rb
150
+ - lib/flipper/expressions/feature_enabled.rb
151
+ - lib/flipper/expressions/greater_than.rb
152
+ - lib/flipper/expressions/greater_than_or_equal_to.rb
153
+ - lib/flipper/expressions/less_than.rb
154
+ - lib/flipper/expressions/less_than_or_equal_to.rb
155
+ - lib/flipper/expressions/not_equal.rb
156
+ - lib/flipper/expressions/now.rb
157
+ - lib/flipper/expressions/number.rb
158
+ - lib/flipper/expressions/percentage.rb
159
+ - lib/flipper/expressions/percentage_of_actors.rb
160
+ - lib/flipper/expressions/property.rb
161
+ - lib/flipper/expressions/random.rb
162
+ - lib/flipper/expressions/string.rb
163
+ - lib/flipper/expressions/time.rb
77
164
  - lib/flipper/feature.rb
78
165
  - lib/flipper/feature_check_context.rb
79
166
  - lib/flipper/gate.rb
80
167
  - lib/flipper/gate_values.rb
81
168
  - lib/flipper/gates/actor.rb
82
169
  - lib/flipper/gates/boolean.rb
170
+ - lib/flipper/gates/expression.rb
83
171
  - lib/flipper/gates/group.rb
84
172
  - lib/flipper/gates/percentage_of_actors.rb
85
173
  - lib/flipper/gates/percentage_of_time.rb
174
+ - lib/flipper/identifier.rb
86
175
  - lib/flipper/instrumentation/log_subscriber.rb
87
176
  - lib/flipper/instrumentation/statsd.rb
88
177
  - lib/flipper/instrumentation/statsd_subscriber.rb
@@ -92,9 +181,14 @@ files:
92
181
  - lib/flipper/metadata.rb
93
182
  - lib/flipper/middleware/memoizer.rb
94
183
  - lib/flipper/middleware/setup_env.rb
184
+ - lib/flipper/model/active_record.rb
185
+ - lib/flipper/poller.rb
95
186
  - lib/flipper/registry.rb
187
+ - lib/flipper/serializers/gzip.rb
188
+ - lib/flipper/serializers/json.rb
96
189
  - lib/flipper/spec/shared_adapter_specs.rb
97
190
  - lib/flipper/test/shared_adapter_test.rb
191
+ - lib/flipper/test_help.rb
98
192
  - lib/flipper/type.rb
99
193
  - lib/flipper/typecast.rb
100
194
  - lib/flipper/types/actor.rb
@@ -104,38 +198,97 @@ files:
104
198
  - lib/flipper/types/percentage_of_actors.rb
105
199
  - lib/flipper/types/percentage_of_time.rb
106
200
  - lib/flipper/version.rb
201
+ - lib/generators/flipper/setup_generator.rb
202
+ - lib/generators/flipper/templates/initializer.rb
203
+ - lib/generators/flipper/templates/update/migrations/01_create_flipper_tables.rb.erb
204
+ - lib/generators/flipper/templates/update/migrations/02_change_flipper_gates_value_to_text.rb.erb
205
+ - lib/generators/flipper/update_generator.rb
206
+ - package-lock.json
207
+ - package.json
208
+ - spec/fixtures/environment.rb
107
209
  - spec/fixtures/feature.json
210
+ - spec/fixtures/flipper_pstore_1679087600.json
108
211
  - spec/flipper/actor_spec.rb
212
+ - spec/flipper/adapter_builder_spec.rb
109
213
  - spec/flipper/adapter_spec.rb
214
+ - spec/flipper/adapters/actor_limit_spec.rb
215
+ - spec/flipper/adapters/dual_write_spec.rb
216
+ - spec/flipper/adapters/failover_spec.rb
217
+ - spec/flipper/adapters/failsafe_spec.rb
218
+ - spec/flipper/adapters/http/client_spec.rb
110
219
  - spec/flipper/adapters/http_spec.rb
111
220
  - spec/flipper/adapters/instrumented_spec.rb
112
221
  - spec/flipper/adapters/memoizable_spec.rb
113
222
  - spec/flipper/adapters/memory_spec.rb
114
223
  - spec/flipper/adapters/operation_logger_spec.rb
224
+ - spec/flipper/adapters/poll_spec.rb
115
225
  - spec/flipper/adapters/pstore_spec.rb
116
226
  - spec/flipper/adapters/read_only_spec.rb
227
+ - spec/flipper/adapters/strict_spec.rb
117
228
  - spec/flipper/adapters/sync/feature_synchronizer_spec.rb
118
229
  - spec/flipper/adapters/sync/interval_synchronizer_spec.rb
119
230
  - spec/flipper/adapters/sync/synchronizer_spec.rb
120
231
  - spec/flipper/adapters/sync_spec.rb
232
+ - spec/flipper/cli_spec.rb
233
+ - spec/flipper/cloud/configuration_spec.rb
234
+ - spec/flipper/cloud/dsl_spec.rb
235
+ - spec/flipper/cloud/message_verifier_spec.rb
236
+ - spec/flipper/cloud/middleware_spec.rb
237
+ - spec/flipper/cloud/migrate_spec.rb
238
+ - spec/flipper/cloud/telemetry/backoff_policy_spec.rb
239
+ - spec/flipper/cloud/telemetry/metric_spec.rb
240
+ - spec/flipper/cloud/telemetry/metric_storage_spec.rb
241
+ - spec/flipper/cloud/telemetry/submitter_spec.rb
242
+ - spec/flipper/cloud/telemetry_spec.rb
243
+ - spec/flipper/cloud_spec.rb
121
244
  - spec/flipper/configuration_spec.rb
122
245
  - spec/flipper/dsl_spec.rb
246
+ - spec/flipper/engine_spec.rb
247
+ - spec/flipper/export_spec.rb
248
+ - spec/flipper/exporter_spec.rb
249
+ - spec/flipper/exporters/json/export_spec.rb
250
+ - spec/flipper/exporters/json/v1_spec.rb
251
+ - spec/flipper/expression/builder_spec.rb
252
+ - spec/flipper/expression_spec.rb
253
+ - spec/flipper/expressions/all_spec.rb
254
+ - spec/flipper/expressions/any_spec.rb
255
+ - spec/flipper/expressions/boolean_spec.rb
256
+ - spec/flipper/expressions/equal_spec.rb
257
+ - spec/flipper/expressions/greater_than_or_equal_to_spec.rb
258
+ - spec/flipper/expressions/greater_than_spec.rb
259
+ - spec/flipper/expressions/less_than_or_equal_to_spec.rb
260
+ - spec/flipper/expressions/less_than_spec.rb
261
+ - spec/flipper/expressions/not_equal_spec.rb
262
+ - spec/flipper/expressions/now_spec.rb
263
+ - spec/flipper/expressions/number_spec.rb
264
+ - spec/flipper/expressions/percentage_of_actors_spec.rb
265
+ - spec/flipper/expressions/percentage_spec.rb
266
+ - spec/flipper/expressions/property_spec.rb
267
+ - spec/flipper/expressions/random_spec.rb
268
+ - spec/flipper/expressions/string_spec.rb
269
+ - spec/flipper/expressions/time_spec.rb
123
270
  - spec/flipper/feature_check_context_spec.rb
124
271
  - spec/flipper/feature_spec.rb
125
272
  - spec/flipper/gate_spec.rb
126
273
  - spec/flipper/gate_values_spec.rb
127
274
  - spec/flipper/gates/actor_spec.rb
128
275
  - spec/flipper/gates/boolean_spec.rb
276
+ - spec/flipper/gates/expression_spec.rb
129
277
  - spec/flipper/gates/group_spec.rb
130
278
  - spec/flipper/gates/percentage_of_actors_spec.rb
131
279
  - spec/flipper/gates/percentage_of_time_spec.rb
280
+ - spec/flipper/identifier_spec.rb
132
281
  - spec/flipper/instrumentation/log_subscriber_spec.rb
133
282
  - spec/flipper/instrumentation/statsd_subscriber_spec.rb
134
283
  - spec/flipper/instrumenters/memory_spec.rb
135
284
  - spec/flipper/instrumenters/noop_spec.rb
136
285
  - spec/flipper/middleware/memoizer_spec.rb
137
286
  - spec/flipper/middleware/setup_env_spec.rb
287
+ - spec/flipper/model/active_record_spec.rb
288
+ - spec/flipper/poller_spec.rb
138
289
  - spec/flipper/registry_spec.rb
290
+ - spec/flipper/serializers/gzip_spec.rb
291
+ - spec/flipper/serializers/json_spec.rb
139
292
  - spec/flipper/typecast_spec.rb
140
293
  - spec/flipper/types/actor_spec.rb
141
294
  - spec/flipper/types/boolean_spec.rb
@@ -143,21 +296,35 @@ files:
143
296
  - spec/flipper/types/percentage_of_actors_spec.rb
144
297
  - spec/flipper/types/percentage_of_time_spec.rb
145
298
  - spec/flipper/types/percentage_spec.rb
299
+ - spec/flipper_integration_spec.rb
146
300
  - spec/flipper_spec.rb
147
- - spec/helper.rb
148
- - spec/integration_spec.rb
301
+ - spec/spec_helper.rb
302
+ - spec/support/actor_names.yml
303
+ - spec/support/descriptions.yml
304
+ - spec/support/fail_on_output.rb
305
+ - spec/support/fake_backoff_policy.rb
149
306
  - spec/support/fake_udp_socket.rb
307
+ - spec/support/skippable.rb
150
308
  - spec/support/spec_helpers.rb
309
+ - test/adapters/actor_limit_test.rb
151
310
  - test/adapters/memory_test.rb
152
311
  - test/adapters/pstore_test.rb
153
- - test/helper.rb
154
312
  - test/test_helper.rb
155
- homepage: https://github.com/jnunemaker/flipper
313
+ - test_rails/generators/flipper/setup_generator_test.rb
314
+ - test_rails/generators/flipper/update_generator_test.rb
315
+ - test_rails/helper.rb
316
+ - test_rails/system/test_help_test.rb
317
+ homepage: https://www.flippercloud.io/docs
156
318
  licenses:
157
319
  - MIT
158
320
  metadata:
159
- changelog_uri: https://github.com/jnunemaker/flipper/blob/master/Changelog.md
160
- post_install_message:
321
+ documentation_uri: https://www.flippercloud.io/docs
322
+ homepage_uri: https://www.flippercloud.io
323
+ source_code_uri: https://github.com/flippercloud/flipper
324
+ bug_tracker_uri: https://github.com/flippercloud/flipper/issues
325
+ changelog_uri: https://github.com/flippercloud/flipper/releases/tag/v1.4.0
326
+ funding_uri: https://github.com/sponsors/flippercloud
327
+ post_install_message:
161
328
  rdoc_options: []
162
329
  require_paths:
163
330
  - lib
@@ -165,64 +332,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
332
  requirements:
166
333
  - - ">="
167
334
  - !ruby/object:Gem::Version
168
- version: '0'
335
+ version: '2.6'
169
336
  required_rubygems_version: !ruby/object:Gem::Requirement
170
337
  requirements:
171
338
  - - ">="
172
339
  - !ruby/object:Gem::Version
173
340
  version: '0'
174
341
  requirements: []
175
- rubyforge_project:
176
- rubygems_version: 2.4.5.4
177
- signing_key:
342
+ rubygems_version: 3.5.22
343
+ signing_key:
178
344
  specification_version: 4
179
- summary: Feature flipper for ANYTHING
180
- test_files:
181
- - spec/fixtures/feature.json
182
- - spec/flipper/actor_spec.rb
183
- - spec/flipper/adapter_spec.rb
184
- - spec/flipper/adapters/http_spec.rb
185
- - spec/flipper/adapters/instrumented_spec.rb
186
- - spec/flipper/adapters/memoizable_spec.rb
187
- - spec/flipper/adapters/memory_spec.rb
188
- - spec/flipper/adapters/operation_logger_spec.rb
189
- - spec/flipper/adapters/pstore_spec.rb
190
- - spec/flipper/adapters/read_only_spec.rb
191
- - spec/flipper/adapters/sync/feature_synchronizer_spec.rb
192
- - spec/flipper/adapters/sync/interval_synchronizer_spec.rb
193
- - spec/flipper/adapters/sync/synchronizer_spec.rb
194
- - spec/flipper/adapters/sync_spec.rb
195
- - spec/flipper/configuration_spec.rb
196
- - spec/flipper/dsl_spec.rb
197
- - spec/flipper/feature_check_context_spec.rb
198
- - spec/flipper/feature_spec.rb
199
- - spec/flipper/gate_spec.rb
200
- - spec/flipper/gate_values_spec.rb
201
- - spec/flipper/gates/actor_spec.rb
202
- - spec/flipper/gates/boolean_spec.rb
203
- - spec/flipper/gates/group_spec.rb
204
- - spec/flipper/gates/percentage_of_actors_spec.rb
205
- - spec/flipper/gates/percentage_of_time_spec.rb
206
- - spec/flipper/instrumentation/log_subscriber_spec.rb
207
- - spec/flipper/instrumentation/statsd_subscriber_spec.rb
208
- - spec/flipper/instrumenters/memory_spec.rb
209
- - spec/flipper/instrumenters/noop_spec.rb
210
- - spec/flipper/middleware/memoizer_spec.rb
211
- - spec/flipper/middleware/setup_env_spec.rb
212
- - spec/flipper/registry_spec.rb
213
- - spec/flipper/typecast_spec.rb
214
- - spec/flipper/types/actor_spec.rb
215
- - spec/flipper/types/boolean_spec.rb
216
- - spec/flipper/types/group_spec.rb
217
- - spec/flipper/types/percentage_of_actors_spec.rb
218
- - spec/flipper/types/percentage_of_time_spec.rb
219
- - spec/flipper/types/percentage_spec.rb
220
- - spec/flipper_spec.rb
221
- - spec/helper.rb
222
- - spec/integration_spec.rb
223
- - spec/support/fake_udp_socket.rb
224
- - spec/support/spec_helpers.rb
225
- - test/adapters/memory_test.rb
226
- - test/adapters/pstore_test.rb
227
- - test/helper.rb
228
- - test/test_helper.rb
345
+ summary: Beautiful, performant feature flags for Ruby and Rails.
346
+ test_files: []
data/.rubocop.yml DELETED
@@ -1,54 +0,0 @@
1
- # This is the configuration used to check the rubocop source code.
2
-
3
- require: rubocop-rspec
4
- inherit_from:
5
- - .rubocop_todo.yml
6
-
7
- AllCops:
8
- Exclude:
9
- - 'docker-compose/**/*'
10
- - 'examples/**/*'
11
- - 'tmp/**/*'
12
- - 'bin/**/*'
13
- TargetRubyVersion: 2.0
14
- # DefaultFormatter: fuubar
15
- Style/Alias:
16
- Enabled: false
17
-
18
- Style/Documentation:
19
- Enabled: false
20
-
21
- Style/Encoding:
22
- Enabled: false
23
-
24
- Style/NumericLiterals:
25
- Enabled: false
26
-
27
- Style/StringLiterals:
28
- Enabled: false
29
-
30
- Style/GuardClause:
31
- Enabled: false
32
-
33
- Style/IfUnlessModifier:
34
- Enabled: false
35
-
36
- Metrics/LineLength:
37
- Max: 100
38
- Exclude:
39
- - '*.gemspec'
40
-
41
- Style/RegexpLiteral:
42
- EnforcedStyle: mixed
43
-
44
- Style/TrailingCommaInLiteral:
45
- EnforcedStyleForMultiline: consistent_comma
46
-
47
- RSpec/InstanceVariable:
48
- Enabled: false
49
-
50
- Style/AccessorMethodName:
51
- Enabled: false
52
-
53
- Lint/HandleExceptions:
54
- Enabled: false