persistent-dmnd 2.0.4 → 2.0.6
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/.gitlab-ci.yml +54 -137
- data/.standard.yml +4 -0
- data/CODE_OF_CONDUCT.adoc +99 -45
- data/README.adoc +1 -1
- data/Rakefile +4 -3
- data/lib/persistent_dmnd/array.rb +3 -3
- data/lib/persistent_dmnd/concurrent_ruby_support.rb +1 -1
- data/lib/persistent_dmnd/dmndifier.rb +10 -11
- data/lib/persistent_dmnd/everywhere.rb +1 -1
- data/lib/persistent_dmnd/hash.rb +3 -3
- data/lib/persistent_dmnd/jruby_9_2_set_workaround.rb +31 -28
- data/lib/persistent_dmnd/jruby_workaround.rb +3 -3
- data/lib/persistent_dmnd/set.rb +7 -5
- data/lib/persistent_dmnd/version.rb +1 -1
- data/persistent-dmnd.gemspec +1 -5
- metadata +16 -52
- data/.ruby-version +0 -1
- data/sorbet/config +0 -2
- data/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1660
- data/sorbet/rbi/gems/hamster.rbi +0 -683
- data/sorbet/rbi/hidden-definitions/errors.txt +0 -2552
- data/sorbet/rbi/hidden-definitions/hidden.rbi +0 -4180
- data/sorbet/rbi/sorbet-typed/lib/rake/all/rake.rbi +0 -645
- data/sorbet/rbi/sorbet-typed/lib/rspec-core/all/rspec-core.rbi +0 -1891
- data/sorbet/rbi/todo.rbi +0 -10
|
@@ -41,31 +41,30 @@ module Persistent💎
|
|
|
41
41
|
DEFAULT_OPTIONS = {
|
|
42
42
|
on_unknown: proc { |arg|
|
|
43
43
|
raise ArgumentError, "Could not 💎ify an object of class #{arg.class}. Maybe you need to implement :to_💎?"
|
|
44
|
-
}
|
|
44
|
+
}
|
|
45
45
|
}.freeze
|
|
46
46
|
|
|
47
47
|
private_constant :DEFAULT_OPTIONS
|
|
48
48
|
|
|
49
49
|
def self.[](arg, options = DEFAULT_OPTIONS)
|
|
50
50
|
options = DEFAULT_OPTIONS.merge(options)
|
|
51
|
-
|
|
52
|
-
when arg.respond_to?(:to_💎)
|
|
51
|
+
if arg.respond_to?(:to_💎)
|
|
53
52
|
arg.to_💎
|
|
54
|
-
|
|
53
|
+
elsif arg.respond_to?(:to_dmnd)
|
|
55
54
|
arg.to_dmnd
|
|
56
|
-
|
|
55
|
+
elsif arg.respond_to?(:to_hash)
|
|
57
56
|
h💎[arg.to_hash]
|
|
58
|
-
|
|
57
|
+
elsif arg.is_a?(Hamster::Set) || arg.is_a?(Hamster::SortedSet)
|
|
59
58
|
s💎[*arg.to_a]
|
|
60
|
-
|
|
59
|
+
elsif arg.respond_to?(:to_ary)
|
|
61
60
|
a💎[*arg.to_ary]
|
|
62
|
-
|
|
61
|
+
elsif defined?(Concurrent::Tuple) && arg.is_a?(Concurrent::Tuple)
|
|
63
62
|
a💎[*arg.to_a]
|
|
64
|
-
|
|
63
|
+
elsif arg.respond_to?(:to_set)
|
|
65
64
|
s💎[*arg.to_set.to_a]
|
|
66
|
-
|
|
65
|
+
elsif defined?(Concurrent::Map) && arg.is_a?(Concurrent::Map)
|
|
67
66
|
h💎[Persistent💎::Ruby19And20Support.enumerable_to_h(arg.enum_for(:each_pair))]
|
|
68
|
-
|
|
67
|
+
elsif arg.respond_to?(:each_pair)
|
|
69
68
|
h💎[Persistent💎::Ruby19And20Support.enumerable_to_h(arg.each_pair)]
|
|
70
69
|
else
|
|
71
70
|
options.fetch(:on_unknown).call(arg)
|
data/lib/persistent_dmnd/hash.rb
CHANGED
|
@@ -55,11 +55,11 @@ module Persistent💎
|
|
|
55
55
|
# my_concurrent_hash = my_hash.to_concurrent_hash
|
|
56
56
|
#
|
|
57
57
|
def to_concurrent_hash
|
|
58
|
-
ConcurrentRubySupport
|
|
58
|
+
ConcurrentRubySupport.ensure_concurrent_ruby_loaded
|
|
59
59
|
Concurrent::Hash[self]
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
alias_method :to_concurrent, :to_concurrent_hash
|
|
63
63
|
|
|
64
64
|
# Return Concurrent::Map with contents of Persistent💎::Hash
|
|
65
65
|
#
|
|
@@ -69,7 +69,7 @@ module Persistent💎
|
|
|
69
69
|
# # => #<Concurrent::Map:0x0055ad9b283ea0 entries=1 default_proc=nil>
|
|
70
70
|
#
|
|
71
71
|
def to_concurrent_map
|
|
72
|
-
ConcurrentRubySupport
|
|
72
|
+
ConcurrentRubySupport.ensure_concurrent_ruby_loaded
|
|
73
73
|
each_with_object(Concurrent::Map.new(initial_capacity: size)) do |(key, value), result|
|
|
74
74
|
result[key] = value
|
|
75
75
|
end
|
|
@@ -47,30 +47,30 @@ module Persistent💎
|
|
|
47
47
|
class ::Set
|
|
48
48
|
# Save existing Set methods
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
50
|
+
alias_method :persistent_dmnd_workaround_original_equal, :==
|
|
51
|
+
alias_method :persistent_dmnd_workaround_original_superset?, :superset?
|
|
52
|
+
alias_method :persistent_dmnd_workaround_original_proper_superset?, :proper_superset?
|
|
53
|
+
alias_method :persistent_dmnd_workaround_original_subset?, :subset?
|
|
54
|
+
alias_method :persistent_dmnd_workaround_original_proper_subset?, :proper_subset?
|
|
55
|
+
alias_method :persistent_dmnd_workaround_original_intersect?, :intersect?
|
|
56
|
+
alias_method :persistent_dmnd_workaround_original_disjoint?, :disjoint?
|
|
57
|
+
alias_method :persistent_dmnd_workaround_original_flatten_merge, :flatten_merge
|
|
58
|
+
alias_method :persistent_dmnd_workaround_original_flatten, :flatten
|
|
59
|
+
alias_method :persistent_dmnd_workaround_original_flatten!, :flatten!
|
|
60
|
+
alias_method :persistent_dmnd_workaround_original_spaceship, :<=>
|
|
61
61
|
|
|
62
62
|
# Redefine all set methods that use instanceof RubySet to restore previous behavior
|
|
63
63
|
|
|
64
64
|
if JRUBY_VERSION.start_with?("9.4.")
|
|
65
|
-
def <=>(
|
|
66
|
-
original =
|
|
65
|
+
def <=>(other)
|
|
66
|
+
original = persistent_dmnd_workaround_original_spaceship(other)
|
|
67
67
|
return original if original
|
|
68
68
|
|
|
69
|
-
return unless
|
|
70
|
-
case size <=>
|
|
71
|
-
when -1 then -1 if proper_subset?(
|
|
72
|
-
when +1 then +1 if proper_superset?(
|
|
73
|
-
else 0 if self.==(
|
|
69
|
+
return unless other.is_a?(::Set)
|
|
70
|
+
case size <=> other.size
|
|
71
|
+
when -1 then -1 if proper_subset?(other)
|
|
72
|
+
when +1 then +1 if proper_superset?(other)
|
|
73
|
+
else 0 if self.==(other)
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
end
|
|
@@ -123,11 +123,14 @@ module Persistent💎
|
|
|
123
123
|
persistent_dmnd_workaround_original_disjoint?(set)
|
|
124
124
|
rescue ArgumentError => e
|
|
125
125
|
raise unless e.message == "value must be a set" && set.is_a?(::Set)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
126
|
+
|
|
127
|
+
!(
|
|
128
|
+
if size < set.size
|
|
129
|
+
any? { |o| set.include?(o) }
|
|
130
|
+
else
|
|
131
|
+
set.any? { |o| include?(o) }
|
|
132
|
+
end
|
|
133
|
+
)
|
|
131
134
|
end
|
|
132
135
|
|
|
133
136
|
def flatten_merge(set, seen = ::Set.new)
|
|
@@ -153,15 +156,15 @@ module Persistent💎
|
|
|
153
156
|
end
|
|
154
157
|
|
|
155
158
|
def flatten!
|
|
156
|
-
replace(flatten
|
|
159
|
+
replace(flatten) if any? { |o| o.is_a?(::Set) }
|
|
157
160
|
end
|
|
158
161
|
|
|
159
162
|
# Reset aliases to point to redefined methods (otherwise they would keep on pointing to the old variants)
|
|
160
163
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
alias_method :>=, :superset?
|
|
165
|
+
alias_method :>, :proper_superset?
|
|
166
|
+
alias_method :<=, :subset?
|
|
167
|
+
alias_method :<, :proper_subset?
|
|
165
168
|
end
|
|
166
169
|
end
|
|
167
170
|
end
|
|
@@ -51,7 +51,7 @@ module Persistent💎
|
|
|
51
51
|
|
|
52
52
|
def singleton_method_added(name)
|
|
53
53
|
super
|
|
54
|
-
maybe_fix_broken_encoding(name,
|
|
54
|
+
maybe_fix_broken_encoding(name, singleton_class)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
private
|
|
@@ -83,8 +83,8 @@ module Persistent💎
|
|
|
83
83
|
|
|
84
84
|
if JRUBY_VERSION.start_with?("1.7.")
|
|
85
85
|
unless name_string.match(/\?.+/) ||
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
["a?", "h?", "s?", "each?"].include?(name_string) ||
|
|
87
|
+
["_?", "_a?", "_h?", "_s?"].any? { |suffix| name_string.end_with?(suffix) }
|
|
88
88
|
return
|
|
89
89
|
end
|
|
90
90
|
else
|
data/lib/persistent_dmnd/set.rb
CHANGED
|
@@ -69,10 +69,10 @@ module Persistent💎
|
|
|
69
69
|
# see also https://rubyreferences.github.io/rubychanges/3.0.html#standard-library for details
|
|
70
70
|
def <=>(other)
|
|
71
71
|
case size <=> other.size
|
|
72
|
-
when
|
|
73
|
-
|
|
74
|
-
when
|
|
75
|
-
|
|
72
|
+
when -1
|
|
73
|
+
-1 if self < other
|
|
74
|
+
when +1
|
|
75
|
+
+1 if self > other
|
|
76
76
|
else
|
|
77
77
|
0 if self == other
|
|
78
78
|
end
|
|
@@ -96,10 +96,12 @@ module Persistent💎
|
|
|
96
96
|
|
|
97
97
|
alias_method :to_sDmnd, :to_s💎
|
|
98
98
|
|
|
99
|
+
alias_method :===, :include?
|
|
100
|
+
|
|
99
101
|
private
|
|
100
102
|
|
|
101
103
|
def set_eq?(other)
|
|
102
|
-
|
|
104
|
+
size == other.size && other.all? { |item| include?(item) }
|
|
103
105
|
end
|
|
104
106
|
end
|
|
105
107
|
end
|
data/persistent-dmnd.gemspec
CHANGED
|
@@ -55,14 +55,10 @@ Gem::Specification.new do |spec|
|
|
|
55
55
|
spec.add_development_dependency "rake", "~> 12.2" # Note: Rake 12.2 is the last that supports Ruby 1.9
|
|
56
56
|
spec.add_development_dependency "rspec", "~> 3.8"
|
|
57
57
|
spec.add_development_dependency "concurrent-ruby", "~> 1.1"
|
|
58
|
-
spec.add_development_dependency "
|
|
58
|
+
spec.add_development_dependency "standard" if RUBY_VERSION >= "2.6.0"
|
|
59
59
|
spec.add_development_dependency "pry" if RUBY_VERSION >= "2.0.0"
|
|
60
60
|
spec.add_development_dependency "pry-byebug" if RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.4"
|
|
61
61
|
spec.add_development_dependency "pry-debugger-jruby" if RUBY_ENGINE == "jruby" && !JRUBY_VERSION.start_with?("1.7.")
|
|
62
|
-
unless RUBY_ENGINE == "truffleruby"
|
|
63
|
-
spec.add_development_dependency "sorbet"
|
|
64
|
-
spec.add_development_dependency "spoom", "~> 1.1" if RUBY_VERSION >= "2.3.7"
|
|
65
|
-
end
|
|
66
62
|
|
|
67
63
|
spec.add_dependency "hamster", "~> 3.0"
|
|
68
64
|
end
|
metadata
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: persistent-dmnd
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ivo Anjo
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-02-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rake
|
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
|
15
16
|
requirements:
|
|
16
17
|
- - "~>"
|
|
17
18
|
- !ruby/object:Gem::Version
|
|
18
19
|
version: '12.2'
|
|
19
|
-
name: rake
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -25,12 +25,12 @@ dependencies:
|
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '12.2'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rspec
|
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
|
29
30
|
requirements:
|
|
30
31
|
- - "~>"
|
|
31
32
|
- !ruby/object:Gem::Version
|
|
32
33
|
version: '3.8'
|
|
33
|
-
name: rspec
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -39,12 +39,12 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '3.8'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: concurrent-ruby
|
|
42
43
|
requirement: !ruby/object:Gem::Requirement
|
|
43
44
|
requirements:
|
|
44
45
|
- - "~>"
|
|
45
46
|
- !ruby/object:Gem::Version
|
|
46
47
|
version: '1.1'
|
|
47
|
-
name: concurrent-ruby
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -53,26 +53,12 @@ dependencies:
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '1.1'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
|
|
57
|
-
requirements:
|
|
58
|
-
- - "~>"
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: '0.13'
|
|
61
|
-
name: rufo
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0.13'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: standard
|
|
70
57
|
requirement: !ruby/object:Gem::Requirement
|
|
71
58
|
requirements:
|
|
72
59
|
- - ">="
|
|
73
60
|
- !ruby/object:Gem::Version
|
|
74
61
|
version: '0'
|
|
75
|
-
name: pry
|
|
76
62
|
type: :development
|
|
77
63
|
prerelease: false
|
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -81,12 +67,12 @@ dependencies:
|
|
|
81
67
|
- !ruby/object:Gem::Version
|
|
82
68
|
version: '0'
|
|
83
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: pry
|
|
84
71
|
requirement: !ruby/object:Gem::Requirement
|
|
85
72
|
requirements:
|
|
86
73
|
- - ">="
|
|
87
74
|
- !ruby/object:Gem::Version
|
|
88
75
|
version: '0'
|
|
89
|
-
name: pry-debugger-jruby
|
|
90
76
|
type: :development
|
|
91
77
|
prerelease: false
|
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -95,12 +81,12 @@ dependencies:
|
|
|
95
81
|
- !ruby/object:Gem::Version
|
|
96
82
|
version: '0'
|
|
97
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: pry-byebug
|
|
98
85
|
requirement: !ruby/object:Gem::Requirement
|
|
99
86
|
requirements:
|
|
100
87
|
- - ">="
|
|
101
88
|
- !ruby/object:Gem::Version
|
|
102
89
|
version: '0'
|
|
103
|
-
name: sorbet
|
|
104
90
|
type: :development
|
|
105
91
|
prerelease: false
|
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -109,26 +95,12 @@ dependencies:
|
|
|
109
95
|
- !ruby/object:Gem::Version
|
|
110
96
|
version: '0'
|
|
111
97
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
|
|
113
|
-
requirements:
|
|
114
|
-
- - "~>"
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: '1.1'
|
|
117
|
-
name: spoom
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '1.1'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: hamster
|
|
126
99
|
requirement: !ruby/object:Gem::Requirement
|
|
127
100
|
requirements:
|
|
128
101
|
- - "~>"
|
|
129
102
|
- !ruby/object:Gem::Version
|
|
130
103
|
version: '3.0'
|
|
131
|
-
name: hamster
|
|
132
104
|
type: :runtime
|
|
133
105
|
prerelease: false
|
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -146,7 +118,7 @@ files:
|
|
|
146
118
|
- ".gitignore"
|
|
147
119
|
- ".gitlab-ci.yml"
|
|
148
120
|
- ".rspec"
|
|
149
|
-
- ".
|
|
121
|
+
- ".standard.yml"
|
|
150
122
|
- CODE_OF_CONDUCT.adoc
|
|
151
123
|
- LICENSE
|
|
152
124
|
- README.adoc
|
|
@@ -157,7 +129,7 @@ files:
|
|
|
157
129
|
- bin/rspec
|
|
158
130
|
- gems.rb
|
|
159
131
|
- lib/persistent-dmnd.rb
|
|
160
|
-
- lib/persistent
|
|
132
|
+
- "lib/persistent-\U0001F48E.rb"
|
|
161
133
|
- lib/persistent_dmnd/array.rb
|
|
162
134
|
- lib/persistent_dmnd/concurrent_ruby_support.rb
|
|
163
135
|
- lib/persistent_dmnd/dmndifier.rb
|
|
@@ -171,19 +143,11 @@ files:
|
|
|
171
143
|
- lib/persistent_dmnd/set.rb
|
|
172
144
|
- lib/persistent_dmnd/version.rb
|
|
173
145
|
- persistent-dmnd.gemspec
|
|
174
|
-
- sorbet/config
|
|
175
|
-
- sorbet/rbi/gems/concurrent-ruby.rbi
|
|
176
|
-
- sorbet/rbi/gems/hamster.rbi
|
|
177
|
-
- sorbet/rbi/hidden-definitions/errors.txt
|
|
178
|
-
- sorbet/rbi/hidden-definitions/hidden.rbi
|
|
179
|
-
- sorbet/rbi/sorbet-typed/lib/rake/all/rake.rbi
|
|
180
|
-
- sorbet/rbi/sorbet-typed/lib/rspec-core/all/rspec-core.rbi
|
|
181
|
-
- sorbet/rbi/todo.rbi
|
|
182
146
|
homepage: https://gitlab.com/ivoanjo/persistent-dmnd/
|
|
183
147
|
licenses:
|
|
184
148
|
- MIT
|
|
185
149
|
metadata: {}
|
|
186
|
-
post_install_message:
|
|
150
|
+
post_install_message:
|
|
187
151
|
rdoc_options: []
|
|
188
152
|
require_paths:
|
|
189
153
|
- lib
|
|
@@ -198,8 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
198
162
|
- !ruby/object:Gem::Version
|
|
199
163
|
version: '0'
|
|
200
164
|
requirements: []
|
|
201
|
-
rubygems_version: 3.
|
|
202
|
-
signing_key:
|
|
165
|
+
rubygems_version: 3.1.4
|
|
166
|
+
signing_key:
|
|
203
167
|
specification_version: 4
|
|
204
|
-
summary:
|
|
168
|
+
summary: "Persistent-\U0001F48E: Because Immutable Data Is Forever"
|
|
205
169
|
test_files: []
|
data/.ruby-version
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ruby-3.0.2
|
data/sorbet/config
DELETED