Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ require "rake/testtask"

Rake::TestTask.new(:test) do |t|
t.libs << "test"
t.test_files = FileList["test/test_*.rb"]
t.test_files = FileList["test/spec_*.rb"]
end

task default: :test
1 change: 1 addition & 0 deletions lib/nack.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# frozen_string_literal: true

require_relative "nack/version"
require_relative "nack/utils"
34 changes: 34 additions & 0 deletions lib/nack/utils.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# frozen_string_literal: true

module Nack
module Utils
module_function

def no_entity_body?(status)
(100..199).cover?(status) || status == 204 || status == 304
end

def get_header(pairs, name)
pairs.assoc(name)&.last
end

def set_header(pairs, name, value)
pairs.reject! { |key, _| key == name }
pairs << [name, value]
pairs
end

def delete_header(pairs, name)
pairs.reject! { |key, _| key == name }
pairs
end

def body_size(body)
case body
when nil then 0
when IO::Buffer then body.size
else body.to_s.bytesize
end
end
end
end
1 change: 1 addition & 0 deletions nack.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,5 @@ Gem::Specification.new do |spec|
spec.add_development_dependency "bundler"
spec.add_development_dependency "rake"
spec.add_development_dependency "minitest"
spec.add_development_dependency "minitest-global_expectations"
end
2 changes: 1 addition & 1 deletion test/helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
$LOAD_PATH.unshift(File.expand_path("../lib", __dir__))

require "nack"
require "minitest/autorun"
require "minitest/global_expectations/autorun"
46 changes: 46 additions & 0 deletions test/spec_utils.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# frozen_string_literal: true

require_relative "helper"

describe Nack::Utils do
it "knows which statuses forbid an entity body" do
Nack::Utils.no_entity_body?(100).must_equal true
Nack::Utils.no_entity_body?(199).must_equal true
Nack::Utils.no_entity_body?(204).must_equal true
Nack::Utils.no_entity_body?(304).must_equal true
Nack::Utils.no_entity_body?(200).must_equal false
Nack::Utils.no_entity_body?(404).must_equal false
end

it "returns the first value for a header name" do
pairs = [["content-type", "text/html"], ["x-a", "1"], ["x-a", "2"]]
Nack::Utils.get_header(pairs, "content-type").must_equal "text/html"
Nack::Utils.get_header(pairs, "x-a").must_equal "1"
Nack::Utils.get_header(pairs, "missing").must_be_nil
end

it "replaces all occurrences when setting a header" do
pairs = [["b", "2"], ["a", "1"], ["b", "3"]]
Nack::Utils.set_header(pairs, "b", "9")
pairs.must_equal [["a", "1"], ["b", "9"]]
end

it "appends when setting a header not yet present" do
pairs = [["a", "1"]]
Nack::Utils.set_header(pairs, "b", "2")
pairs.must_equal [["a", "1"], ["b", "2"]]
end

it "removes all occurrences when deleting a header" do
pairs = [["a", "1"], ["a", "2"], ["b", "3"]]
Nack::Utils.delete_header(pairs, "a")
pairs.must_equal [["b", "3"]]
end

it "measures body size in bytes" do
Nack::Utils.body_size(nil).must_equal 0
Nack::Utils.body_size("hello").must_equal 5
Nack::Utils.body_size("héllo").must_equal 6
Nack::Utils.body_size(IO::Buffer.for("abc")).must_equal 3
end
end