openfeature-ruby-sdk-contrib 0.0.5 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81acb0df43cfaad72374189f8b6f00620ecc904f06c4a615bdba854b7dda92a9
4
- data.tar.gz: 532cd57ceaa4dbc181e24f40131cb869cab118fa1d7e7cb5c4928ac5cda08d0c
3
+ metadata.gz: 3e791af8182bb9d8d4bb7c50c76415a85103c3be707b114dd143b506bf375565
4
+ data.tar.gz: 4b17588e1e77169ee3d646f5fef7e6e6a9cf1318d3d95ce9ce27e51823053a2c
5
5
  SHA512:
6
- metadata.gz: 879064f8e107e7798e2deef08b9e7ea4d2ecf58328674816f5f23cf7525e9488bfd74f2b0164b04376fee650fee4d4f0bc2635720f31549c96fdf4f46116b349
7
- data.tar.gz: c697452a7a87565a724c306f39a1bfd706d27a5e921b5e73d6339972fa50a625273e85a0d2746d1bf55f7fc4c5c85f7e1e7e4292a74041e4c77ab1825dbe38e3
6
+ metadata.gz: af5c29d9bc12d92a52f45581e754973cd1c2a019023a8a1af837733562c96621c6b453090c91e0ea2fb4bf4b61a6733dc448466535769bfb6c80d7179bf71db7
7
+ data.tar.gz: 00a06c0ebce0599856aae41f38bcb04b098ce893556e3b4479a6f33b2608d9d32014632f9052e99f76ef35fa34ca5a84addd42569306346c9cf97e4cab3e4983
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- openfeature-ruby-sdk-contrib (0.0.4)
4
+ openfeature-ruby-sdk-contrib (0.0.5)
5
5
  concurrent-ruby (~> 1.2.2)
6
- faraday (~> 2.7.4)
6
+ faraday (~> 2.7.10)
7
7
  openfeature-sdk (~> 0.1)
8
8
 
9
9
  GEM
@@ -14,69 +14,84 @@ GEM
14
14
  coderay (1.1.3)
15
15
  concurrent-ruby (1.2.2)
16
16
  diff-lcs (1.5.0)
17
- faraday (2.7.4)
17
+ faraday (2.7.10)
18
18
  faraday-net_http (>= 2.0, < 3.1)
19
19
  ruby2_keywords (>= 0.0.4)
20
20
  faraday-net_http (3.0.2)
21
21
  json (2.6.3)
22
+ language_server-protocol (3.17.0.3)
23
+ lint_roller (1.1.0)
22
24
  method_source (1.0.0)
23
25
  openfeature-sdk (0.1.0)
24
- parallel (1.22.1)
25
- parser (3.2.1.0)
26
+ parallel (1.23.0)
27
+ parser (3.2.2.3)
26
28
  ast (~> 2.4.1)
27
- pry (0.14.1)
29
+ racc
30
+ pry (0.14.2)
28
31
  coderay (~> 1.1)
29
32
  method_source (~> 1.0)
30
33
  pry-byebug (3.10.1)
31
34
  byebug (~> 11.0)
32
35
  pry (>= 0.13, < 0.15)
36
+ racc (1.7.1)
33
37
  rainbow (3.1.1)
34
38
  rake (13.0.6)
35
- regexp_parser (2.7.0)
36
- rexml (3.2.5)
37
- rspec (3.11.0)
38
- rspec-core (~> 3.11.0)
39
- rspec-expectations (~> 3.11.0)
40
- rspec-mocks (~> 3.11.0)
41
- rspec-core (3.11.0)
42
- rspec-support (~> 3.11.0)
43
- rspec-expectations (3.11.1)
39
+ regexp_parser (2.8.1)
40
+ rexml (3.2.6)
41
+ rspec (3.12.0)
42
+ rspec-core (~> 3.12.0)
43
+ rspec-expectations (~> 3.12.0)
44
+ rspec-mocks (~> 3.12.0)
45
+ rspec-core (3.12.2)
46
+ rspec-support (~> 3.12.0)
47
+ rspec-expectations (3.12.3)
44
48
  diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.11.0)
46
- rspec-mocks (3.11.1)
49
+ rspec-support (~> 3.12.0)
50
+ rspec-mocks (3.12.6)
47
51
  diff-lcs (>= 1.2.0, < 2.0)
48
- rspec-support (~> 3.11.0)
49
- rspec-support (3.11.1)
50
- rubocop (1.48.0)
52
+ rspec-support (~> 3.12.0)
53
+ rspec-support (3.12.1)
54
+ rubocop (1.52.1)
51
55
  json (~> 2.3)
52
56
  parallel (~> 1.10)
