diff --git a/Gemfile b/Gemfile
index c668e4a..0b57a87 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,6 +3,7 @@ source 'https://rubygems.org'
group :test do
gem 'rake'
gem 'rspec'
+ gem 'coveralls'
gem 'covered'
end
diff --git a/lib/nice_http.rb b/lib/nice_http.rb
index 419bd2c..0ba7938 100644
--- a/lib/nice_http.rb
+++ b/lib/nice_http.rb
@@ -237,8 +237,8 @@ def initialize(args = {})
@logger.level = Logger::INFO
self.class.log_files << log_filename if mode == 'w'
rescue Exception => stack
- raise InfoMissing, :log
@logger = Logger.new nil
+ raise InfoMissing, :log
end
@@ -309,8 +309,9 @@ def close
if conn.object_id == self.object_id
found = true
break
+ else
+ pos += 1
end
- pos += 1
}
if found
self.class.connections.delete_at(pos)
diff --git a/lib/nice_http/manage_request.rb b/lib/nice_http/manage_request.rb
index 9f3f6c0..aee0043 100644
--- a/lib/nice_http/manage_request.rb
+++ b/lib/nice_http/manage_request.rb
@@ -103,10 +103,11 @@ def manage_request(*arguments)
if data.kind_of?(String)
if arguments[0].include?(:values_for)
arguments[0][:values_for].each { |key, value|
- data.gsub!(/(( *|^)"?#{key.to_s()}"? *: *")(.*)(" *, *$)/, '\1' + value + '\4') # "key":"value", or key:"value",
- data.gsub!(/(( *|^)"?#{key.to_s()}"? *: *")(.*)(" *$)/, '\1' + value + '\4') # "key":"value" or key:"value"
- data.gsub!(/(( *|^)"?#{key.to_s()}"? *: *[^"])([^"].*)([^"] *, *$)/, '\1' + value + '\4') # "key":456, or key:456,
- data.gsub!(/(( *|^)"?#{key.to_s()}"? *: *[^"])([^"].*)([^"] * *$)/, '\1' + value + '\4') # "key":456 or key:456
+ data.gsub!(/"(#{key})":\s*"([^"]*)"/,'"\1": "'+value+'"') # "key":"value"
+ data.gsub!(/(#{key}):\s*"([^"]*)"/,'\1: "'+value+'"') # key:"value"
+ data.gsub!(/(#{key}):\s*'([^']*)'/,'\1: \''+value+"'") # key:'value'
+ data.gsub!(/"(#{key})":\s*(\w+)/,'"\1": '+value) # "key":456
+ data.gsub!(/(#{key}):\s*(\w+)/,'\1: '+value) # key:456
}
end
elsif data.kind_of?(Hash)
diff --git a/nice_http.gemspec b/nice_http.gemspec
index d60329c..d9dea55 100644
--- a/nice_http.gemspec
+++ b/nice_http.gemspec
@@ -13,7 +13,6 @@ Gem::Specification.new do |s|
s.license = 'MIT'
s.add_runtime_dependency 'nice_hash', '~> 1.9', '>= 1.9.0'
s.add_development_dependency 'rspec', '~> 3.8', '>= 3.8.0'
- s.add_development_dependency 'coveralls', '~> 0.8', '>= 0.8.22'
s.test_files = s.files.grep(%r{^(test|spec|features)/})
s.require_paths = ["lib"]
s.required_ruby_version = ['>= 2.4']
diff --git a/spec/nice_http/nice_http_post_spec.rb b/spec/nice_http/nice_http_post_spec.rb
index 83e30c0..e534fa5 100644
--- a/spec/nice_http/nice_http_post_spec.rb
+++ b/spec/nice_http/nice_http_post_spec.rb
@@ -131,6 +131,78 @@
end
+ it 'changes data to empty string if data is nil' do
+ req = {
+ path: "/api/users",
+ data: nil
+ }
+ resp = @http.post req
+ expect(NiceHttp.last_request).to match /data=\s*$/
+ end
+
+ it 'accepts values as an alias for values_for' do
+ request = {
+ path: "/api/users",
+ data: { name: "morpheus", job: "leader" }
+ }
+
+ request[:values] = {name: "peter"}
+ resp = @http.post(request)
+ expect(resp.code).to eq 201
+ expect(resp.data.json(:name)).to eq 'peter'
+ end
+
+ it 'change xml value when supplied values_for' do
+ request = {
+ path: "/api/users",
+ headers: {"Content-Type": "text/xml"},
+ data: "morpheusleader"
+ }
+
+ request.values_for = {name: "peter"}
+ resp = @http.post(request)
+ expect(NiceHttp.last_request).to match /name>peter/
+ end
+
+ it 'changes json string values when values_for supplied and json is a string' do
+ request = {
+ path: "/api/users",
+ headers: {"Content-Type": "application/json"},
+ data: '{"name": "morpheus","job": "leader"}'
+ }
+ request.values_for = {name: "peter"}
+ resp = @http.post(request)
+ expect(NiceHttp.last_request).to match /"name": "peter"/
+ end
+
+ it 'accepts an array as data' do
+ request = {
+ path: "/api/users",
+ headers: {"Content-Type": "application/json"},
+ data: [
+ {name: 'morpheus', job: 'leader'},
+ {name: 'peter', job: 'vicepresident'}
+ ]
+ }
+ resp = @http.post(request)
+ expect(resp.code).to eq 201
+ expect(resp.data.json(:name)).to eq ['morpheus','peter']
+ end
+
+ it 'changes all values on array request when values_for' do
+ request = {
+ path: "/api/users",
+ headers: {"Content-Type": "application/json"},
+ data: [
+ {name: 'morpheus', job: 'leader'},
+ {name: 'peter', job: 'vicepresident'}
+ ]
+ }
+ request.values_for = {job: ['dev','cleaner']}
+ resp = @http.post(request)
+ expect(resp.code).to eq 201
+ expect(resp.data.json(:job)).to eq ['dev','cleaner']
+ end
#todo: add tests encoding and cookies
diff --git a/spec/nice_http/nice_http_spec.rb b/spec/nice_http/nice_http_spec.rb
index e24b1a9..f2fee1f 100644
--- a/spec/nice_http/nice_http_spec.rb
+++ b/spec/nice_http/nice_http_spec.rb
@@ -308,6 +308,7 @@
expect(klass.connections.size).to eq 1
expect(klass.connections[0]).to eq http2
end
+
end
describe 'log files' do
@@ -347,6 +348,31 @@
files = Dir["./*.log"]
expect(files.size).to eq 0
end
+
+ it "raises error if log file not possible to be created" do
+ Dir.glob('./*.log').each { |file| File.delete(file)}
+ klass.log = "./"
+ klass.new("https://example.com") rescue err = $ERROR_INFO
+ expect(err.class).to eq NiceHttp::InfoMissing
+ expect(err.attribute).to eq :log
+ expect(err.message).to match /wrong log/i
+ end
+
+ it "doesn't create any log file when exception on creating" do
+ klass.log = "./"
+ klass.new("https://example.com") rescue err = $ERROR_INFO
+ files = Dir["./*.log"]
+ expect(files.size).to eq 0
+ end
+
+ it 'cannot close a connection that is already closed' do
+ http = klass.new("https://example.com")
+ http.close
+ http.close
+ content = File.read('./nice_http.log')
+ expect(content).to match /It was not possible to close the HTTP connection, already closed/
+ end
+
end
describe 'proxys' do