Skip to content

Commit 15eb7fc

Browse files
jsalaberCopilot
andcommitted
Update lib/devcycle-ruby-server-sdk/api/client.rb
Co-authored-by: Copilot <[email protected]>
1 parent 6866b51 commit 15eb7fc

File tree

2 files changed

+54
-8
lines changed

2 files changed

+54
-8
lines changed

lib/devcycle-ruby-server-sdk/api/client.rb

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -325,20 +325,26 @@ def variable_with_http_info(key, user, default, opts = {})
325325
if @api_client.config.debugging
326326
@api_client.config.logger.debug "API called: DevCycle::Client#variable\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
327327
end
328-
if default && data.type && data.type.to_s != default.class.name
329-
eval = { reason: DevCycle::EVAL_REASONS::DEFAULT, details: DevCycle::DEFAULT_REASON_DETAILS::TYPE_MISMATCH }
330-
return Variable.new(key: key, value: default, isDefaulted: true, eval: eval)
328+
if default && data.type
329+
api_type_to_ruby_class = {
330+
'Boolean' => [TrueClass, FalseClass],
331+
'Number' => [Integer, Float],
332+
'String' => [String],
333+
'JSON' => [Hash]
334+
}
335+
ruby_classes = api_type_to_ruby_class[data.type.to_s]
336+
unless ruby_classes && ruby_classes.any? { |klass| default.is_a?(klass) }
337+
eval = { reason: DevCycle::EVAL_REASONS::DEFAULT, details: DevCycle::DEFAULT_REASON_DETAILS::TYPE_MISMATCH }
338+
return Variable.new(key: key, value: default, isDefaulted: true, eval: eval)
339+
end
331340
end
332341
return data
333342
rescue ApiError => error
334343
if error.code == 404
335-
eval = { reason: DevCycle::EVAL_REASONS::DEFAULT, details: DevCycle::DEFAULT_REASON_DETAILS::MISSING_VARIABLE }
336-
else
337344
@api_client.config.logger.error("Failed to retrieve variable value: #{error.message}")
338-
eval = { reason: DevCycle::EVAL_REASONS::DEFAULT, details: DevCycle::DEFAULT_REASON_DETAILS::ERROR }
339345
end
340346

341-
return Variable.new(key: key, value: default, isDefaulted: true, eval: eval)
347+
return Variable.new(key: key, value: default, isDefaulted: true, eval: { reason: DevCycle::EVAL_REASONS::DEFAULT, details: DevCycle::DEFAULT_REASON_DETAILS::ERROR })
342348
end
343349
end
344350

spec/api/devcycle_api_spec.rb

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
result = @api_instance.variable(@user, "ruby-example-tests-default", false)
7373
expect(result.isDefaulted).to eq true
7474
expect(result.eval[:reason]).to eq "DEFAULT"
75-
expect(result.eval[:details]).to eq "Missing Variable"
75+
expect(result.eval[:details]).to eq "Error"
7676

7777
result = @api_instance.variable_value(@user, "ruby-example-tests-default", true)
7878
expect(result).to eq true
@@ -94,10 +94,50 @@
9494
result = @api_instance.variable_value(@user, "test", true)
9595
expect(result).to eq true
9696

97+
result = @api_instance.variable(@user, "test-number-variable", 0)
98+
expect(result.isDefaulted).to eq false
99+
expect(result.value).to eq 123
100+
101+
result = @api_instance.variable(@user, "test-number-variable", 0)
102+
expect(result.isDefaulted).to eq false
103+
expect(result.value).to eq 123
104+
105+
result = @api_instance.variable(@user, "test-float-variable", 0.0)
106+
expect(result.isDefaulted).to eq false
107+
expect(result.value).to eq 4.56
108+
109+
result = @api_instance.variable(@user, "test-string-variable", "")
110+
expect(result.isDefaulted).to eq false
111+
expect(result.value).to eq "on"
112+
113+
result = @api_instance.variable(@user, "test-json-variable", {})
114+
expect(result.isDefaulted).to eq false
115+
expect(result.value).to eq({:message => "a"})
116+
97117
result = @api_instance.variable(@user, "test", "false")
98118
expect(result.isDefaulted).to eq true
99119
expect(result.eval[:reason]).to eq "DEFAULT"
100120
expect(result.eval[:details]).to eq "Variable Type Mismatch"
121+
122+
result = @api_instance.variable(@user, "test-number-variable", "123")
123+
expect(result.isDefaulted).to eq true
124+
expect(result.eval[:reason]).to eq "DEFAULT"
125+
expect(result.eval[:details]).to eq "Variable Type Mismatch"
126+
127+
result = @api_instance.variable(@user, "test-number-variable", true)
128+
expect(result.isDefaulted).to eq true
129+
expect(result.eval[:reason]).to eq "DEFAULT"
130+
expect(result.eval[:details]).to eq "Variable Type Mismatch"
131+
132+
result = @api_instance.variable(@user, "test-string-variable", true)
133+
expect(result.isDefaulted).to eq true
134+
expect(result.eval[:reason]).to eq "DEFAULT"
135+
expect(result.eval[:details]).to eq "Variable Type Mismatch"
136+
137+
result = @api_instance.variable(@user, "test-json-variable", "on")
138+
expect(result.isDefaulted).to eq true
139+
expect(result.eval[:reason]).to eq "DEFAULT"
140+
expect(result.eval[:details]).to eq "Variable Type Mismatch"
101141
end
102142
end
103143

0 commit comments

Comments
 (0)