Add presence helpers
This commit is contained in:
parent
ff7e65c5e1
commit
4c55c39b2d
|
@ -0,0 +1,41 @@
|
|||
module Vagrant
|
||||
module Util
|
||||
module Presence
|
||||
extend self
|
||||
|
||||
# Determines if the given object is "present". A String is considered
|
||||
# present if the stripped contents are not empty. An Array/Hash is
|
||||
# considered present if they have a length of more than 1. "true" is
|
||||
# always present and `false` and `nil` are always not present. Any other
|
||||
# object is considered to be present.
|
||||
#
|
||||
# @return [true, false]
|
||||
def present?(obj)
|
||||
case obj
|
||||
when String
|
||||
!obj.strip.empty?
|
||||
when Array, Hash
|
||||
!obj.empty?
|
||||
when TrueClass, FalseClass
|
||||
obj
|
||||
when NilClass
|
||||
false
|
||||
when Object
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
# Returns the presence of the object. If the object is {present?}, it is
|
||||
# returned. Otherwise `false` is returned.
|
||||
#
|
||||
# @return [Object, false]
|
||||
def presence(obj)
|
||||
if present?(obj)
|
||||
obj
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,46 @@
|
|||
require File.expand_path("../../../base", __FILE__)
|
||||
|
||||
require "vagrant/util/presence"
|
||||
|
||||
describe Vagrant::Util::Presence do
|
||||
subject { described_class }
|
||||
|
||||
describe "#presence" do
|
||||
it "returns false for nil" do
|
||||
expect(subject.presence(nil)).to be(false)
|
||||
end
|
||||
|
||||
it "returns false for false" do
|
||||
expect(subject.presence(false)).to be(false)
|
||||
end
|
||||
|
||||
it "returns false for an empty string" do
|
||||
expect(subject.presence("")).to be(false)
|
||||
end
|
||||
|
||||
it "returns false for a string with null bytes" do
|
||||
expect(subject.presence("\u0000")).to be(false)
|
||||
end
|
||||
|
||||
it "returns false for an empty array" do
|
||||
expect(subject.presence([])).to be(false)
|
||||
end
|
||||
|
||||
it "returns false for an empty hash" do
|
||||
expect(subject.presence({})).to be(false)
|
||||
end
|
||||
|
||||
it "returns true for true" do
|
||||
expect(subject.presence(true)).to be(true)
|
||||
end
|
||||
|
||||
it "returns the object for an object" do
|
||||
obj = Object.new
|
||||
expect(subject.presence(obj)).to be(obj)
|
||||
end
|
||||
|
||||
it "returns the class for a class" do
|
||||
expect(subject.presence(String)).to be(String)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue