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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 29dbca88c51d0e49932b3f38fe2e210d39e00f3b976adb1876aa33e086d02576
4
- data.tar.gz: cabea99e2afa0b0539b1a18c90569ab76252c9d05cd20fd36c8e9f92bfa1cf9f
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDY5YzgyMTE1YWE0N2E3NzNiMmIzYWM5ZTNjZGRjZmY2NGEzMWZhMA==
5
+ data.tar.gz: !binary |-
6
+ YjE0OWVlYTkyZDg5ZDg2MTk2OGE5ODNlYzVjODIwMTk3NDE2OWE0NQ==
5
7
  SHA512:
6
- metadata.gz: 0b11b0d5702ce13aa8ff10fd9181f1211bab465ab02292a2ddb3850d52c407b3d1296c9941d0628dd9e99eb7e2e6533927a8747faf7231bd435c62feed8db227
7
- data.tar.gz: d33ffce384b3a2b3814d5ea3ce48ed017d48b0664b0c17bb9f7566ef220ec3769187807c8dd6681e9a2262001eb401ec1636dd4539c0b5b87175ef82f61b0a9d
8
+ metadata.gz: !binary |-
9
+ ZDY0NzhiNjY2YWIwODExZjI3OGRkOGY0OGViZGMyZTNmMWFkMzY4Y2VhYzYz
10
+ OThmMDNmNjNiOGY0NzNiNGVmNzU1ZWNkM2Q2NzAyY2Y4YzJmMzM0MjQ3NWE0
11
+ NThlZjRmNDJjZjliNDgwOGMzYmExOWUzNWRlZTkzMjk4NDUyYTk=
12
+ data.tar.gz: !binary |-
13
+ NmU5YzY0NDcxMjlmMzA5OTI4MmI0ZjRlMDk1OTIwN2UzOTQxOWIyYmI1Y2I1
14
+ MGRhYTYxMzhiNDQ2ODBiZDYxNGVhNTU2NDVmMmI0MGVlOTk3MmIxYmMwMzAz
15
+ ZDljMGExYzlkOGJjNDRiYjc1YTQxN2NlMzA5YmMwZjY3ZTFiNjY=
@@ -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-preview1, and JRuby 1.7 to to 9.1. If we don't support your Ruby, it's probably a Python binary. Keep calm and πŸ’Ž away!
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
@@ -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'
@@ -30,5 +30,5 @@
30
30
  # frozen_string_literal: true
31
31
 
32
32
  module PersistentπŸ’Ž
33
- VERSION = '1.0.1'
33
+ VERSION = '1.0.2'
34
34
  end
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.1
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-06 00:00:00.000000000 Z
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
- - ".gitignore"
133
- - ".rspec"
134
- - ".ruby-version"
135
- - ".travis.yml"
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.7.6
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: []