Merge pull request #6585 from mitchellh/sethvargo/presence

Add presence helpers
This commit is contained in:
Seth Vargo 2015-11-23 18:13:18 -05:00
commit 0698743724
2 changed files with 87 additions and 0 deletions

View File

@ -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

View File

@ -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