persistent-dmnd 1.0.1 β 1.0.2
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 +13 -5
- data/README.adoc +1 -1
- data/lib/persistent_dmnd/jruby_9_2_set_workaround.rb +154 -0
- data/lib/persistent_dmnd/set.rb +1 -0
- data/lib/persistent_dmnd/version.rb +1 -1
- metadata +26 -39
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MDY5YzgyMTE1YWE0N2E3NzNiMmIzYWM5ZTNjZGRjZmY2NGEzMWZhMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YjE0OWVlYTkyZDg5ZDg2MTk2OGE5ODNlYzVjODIwMTk3NDE2OWE0NQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZDY0NzhiNjY2YWIwODExZjI3OGRkOGY0OGViZGMyZTNmMWFkMzY4Y2VhYzYz
|
10
|
+
OThmMDNmNjNiOGY0NzNiNGVmNzU1ZWNkM2Q2NzAyY2Y4YzJmMzM0MjQ3NWE0
|
11
|
+
NThlZjRmNDJjZjliNDgwOGMzYmExOWUzNWRlZTkzMjk4NDUyYTk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NmU5YzY0NDcxMjlmMzA5OTI4MmI0ZjRlMDk1OTIwN2UzOTQxOWIyYmI1Y2I1
|
14
|
+
MGRhYTYxMzhiNDQ2ODBiZDYxNGVhNTU2NDVmMmI0MGVlOTk3MmIxYmMwMzAz
|
15
|
+
ZDljMGExYzlkOGJjNDRiYjc1YTQxN2NlMzA5YmMwZjY3ZTFiNjY=
|
data/README.adoc
CHANGED
@@ -97,7 +97,7 @@ It also (_optionally!_) interoperates with the https://github.com/ruby-concurren
|
|
97
97
|
Underneath the covers, persistent-π mostly builds atop the awesome https://github.com/hamstergem/hamster[hamster gem].
|
98
98
|
Big thanks to its equally-awesome authors!
|
99
99
|
|
100
|
-
Persistent-π is fully supported and tested on Ruby versions 1.9.3 to 2.6.0-
|
100
|
+
Persistent-π is fully supported and tested on Ruby versions 1.9.3 to 2.6.0-preview2, and JRuby 1.7 to to 9.2. If we don't support your Ruby, it's probably a Python binary. Keep calm and π away!
|
101
101
|
|
102
102
|
[discrete]
|
103
103
|
== Contents
|
@@ -0,0 +1,154 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Persistent-π: Ruby gem for easily creating immutable data structures
|
4
|
+
# Copyright (c) 2017-2018 Ivo Anjo <ivo.anjo@ist.utl.pt>
|
5
|
+
#
|
6
|
+
# This file is part of Persistent-π, and parts were inspired by Ruby's set.rb
|
7
|
+
# https://github.com/ruby/ruby/blob/v2_6_0_preview2/lib/set.rb
|
8
|
+
# Copyright (c) 2002-2016 Akinori MUSHA <knu@iDaemons.org>
|
9
|
+
# All rights reserved. You can redistribute and/or modify it under the same terms as Ruby. See
|
10
|
+
# https://github.com/ruby/ruby/blob/v2_6_0_preview2/COPYING for more details.
|
11
|
+
|
12
|
+
# frozen_string_literal: true
|
13
|
+
|
14
|
+
require 'set'
|
15
|
+
|
16
|
+
module Persistentπ
|
17
|
+
# Workaround for https://github.com/jruby/jruby/issues/5227
|
18
|
+
# We monkey patch the Ruby Set methods affected to restore their interoperable behavior
|
19
|
+
#
|
20
|
+
module JRuby92SetWorkaround
|
21
|
+
def self.workaround_needed?
|
22
|
+
workaround_checker = Object.new
|
23
|
+
workaround_checker.instance_eval do
|
24
|
+
def is_a?(klass)
|
25
|
+
super || klass == Set
|
26
|
+
end
|
27
|
+
|
28
|
+
def size
|
29
|
+
0
|
30
|
+
end
|
31
|
+
|
32
|
+
def all?
|
33
|
+
false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
begin
|
38
|
+
Set.new.superset?(workaround_checker)
|
39
|
+
false
|
40
|
+
rescue ArgumentError => e
|
41
|
+
e.message == "value must be a set"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
if RUBY_PLATFORM == 'java' && JRUBY_VERSION.start_with?('9.2.') && workaround_needed?
|
46
|
+
class ::Set
|
47
|
+
# Save existing Set methods
|
48
|
+
|
49
|
+
alias persistent_dmnd_workaround_original_equal ==
|
50
|
+
alias persistent_dmnd_workaround_original_superset? superset?
|
51
|
+
alias persistent_dmnd_workaround_original_proper_superset? proper_superset?
|
52
|
+
alias persistent_dmnd_workaround_original_subset? subset?
|
53
|
+
alias persistent_dmnd_workaround_original_proper_subset? proper_subset?
|
54
|
+
alias persistent_dmnd_workaround_original_intersect? intersect?
|
55
|
+
alias persistent_dmnd_workaround_original_disjoint? disjoint?
|
56
|
+
alias persistent_dmnd_workaround_original_flatten_merge flatten_merge
|
57
|
+
alias persistent_dmnd_workaround_original_flatten flatten
|
58
|
+
alias persistent_dmnd_workaround_original_flatten! flatten!
|
59
|
+
|
60
|
+
# Redefine all set methods that use instanceof RubySet to restore previous behavior
|
61
|
+
|
62
|
+
def ==(other)
|
63
|
+
persistent_dmnd_workaround_original_equal(other) ||
|
64
|
+
(other.is_a?(::Set) && size == other.size && other.all? { |o| include?(o) })
|
65
|
+
end
|
66
|
+
|
67
|
+
def superset?(set)
|
68
|
+
persistent_dmnd_workaround_original_superset?(set)
|
69
|
+
rescue ArgumentError => e
|
70
|
+
raise unless e.message == "value must be a set" && set.is_a?(::Set)
|
71
|
+
size >= set.size && set.all? { |o| include?(o) }
|
72
|
+
end
|
73
|
+
|
74
|
+
def proper_superset?(set)
|
75
|
+
persistent_dmnd_workaround_original_proper_superset?(set)
|
76
|
+
rescue ArgumentError => e
|
77
|
+
raise unless e.message == "value must be a set" && set.is_a?(::Set)
|
78
|
+
size > set.size && set.all? { |o| include?(o) }
|
79
|
+
end
|
80
|
+
|
81
|
+
def subset?(set)
|
82
|
+
persistent_dmnd_workaround_original_subset?(set)
|
83
|
+
rescue ArgumentError => e
|
84
|
+
raise unless e.message == "value must be a set" && set.is_a?(::Set)
|
85
|
+
size <= set.size && all? { |o| set.include?(o) }
|
86
|
+
end
|
87
|
+
|
88
|
+
def proper_subset?(set)
|
89
|
+
persistent_dmnd_workaround_original_proper_subset?(set)
|
90
|
+
rescue ArgumentError => e
|
91
|
+
raise unless e.message == "value must be a set" && set.is_a?(::Set)
|
92
|
+
size < set.size && all? { |o| set.include?(o) }
|
93
|
+
end
|
94
|
+
|
95
|
+
def intersect?(set)
|
96
|
+
persistent_dmnd_workaround_original_intersect?(set)
|
97
|
+
rescue ArgumentError => e
|
98
|
+
raise unless e.message == "value must be a set" && set.is_a?(::Set)
|
99
|
+
if size < set.size
|
100
|
+
any? { |o| set.include?(o) }
|
101
|
+
else
|
102
|
+
set.any? { |o| include?(o) }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def disjoint?(set)
|
107
|
+
persistent_dmnd_workaround_original_disjoint?(set)
|
108
|
+
rescue ArgumentError => e
|
109
|
+
raise unless e.message == "value must be a set" && set.is_a?(::Set)
|
110
|
+
!(
|
111
|
+
if size < set.size
|
112
|
+
any? { |o| set.include?(o) }
|
113
|
+
else
|
114
|
+
set.any? { |o| include?(o) }
|
115
|
+
end
|
116
|
+
)
|
117
|
+
end
|
118
|
+
|
119
|
+
def flatten_merge(set, seen = ::Set.new)
|
120
|
+
set.each do |o|
|
121
|
+
if o.is_a?(::Set)
|
122
|
+
if seen.include?(o_id = o.object_id)
|
123
|
+
raise ArgumentError, "tried to flatten recursive Set"
|
124
|
+
end
|
125
|
+
|
126
|
+
seen.add(o_id)
|
127
|
+
flatten_merge(o, seen)
|
128
|
+
seen.delete(o_id)
|
129
|
+
else
|
130
|
+
add(o)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
self
|
135
|
+
end
|
136
|
+
|
137
|
+
def flatten
|
138
|
+
self.class.new.flatten_merge(self)
|
139
|
+
end
|
140
|
+
|
141
|
+
def flatten!
|
142
|
+
replace(flatten()) if any? { |o| o.is_a?(::Set) }
|
143
|
+
end
|
144
|
+
|
145
|
+
# Reset aliases to point to redefined methods (otherwise they would keep on pointing to the old variants)
|
146
|
+
|
147
|
+
alias >= superset?
|
148
|
+
alias > proper_superset?
|
149
|
+
alias <= subset?
|
150
|
+
alias < proper_subset?
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
data/lib/persistent_dmnd/set.rb
CHANGED
@@ -33,6 +33,7 @@ require 'persistent_dmnd/self_conversion'
|
|
33
33
|
require 'persistent_dmnd/is_persistent'
|
34
34
|
require 'persistent_dmnd/concurrent_ruby_support'
|
35
35
|
require 'persistent_dmnd/jruby_workaround'
|
36
|
+
require 'persistent_dmnd/jruby_9_2_set_workaround'
|
36
37
|
|
37
38
|
require 'hamster'
|
38
39
|
require 'set'
|
metadata
CHANGED
@@ -1,125 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: persistent-dmnd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivo Anjo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.16'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.16'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '12.2'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '12.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.7'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.7'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: concurrent-ruby
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rufo
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0.2'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: pry
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ! '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: pry-byebug
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
94
|
+
- - ! '>='
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: hamster
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - ~>
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '3.0'
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
|
-
- -
|
108
|
+
- - ~>
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '3.0'
|
125
111
|
description: A tiny ruby gem that gives you a beautiful short-hand syntax for creating
|
@@ -129,10 +115,10 @@ executables: []
|
|
129
115
|
extensions: []
|
130
116
|
extra_rdoc_files: []
|
131
117
|
files:
|
132
|
-
-
|
133
|
-
-
|
134
|
-
-
|
135
|
-
-
|
118
|
+
- .gitignore
|
119
|
+
- .rspec
|
120
|
+
- .ruby-version
|
121
|
+
- .travis.yml
|
136
122
|
- CODE_OF_CONDUCT.adoc
|
137
123
|
- Gemfile
|
138
124
|
- LICENSE
|
@@ -143,13 +129,14 @@ files:
|
|
143
129
|
- bin/rspec
|
144
130
|
- gems.rb
|
145
131
|
- lib/persistent-dmnd.rb
|
146
|
-
- "lib/persistent-\U0001F48E.rb"
|
132
|
+
- ! "lib/persistent-\U0001F48E.rb"
|
147
133
|
- lib/persistent_dmnd/array.rb
|
148
134
|
- lib/persistent_dmnd/concurrent_ruby_support.rb
|
149
135
|
- lib/persistent_dmnd/dmndifier.rb
|
150
136
|
- lib/persistent_dmnd/everywhere.rb
|
151
137
|
- lib/persistent_dmnd/hash.rb
|
152
138
|
- lib/persistent_dmnd/is_persistent.rb
|
139
|
+
- lib/persistent_dmnd/jruby_9_2_set_workaround.rb
|
153
140
|
- lib/persistent_dmnd/jruby_workaround.rb
|
154
141
|
- lib/persistent_dmnd/ruby_1_9_and_2_0_support.rb
|
155
142
|
- lib/persistent_dmnd/self_conversion.rb
|
@@ -166,18 +153,18 @@ require_paths:
|
|
166
153
|
- lib
|
167
154
|
required_ruby_version: !ruby/object:Gem::Requirement
|
168
155
|
requirements:
|
169
|
-
- -
|
156
|
+
- - ! '>='
|
170
157
|
- !ruby/object:Gem::Version
|
171
158
|
version: 1.9.3
|
172
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
160
|
requirements:
|
174
|
-
- -
|
161
|
+
- - ! '>='
|
175
162
|
- !ruby/object:Gem::Version
|
176
163
|
version: '0'
|
177
164
|
requirements: []
|
178
165
|
rubyforge_project:
|
179
|
-
rubygems_version: 2.
|
166
|
+
rubygems_version: 2.6.14
|
180
167
|
signing_key:
|
181
168
|
specification_version: 4
|
182
|
-
summary: "Persistent-\U0001F48E: Because Immutable Data Is Forever"
|
169
|
+
summary: ! "Persistent-\U0001F48E: Because Immutable Data Is Forever"
|
183
170
|
test_files: []
|