dux 0.1.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 [![Build Status](https://travis-ci.org/scryptmouse/dux.svg?branch=master)](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:
|