openfeature-sdk 0.0.3 → 0.1.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 +4 -4
 - data/.release-please-manifest.json +1 -1
 - data/.rspec +1 -0
 - data/.rubocop.yml +11 -0
 - data/.ruby-version +1 -1
 - data/CHANGELOG.md +9 -0
 - data/Gemfile +2 -0
 - data/Gemfile.lock +3 -1
 - data/README.md +5 -5
 - data/Rakefile +4 -1
 - data/lib/openfeature/sdk/api.rb +53 -0
 - data/lib/openfeature/sdk/client.rb +37 -0
 - data/lib/openfeature/sdk/configuration.rb +25 -0
 - data/lib/openfeature/sdk/metadata.rb +35 -0
 - data/lib/openfeature/sdk/provider/no_op_provider.rb +64 -0
 - data/lib/openfeature/sdk/version.rb +1 -1
 - data/lib/openfeature/sdk.rb +16 -2
 - metadata +8 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6286e12fce6a89a9b310e838fd456bfb6dd0fa35ea7d1bd99745beca5781fbd8
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ed73a6433ca51fa55403f0893097f102e8816ca93c3b4ec5a21c26b019055461
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d81f9a31e72afb82edae5cb499d7cec3955199f9b5c795b7f477be314b1de5e5bc26cf9db292b1333b4da5a41ed3f068cab55494a10c1d355a3b641aa3560e4e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 7aff559376dd006308d92806521731aa0b95ddc098f2455bfdb8aa5d7ca4bb8dc57ac7f8ae5939bef9c66672c032d65548c09d704a74df51f2fdd5cad0aa6c28
         
     | 
    
        data/.rspec
    CHANGED
    
    
    
        data/.rubocop.yml
    CHANGED
    
    | 
         @@ -12,6 +12,17 @@ Style/StringLiteralsInInterpolation: 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            Layout/LineLength:
         
     | 
| 
       14 
14 
     | 
    
         
             
              Max: 120
         
     | 
| 
      
 15 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 16 
     | 
    
         
            +
                - 'spec/**/*.rb'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            Metrics/BlockLength:
         
     | 
| 
      
 19 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 20 
     | 
    
         
            +
                - 'spec/**/*.rb'
         
     | 
| 
      
 21 
     | 
    
         
            +
                - 'openfeature-sdk.gemspec'
         
     | 
| 
       15 
22 
     | 
    
         | 
| 
       16 
23 
     | 
    
         
             
            Gemspec/RequireMFA:
         
     | 
| 
       17 
24 
     | 
    
         
             
              Enabled: false
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            Style/DocumentDynamicEvalDefinition:
         
     | 
| 
      
 27 
     | 
    
         
            +
              # TODO re-enable after figuring out what it actually wants
         
     | 
| 
      
 28 
     | 
    
         
            +
              Enabled: false
         
     | 
    
        data/.ruby-version
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            3.1. 
     | 
