aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/ryanuber
diff options
context:
space:
mode:
authorNiall Sheridan <nsheridan@gmail.com>2018-06-20 22:39:07 +0100
committerNiall Sheridan <nsheridan@gmail.com>2018-06-20 22:39:07 +0100
commitde6d2c524430287c699aaa898c1325da6afea539 (patch)
treef78eb841208d667668a7bc92a9290d693cc7103b /vendor/github.com/ryanuber
parenteb99016e1629e690e55633de6fc63a14c53e7ea2 (diff)
Update dependencies
Diffstat (limited to 'vendor/github.com/ryanuber')
-rw-r--r--vendor/github.com/ryanuber/go-glob/LICENSE21
-rw-r--r--vendor/github.com/ryanuber/go-glob/README.md29
-rw-r--r--vendor/github.com/ryanuber/go-glob/glob.go56
3 files changed, 106 insertions, 0 deletions
diff --git a/vendor/github.com/ryanuber/go-glob/LICENSE b/vendor/github.com/ryanuber/go-glob/LICENSE
new file mode 100644
index 0000000..bdfbd95
--- /dev/null
+++ b/vendor/github.com/ryanuber/go-glob/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Ryan Uber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/ryanuber/go-glob/README.md b/vendor/github.com/ryanuber/go-glob/README.md
new file mode 100644
index 0000000..48f7fcb
--- /dev/null
+++ b/vendor/github.com/ryanuber/go-glob/README.md
@@ -0,0 +1,29 @@
+# String globbing in golang [![Build Status](https://travis-ci.org/ryanuber/go-glob.svg)](https://travis-ci.org/ryanuber/go-glob)
+
+`go-glob` is a single-function library implementing basic string glob support.
+
+Globs are an extremely user-friendly way of supporting string matching without
+requiring knowledge of regular expressions or Go's particular regex engine. Most
+people understand that if you put a `*` character somewhere in a string, it is
+treated as a wildcard. Surprisingly, this functionality isn't found in Go's
+standard library, except for `path.Match`, which is intended to be used while
+comparing paths (not arbitrary strings), and contains specialized logic for this
+use case. A better solution might be a POSIX basic (non-ERE) regular expression
+engine for Go, which doesn't exist currently.
+
+Example
+=======
+
+```
+package main
+
+import "github.com/ryanuber/go-glob"
+
+func main() {
+ glob.Glob("*World!", "Hello, World!") // true
+ glob.Glob("Hello,*", "Hello, World!") // true
+ glob.Glob("*ello,*", "Hello, World!") // true
+ glob.Glob("World!", "Hello, World!") // false
+ glob.Glob("/home/*", "/home/ryanuber/.bashrc") // true
+}
+```
diff --git a/vendor/github.com/ryanuber/go-glob/glob.go b/vendor/github.com/ryanuber/go-glob/glob.go
new file mode 100644
index 0000000..e67db3b
--- /dev/null
+++ b/vendor/github.com/ryanuber/go-glob/glob.go
@@ -0,0 +1,56 @@
+package glob
+
+import "strings"
+
+// The character which is treated like a glob
+const GLOB = "*"
+
+// Glob will test a string pattern, potentially containing globs, against a
+// subject string. The result is a simple true/false, determining whether or
+// not the glob pattern matched the subject text.
+func Glob(pattern, subj string) bool {
+ // Empty pattern can only match empty subject
+ if pattern == "" {
+ return subj == pattern
+ }
+
+ // If the pattern _is_ a glob, it matches everything
+ if pattern == GLOB {
+ return true
+ }
+
+ parts := strings.Split(pattern, GLOB)
+
+ if len(parts) == 1 {
+ // No globs in pattern, so test for equality
+ return subj == pattern
+ }
+
+ leadingGlob := strings.HasPrefix(pattern, GLOB)
+ trailingGlob := strings.HasSuffix(pattern, GLOB)
+ end := len(parts) - 1
+
+ // Go over the leading parts and ensure they match.
+ for i := 0; i < end; i++ {
+ idx := strings.Index(subj, parts[i])
+
+ switch i {
+ case 0:
+ // Check the first section. Requires special handling.
+ if !leadingGlob && idx != 0 {
+ return false
+ }
+ default:
+ // Check that the middle parts match.
+ if idx < 0 {
+ return false
+ }
+ }
+
+ // Trim evaluated text from subj as we loop over the pattern.
+ subj = subj[idx+len(parts[i]):]
+ }
+
+ // Reached the last section. Requires special handling.
+ return trailingGlob || strings.HasSuffix(subj, parts[end])
+}