openfeature-rollout-provider 0.0.1
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 +7 -0
- data/.gitignore +9 -0
- data/.ruby-version +1 -0
- data/Gemfile +6 -0
- data/README.md +31 -0
- data/Rakefile +12 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/openfeature/rollout/provider/version.rb +7 -0
- data/lib/openfeature/rollout/provider.rb +99 -0
- data/openfeature-rollout-provider.gemspec +37 -0
- metadata +126 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7b87a7980c84c5cf5a03b35648b5f82aaf64c8e5e6f94ae3c61a32690e3f7e17
|
4
|
+
data.tar.gz: abd33d41673d31d9903fab54b2f9be604a612fe316edf463fb64838b05a530f6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2c97f2551ed8e2c1294bc48543bff39892df33828e54e9b3b54958a831410e6f2eae520427a3208a3d08591195592e77eb307a36b6c8e6fe2142aed579a4579c
|
7
|
+
data.tar.gz: 3499aa31081896aab26e337d7bcf4016c24a07bc579ffa03944bc770fddbe373a0c07548589c021bb0e02dae24915b555161288d5cce78866c48908f26040df7
|
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.1.4
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# OpenFeature rollout Provider for Ruby
|
2
|
+
|
3
|
+
This is the Ruby [provider](https://openfeature.dev/docs/specification/sections/providers) implementation of rollout
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'openfeature-rollout-provider'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
```sh
|
16
|
+
bundle install
|
17
|
+
```
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
```sh
|
22
|
+
gem install openfeature-rollout-provider
|
23
|
+
```
|
24
|
+
|
25
|
+
## Example
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
OpenFeature::SDK.configure do |config|
|
29
|
+
config.provider = OpenFeature::Rollout::Provider.build_client(::Rollout.new(Redis.new))
|
30
|
+
end
|
31
|
+
```
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "bundler/setup"
|
5
|
+
require "openfeature/rollout/provider"
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
# require "pry"
|
12
|
+
# Pry.start
|
13
|
+
|
14
|
+
require "irb"
|
15
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rollout"
|
4
|
+
|
5
|
+
require_relative "provider/version"
|
6
|
+
|
7
|
+
module OpenFeature
|
8
|
+
module Rollout
|
9
|
+
# Provider represents the entry point for interacting with the rollout provider
|
10
|
+
# values. The implementation follows the details specified in https://openfeature.dev/docs/specification/sections/providers
|
11
|
+
#
|
12
|
+
# Provider contains functionality to configure the redis connection via
|
13
|
+
# rollout_client = OpenFeature::Rollout::Provider.build_client
|
14
|
+
# rollout_client.configure do |config|
|
15
|
+
# config.redis = Redis.new
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# The Provider provides the following methods and attributes:
|
19
|
+
#
|
20
|
+
# * <tt>metadata</tt> - Returns the associated provider metadata with the name
|
21
|
+
#
|
22
|
+
# * <tt>resolve_boolean_value(flag_key:, default_value:, context: nil)</tt>
|
23
|
+
# manner; <tt>client.resolve_boolean(flag_key: 'boolean-flag', default_value: false)</tt>
|
24
|
+
#
|
25
|
+
# * <tt>resolve_integer_value(flag_key:, default_value:, context: nil)</tt>
|
26
|
+
# manner; <tt>client.resolve_integer_value(flag_key: 'integer-flag', default_value: 2)</tt>
|
27
|
+
#
|
28
|
+
# * <tt>resolve_float_value(flag_key:, default_value:, context: nil)</tt>
|
29
|
+
# manner; <tt>client.resolve_float_value(flag_key: 'float-flag', default_value: 2.0)</tt>
|
30
|
+
#
|
31
|
+
# * <tt>resolve_string_value(flag_key:, default_value:, context: nil)</tt>
|
32
|
+
# manner; <tt>client.resolve_string_value(flag_key: 'string-flag', default_value: 'some-default-value')</tt>
|
33
|
+
#
|
34
|
+
# * <tt>resolve_object_value(flag_key:, default_value:, context: nil)</tt>
|
35
|
+
# manner; <tt>client.resolve_object_value(flag_key: 'object-flag', default_value: { default_value: 'value'})</tt>
|
36
|
+
class Provider
|
37
|
+
def self.build_client(rollout_client = nil)
|
38
|
+
unless rollout_client
|
39
|
+
rollout_client = ::Rollout.new(Redis.new)
|
40
|
+
end
|
41
|
+
|
42
|
+
new(rollout_client: rollout_client)
|
43
|
+
end
|
44
|
+
|
45
|
+
PROVIDER_NAME = "rollout Provider"
|
46
|
+
|
47
|
+
attr_reader :metadata
|
48
|
+
|
49
|
+
def initialize(rollout_client: nil)
|
50
|
+
@metadata = OpenFeature::SDK::Provider::ProviderMetadata.new(name: PROVIDER_NAME)
|
51
|
+
@rollout_client = rollout_client
|
52
|
+
end
|
53
|
+
|
54
|
+
def fetch_boolean_value(flag_key:, default_value:, evaluation_context: nil)
|
55
|
+
res = @rollout_client.active?(flag_key, evaluation_context&.targeting_key)
|
56
|
+
|
57
|
+
OpenFeature::SDK::Provider::ResolutionDetails.new(
|
58
|
+
value: res,
|
59
|
+
reason: "UNKNOWN", # "STATIC", "DEFAULT", "TARGETING_MATCH", "SPLIT", "CACHED", "DISABLED", "UNKNOWN", "STALE", "ERROR"
|
60
|
+
variant: nil,
|
61
|
+
error_code: nil,
|
62
|
+
error_message: nil,
|
63
|
+
flag_metadata: nil
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
def fetch_number_value(flag_key:, default_value:, evaluation_context: nil)
|
68
|
+
error_response(default_value, "TYPE_MISMATCH", "Rollout does not support numeric flag values")
|
69
|
+
end
|
70
|
+
|
71
|
+
def fetch_integer_value(flag_key:, default_value:, evaluation_context: nil)
|
72
|
+
error_response(default_value, "TYPE_MISMATCH", "Rollout does not support numeric flag values")
|
73
|
+
end
|
74
|
+
|
75
|
+
def fetch_float_value(flag_key:, default_value:, evaluation_context: nil)
|
76
|
+
error_response(default_value, "TYPE_MISMATCH", "Rollout does not support numeric flag values")
|
77
|
+
end
|
78
|
+
|
79
|
+
def fetch_string_value(flag_key:, default_value:, evaluation_context: nil)
|
80
|
+
error_response(default_value, "TYPE_MISMATCH", "Rollout does not support string flag values")
|
81
|
+
end
|
82
|
+
|
83
|
+
def fetch_object_value(flag_key:, default_value:, evaluation_context: nil)
|
84
|
+
error_response(default_value, "TYPE_MISMATCH", "Rollout does not support object flag values")
|
85
|
+
end
|
86
|
+
|
87
|
+
def error_response(default_value, error_code, error_message)
|
88
|
+
OpenFeature::SDK::Provider::ResolutionDetails.new(
|
89
|
+
value: default_value,
|
90
|
+
reason: "ERROR",
|
91
|
+
variant: nil,
|
92
|
+
error_code: error_code,
|
93
|
+
error_message: error_message,
|
94
|
+
flag_metadata: nil
|
95
|
+
)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/openfeature/rollout/provider/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "openfeature-rollout-provider"
|
7
|
+
spec.version = OpenFeature::Rollout::VERSION
|
8
|
+
spec.authors = ["Bryan Alves"]
|
9
|
+
spec.email = ["bryanalves@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = "The rollout provider for the OpenFeature Ruby SDK"
|
12
|
+
spec.description = "The rollout provider for the OpenFeature Ruby SDK"
|
13
|
+
spec.homepage = "https://github.com/bryanalves/openfeature-rollout-provider"
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = ">= 3.1"
|
16
|
+
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = "https://github.com/bryanalves/openfeature-rollout-provider/tree/main/"
|
19
|
+
spec.metadata["bug_tracker_uri"] = "https://github.com/bryanalvees/openfeature-rollout-provider/issues"
|
20
|
+
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
22
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
24
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
end
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_runtime_dependency "openfeature-sdk", "~> 0.3"
|
31
|
+
spec.add_runtime_dependency "rollout"
|
32
|
+
|
33
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
34
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
35
|
+
|
36
|
+
spec.add_development_dependency "rubocop"
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: openfeature-rollout-provider
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bryan Alves
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-06-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: openfeature-sdk
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rollout
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '13.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '13.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: The rollout provider for the OpenFeature Ruby SDK
|
84
|
+
email:
|
85
|
+
- bryanalves@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".ruby-version"
|
92
|
+
- Gemfile
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
95
|
+
- bin/console
|
96
|
+
- bin/setup
|
97
|
+
- lib/openfeature/rollout/provider.rb
|
98
|
+
- lib/openfeature/rollout/provider/version.rb
|
99
|
+
- openfeature-rollout-provider.gemspec
|
100
|
+
homepage: https://github.com/bryanalves/openfeature-rollout-provider
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
metadata:
|
104
|
+
homepage_uri: https://github.com/bryanalves/openfeature-rollout-provider
|
105
|
+
source_code_uri: https://github.com/bryanalves/openfeature-rollout-provider/tree/main/
|
106
|
+
bug_tracker_uri: https://github.com/bryanalvees/openfeature-rollout-provider/issues
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
require_paths:
|
110
|
+
- lib
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '3.1'
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubygems_version: 3.3.26
|
123
|
+
signing_key:
|
124
|
+
specification_version: 4
|
125
|
+
summary: The rollout provider for the OpenFeature Ruby SDK
|
126
|
+
test_files: []
|