dux 0.1.0 → 0.3.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 +4 -4
- data/.travis.yml +6 -2
- data/README.md +7 -1
- data/Rakefile +1 -1
- data/bin/rake +17 -0
- data/bin/rspec +17 -0
- data/dux.gemspec +10 -6
- data/lib/dux.rb +15 -7
- data/lib/dux/attempt.rb +17 -0
- data/lib/dux/blankness.rb +38 -0
- data/lib/dux/duck_type.rb +0 -0
- data/lib/dux/enum.rb +98 -0
- data/lib/dux/indifferent_string.rb +38 -0
- data/lib/dux/inspect_id.rb +16 -0
- data/lib/dux/null_object.rb +30 -0
- data/lib/dux/version.rb +1 -1
- metadata +46 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8549a025dd5d4bd0d25700d7155a99ac46d222cc
|
4
|
+
data.tar.gz: 187be7a1fcfa97857bf948f846218131889aa17e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a24dddfbe3465f64ac539c33a38c8369cb854761acaf72616b9c070c6d3b85c92c9b0effc7d022c0477ddd02fc733c9386ea886213a5568bf895fb63b062b9b2
|
7
|
+
data.tar.gz: d5ab3bff61e513d04bef1b78acb5afa218ee8dbd96cf35817913301fd9ada0e8b1ec0be57819b7571bdf593c693855571f9213ec68aa347f92d4a49ce330f241
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Dux
|
1
|
+
# Dux [](https://travis-ci.org/scryptmouse/dux)
|
2
2
|
|
3
3
|
A lazy duck-type matching gem that is particularly designed for use in case statements.
|
4
4
|
|
@@ -114,6 +114,12 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
114
114
|
|
115
115
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
116
116
|
|
117
|
+
## Supported Ruby Versions
|
118
|
+
|
119
|
+
* MRI 2.1+
|
120
|
+
* Rubinius 2.5+
|
121
|
+
* jruby-head / 9.0+
|
122
|
+
|
117
123
|
## Contributing
|
118
124
|
|
119
125
|
1. Fork it ( https://github.com/scryptmouse/dux/fork )
|
data/Rakefile
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'bundler/setup'
|
1
2
|
require 'bundler/gem_tasks'
|
2
3
|
require 'rspec/core/rake_task'
|
3
4
|
require 'yard'
|
@@ -13,5 +14,4 @@ YARD::Rake::YardocTask.new do |t|
|
|
13
14
|
t.stats_options = ['--list-undoc']
|
14
15
|
end
|
15
16
|
|
16
|
-
# If you want to make this the default task
|
17
17
|
task :default => :spec
|
data/bin/rake
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'rake' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("rake", "rake")
|
data/bin/rspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'rspec' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("rspec-core", "rspec")
|
data/dux.gemspec
CHANGED
@@ -18,10 +18,14 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.
|
22
|
-
|
23
|
-
spec.
|
24
|
-
|
25
|
-
spec.add_development_dependency "
|
26
|
-
spec.add_development_dependency "
|
21
|
+
spec.metadata["yard.run"] = "yri"
|
22
|
+
|
23
|
+
spec.add_dependency "lru_redux"
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
26
|
+
spec.add_development_dependency "rspec", "~> 3.5"
|
27
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
28
|
+
spec.add_development_dependency "pry", "~> 0.10.1"
|
29
|
+
spec.add_development_dependency "simplecov", "~> 0.14.1"
|
30
|
+
spec.add_development_dependency "yard", "~> 0.9.8"
|
27
31
|
end
|
data/lib/dux.rb
CHANGED
@@ -1,8 +1,17 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
1
3
|
require 'dux/version'
|
4
|
+
require 'dux/inspect_id'
|
5
|
+
require 'dux/null_object'
|
6
|
+
require 'dux/attempt'
|
7
|
+
require 'dux/blankness'
|
2
8
|
require 'dux/duckify'
|
3
9
|
require 'dux/hacks_like_a_duck'
|
4
10
|
require 'dux/flock_methods'
|
5
11
|
|
12
|
+
require 'dux/indifferent_string'
|
13
|
+
require 'dux/enum'
|
14
|
+
|
6
15
|
# Super simple duck-type testing.
|
7
16
|
module Dux
|
8
17
|
# Methods for generating "interface" checks against an array of symbols
|
@@ -76,8 +85,7 @@ module Dux
|
|
76
85
|
#
|
77
86
|
# @return [void]
|
78
87
|
def add_flock_methods!
|
79
|
-
|
80
|
-
Array.prepend Dux::FlockMethods
|
88
|
+
Array.__send__ :prepend, Dux::FlockMethods
|
81
89
|
|
82
90
|
return nil
|
83
91
|
end
|
@@ -101,7 +109,7 @@ module Dux
|
|
101
109
|
#
|
102
110
|
# @return [void]
|
103
111
|
def extend_strings!
|
104
|
-
String.prepend Dux::Duckify
|
112
|
+
String.__send__ :prepend, Dux::Duckify
|
105
113
|
|
106
114
|
return nil
|
107
115
|
end
|
@@ -110,7 +118,7 @@ module Dux
|
|
110
118
|
#
|
111
119
|
# @return [void]
|
112
120
|
def extend_symbols!
|
113
|
-
Symbol.prepend Dux::Duckify
|
121
|
+
Symbol.__send__ :prepend, Dux::Duckify
|
114
122
|
|
115
123
|
return nil
|
116
124
|
end
|
@@ -132,7 +140,7 @@ module Dux
|
|
132
140
|
def array_shorthand!
|
133
141
|
add_flock_methods!
|
134
142
|
|
135
|
-
Array.prepend Dux::HacksLikeADuck
|
143
|
+
Array.__send__ :prepend, Dux::HacksLikeADuck
|
136
144
|
|
137
145
|
nil
|
138
146
|
end
|
@@ -143,7 +151,7 @@ module Dux
|
|
143
151
|
# @return [void]
|
144
152
|
def string_shorthand!
|
145
153
|
extend_strings!
|
146
|
-
String.prepend Dux::HacksLikeADuck
|
154
|
+
String.__send__ :prepend, Dux::HacksLikeADuck
|
147
155
|
|
148
156
|
nil
|
149
157
|
end
|
@@ -155,7 +163,7 @@ module Dux
|
|
155
163
|
def symbol_shorthand!
|
156
164
|
extend_symbols!
|
157
165
|
|
158
|
-
Symbol.prepend Dux::HacksLikeADuck
|
166
|
+
Symbol.__send__ :prepend, Dux::HacksLikeADuck
|
159
167
|
|
160
168
|
return nil
|
161
169
|
end
|
data/lib/dux/attempt.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Dux
|
2
|
+
# `Object#try` for when you don't want ActiveSupport
|
3
|
+
module Attempt
|
4
|
+
# @param [Object] receiver
|
5
|
+
# @param [Symbol] method
|
6
|
+
# @param [<Object>] args
|
7
|
+
# @return [Object]
|
8
|
+
# @return [nil]
|
9
|
+
def attempt(receiver, method, *args, &block)
|
10
|
+
receiver.public_send(method, *args, &block) if receiver.respond_to?(method)
|
11
|
+
end
|
12
|
+
|
13
|
+
extend self
|
14
|
+
end
|
15
|
+
|
16
|
+
extend Attempt
|
17
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Dux
|
2
|
+
module Blankness
|
3
|
+
WHITESPACE_ONLY = /\A[[:space:]]+\z/
|
4
|
+
|
5
|
+
# Check if a provided object is semantically empty.
|
6
|
+
#
|
7
|
+
# @param [Object] value
|
8
|
+
def blankish?(value)
|
9
|
+
case value
|
10
|
+
when nil, false
|
11
|
+
true
|
12
|
+
when Dux[:nan?]
|
13
|
+
true
|
14
|
+
when String, Symbol
|
15
|
+
value.empty? || value =~ WHITESPACE_ONLY
|
16
|
+
when Dux[:blank?]
|
17
|
+
value.blank?
|
18
|
+
when Hash
|
19
|
+
value.empty?
|
20
|
+
when Array, Enumerable
|
21
|
+
Dux.attempt(value, :empty?) || value.all? { |val| blankish?(val) }
|
22
|
+
when Dux[:empty?]
|
23
|
+
value.empty?
|
24
|
+
else
|
25
|
+
false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Boolean complement of {#blankish?}
|
30
|
+
#
|
31
|
+
# @param [Object] value
|
32
|
+
def presentish?(value)
|
33
|
+
!blankish?(value)
|
34
|
+
end
|
35
|
+
|
36
|
+
extend self
|
37
|
+
end
|
38
|
+
end
|
File without changes
|
data/lib/dux/enum.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module Dux
|
4
|
+
# A set of strings or symbols (indifferently stored)
|
5
|
+
# that can be used to validate options.
|
6
|
+
#
|
7
|
+
# Supports an optional default for when an invalid
|
8
|
+
# element is fetched to act as a fallback rather
|
9
|
+
# than raising an error.
|
10
|
+
class Enum
|
11
|
+
include Enumerable
|
12
|
+
|
13
|
+
NO_DEFAULT = Dux.null 'Dux::Enum::NO_DEFAULT', purpose: 'When no default has been provided'
|
14
|
+
|
15
|
+
private_constant :NO_DEFAULT
|
16
|
+
|
17
|
+
def initialize(*values, default: NO_DEFAULT, allow_nil: false)
|
18
|
+
@allow_nil = allow_nil
|
19
|
+
|
20
|
+
set_values values
|
21
|
+
|
22
|
+
set_default default
|
23
|
+
end
|
24
|
+
|
25
|
+
def default?
|
26
|
+
@default != NO_DEFAULT
|
27
|
+
end
|
28
|
+
|
29
|
+
def each
|
30
|
+
return enum_for(__method__) unless block_given?
|
31
|
+
|
32
|
+
@values.each do |value|
|
33
|
+
yield value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def fetch(value, fallback: NO_DEFAULT)
|
38
|
+
if include? value
|
39
|
+
value
|
40
|
+
elsif fallback != NO_DEFAULT
|
41
|
+
if valid_fallback?(fallback)
|
42
|
+
fallback
|
43
|
+
else
|
44
|
+
raise InvalidFallback, "Cannot use #{fallback.inspect} as a fallback"
|
45
|
+
end
|
46
|
+
elsif default?
|
47
|
+
@default
|
48
|
+
else
|
49
|
+
raise NotFound, "Invalid enum member: #{value.inspect}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
alias_method :[], :fetch
|
54
|
+
|
55
|
+
def inspect
|
56
|
+
inspection = [
|
57
|
+
@values.to_a.inspect
|
58
|
+
]
|
59
|
+
|
60
|
+
"Dux::Enum(#{@values.to_a.inspect})"
|
61
|
+
end
|
62
|
+
|
63
|
+
alias_method :has?, :include?
|
64
|
+
alias_method :member?, :include?
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def set_values(values)
|
69
|
+
raise TypeError, "Must provide some values", caller if values.empty?
|
70
|
+
|
71
|
+
@values = values.flatten.map do |value|
|
72
|
+
Dux::IndifferentString.new value
|
73
|
+
end.to_set
|
74
|
+
end
|
75
|
+
|
76
|
+
def valid_fallback?(fallback, default: false)
|
77
|
+
return true if fallback.nil? && @allow_nil
|
78
|
+
return true if include? fallback
|
79
|
+
|
80
|
+
false
|
81
|
+
end
|
82
|
+
|
83
|
+
def set_default(fallback)
|
84
|
+
if valid_fallback?(fallback) || fallback == NO_DEFAULT
|
85
|
+
@default = fallback
|
86
|
+
else
|
87
|
+
raise InvalidFallback, "Cannot set #{fallback.inspect} as default", caller
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Raised when there is no fallback
|
92
|
+
class NotFound < StandardError
|
93
|
+
end
|
94
|
+
|
95
|
+
class InvalidFallback < ArgumentError
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Dux
|
2
|
+
class IndifferentString < DelegateClass(String)
|
3
|
+
def initialize(stringish)
|
4
|
+
stringified =
|
5
|
+
case stringish
|
6
|
+
when String then stringish
|
7
|
+
when Symbol then stringish.to_s
|
8
|
+
when Dux[:to_str] then stringish.to_str
|
9
|
+
else
|
10
|
+
if Dux.attempt(stringish, :acts_like?, :string)
|
11
|
+
stringish.to_s
|
12
|
+
else
|
13
|
+
raise TypeError, "Not a string or symbol: #{stringish}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
super(stringified)
|
18
|
+
end
|
19
|
+
|
20
|
+
def ==(other)
|
21
|
+
if other.kind_of?(Symbol)
|
22
|
+
self == other.to_s
|
23
|
+
else
|
24
|
+
super
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
alias_method :eql?, :==
|
29
|
+
|
30
|
+
def ===(other)
|
31
|
+
if other.kind_of?(Symbol)
|
32
|
+
self == other.to_s
|
33
|
+
else
|
34
|
+
super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Dux
|
2
|
+
module InspectID
|
3
|
+
# Calculates the id shown in the default
|
4
|
+
# version of `#inspect` methods.
|
5
|
+
#
|
6
|
+
# @param [Object] object
|
7
|
+
# @return [String]
|
8
|
+
def inspect_id(object)
|
9
|
+
"0x%0.14x" % ( object.object_id << 1 )
|
10
|
+
end
|
11
|
+
|
12
|
+
extend self
|
13
|
+
end
|
14
|
+
|
15
|
+
extend InspectID
|
16
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Dux
|
2
|
+
class NullObject
|
3
|
+
include Dux::InspectID
|
4
|
+
|
5
|
+
attr_reader :name
|
6
|
+
attr_reader :purpose
|
7
|
+
|
8
|
+
# @param [String] name
|
9
|
+
# @param [String] purpose
|
10
|
+
def initialize(name, purpose: 'a null object')
|
11
|
+
@name = name
|
12
|
+
@purpose = purpose
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def default_name
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class << self
|
22
|
+
# @param (@see Dux::NullObject#initialize)
|
23
|
+
# @return [Dux::NullObject]
|
24
|
+
def null_object(name, **options)
|
25
|
+
Dux::NullObject.new(name, **options)
|
26
|
+
end
|
27
|
+
|
28
|
+
alias_method :null, :null_object
|
29
|
+
end
|
30
|
+
end
|
data/lib/dux/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexa Grey
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lru_redux
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -28,72 +42,72 @@ dependencies:
|
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
47
|
+
version: '3.5'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '3.5'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
61
|
+
version: '12.0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
68
|
+
version: '12.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: pry
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
75
|
+
version: 0.10.1
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
82
|
+
version: 0.10.1
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: simplecov
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
87
|
+
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
89
|
+
version: 0.14.1
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: 0.14.1
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: yard
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
103
|
+
version: 0.9.8
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: 0.9.8
|
97
111
|
description:
|
98
112
|
email:
|
99
113
|
- devel@mouse.vc
|
@@ -111,17 +125,27 @@ files:
|
|
111
125
|
- README.md
|
112
126
|
- Rakefile
|
113
127
|
- bin/console
|
128
|
+
- bin/rake
|
129
|
+
- bin/rspec
|
114
130
|
- bin/setup
|
115
131
|
- dux.gemspec
|
116
132
|
- lib/dux.rb
|
133
|
+
- lib/dux/attempt.rb
|
134
|
+
- lib/dux/blankness.rb
|
135
|
+
- lib/dux/duck_type.rb
|
117
136
|
- lib/dux/duckify.rb
|
137
|
+
- lib/dux/enum.rb
|
118
138
|
- lib/dux/flock_methods.rb
|
119
139
|
- lib/dux/hacks_like_a_duck.rb
|
140
|
+
- lib/dux/indifferent_string.rb
|
141
|
+
- lib/dux/inspect_id.rb
|
142
|
+
- lib/dux/null_object.rb
|
120
143
|
- lib/dux/version.rb
|
121
144
|
homepage: https://github.com/scryptmouse/dux
|
122
145
|
licenses:
|
123
146
|
- MIT
|
124
|
-
metadata:
|
147
|
+
metadata:
|
148
|
+
yard.run: yri
|
125
149
|
post_install_message:
|
126
150
|
rdoc_options: []
|
127
151
|
require_paths:
|
@@ -138,9 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
162
|
version: '0'
|
139
163
|
requirements: []
|
140
164
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
165
|
+
rubygems_version: 2.6.8
|
142
166
|
signing_key:
|
143
167
|
specification_version: 4
|
144
168
|
summary: Lazy duck-type matching
|
145
169
|
test_files: []
|
146
|
-
has_rdoc:
|