53
- parser (>= 3.2.0.0)
57
+ parser (>= 3.2.2.3)
54
58
  rainbow (>= 2.2.2, < 4.0)
55
59
  regexp_parser (>= 1.8, < 3.0)
56
60
  rexml (>= 3.2.5, < 4.0)
57
- rubocop-ast (>= 1.26.0, < 2.0)
61
+ rubocop-ast (>= 1.28.0, < 2.0)
58
62
  ruby-progressbar (~> 1.7)
59
63
  unicode-display_width (>= 2.4.0, < 3.0)
60
- rubocop-ast (1.27.0)
64
+ rubocop-ast (1.29.0)
61
65
  parser (>= 3.2.1.0)
62
- rubocop-capybara (2.17.1)
66
+ rubocop-capybara (2.18.0)
63
67
  rubocop (~> 1.41)
64
- rubocop-performance (1.15.2)
68
+ rubocop-factory_bot (2.23.1)
69
+ rubocop (~> 1.33)
70
+ rubocop-performance (1.18.0)
65
71
  rubocop (>= 1.7.0, < 2.0)
66
72
  rubocop-ast (>= 0.4.0)
67
73
  rubocop-rake (0.6.0)
68
74
  rubocop (~> 1.0)
69
- rubocop-rspec (2.19.0)
75
+ rubocop-rspec (2.23.0)
70
76
  rubocop (~> 1.33)
71
77
  rubocop-capybara (~> 2.17)
78
+ rubocop-factory_bot (~> 2.22)
72
79
  ruby-progressbar (1.13.0)
73
80
  ruby2_keywords (0.0.5)
74
- standard (0.0.36)
75
- rubocop (>= 0.63)
81
+ standard (1.30.1)
82
+ language_server-protocol (~> 3.17.0.2)
83
+ lint_roller (~> 1.0)
84
+ rubocop (~> 1.52.0)
85
+ standard-custom (~> 1.0.0)
86
+ standard-performance (~> 1.1.0)
87
+ standard-custom (1.0.2)
88
+ lint_roller (~> 1.0)
89
+ rubocop (~> 1.50)
90
+ standard-performance (1.1.2)
91
+ lint_roller (~> 1.1)
92
+ rubocop-performance (~> 1.18.0)
76
93
  unicode-display_width (2.4.2)
77
- webrick (1.7.0)
78
- yard (0.9.28)
79
- webrick (~> 1.7.0)
94
+ yard (0.9.34)
80
95
 
81
96
  PLATFORMS
82
97
  arm64-darwin-22
@@ -90,7 +105,7 @@ DEPENDENCIES
90
105
  rubocop-performance (~> 1.15)
91
106
  rubocop-rake (~> 0.6)
92
107
  rubocop-rspec (~> 2.19)
93
- standard (~> 0.0)
108
+ standard (>= 1.0.0)
94
109
  yard (~> 0.9)
95
110
 
96
111
  BUNDLED WITH
@@ -13,6 +13,9 @@ module OpenFeature
13
13
  keyword_init: true
14
14
  )
15
15
 
16
+ # @return [Hash]
17
+ attr_reader :extra_options
18
+
16
19
  # @return [String]
17
20
  attr_reader :source
18
21
 
@@ -42,11 +45,12 @@ module OpenFeature
42
45
  # @param custom_parser [#call<String>] If your file is not JSON or YAML you can pass a custom parser as a lambda here which will be used to parse the file instead.
43
46
  # Even if your file is YAML or JSON you can pass this option if you opt to use a parser other than <tt>YAML.load</tt> or <tt>JSON.parse</tt>.
44
47
  # The raw file contents will be passed to this Proc.
45
- def initialize(source:, format: :yaml, deep_keys: [], cache_duration: Float::INFINITY, custom_parser: nil)
48
+ def initialize(source:, format: :yaml, deep_keys: [], cache_duration: Float::INFINITY, custom_parser: nil, extra_options: {})
46
49
  @source = source
47
50
  @format = format
48
51
  @deep_keys = deep_keys
49
52
  @cache_duration = cache_duration
53
+ @extra_options = extra_options
50
54
  @metadata = Metadata.new(name: self.class::NAME).freeze
51
55
 
52
56
  if format == :yaml && !custom_parser
@@ -160,7 +164,7 @@ module OpenFeature
160
164
 
161
165
  return ResolutionDetails.new(value: nil) if actual_value.nil?
162
166
 
163
- return_types = Array(return_types)
167
+ return_types = Array(return_types) + [NilClass]
164
168
  variant_value = actual_value["variants"] ? actual_value["variants"][actual_value["value"]] : actual_value["value"]
165
169
 
