openfeature-flipt-provider 0.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: eb9be79bc46fbd3ac78a380df63c7391733922b89d33c5101649e3436afee314
4
+ data.tar.gz: c63342abed2645787b29b5c14ccfeaddc6de919da2f9feb478448319b2a090ef
5
+ SHA512:
6
+ metadata.gz: c2471f2694eaa22a34ad1754fb2dbcba3667270503842c548687b97099f4abb5ba1699fa8cacba03cfb883e196f3236f960676c12d2ac76e5fd6b52e2d3d000d
7
+ data.tar.gz: c4814922d78c7beb524dd82b2351585f8fe46fefa6875c5efba6641dbba6d5bc8fd503eecbebf11f5da9c56716daab9e400f45e721a7357e45deb9a25d841c4b
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ -I lib
2
+ --format documentation
3
+ --color
4
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ inherit_from: ../../shared_config/.rubocop.yml
2
+
3
+ inherit_mode:
4
+ merge:
5
+ - Exclude
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.5
data/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ ## [0.0.2](https://github.com/open-feature/ruby-sdk-contrib/compare/openfeature-flipt-provider-v0.0.1...openfeature-flipt-provider/v0.0.2) (2025-04-15)
4
+
5
+
6
+ ### 🐛 Bug Fixes
7
+
8
+ * Update Gemfile.lock on flipt provider ([#55](https://github.com/open-feature/ruby-sdk-contrib/issues/55)) ([fd79d7b](https://github.com/open-feature/ruby-sdk-contrib/commit/fd79d7be189367d462c87c06e9a2a65a462c1a91))
9
+
10
+
11
+ ### ✨ New Features
12
+
13
+ * Add Flipt provider gem with basic implementation ([#51](https://github.com/open-feature/ruby-sdk-contrib/issues/51)) ([8e0ae7c](https://github.com/open-feature/ruby-sdk-contrib/commit/8e0ae7ccd24b4c5334bfe6f794737a95ac8d18bb))
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in openfeature-flipt-provider.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,108 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ openfeature-flipt-provider (0.0.2)
5
+ ffi (~> 1.17)
6
+ flipt_client (~> 0.10.0)
7
+ openfeature-sdk (~> 0.4.0)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ ast (2.4.3)
13
+ diff-lcs (1.6.1)
14
+ ffi (1.17.1)
15
+ ffi (1.17.1-aarch64-linux-gnu)
16
+ ffi (1.17.1-aarch64-linux-musl)
17
+ ffi (1.17.1-arm-linux-gnu)
18
+ ffi (1.17.1-arm-linux-musl)
19
+ ffi (1.17.1-arm64-darwin)
20
+ ffi (1.17.1-x86-linux-gnu)
21
+ ffi (1.17.1-x86-linux-musl)
22
+ ffi (1.17.1-x86_64-darwin)
23
+ ffi (1.17.1-x86_64-linux-gnu)
24
+ ffi (1.17.1-x86_64-linux-musl)
25
+ flipt_client (0.10.0)
26
+ json (2.10.2)
27
+ language_server-protocol (3.17.0.4)
28
+ lint_roller (1.1.0)
29
+ openfeature-sdk (0.4.0)
30
+ parallel (1.27.0)
31
+ parser (3.3.8.0)
32
+ ast (~> 2.4.1)
33
+ racc
34
+ prism (1.4.0)
35
+ racc (1.8.1)
36
+ rainbow (3.1.1)
37
+ rake (13.2.1)
38
+ regexp_parser (2.10.0)
39
+ rspec (3.12.0)
40
+ rspec-core (~> 3.12.0)
41
+ rspec-expectations (~> 3.12.0)
42
+ rspec-mocks (~> 3.12.0)
43
+ rspec-core (3.12.3)
44
+ rspec-support (~> 3.12.0)
45
+ rspec-expectations (3.12.4)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.12.0)
48
+ rspec-mocks (3.12.7)
49
+ diff-lcs (>= 1.2.0, < 2.0)
50
+ rspec-support (~> 3.12.0)
51
+ rspec-support (3.12.2)
52
+ rubocop (1.75.2)
53
+ json (~> 2.3)
54
+ language_server-protocol (~> 3.17.0.2)
55
+ lint_roller (~> 1.1.0)
56
+ parallel (~> 1.10)
57
+ parser (>= 3.3.0.2)
58
+ rainbow (>= 2.2.2, < 4.0)
59
+ regexp_parser (>= 2.9.3, < 3.0)
60
+ rubocop-ast (>= 1.44.0, < 2.0)
61
+ ruby-progressbar (~> 1.7)
62
+ unicode-display_width (>= 2.4.0, < 4.0)
63
+ rubocop-ast (1.44.1)
64
+ parser (>= 3.3.7.2)
65
+ prism (~> 1.4)
66
+ rubocop-performance (1.25.0)
67
+ lint_roller (~> 1.1)
68
+ rubocop (>= 1.75.0, < 2.0)
69
+ rubocop-ast (>= 1.38.0, < 2.0)
70
+ ruby-progressbar (1.13.0)
71
+ standard (1.49.0)
72
+ language_server-protocol (~> 3.17.0.2)
73
+ lint_roller (~> 1.0)
74
+ rubocop (~> 1.75.2)
75
+ standard-custom (~> 1.0.0)
76
+ standard-performance (~> 1.8)
77
+ standard-custom (1.0.2)
78
+ lint_roller (~> 1.0)
79
+ rubocop (~> 1.50)
80
+ standard-performance (1.8.0)
81
+ lint_roller (~> 1.1)
82
+ rubocop-performance (~> 1.25.0)
83
+ unicode-display_width (3.1.4)
84
+ unicode-emoji (~> 4.0, >= 4.0.4)
85
+ unicode-emoji (4.0.4)
86
+
87
+ PLATFORMS
88
+ aarch64-linux-gnu
89
+ aarch64-linux-musl
90
+ arm-linux-gnu
91
+ arm-linux-musl
92
+ arm64-darwin
93
+ ruby
94
+ x86-linux-gnu
95
+ x86-linux-musl
96
+ x86_64-darwin
97
+ x86_64-linux-gnu
98
+ x86_64-linux-musl
99
+
100
+ DEPENDENCIES
101
+ openfeature-flipt-provider!
102
+ rake (~> 13.0)
103
+ rspec (~> 3.12.0)
104
+ rubocop
105
+ standard (>= 1.35.1)
106
+
107
+ BUNDLED WITH
108
+ 2.5.16
data/README.md ADDED
@@ -0,0 +1,57 @@
1
+ <p align="center">
2
+ <img width="400" src="https://raw.githubusercontent.com/flipt-io/flipt/main/logo.svg" alt="flipt logo" />
3
+ </p>
4
+
5
+ # Flipt - OpenFeature Ruby provider
6
+
7
+ This repository contains the Ruby provider for [Flipt](https://www.flipt.io/), a feature flagging and experimentation platform.
8
+
9
+ In conjunction with the [OpenFeature SDK](https://openfeature.dev/docs/reference/concepts/provider/) you can use this provider to integrate Flipt into your Ruby application.
10
+
11
+ For documentation on how to use Flipt, please refer to the [Flipt documentation](https://docs.flipt.io/).
12
+
13
+ ## Installation
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ gem 'openfeature-flipt-provider'
18
+ ```
19
+
20
+ And then execute:
21
+ ```bash
22
+ $ bundle
23
+ ```
24
+
25
+ ## Usage
26
+ To use the Flipt provider, you need to create an instance of the provider and pass it to the OpenFeature SDK.
27
+
28
+ ```ruby
29
+ require "open_feature/sdk"
30
+ require "openfeature/flipt/provider"
31
+
32
+ OpenFeature::SDK.configure do |config|
33
+ config.set_provider(
34
+ OpenFeature::Flipt::Provider.new(
35
+ namespace: "flipt-namespace",
36
+ options: {
37
+ url: "https://url-to-flipt-server",
38
+ update_interval: 60,
39
+ authentication: "token"
40
+ }
41
+ )
42
+ )
43
+ end
44
+ client = OpenFeature::SDK.build_client
45
+
46
+ # Check if a feature is enabled
47
+ if client.fetch_boolean_value(flag_key: "featureEnabled", default_value: false)
48
+ puts "Feature is enabled"
49
+ else
50
+ puts "Feature is disabled"
51
+ end
52
+ ```
53
+
54
+ For a complete list of configuration options, such as authentication and error strategies, refer to the [Flipt Client Ruby SDK documentation](https://github.com/flipt-io/flipt-client-sdks/tree/main/flipt-client-ruby#constructor-arguments).
55
+
56
+ ## Contributing
57
+ https://github.com/open-feature/ruby-sdk-contrib
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ require "standard/rake"
9
+
10
+ task default: %i[standard spec]
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "openfeature/flipt/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
+ require "irb"
11
+ IRB.start(__FILE__)
data/bin/rake 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 'rake' 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("rake", "rake")
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,167 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "flipt_client"
4
+ require "open_feature/sdk"
5
+
6
+ module OpenFeature
7
+ module Flipt
8
+ class Provider
9
+ PROVIDER_NAME = "Flipt Provider"
10
+
11
+ # @param namespace [String] Namespace to use when fetching flags.
12
+ # @param options [Hash] Options to pass to the Flipt client.
13
+ def initialize(namespace: "default", options: {})
14
+ @client = ::Flipt::EvaluationClient.new(namespace, options)
15
+ end
16
+
17
+ def metadata
18
+ @_metadata ||= SDK::Provider::ProviderMetadata.new(name: PROVIDER_NAME).freeze
19
+ end
20
+
21
+ def fetch_boolean_value(flag_key:, default_value:, evaluation_context: nil)
22
+ fetch_value(
23
+ flag_key: flag_key,
24
+ default_value: default_value,
25
+ evaluation_context: evaluation_context,
26
+ evaluation_method: :evaluate_boolean,
27
+ result_key: "enabled"
28
+ )
29
+ end
30
+
31
+ def fetch_string_value(flag_key:, default_value:, evaluation_context: nil)
32
+ fetch_value(
33
+ flag_key: flag_key,
34
+ default_value: default_value,
35
+ evaluation_context: evaluation_context,
36
+ evaluation_method: :evaluate_variant,
37
+ result_key: "variant_key"
38
+ )
39
+ end
40
+
41
+ def fetch_number_value(flag_key:, default_value:, evaluation_context: nil)
42
+ fetch_numeric_value(flag_key:, default_value:, evaluation_context:, allowed_types: [Numeric])
43
+ end
44
+
45
+ def fetch_integer_value(flag_key:, default_value:, evaluation_context: nil)
46
+ fetch_numeric_value(flag_key:, default_value:, evaluation_context:, allowed_types: [Integer])
47
+ end
48
+
49
+ def fetch_float_value(flag_key:, default_value:, evaluation_context: nil)
50
+ fetch_numeric_value(flag_key:, default_value:, evaluation_context:, allowed_types: [Float])
51
+ end
52
+
53
+ def fetch_object_value(flag_key:, default_value:, evaluation_context: nil)
54
+ result = fetch_value(
55
+ flag_key: flag_key,
56
+ default_value: default_value,
57
+ evaluation_context: evaluation_context,
58
+ evaluation_method: :evaluate_variant,
59
+ result_key: "variant_key"
60
+ )
61
+
62
+ unless result.value.is_a?(Hash)
63
+ begin
64
+ result.value = JSON.parse(result.value)
65
+ rescue JSON::ParserError, TypeError
66
+ return OpenFeature::SDK::Provider::ResolutionDetails.new(
67
+ value: default_value,
68
+ error_message: "Could not parse '#{result.value}' as JSON",
69
+ reason: OpenFeature::SDK::Provider::Reason::ERROR
70
+ )
71
+ end
72
+ end
73
+ result
74
+ end
75
+
76
+ private
77
+
78
+ def fetch_value(flag_key:, default_value:, evaluation_context:, evaluation_method:, result_key:)
79
+ transformed_eval_context = transform_context(evaluation_context)
80
+
81
+ begin
82
+ response = @client.send(evaluation_method, {
83
+ flag_key: flag_key,
84
+ entity_id: evaluation_context&.fetch("targeting_key", nil) || "default",
85
+ context: transformed_eval_context
86
+ })
87
+
88
+ if %w[FLAG_DISABLED_EVALUATION_REASON].include?(response["result"]["reason"])
89
+ OpenFeature::SDK::Provider::ResolutionDetails.new(
90
+ value: default_value,
91
+ reason: OpenFeature::SDK::Provider::Reason::DISABLED
92
+ )
93
+ elsif %w[DEFAULT_EVALUATION_REASON MATCH_EVALUATION_REASON].include?(response["result"]["reason"])
94
+ OpenFeature::SDK::Provider::ResolutionDetails.new(
95
+ value: response["result"][result_key],
96
+ reason: OpenFeature::SDK::Provider::Reason::TARGETING_MATCH
97
+ )
98
+ elsif %w[UNKNOWN_EVALUATION_REASON].include?(response["result"]["reason"])
99
+ OpenFeature::SDK::Provider::ResolutionDetails.new(
100
+ value: default_value,
101
+ reason: OpenFeature::SDK::Provider::Reason::UNKNOWN
102
+ )
103
+ else
104
+ OpenFeature::SDK::Provider::ResolutionDetails.new(
105
+ value: default_value,
106
+ reason: OpenFeature::SDK::Provider::Reason::DEFAULT
107
+ )
108
+ end
109
+ rescue => e
110
+ OpenFeature::SDK::Provider::ResolutionDetails.new(
111
+ value: default_value,
112
+ error_message: e.message,
113
+ reason: OpenFeature::SDK::Provider::Reason::ERROR
114
+ )
115
+ end
116
+ end
117
+
118
+ def fetch_numeric_value(flag_key:, default_value:, evaluation_context:, allowed_types:)
119
+ result = fetch_value(
120
+ flag_key: flag_key,
121
+ default_value: default_value,
122
+ evaluation_context: evaluation_context,
123
+ evaluation_method: :evaluate_variant,
124
+ result_key: "variant_key"
125
+ )
126
+
127
+ unless result.value.is_a?(Numeric)
128
+ begin
129
+ parsed_value = Float(result.value)
130
+ # Only convert to integer if it's a whole number and allowed_types is [Integer]
131
+ result.value = if allowed_types == [Integer] && parsed_value.to_i == parsed_value
132
+ parsed_value.to_i
133
+ else
134
+ parsed_value
135
+ end
136
+ rescue ArgumentError, TypeError
137
+ return OpenFeature::SDK::Provider::ResolutionDetails.new(
138
+ value: default_value,
139
+ error_message: "Could not convert '#{result.value}' to #{allowed_types.first.name.downcase}",
140
+ reason: OpenFeature::SDK::Provider::Reason::ERROR
141
+ )
142
+ end
143
+ end
144
+
145
+ unless allowed_types.any? { |type| result.value.is_a?(type) }
146
+ return OpenFeature::SDK::Provider::ResolutionDetails.new(
147
+ value: default_value,
148
+ error_message: "Value '#{result.value}' is not a #{allowed_types.first.name.downcase}",
149
+ reason: OpenFeature::SDK::Provider::Reason::ERROR
150
+ )
151
+ end
152
+
153
+ result
154
+ end
155
+
156
+ def transform_context(context)
157
+ eval_context = {}
158
+ context&.each do |key, value|
159
+ next if key == "targeting_key"
160
+
161
+ eval_context[key] = value.to_s
162
+ end
163
+ eval_context
164
+ end
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenFeature
4
+ module Flipt
5
+ VERSION = "0.0.2"
6
+ end
7
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/openfeature/flipt/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "openfeature-flipt-provider"
7
+ spec.version = OpenFeature::Flipt::VERSION
8
+ spec.authors = ["Firdaus Al Ghifari"]
9
+ spec.email = ["firdaus.alghifari@gmail.com"]
10
+
11
+ spec.summary = "OpenFeature Flipt Provider for Ruby"
12
+ spec.description = "OpenFeature Flipt Provider for Ruby"
13
+ spec.homepage = "https://github.com/open-feature/ruby-sdk-contrib/tree/main/providers/openfeature-flipt-provider"
14
+ spec.license = "Apache-2.0"
15
+ spec.required_ruby_version = ">= 3.1"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/open-feature/ruby-sdk-contrib/tree/main/providers/openfeature-flipt-provider"
19
+ spec.metadata["changelog_uri"] = "https://github.com/open-feature/ruby-sdk-contrib/blob/main/providers/openfeature-flipt-provider/CHANGELOG.md"
20
+ spec.metadata["bug_tracker_uri"] = "https://github.com/open-feature/ruby-sdk-contrib/issues"
21
+ spec.metadata["documentation_uri"] = "https://github.com/open-feature/ruby-sdk-contrib/tree/main/providers/openfeature-flipt-provider/README.md"
22
+
23
+ # Specify which files should be added to the gem when it is released.
24
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
26
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
27
+ end
28
+ spec.bindir = "exe"
29
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_dependency "ffi", "~> 1.17"
33
+ spec.add_dependency "openfeature-sdk", "~> 0.4.0"
34
+ spec.add_dependency "flipt_client", "~> 0.10.0"
35
+
36
+ spec.add_development_dependency "rake", "~> 13.0"
37
+ spec.add_development_dependency "rspec", "~> 3.12.0"
38
+ spec.add_development_dependency "standard", ">= 1.35.1"
39
+ spec.add_development_dependency "rubocop"
40
+ end
metadata ADDED
@@ -0,0 +1,161 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: openfeature-flipt-provider
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Firdaus Al Ghifari
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2025-04-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: openfeature-sdk
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.4.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.4.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: flipt_client
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.10.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.10.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.12.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.12.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: standard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 1.35.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 1.35.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: OpenFeature Flipt Provider for Ruby
112
+ email:
113
+ - firdaus.alghifari@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - ".rubocop.yml"
121
+ - ".ruby-version"
122
+ - CHANGELOG.md
123
+ - Gemfile
124
+ - Gemfile.lock
125
+ - README.md
126
+ - Rakefile
127
+ - bin/console
128
+ - bin/rake
129
+ - bin/setup
130
+ - lib/openfeature/flipt/provider.rb
131
+ - lib/openfeature/flipt/version.rb
132
+ - openfeature-flipt-provider.gemspec
133
+ homepage: https://github.com/open-feature/ruby-sdk-contrib/tree/main/providers/openfeature-flipt-provider
134
+ licenses:
135
+ - Apache-2.0
136
+ metadata:
137
+ homepage_uri: https://github.com/open-feature/ruby-sdk-contrib/tree/main/providers/openfeature-flipt-provider
138
+ source_code_uri: https://github.com/open-feature/ruby-sdk-contrib/tree/main/providers/openfeature-flipt-provider
139
+ changelog_uri: https://github.com/open-feature/ruby-sdk-contrib/blob/main/providers/openfeature-flipt-provider/CHANGELOG.md
140
+ bug_tracker_uri: https://github.com/open-feature/ruby-sdk-contrib/issues
141
+ documentation_uri: https://github.com/open-feature/ruby-sdk-contrib/tree/main/providers/openfeature-flipt-provider/README.md
142
+ post_install_message:
143
+ rdoc_options: []
144
+ require_paths:
145
+ - lib
146
+ required_ruby_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '3.1'
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ requirements: []
157
+ rubygems_version: 3.5.22
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: OpenFeature Flipt Provider for Ruby
161
+ test_files: []