Skip to content

Commit

Permalink
delete hash if lambda nil and empty hash on requests
Browse files Browse the repository at this point in the history
  • Loading branch information
MarioRuiz committed Mar 23, 2023
1 parent 761875b commit cfb82d7
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 2 deletions.
6 changes: 5 additions & 1 deletion lib/nice_http/utils/set_lambdas.rb
Expand Up @@ -13,7 +13,11 @@ def self.set_lambdas(data, data_orig)
if v.is_a?(Proc)
data_kv = v.call
if data_kv.nil?
data.delete(k) unless data_orig.is_a?(Hash) and data_orig.key?(k)
if data_orig.is_a?(Hash) and data_orig.key?(k)
data[k] = data_orig[k]
else
data.delete(k)
end
else
data[k] = data_kv
end
Expand Down
2 changes: 1 addition & 1 deletion nice_http.gemspec
@@ -1,6 +1,6 @@
Gem::Specification.new do |s|
s.name = 'nice_http'
s.version = '1.9.7'
s.version = '1.9.8'
s.summary = "NiceHttp -- simplest library for accessing and testing HTTP and REST resources. Get http logs and statistics automatically. Use hashes on your requests. Access JSON even easier."
s.description = "NiceHttp -- simplest library for accessing and testing HTTP and REST resources. Get http logs and statistics automatically. Use hashes on your requests. Access JSON even easier."
s.authors = ["Mario Ruiz"]
Expand Down
87 changes: 87 additions & 0 deletions spec/nice_http/nice_http_spec.rb
Expand Up @@ -660,6 +660,93 @@
expect(klass.request.data.json.namelambda).to eq 'petera'
end

it 'supplies :data specified to all requests with lambda if not on data' do
klass.host = "https://reqres.in"
klass.requests = {
data: {
namelambda: lambda { 'petera' },
namelambdafalse: lambda { 'petera' if false },
namelambdatrue: lambda { 'petera' if true },
love: {
namelambda: lambda { 'petera' },
namelambdafalse: lambda { 'petera' if false },
namelambdatrue: lambda { 'petera' if true },
},
mars: {
namelambdafalse: lambda { 'petera' if false },
},
name: 'peter'
}
}
http = klass.new
request = {
path: "/api/users",
data: {job: "leader", city: "london"},
}
resp = http.post(request)
expect(klass.request.data.json.job).to eq 'leader'
expect(klass.request.data.json.city).to eq 'london'
expect(klass.request.data.json.name).to eq 'peter'
expect(klass.request.data.json.namelambda).to eq 'petera'
expect(klass.request.data.json.key?(:namelambdafalse)).to eq false
expect(klass.request.data.json.key?(:namelambdatrue)).to eq true
expect(klass.request.data.json.love.namelambda).to eq 'petera'
expect(klass.request.data.json.love.key?(:namelambdafalse)).to eq false
expect(klass.request.data.json.love.key?(:namelambdatrue)).to eq true
expect(klass.request.data.json.key?(:mars)).to eq false
end

it 'supplies :data specified to all requests with lambda if on data' do
klass.host = "https://reqres.in"
klass.requests = {
data: {
namelambda: lambda { 'petera' },
namelambdafalse: lambda { 'petera' if false },
namelambdatrue: lambda { 'petera' if true },
love: {
namelambda: lambda { 'petera' },
namelambdafalse: lambda { 'petera' if false },
namelambdatrue: lambda { 'petera' if true },
},
mars: {
namelambdafalse: lambda { 'petera' if false },
},
name: 'peter'
}
}
http = klass.new
request = {
path: "/api/users",
data: {
job: "leader",
city: "london",
namelambda: 'uno',
namelambdafalse: 'dos',
namelambdatrue: 'tres',
love: {
namelambda: 'cuatro',
namelambdafalse: 'cinco',
namelambdatrue: 'seis',
},
mars: {
namelambdafalse: 'siete',
},
name: 'peter'
},
}
resp = http.post(request)
expect(klass.request.data.json.job).to eq 'leader'
expect(klass.request.data.json.city).to eq 'london'
expect(klass.request.data.json.name).to eq 'peter'
expect(klass.request.data.json.namelambda).to eq 'petera'
expect(klass.request.data.json.namelambdafalse).to eq 'dos'
expect(klass.request.data.json.namelambdatrue).to eq 'petera'
expect(klass.request.data.json.love.namelambda).to eq 'petera'
expect(klass.request.data.json.love.namelambdafalse).to eq 'cinco'
expect(klass.request.data.json.love.namelambdatrue).to eq 'petera'
expect(klass.request.data.json.mars.namelambdafalse).to eq 'siete'
end

it "supplies :values_for specified to all requests" do
klass.host = "https://reqres.in"
klass.requests = {
Expand Down

0 comments on commit cfb82d7

Please sign in to comment.