166
170
  raise OpenFeature::SDK::Contrib::InvalidReturnValueError, "Invalid flag value found: #{variant_value} is not in #{return_types.join(', ')}" unless return_types.include?(variant_value.class)
@@ -10,7 +10,7 @@ module OpenFeature
10
10
  # To use <tt>FileProvider</tt>, it can be set during the configuration of the SDK
11
11
  #
12
12
  # OpenFeature::SDK.configure do |config|
13
- # config.provider = OpenFeature::SDK::Contrib::FileProvider.new(file_path: "/path/to/file")
13
+ # config.provider = OpenFeature::SDK::Contrib::Providers::FileProvider.new(source: "/path/to/file")
14
14
  # end
15
15
  #
16
16
  # Within the <tt>FileProvider</tt>, the following methods exist
@@ -0,0 +1,62 @@
1
+ require "openfeature/sdk"
2
+ require "faraday"
3
+
4
+ module OpenFeature
5
+ module SDK
6
+ module Contrib
7
+ module Providers
8
+ # Read feature flags from a URL.
9
+ #
10
+ # To use <tt>FileProvider</tt>, it can be set during the configuration of the SDK. The `extra_options` hash can be anything passed to `Faraday.new``
11
+ #
12
+ # OpenFeature::SDK.configure do |config|
13
+ # config.provider = OpenFeature::SDK::Contrib::Providers::HttpProvider.new(source: http://path_to_flags, extra_options: { headers: { Auhorization: "token" }})
14
+ # end
15
+ #
16
+ # Within the <tt>FileProvider</tt>, the following methods exist
17
+ #
18
+ # * <tt>fetch_boolean_value</tt> - Retrieve feature flag boolean value from the file
19
+ #
20
+ # * <tt>fetch_string_value</tt> - Retrieve feature flag string value from the file
21
+ #
22
+ # * <tt>fetch_number_value</tt> - Retrieve feature flag number value from the file
23
+ #
24
+ # * <tt>fetch_object_value</tt> - Retrieve feature flag object value from the file
25
+ class HttpProvider
26
+ include Common
27
+
28
+ NAME = "Http Provider".freeze
29
+
30
+ def read_and_parse_flags
31
+ headers = extra_options.fetch(:headers, {})
32
+ uri = URI(source)
33
+ base_url = "#{uri.scheme}://#{uri.host}:#{uri.port}"
34
+
35
+ if format == :yaml
36
+ headers["Content-Type"] ||= "application/yaml"
37
+ elsif format == :json
38
+ headers["Content-Type"] ||= "application/json"
39
+ end
40
+
41
+ client = Faraday.new(url: base_url, **extra_options, headers: headers)
42
+ res = client.get(uri.request_uri)
43
+
44
+ return custom_parser.call(res.body) if custom_parser
45
+
46
+ begin
47
+ @flag_contents = if format == :yaml
48
+ YAML.safe_load(res.body)
49
+ else
50
+ JSON.parse(res.body)
51
+ end
52
+ rescue
53
+ @flag_contents = {}
54
+ end
55
+
56
+ @flag_contents
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -3,7 +3,7 @@
3
3
  module OpenFeature
4
4
  module SDK
5
5
  module Contrib
6
- VERSION = "0.0.5"
6
+ VERSION = "0.1.0"
7
7
  end
8
8
  end
9
9
  end
@@ -4,6 +4,7 @@ require_relative "contrib/client"
4
4
  require_relative "contrib/version"
5
5
  require_relative "contrib/providers/common"
6
6
  require_relative "contrib/providers/file_provider"
7
+ require_relative "contrib/providers/http_provider"
7
8
 
8
9
  module OpenFeature
9
10
  module SDK
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openfeature-ruby-sdk-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Howe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-12 00:00:00.000000000 Z
11
+ date: 2023-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.7.4
33
+ version: 2.7.10
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.7.4
40
+ version: 2.7.10
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: openfeature-sdk
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.48'
89
+ version: 1.55.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.48'
96
+ version: 1.55.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rubocop-performance
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -140,16 +140,16 @@ dependencies:
140
140
  name: standard
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: '0.0'
145
+ version: 1.0.0
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: '0.0'
152
+ version: 1.0.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: yard
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -182,6 +182,7 @@ files:
182
182
  - lib/open_feature/sdk/contrib/client.rb
183
183
  - lib/open_feature/sdk/contrib/providers/common.rb
184
184
  - lib/open_feature/sdk/contrib/providers/file_provider.rb
185
+ - lib/open_feature/sdk/contrib/providers/http_provider.rb
185
186
  - lib/open_feature/sdk/contrib/version.rb
186
187
  homepage: https://github.com/ehowe/openfeature-ruby-sdk-contrib
187
188
  licenses: