persistent-dmnd 1.0.1 β†’ 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: []