mini_sanity 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +71 -0
- data/Rakefile +23 -0
- data/lib/mini_sanity.rb +6 -0
- data/lib/mini_sanity/enumerable.rb +23 -0
- data/lib/mini_sanity/error.rb +2 -0
- data/lib/mini_sanity/object.rb +91 -0
- data/lib/mini_sanity/pathname.rb +45 -0
- data/lib/mini_sanity/string.rb +68 -0
- data/lib/mini_sanity/version.rb +3 -0
- data/mini_sanity.gemspec +27 -0
- metadata +114 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c5da04d9d5a007087a446a04332d0ffc6384a5d8
|
4
|
+
data.tar.gz: a26754f66a63338980c31d97461d8a443d868106
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d595fc9b17a60fb29ece9f2d553c0549aaa341ce055d16589157e4be2be072b0c28d92c8ea3a35973d6bce0aaf30444b1644f6f3704033e39462eb3289c9d8e7
|
7
|
+
data.tar.gz: '08db65b91fc28caa65d47a711afb0cb338ad0edfd1a601e78e642bb1846f4e150547612b42f996e77222c9ac27c8a35a86fa437da97a7c12fbc8c7af4cadb005'
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 Jonathan Hefner
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# mini_sanity
|
2
|
+
|
3
|
+
In-line [sanity checks], written as extensions to core Ruby objects. See
|
4
|
+
API listing below, or browse the [full documentation].
|
5
|
+
|
6
|
+
[sanity checks]: https://en.wikipedia.org/wiki/Sanity_check
|
7
|
+
[full documentation]: http://www.rubydoc.info/gems/mini_sanity/
|
8
|
+
|
9
|
+
|
10
|
+
# Example
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
require "json"
|
14
|
+
require "pathname"
|
15
|
+
|
16
|
+
path = Pathname.new("hosted_files.json").assert_exist!
|
17
|
+
|
18
|
+
hosted_files = JSON.parse(path.read).assert_instance_of!(Array)
|
19
|
+
|
20
|
+
urls = hosted_files.flat_map do |file_info|
|
21
|
+
file_info.fetch("mirror_urls").refute_empty!
|
22
|
+
end
|
23
|
+
|
24
|
+
domains = urls.map do |url|
|
25
|
+
url.assert_match!(%r"^https?://").split("/")[2]
|
26
|
+
end.uniq
|
27
|
+
```
|
28
|
+
|
29
|
+
|
30
|
+
# API
|
31
|
+
|
32
|
+
- [Object](http://www.rubydoc.info/gems/mini_sanity/Object)
|
33
|
+
- [#assert_instance_of!](http://www.rubydoc.info/gems/mini_sanity/Object:assert_instance_of%21)
|
34
|
+
- [#assert_kind_of!](http://www.rubydoc.info/gems/mini_sanity/Object:assert_kind_of%21)
|
35
|
+
- [#assert_respond_to!](http://www.rubydoc.info/gems/mini_sanity/Object:assert_respond_to%21)
|
36
|
+
- [#refute_nil!](http://www.rubydoc.info/gems/mini_sanity/Object:refute_nil%21)
|
37
|
+
- [Enumerable](http://www.rubydoc.info/gems/mini_sanity/Enumerable)
|
38
|
+
- [#refute_empty!](http://www.rubydoc.info/gems/mini_sanity/Enumerable:refute_empty%21)
|
39
|
+
- [String](http://www.rubydoc.info/gems/mini_sanity/String)
|
40
|
+
- [#assert_match!](http://www.rubydoc.info/gems/mini_sanity/String:assert_match%21)
|
41
|
+
- [#refute_empty!](http://www.rubydoc.info/gems/mini_sanity/String:refute_empty%21)
|
42
|
+
- [#refute_match!](http://www.rubydoc.info/gems/mini_sanity/String:refute_match%21)
|
43
|
+
- [Pathname](http://www.rubydoc.info/gems/mini_sanity/Pathname)
|
44
|
+
- [#assert_exist!](http://www.rubydoc.info/gems/mini_sanity/Pathname:assert_exist%21)
|
45
|
+
- [#refute_exist!](http://www.rubydoc.info/gems/mini_sanity/Pathname:refute_exist%21)
|
46
|
+
|
47
|
+
|
48
|
+
## Installation
|
49
|
+
|
50
|
+
Install from [Ruby Gems](https://rubygems.org/gems/mini_sanity):
|
51
|
+
|
52
|
+
```bash
|
53
|
+
$ gem install mini_sanity
|
54
|
+
```
|
55
|
+
|
56
|
+
Then require in your Ruby script:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
require "mini_sanity"
|
60
|
+
```
|
61
|
+
|
62
|
+
|
63
|
+
## Contributing
|
64
|
+
|
65
|
+
Run `rake test` to run the tests. You can also run `rake irb` for an
|
66
|
+
interactive prompt that pre-loads the project code.
|
67
|
+
|
68
|
+
|
69
|
+
## License
|
70
|
+
|
71
|
+
[MIT License](https://opensource.org/licenses/MIT)
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rake/testtask"
|
3
|
+
require "yard"
|
4
|
+
|
5
|
+
|
6
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "Launch IRB with this gem pre-loaded"
|
10
|
+
task :irb do
|
11
|
+
require "mini_sanity"
|
12
|
+
require "irb"
|
13
|
+
ARGV.clear
|
14
|
+
IRB.start
|
15
|
+
end
|
16
|
+
|
17
|
+
Rake::TestTask.new(:test) do |t|
|
18
|
+
t.libs << "test"
|
19
|
+
t.libs << "lib"
|
20
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
21
|
+
end
|
22
|
+
|
23
|
+
task :default => :test
|
data/lib/mini_sanity.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Enumerable
|
2
|
+
|
3
|
+
# Checks that the Enumerable is not empty, and returns the Enumerable
|
4
|
+
# unmodified. If the Enumerable fails this check, an exception is
|
5
|
+
# raised.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [7, 8].refute_empty! # == [7, 8]
|
9
|
+
# [].refute_empty! # raises exception
|
10
|
+
#
|
11
|
+
# @param name [String, Symbol]
|
12
|
+
# optional name to include in the error message
|
13
|
+
# @return [self]
|
14
|
+
# @raise [MiniSanity::Error]
|
15
|
+
# if the Enumerable is empty
|
16
|
+
def refute_empty!(name = nil)
|
17
|
+
if self.empty?
|
18
|
+
raise MiniSanity::Error.new("#{name || self.class} is empty")
|
19
|
+
end
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
class Object
|
2
|
+
|
3
|
+
# Checks that the Object is not nil, and returns the Object
|
4
|
+
# unmodified. If the Object fails this check, an exception is raised.
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# [7, 8].first.refute_nil! # == 7
|
8
|
+
# [].first.refute_nil! # raises exception
|
9
|
+
#
|
10
|
+
# @param name [String, Symbol]
|
11
|
+
# optional name to include in the error message
|
12
|
+
# @return [self]
|
13
|
+
# @raise [MiniSanity::Error]
|
14
|
+
# if the Object is nil
|
15
|
+
def refute_nil!(name = nil)
|
16
|
+
if self.nil?
|
17
|
+
message = name ? "#{name} is nil" : "unexpected nil"
|
18
|
+
raise MiniSanity::Error.new(message)
|
19
|
+
end
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
# Checks that the Object is an instance of a given class, and returns
|
24
|
+
# the Object unmodified. If the Object fails this check, an exception
|
25
|
+
# is raised.
|
26
|
+
#
|
27
|
+
# @example
|
28
|
+
# "abc".assert_instance_of!(String) # == "abc"
|
29
|
+
# "abc".assert_instance_of!(Numeric) # raises exception
|
30
|
+
#
|
31
|
+
# @param klass [Class]
|
32
|
+
# class to check
|
33
|
+
# @param name [String, Symbol]
|
34
|
+
# optional name to include in the error message
|
35
|
+
# @return [self]
|
36
|
+
# @raise [MiniSanity::Error]
|
37
|
+
# if the Object is not an instance of +klass+
|
38
|
+
def assert_instance_of!(klass, name = nil)
|
39
|
+
unless self.instance_of?(klass)
|
40
|
+
prelude = name ? "#{name} is instance of #{self.class}" : "unexpected #{self.class}"
|
41
|
+
raise MiniSanity::Error.new("#{prelude}; expected #{klass}")
|
42
|
+
end
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
# Checks that the Object is an instance of a given class or one of its
|
47
|
+
# subclasses, and returns the Object unmodified. If the Object fails
|
48
|
+
# this check, an exception is raised.
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
# 42.assert_kind_of!(Numeric) # == 42
|
52
|
+
# 42.assert_kind_of!(Float) # raises exception
|
53
|
+
#
|
54
|
+
# @param klass [Class]
|
55
|
+
# class to check
|
56
|
+
# @param name [String, Symbol]
|
57
|
+
# optional name to include in the error message
|
58
|
+
# @return [self]
|
59
|
+
# @raise [MiniSanity::Error]
|
60
|
+
# if the Object is not an instance of +klass+ or its subclasses
|
61
|
+
def assert_kind_of!(klass, name = nil)
|
62
|
+
unless self.kind_of?(klass)
|
63
|
+
prelude = name ? "#{name} is instance of #{self.class}" : "unexpected #{self.class}"
|
64
|
+
raise MiniSanity::Error.new("#{prelude}; expected #{klass} or one of its subclasses")
|
65
|
+
end
|
66
|
+
self
|
67
|
+
end
|
68
|
+
|
69
|
+
# Checks that the Object responds to a given method, and returns the
|
70
|
+
# Object unmodified. If the Object fails this check, an exception is
|
71
|
+
# raised.
|
72
|
+
#
|
73
|
+
# @example
|
74
|
+
# "abc".assert_respond_to!(:empty?) # == "abc"
|
75
|
+
# "abc".assert_respond_to!(:pop) # raises exception
|
76
|
+
#
|
77
|
+
# @param method_name [String, Symbol]
|
78
|
+
# name of method to check
|
79
|
+
# @param name [String, Symbol]
|
80
|
+
# optional name to include in the error message
|
81
|
+
# @return [self]
|
82
|
+
# @raise [MiniSanity::Error]
|
83
|
+
# if the Object does not respond to +method_name+
|
84
|
+
def assert_respond_to!(method_name, name = nil)
|
85
|
+
unless self.respond_to?(method_name)
|
86
|
+
raise MiniSanity::Error.new("#{name || self.class} does not respond to #{method_name}")
|
87
|
+
end
|
88
|
+
self
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class Pathname
|
2
|
+
|
3
|
+
# Checks that the file or directory indicated by the Pathname exists,
|
4
|
+
# and returns the Pathname unmodified. If the Pathname fails this
|
5
|
+
# check, an exception is raised.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# Pathname.new(__FILE__).assert_exist! # == Pathname.new(__FILE__)
|
9
|
+
# Pathname.new("/dev/null/nope").assert_exist! # == raises exception
|
10
|
+
#
|
11
|
+
# @param name [String, Symbol]
|
12
|
+
# optional name to include in the error message
|
13
|
+
# @return [self]
|
14
|
+
# @raise [MiniSanity::Error]
|
15
|
+
# if the file or directory indicated by the Pathname does not exist
|
16
|
+
def assert_exist!(name = nil)
|
17
|
+
unless self.exist?
|
18
|
+
descriptor = name ? "#{name} (#{self})" : self.to_s
|
19
|
+
raise MiniSanity::Error.new("#{descriptor} does not exist")
|
20
|
+
end
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
# Checks that the file or directory indicated by the Pathname does
|
25
|
+
# not already exist, and returns the Pathname unmodified. If the
|
26
|
+
# Pathname fails this check, an exception is raised.
|
27
|
+
#
|
28
|
+
# @example
|
29
|
+
# Pathname.new("/dev/null/nope").refute_exist! # == Pathname.new("/dev/null/nope")
|
30
|
+
# Pathname.new(__FILE__).refute_exist! # raises exception
|
31
|
+
#
|
32
|
+
# @param name [String, Symbol]
|
33
|
+
# optional name to include in the error message
|
34
|
+
# @return [self]
|
35
|
+
# @raise [MiniSanity::Error]
|
36
|
+
# if the file or directory indicated by the Pathname already exists
|
37
|
+
def refute_exist!(name = nil)
|
38
|
+
if self.exist?
|
39
|
+
descriptor = name ? "#{name} (#{self})" : self.to_s
|
40
|
+
raise MiniSanity::Error.new("#{descriptor} already exists")
|
41
|
+
end
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
# Checks that the String is not empty, and returns the String
|
4
|
+
# unmodified. If the String fails this check, an exception is raised.
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# "abc".refute_empty! # == "abc"
|
8
|
+
# "".refute_empty! # raises exception
|
9
|
+
#
|
10
|
+
# @param name [String, Symbol]
|
11
|
+
# optional name to include in the error message
|
12
|
+
# @return [self]
|
13
|
+
# @raise [MiniSanity::Error]
|
14
|
+
# if the String is empty
|
15
|
+
def refute_empty!(name = nil)
|
16
|
+
if self.empty?
|
17
|
+
raise MiniSanity::Error.new("#{name || self.class} is empty")
|
18
|
+
end
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
# Checks that the String matches a given regular expression, and
|
23
|
+
# returns the String unmodified. If the String fails this check, an
|
24
|
+
# exception is raised.
|
25
|
+
#
|
26
|
+
# @example
|
27
|
+
# "abc".assert_match!(/b/) # == "abc"
|
28
|
+
# "abc".assert_match!(/x/) # raises exception
|
29
|
+
#
|
30
|
+
# @param regexp [Regexp]
|
31
|
+
# regular expression to check
|
32
|
+
# @param name [String, Symbol]
|
33
|
+
# optional name to include in the error message
|
34
|
+
# @return [self]
|
35
|
+
# @raise [MiniSanity::Error]
|
36
|
+
# if the String does not match +regexp+
|
37
|
+
def assert_match!(regexp, name = nil)
|
38
|
+
unless regexp =~ self
|
39
|
+
descriptor = name ? "#{name} (#{self.inspect})" : self.inspect
|
40
|
+
raise MiniSanity::Error.new("#{descriptor} does not match #{regexp.inspect}")
|
41
|
+
end
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
# Checks that the String does not match a given regular expression,
|
46
|
+
# and returns the String unmodified. If the String fails this check,
|
47
|
+
# an exception is raised.
|
48
|
+
#
|
49
|
+
# @example
|
50
|
+
# "abc".refute_match!(/x/) # == "abc"
|
51
|
+
# "abc".refute_match!(/b/) # raises exception
|
52
|
+
#
|
53
|
+
# @param regexp [Regexp]
|
54
|
+
# regular expression to check
|
55
|
+
# @param name [String, Symbol]
|
56
|
+
# optional name to include in the error message
|
57
|
+
# @return [self]
|
58
|
+
# @raise [MiniSanity::Error]
|
59
|
+
# if the String matches +regexp+
|
60
|
+
def refute_match!(regexp, name = nil)
|
61
|
+
if regexp =~ self
|
62
|
+
descriptor = name ? "#{name} (#{self.inspect})" : self.inspect
|
63
|
+
raise MiniSanity::Error.new("#{descriptor} matches #{regexp.inspect}; expected no match")
|
64
|
+
end
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
data/mini_sanity.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "mini_sanity/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "mini_sanity"
|
8
|
+
spec.version = MiniSanity::VERSION
|
9
|
+
spec.authors = ["Jonathan Hefner"]
|
10
|
+
spec.email = ["jonathan.hefner@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{In-line sanity checks}
|
13
|
+
spec.homepage = "https://github.com/jonathanhefner/mini_sanity"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
spec.bindir = "exe"
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.15"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
26
|
+
spec.add_development_dependency "yard", "~> 0.9"
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mini_sanity
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jonathan Hefner
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.15'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.15'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.9'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- jonathan.hefner@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
78
|
+
- Gemfile
|
79
|
+
- LICENSE.txt
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- lib/mini_sanity.rb
|
83
|
+
- lib/mini_sanity/enumerable.rb
|
84
|
+
- lib/mini_sanity/error.rb
|
85
|
+
- lib/mini_sanity/object.rb
|
86
|
+
- lib/mini_sanity/pathname.rb
|
87
|
+
- lib/mini_sanity/string.rb
|
88
|
+
- lib/mini_sanity/version.rb
|
89
|
+
- mini_sanity.gemspec
|
90
|
+
homepage: https://github.com/jonathanhefner/mini_sanity
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
metadata: {}
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project:
|
110
|
+
rubygems_version: 2.4.8
|
111
|
+
signing_key:
|
112
|
+
specification_version: 4
|
113
|
+
summary: In-line sanity checks
|
114
|
+
test_files: []
|