| 
      
 1 
     | 
    
         
            +
            3.1.3
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Changelog
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## [0.1.0](https://github.com/open-feature/ruby-sdk/compare/v0.0.3...v0.1.0) (2022-12-15)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            ### Features
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            * Add client object ([#34](https://github.com/open-feature/ruby-sdk/issues/34)) ([92f8d0d](https://github.com/open-feature/ruby-sdk/commit/92f8d0d4bf693bf74d0f076621f3453f11d4ca65))
         
     | 
| 
      
 9 
     | 
    
         
            +
            * OpenFeature::SDK.configure ([#41](https://github.com/open-feature/ruby-sdk/issues/41)) ([7587799](https://github.com/open-feature/ruby-sdk/commit/75877997dcb49aeb38a4969734df87b2845e1e6a))
         
     | 
| 
      
 10 
     | 
    
         
            +
            * **spec:** Add API implementation ([#32](https://github.com/open-feature/ruby-sdk/issues/32)) ([d6b0922](https://github.com/open-feature/ruby-sdk/commit/d6b0922a54e9cb714c44dfe58ddab01356f6916b))
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       3 
12 
     | 
    
         
             
            ## [0.0.3](https://github.com/open-feature/ruby-sdk/compare/v0.0.2...v0.0.3) (2022-11-11)
         
     | 
| 
       4 
13 
     | 
    
         | 
| 
       5 
14 
     | 
    
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,12 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                openfeature-sdk (0.0 
     | 
| 
      
 4 
     | 
    
         
            +
                openfeature-sdk (0.1.0)
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            GEM
         
     | 
| 
       7 
7 
     | 
    
         
             
              remote: https://rubygems.org/
         
     | 
| 
       8 
8 
     | 
    
         
             
              specs:
         
     | 
| 
       9 
9 
     | 
    
         
             
                ast (2.4.2)
         
     | 
| 
      
 10 
     | 
    
         
            +
                concurrent-ruby (1.1.10)
         
     | 
| 
       10 
11 
     | 
    
         
             
                diff-lcs (1.5.0)
         
     | 
| 
       11 
12 
     | 
    
         
             
                json (2.6.2)
         
     | 
| 
       12 
13 
     | 
    
         
             
                parallel (1.22.1)
         
     | 
| 
         @@ -55,6 +56,7 @@ PLATFORMS 
     | 
|
| 
       55 
56 
     | 
    
         
             
              x86_64-linux
         
     | 
| 
       56 
57 
     | 
    
         | 
| 
       57 
58 
     | 
    
         
             
            DEPENDENCIES
         
     | 
| 
      
 59 
     | 
    
         
            +
              concurrent-ruby
         
     | 
| 
       58 
60 
     | 
    
         
             
              openfeature-sdk!
         
     | 
| 
       59 
61 
     | 
    
         
             
              rake (~> 13.0)
         
     | 
| 
       60 
62 
     | 
    
         
             
              rspec (~> 3.12.0)
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -50,17 +50,17 @@ end 
     | 
|
| 
       50 
50 
     | 
    
         
             
            client = OpenFeature::SDK.build_client(name: "my-app")
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
            # fetching boolean value feature flag
         
     | 
| 
       53 
     | 
    
         
            -
            bool_value = client.fetch_boolean_value(flag_key: 'boolean_flag', default_value: false) 
     | 
| 
      
 53 
     | 
    
         
            +
            bool_value = client.fetch_boolean_value(flag_key: 'boolean_flag', default_value: false)
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
            # fetching string value feature flag
         
     | 
| 
       56 
     | 
    
         
            -
            string_value = client.fetch_string_value(flag_key: 'string_flag', default_value: false) 
     | 
| 
      
 56 
     | 
    
         
            +
            string_value = client.fetch_string_value(flag_key: 'string_flag', default_value: false)
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            # fetching number value feature flag
         
     | 
| 
       59 
     | 
    
         
            -
            float_value = client.fetch_number_value(flag_key: 'number_value', default_value: 1.0) 
     | 
| 
       60 
     | 
    
         
            -
            integer_value = client.fetch_number_value(flag_key: 'number_value', default_value: 1) 
     | 
| 
      
 59 
     | 
    
         
            +
            float_value = client.fetch_number_value(flag_key: 'number_value', default_value: 1.0)
         
     | 
| 
      
 60 
     | 
    
         
            +
            integer_value = client.fetch_number_value(flag_key: 'number_value', default_value: 1)
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
62 
     | 
    
         
             
            # get an object value
         
     | 
| 
       63 
     | 
    
         
            -
            object = client.fetch_object_value('object_value', JSON.dump({ name: 'object'})) 
     | 
| 
      
 63 
     | 
    
         
            +
            object = client.fetch_object_value(flag_key: 'object_value', default_value: JSON.dump({ name: 'object'}))
         
     | 
| 
       64 
64 
     | 
    
         
             
            ```
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
       66 
66 
     | 
    
         
             
            For complete documentation, visit: https://docs.openfeature.dev/docs/category/concepts
         
     | 
    
        data/Rakefile
    CHANGED
    
    
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "forwardable"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "singleton"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require_relative "configuration"
         
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative "client"
         
     | 
| 
      
 8 
     | 
    
         
            +
            require_relative "metadata"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative "provider/no_op_provider"
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            module OpenFeature
         
     | 
| 
      
 12 
     | 
    
         
            +
              module SDK
         
     | 
| 
      
 13 
     | 
    
         
            +
                # API Initialization and Configuration
         
     | 
| 
      
 14 
     | 
    
         
            +
                #
         
     | 
| 
      
 15 
     | 
    
         
            +
                # Represents the entry point to the API, including configuration of <tt>Provider</tt>,<tt>Hook</tt>,
         
     | 
| 
      
 16 
     | 
    
         
            +
                # and building the <tt>Client</tt>
         
     | 
| 
      
 17 
     | 
    
         
            +
                #
         
     | 
| 
      
 18 
     | 
    
         
            +
                # To use the SDK, you can optionally configure a <tt>Provider</tt>, with <tt>Hook</tt>
         
     | 
| 
      
 19 
     | 
    
         
            +
                #
         
     | 
| 
      
 20 
     | 
    
         
            +
                #   OpenFeature::SDK::API.instance.configure do |config|
         
     | 
| 
      
 21 
     | 
    
         
            +
                #     config.provider = NoOpProvider.new
         
     | 
| 
      
 22 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 23 
     | 
    
         
            +
                #
         
     | 
| 
      
 24 
     | 
    
         
            +
                # If no provider is specified, the <tt>NoOpProvider</tt> is set as the default <tt>Provider</tt>.
         
     | 
| 
      
 25 
     | 
    
         
            +
                # Once the SDK has been configured, a client can be built
         
     | 
| 
      
 26 
     | 
    
         
            +
                #
         
     | 
| 
      
 27 
     | 
    
         
            +
                #   client = OpenFeature::SDK::API.instance.build_client(name: 'my-open-feature-client')
         
     | 
| 
      
 28 
     | 
    
         
            +
                class API
         
     | 
| 
      
 29 
     | 
    
         
            +
                  include Singleton
         
     | 
| 
      
 30 
     | 
    
         
            +
                  extend Forwardable
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def_delegator :@configuration, :provider
         
     | 
| 
      
 33 
     | 
    
         
            +
                  def_delegator :@configuration, :hooks
         
     | 
| 
      
 34 
     | 
    
         
            +
                  def_delegator :@configuration, :context
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  def configuration
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @configuration ||= Configuration.new
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  def configure(&block)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    return unless block_given?
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    block.call(configuration)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  def build_client(name: nil, version: nil)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    client_options = Metadata.new(name: name, version: version).freeze
         
     | 
| 
      
 48 
     | 
    
         
            +
                    provider = Provider::NoOpProvider.new if provider.nil?
         
     | 
| 
      
 49 
     | 
    
         
            +
                    Client.new(provider: provider, client_options: client_options, context: context)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module OpenFeature
         
     | 
| 
      
 4 
     | 
    
         
            +
              module SDK
         
     | 
| 
      
 5 
     | 
    
         
            +
                # TODO: Write documentation
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                class Client
         
     | 
| 
      
 8 
     | 
    
         
            +
                  RESULT_TYPE = %i[boolean string number object].freeze
         
     | 
| 
      
 9 
     | 
    
         
            +
                  SUFFIXES = %i[value details].freeze
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  attr_reader :metadata
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  attr_accessor :hooks
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def initialize(provider:, client_options: nil, context: nil)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @provider = provider
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @metadata = client_options
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @context = context
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @hooks = []
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  RESULT_TYPE.each do |result_type|
         
     | 
| 
      
 23 
     | 
    
         
            +
                    SUFFIXES.each do |suffix|
         
     | 
| 
      
 24 
     | 
    
         
            +
                      class_eval <<-RUBY, __FILE__, __LINE__ + 1
         
     | 
| 
      
 25 
     | 
    
         
            +
                        # def fetch_boolean_details(flag_key:, default_value:, evaluation_context: nil)
         
     | 
| 
      
 26 
     | 
    
         
            +
                        #   result = @provider.fetch_boolean_value(flag_key: flag_key, default_value: default_value, evaluation_context: evaluation_context)
         
     | 
| 
      
 27 
     | 
    
         
            +
                        # end
         
     | 
| 
      
 28 
     | 
    
         
            +
                        def fetch_#{result_type}_#{suffix}(flag_key:, default_value:, evaluation_context: nil)
         
     | 
| 
      
 29 
     | 
    
         
            +
                          result = @provider.fetch_#{result_type}_value(flag_key: flag_key, default_value: default_value, evaluation_context: evaluation_context)
         
     | 
| 
      
 30 
     | 
    
         
            +
                          #{"result.value" if suffix == :value}
         
     | 
| 
      
 31 
     | 
    
         
            +
                        end
         
     | 
| 
      
 32 
     | 
    
         
            +
                      RUBY
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "concurrent"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative "api"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module OpenFeature
         
     | 
| 
      
 8 
     | 
    
         
            +
              module SDK
         
     | 
| 
      
 9 
     | 
    
         
            +
                # Represents the configuration object for the global API where <tt>Provider</tt>, <tt>Hook</tt>,
         
     | 
| 
      
 10 
     | 
    
         
            +
                # and <tt>Context</tt> are configured.
         
     | 
| 
      
 11 
     | 
    
         
            +
                # This class is not meant to be interacted with directly but instead through the <tt>OpenFeature::SDK.configure</tt>
         
     | 
| 
      
 12 
     | 
    
         
            +
                # method
         
     | 
| 
      
 13 
     | 
    
         
            +
                class Configuration
         
     | 
| 
      
 14 
     | 
    
         
            +
                  extend Forwardable
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  attr_accessor :context, :provider, :hooks
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def_delegator :@provider, :metadata
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def initialize
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @hooks = Concurrent::Array.new([])
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module OpenFeature
         
     | 
| 
      
 4 
     | 
    
         
            +
              module SDK
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Metadata structure that defines general metadata relating to a <tt>Provider</tt> or <tt>Client</tt>
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                # Within the Metadata structure, the following attribute readers are available:
         
     | 
| 
      
 8 
     | 
    
         
            +
                #
         
     | 
| 
      
 9 
     | 
    
         
            +
                # * <tt>name</tt> - Defines the name of the structure
         
     | 
| 
      
 10 
     | 
    
         
            +
                #
         
     | 
| 
      
 11 
     | 
    
         
            +
                # * <tt>version</tt> - Allows you to specify version of the Metadata structure
         
     | 
| 
      
 12 
     | 
    
         
            +
                #
         
     | 
| 
      
 13 
     | 
    
         
            +
                # Usage:
         
     | 
| 
      
 14 
     | 
    
         
            +
                #
         
     | 
| 
      
 15 
     | 
    
         
            +
                #   metadata = Metadata.new(name: 'name-for-metadata', version: 'v1.1.3')
         
     | 
| 
      
 16 
     | 
    
         
            +
                #   metadata.name # 'name-for-metadata'
         
     | 
| 
      
 17 
     | 
    
         
            +
                #   metadata.version # version
         
     | 
| 
      
 18 
     | 
    
         
            +
                #   metadata_two = Metadata.new(name: 'name-for-metadata')
         
     | 
| 
      
 19 
     | 
    
         
            +
                #   metadata_two == metadata # true - equality based on values
         
     | 
| 
      
 20 
     | 
    
         
            +
                class Metadata
         
     | 
| 
      
 21 
     | 
    
         
            +
                  attr_reader :name, :version
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def initialize(name:, version: nil)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @name = name
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @version = version
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def ==(other)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    raise ArgumentError("Expected comparison to be between Metadata object") unless other.is_a?(Metadata)
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                    @name == other.name && @version == other.version
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,64 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "../metadata"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            # rubocop:disable Lint/UnusedMethodArgument
         
     | 
| 
      
 6 
     | 
    
         
            +
            module OpenFeature
         
     | 
| 
      
 7 
     | 
    
         
            +
              module SDK
         
     | 
| 
      
 8 
     | 
    
         
            +
                module Provider
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # Defines the default provider that is set if no provider is specified.
         
     | 
| 
      
 10 
     | 
    
         
            +
                  #
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # To use <tt>NoOpProvider</tt>, it can be set during the configuration of the SDK
         
     | 
| 
      
 12 
     | 
    
         
            +
                  #
         
     | 
| 
      
 13 
     | 
    
         
            +
                  #   OpenFeature::SDK.configure do |config|
         
     | 
| 
      
 14 
     | 
    
         
            +
                  #     config.provider = NoOpProvider.new
         
     | 
| 
      
 15 
     | 
    
         
            +
                  #   end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # Within the <tt>NoOpProvider</tt>, the following methods exist
         
     | 
| 
      
 18 
     | 
    
         
            +
                  #
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # * <tt>fetch_boolean_value</tt> - Retrieve feature flag boolean value
         
     | 
| 
      
 20 
     | 
    
         
            +
                  #
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # * <tt>fetch_string_value</tt> - Retrieve feature flag string value
         
     | 
| 
      
 22 
     | 
    
         
            +
                  #
         
     | 
| 
      
 23 
     | 
    
         
            +
                  # * <tt>fetch_number_value</tt> - Retrieve feature flag number value
         
     | 
| 
      
 24 
     | 
    
         
            +
                  #
         
     | 
| 
      
 25 
     | 
    
         
            +
                  # * <tt>fetch_object_value</tt> - Retrieve feature flag object value
         
     | 
| 
      
 26 
     | 
    
         
            +
                  #
         
     | 
| 
      
 27 
     | 
    
         
            +
                  class NoOpProvider
         
     | 
| 
      
 28 
     | 
    
         
            +
                    REASON_NO_OP = "No-op"
         
     | 
| 
      
 29 
     | 
    
         
            +
                    NAME = "No-op Provider"
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                    attr_reader :metadata
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    ResolutionDetails = Struct.new(:value, :reason, :variant, :error_code, :error_message)
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    def initialize
         
     | 
| 
      
 36 
     | 
    
         
            +
                      @metadata = Metadata.new(name: NAME).freeze
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                    def fetch_boolean_value(flag_key:, default_value:, evaluation_context: nil)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      no_op(default_value)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    def fetch_string_value(flag_key:, default_value:, evaluation_context: nil)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      no_op(default_value)
         
     | 
| 
      
 45 
     | 
    
         
            +
                    end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    def fetch_number_value(flag_key:, default_value:, evaluation_context: nil)
         
     | 
| 
      
 48 
     | 
    
         
            +
                      no_op(default_value)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                    def fetch_object_value(flag_key:, default_value:, evaluation_context: nil)
         
     | 
| 
      
 52 
     | 
    
         
            +
                      no_op(default_value)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    private
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                    def no_op(default_value)
         
     | 
| 
      
 58 
     | 
    
         
            +
                      ResolutionDetails.new(value: default_value, reason: REASON_NO_OP)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
            end
         
     | 
| 
      
 64 
     | 
    
         
            +
            # rubocop:enable Lint/UnusedMethodArgument
         
     | 
    
        data/lib/openfeature/sdk.rb
    CHANGED
    
    | 
         @@ -1,10 +1,24 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative "sdk/version"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative "sdk/api"
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            module OpenFeature
         
     | 
| 
      
 7 
     | 
    
         
            +
              # TODO: Add documentation
         
     | 
| 
      
 8 
     | 
    
         
            +
              #
         
     | 
| 
       6 
9 
     | 
    
         
             
              module SDK
         
     | 
| 
       7 
     | 
    
         
            -
                class  
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 11 
     | 
    
         
            +
                  def method_missing(method_name, *args, **kwargs, &block)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    if API.instance.respond_to?(method_name)
         
     | 
| 
      
 13 
     | 
    
         
            +
                      API.instance.send(method_name, *args, **kwargs, &block)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    else
         
     | 
| 
      
 15 
     | 
    
         
            +
                      super
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def respond_to_missing?(method_name, include_private = false)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    API.instance.respond_to?(method_name, include_private) || super
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
       9 
23 
     | 
    
         
             
              end
         
     | 
| 
       10 
24 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: openfeature-sdk
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - OpenFeature Authors
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2022- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2022-12-19 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rake
         
     | 
| 
         @@ -72,6 +72,11 @@ files: 
     | 
|
| 
       72 
72 
     | 
    
         
             
            - README.md
         
     | 
| 
       73 
73 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       74 
74 
     | 
    
         
             
            - lib/openfeature/sdk.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - lib/openfeature/sdk/api.rb
         
     | 
| 
      
 76 
     | 
    
         
            +
            - lib/openfeature/sdk/client.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - lib/openfeature/sdk/configuration.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib/openfeature/sdk/metadata.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - lib/openfeature/sdk/provider/no_op_provider.rb
         
     | 
| 
       75 
80 
     | 
    
         
             
            - lib/openfeature/sdk/version.rb
         
     | 
| 
       76 
81 
     | 
    
         
             
            - release-please-config.json
         
     | 
| 
       77 
82 
     | 
    
         
             
            - renovate.json
         
     | 
| 
         @@ -100,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       100 
105 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       101 
106 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       102 
107 
     | 
    
         
             
            requirements: []
         
     | 
| 
       103 
     | 
    
         
            -
            rubygems_version: 3.3. 
     | 
| 
      
 108 
     | 
    
         
            +
            rubygems_version: 3.3.26
         
     | 
| 
       104 
109 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       105 
110 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       106 
111 
     | 
    
         
             
            summary: OpenFeature SDK for Ruby
         
     |