Skip to content

Commit 320590d

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

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,9 +325,18 @@ 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

spec/api/devcycle_api_spec.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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)