persistent-dmnd 2.0.6 β†’ 3.0.0

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,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5cd01e1f2ee6015265d1acbf6c39650d57550dba82e53c11fe2a0d4d3f91cf5a
4
- data.tar.gz: bd0fa4583bfdb2918433219b470ca92257694a34fa0e7291fa19d98fc6c2a6ad
3
+ metadata.gz: f0960914486fd0d32657f0a2ac0bc39fac7939e6334a6fccddc0276643dc9872
4
+ data.tar.gz: beffd955c885fc84848b3ae6e712290773c62d1a7f88d852c78d26ddbe8f69ad
5
5
  SHA512:
6
- metadata.gz: 0caf98c7fc4d381d6d0262063fb50ec899fa42e047aa7baf13eaf761440940fc8dfe995d3a1045ba8b06608d0039b5e58c7c465af080b3e7f219f3f94662f70c
7
- data.tar.gz: d37814ecc14f80ad39e3bcbfd73f8b714b5da823614b6a26ff0e580db1299bc7ea591bd651aaafedd3db4bc019ceca00d2f2161446865d259aed06dcb1ddf84e
6
+ metadata.gz: 897d9bfc154865911c0be282ce3bb2cc19161b265e0c7244e39c52db5c1b40a92b188122233117404e636ef562509627366aabbbf54b8a55e206dccd8979d88f
7
+ data.tar.gz: 25aa9be4e63456038a288d6d6155c63306714102516d143d6f393a442778d164e01bc2ce8c40028de96eb919cf551f847d307cf8f893c3189207d745b47d4ef2
data/.gitlab-ci.yml CHANGED
@@ -1,125 +1,3 @@
1
- # MRI Ruby version list:
2
- # https://hub.docker.com/r/library/ruby/tags/
3
-
4
- testruby_1_9_3:
5
- image: "ruby:1.9.3"
6
-
7
- cache: # Cache gems in between builds
8
- paths:
9
- - vendor/ruby
10
-
11
- before_script:
12
- - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50 7638D0442B90D010 8B48AD6246925553
13
- - echo "deb [trusted=yes] http://archive.debian.org/debian/ jessie main contrib non-free" | tee /etc/apt/sources.list
14
- - apt-get update # Add UTF-8 support
15
- - apt-get install -y locales >/dev/null # |
16
- - echo "en_US UTF-8" > /etc/locale.gen # |
17
- - locale-gen en_US.UTF-8 # |
18
- - export LANG=en_US.UTF-8 # |
19
- - export LANGUAGE=en_US:en # |
20
- - export LC_ALL=en_US.UTF-8 # v
21
- - ruby -v # Print out ruby version for debugging
22
- - gem install bundler -v '< 2' # Bundler is not installed with the image
23
- - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
24
-
25
- script:
26
- - bin/rspec
27
-
28
- testruby_2_0:
29
- image: "ruby:2.0"
30
-
31
- cache: # Cache gems in between builds
32
- paths:
33
- - vendor/ruby
34
-
35
- before_script:
36
- - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50 7638D0442B90D010 8B48AD6246925553
37
- - echo "deb [trusted=yes] http://archive.debian.org/debian/ jessie main contrib non-free" | tee /etc/apt/sources.list
38
- - apt-get update # Add UTF-8 support
39
- - apt-get install -y locales >/dev/null # |
40
- - echo "en_US UTF-8" > /etc/locale.gen # |
41
- - locale-gen en_US.UTF-8 # |
42
- - export LANG=en_US.UTF-8 # |
43
- - export LANGUAGE=en_US:en # |
44
- - export LC_ALL=en_US.UTF-8 # v
45
- - ruby -v # Print out ruby version for debugging
46
- - gem install bundler:'< 2' # Bundler is not installed with the image
47
- - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
48
-
49
- script:
50
- - bin/rspec
51
-
52
- testruby_2_1:
53
- image: "ruby:2.1"
54
-
55
- cache: # Cache gems in between builds
56
- paths:
57
- - vendor/ruby
58
-
59
- before_script:
60
- - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50 7638D0442B90D010 8B48AD6246925553
61
- - echo "deb [trusted=yes] http://archive.debian.org/debian/ jessie main contrib non-free" | tee /etc/apt/sources.list
62
- - apt-get update # Add UTF-8 support
63
- - apt-get install -y locales >/dev/null # |
64
- - echo "en_US UTF-8" > /etc/locale.gen # |
65
- - locale-gen en_US.UTF-8 # |
66
- - export LANG=en_US.UTF-8 # |
67
- - export LANGUAGE=en_US:en # |
68
- - export LC_ALL=en_US.UTF-8 # v
69
- - ruby -v # Print out ruby version for debugging
70
- - gem install bundler:'< 2' # Bundler is not installed with the image
71
- - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
72
-
73
- script:
74
- - bin/rspec
75
-
76
- testruby_2_2:
77
- image: "ruby:2.2"
78
-
79
- cache: # Cache gems in between builds
80
- paths:
81
- - vendor/ruby
82
-
83
- before_script:
84
- - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50 7638D0442B90D010 8B48AD6246925553
85
- - echo "deb [trusted=yes] http://archive.debian.org/debian/ jessie main contrib non-free" | tee /etc/apt/sources.list
86
- - apt-get update # Add UTF-8 support
87
- - apt-get install -y locales >/dev/null # |
88
- - echo "en_US UTF-8" > /etc/locale.gen # |
89
- - locale-gen en_US.UTF-8 # |
90
- - export LANG=en_US.UTF-8 # |
91
- - export LANGUAGE=en_US:en # |
92
- - export LC_ALL=en_US.UTF-8 # v
93
- - ruby -v # Print out ruby version for debugging
94
- - gem install bundler:'< 2' # Bundler is not installed with the image
95
- - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
96
-
97
- script:
98
- - bin/rspec
99
-
100
- testruby_2_3:
101
- image: "ruby:2.3"
102
-
103
- cache: # Cache gems in between builds
104
- paths:
105
- - vendor/ruby
106
-
107
- before_script:
108
- - echo "deb [trusted=yes] http://archive.debian.org/debian/ stretch main contrib non-free" | tee /etc/apt/sources.list
109
- - apt-get update >/dev/null # Add UTF-8 support
110
- - apt-get install -y locales >/dev/null # |
111
- - echo "en_US UTF-8" > /etc/locale.gen # |
112
- - locale-gen en_US.UTF-8 # |
113
- - export LANG=en_US.UTF-8 # |
114
- - export LANGUAGE=en_US:en # |
115
- - export LC_ALL=en_US.UTF-8 # v
116
- - ruby -v # Print out ruby version for debugging
117
- - gem install bundler:'< 2' # Bundler is not installed with the image
118
- - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
119
-
120
- script:
121
- - bin/rspec
122
-
123
1
  testruby_2_4:
124
2
  image: "ruby:2.4"
125
3
 
@@ -240,86 +118,6 @@ testruby_3_3:
240
118
  script:
241
119
  - bin/rspec
242
120
 
243
- testjruby_1_7:
244
- image: "jruby:1.7"
245
-
246
- cache: # Cache gems in between builds
247
- paths:
248
- - vendor/ruby
249
-
250
- before_script:
251
- - echo "deb [trusted=yes] http://archive.debian.org/debian/ stretch main contrib non-free" | tee /etc/apt/sources.list
252
- - apt-get update >/dev/null # Add UTF-8 support
253
- - apt-get install -y locales >/dev/null # |
254
- - echo "en_US UTF-8" > /etc/locale.gen # |
255
- - locale-gen en_US.UTF-8 # |
256
- - export LANG=en_US.UTF-8 # |
257
- - export LANGUAGE=en_US:en # |
258
- - export LC_ALL=en_US.UTF-8 # v
259
- - apt-get install -y git >/dev/null # Add git binary
260
- - export JRUBY_OPTS=--dev # Faster test runs
261
- - ruby -v # Print out ruby version for debugging
262
- - gem install bundler:'< 2' # Bundler is not installed with the image
263
- - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
264
-
265
- script:
266
- - bin/rspec
267
-
268
- testjruby_9_0:
269
- image: "jruby:9.0"
270
-
271
- cache: # Cache gems in between builds
272
- paths:
273
- - vendor/ruby
274
-
275
- before_script:
276
- - rm /etc/apt/sources.list.d/jessie-backports.list
277
- - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50 7638D0442B90D010 8B48AD6246925553
278
- - echo "deb [trusted=yes] http://archive.debian.org/debian/ jessie main contrib non-free" | tee /etc/apt/sources.list
279
- - apt-get update # Add UTF-8 support
280
- - apt-get install -y locales >/dev/null # |
281
- - echo "en_US UTF-8" > /etc/locale.gen # |
282
- - locale-gen en_US.UTF-8 # |
283
- - export LANG=en_US.UTF-8 # |
284
- - export LANGUAGE=en_US:en # |
285
- - export LC_ALL=en_US.UTF-8 # v
286
- - apt-get install -y git >/dev/null # Add git binary
287
- - export JRUBY_OPTS=--dev # Faster test runs
288
- - ruby -v # Print out ruby version for debugging
289
- - wget https://rubygems.org/downloads/jruby-openssl-0.9.21-java.gem # Needed to support newer ciphers when connecting to rubygems.org (otherwise gem downloads fail)
290
- - gem install jruby-openssl-0.9.21-java.gem # Install the newer gem
291
- - gem uninstall -x -i /opt/jruby/lib/ruby/gems/shared bundler # Remove any pre-existing bundler
292
- - gem install bundler:'< 2' # Install latest bundler 1.x
293
- - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
294
-
295
- script:
296
- - bin/rspec
297
-
298
- testjruby_9_1:
299
- image: "jruby:9.1"
300
-
301
- cache: # Cache gems in between builds
302
- paths:
303
- - vendor/ruby
304
-
305
- before_script:
306
- - apt-get update >/dev/null # Add UTF-8 support
307
- - apt-get install -y locales >/dev/null # |
308
- - echo "en_US UTF-8" > /etc/locale.gen # |
309
- - locale-gen en_US.UTF-8 # |
310
- - export LANG=en_US.UTF-8 # |
311
- - export LANGUAGE=en_US:en # |
312
- - export LC_ALL=en_US.UTF-8 # v
313
- - apt-get install -y git >/dev/null # Add git binary
314
- - export JRUBY_OPTS=--dev # Faster test runs
315
- - ruby -v # Print out ruby version for debugging
316
- - gem uninstall -x -i /opt/jruby/lib/ruby/gems/shared bundler # Remove any pre-existing bundler
317
- - gem install bundler:'< 2' # Bundler is not installed with the image
318
- - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
319
-
320
- script:
321
- - bin/rspec
322
-
323
121
  # This is not repeated from the 9.2 below! 9.2.0.0 is a very specific version with a bug in the Set interoperability so
324
122
  # we'll want to check that our workaround is working with this one even after the 9.2 branch moves on.
325
123
  testjruby9_2_0_0:
data/.standard.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  # For available configuration options, see:
2
2
  # https://github.com/testdouble/standard
3
3
  fix: true
4
- ruby_version: 1.9
4
+ ruby_version: 2.4
data/README.adoc CHANGED
@@ -94,10 +94,10 @@ Beyond being immutable, these data structures are thread-safe, and can be effici
94
94
 
95
95
  It also (_optionally!_) interoperates with the https://github.com/ruby-concurrency/concurrent-ruby[concurrent-ruby gem], for when you need that extra Oomph (or just thread-safe mutability). See <<concurrent-ruby-interoperability,below>> for more details.
96
96
 
97
- Underneath the covers, persistent-πŸ’Ž mostly builds atop the awesome https://github.com/hamstergem/hamster[hamster gem].
97
+ Underneath the covers, persistent-πŸ’Ž mostly builds atop the awesome https://github.com/immutable-ruby/immutable-ruby[immutable-ruby 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 3.3, JRuby 1.7 to 9.4, and TruffleRuby πŸŽ‰.
100
+ Persistent-πŸ’Ž is fully supported and tested on Ruby versions 2.4 to 3.3, JRuby 9.2 to 9.4, and TruffleRuby πŸŽ‰.
101
101
  If we don't support your Ruby, it's probably a Python binary instead (or a potato?).
102
102
  Keep calm and πŸ’Ž away!
103
103
 
@@ -258,11 +258,11 @@ my_set = Set.new([:regular, :ruby, :set])
258
258
  => PersistentπŸ’Ž::Set[:regular, :ruby, :set]
259
259
  ----
260
260
 
261
- And it works for https://github.com/hamstergem/hamster[hamster gem] (`Hamster::Vector`, `Hamster::Hash`, `Hamster::Set`) and https://github.com/ruby-concurrency/concurrent-ruby[concurrent-ruby gem] (`Concurrent::Array`, `Concurrent::Tuple`, `Concurrent::Hash`, `Concurrent::Map`) data structures:
261
+ And it works for https://github.com/hamstergem/hamster[hamster gem] (`Hamster::Vector`, `Hamster::Hash`, `Hamster::Set`), https://github.com/immutable-ruby/immutable-ruby[immutable-ruby gem] (`Immutable::Vector`, `Immutable::Hash`, `Immutable::Set`) and https://github.com/ruby-concurrency/concurrent-ruby[concurrent-ruby gem] (`Concurrent::Array`, `Concurrent::Tuple`, `Concurrent::Hash`, `Concurrent::Map`) data structures:
262
262
 
263
263
  [source,ruby]
264
264
  ----
265
- my_vector = Hamster::Vector[1, 2, 3]
265
+ my_vector = Immutable::Vector[1, 2, 3]
266
266
  πŸ’Žify[my_vector]
267
267
  # => PersistentπŸ’Ž::Array[1, 2, 3]
268
268
 
@@ -275,7 +275,7 @@ my_tuple.set(0, :hello)
275
275
  πŸ’Žify[my_tuple]
276
276
  # => PersistentπŸ’Ž::Array[:hello]
277
277
 
278
- my_hash = Hamster::Hash[hello: :world]
278
+ my_hash = Immutable::Hash[hello: :world]
279
279
  πŸ’Žify[my_hash]
280
280
  # => PersistentπŸ’Ž::Hash[:hello => :world]
281
281
 
@@ -288,7 +288,7 @@ my_map[:hello] = :world
288
288
  πŸ’Žify[my_map]
289
289
  # => PersistentπŸ’Ž::Hash[:hello => :world]
290
290
 
291
- my_set = Hamster::Set[:hello, :world]
291
+ my_set = Immutable::Set[:hello, :world]
292
292
  πŸ’Žify[my_set]
293
293
  # => PersistentπŸ’Ž::Set[:hello, :world]
294
294
  ----
@@ -418,28 +418,28 @@ my_concurrent_map = my_hash.to_concurrent_map
418
418
 
419
419
  === API documentation for the persistent structures
420
420
 
421
- Because the persistent structures are provided by the awesome https://github.com/hamstergem/hamster[hamster gem], you can refer back to Hamster's API docs for details on the operations provided by each data structure.
421
+ Because the persistent structures are provided by the awesome https://github.com/immutable-ruby/immutable-ruby[immutable-ruby gem], you can refer back to immutable-ruby's API docs for details on the operations provided by each data structure.
422
422
 
423
423
  ==== Array
424
424
 
425
- Built on top of `Hamster::Vector`
425
+ Built on top of `Immutable::Vector`
426
426
 
427
- * https://github.com/hamstergem/hamster#vector-api-documentation[Example usage]
428
- * http://rubydoc.info/github/hamstergem/hamster/master/Hamster/Vector[API docs]
427
+ * https://github.com/immutable-ruby/immutable-ruby#vector-api-documentation[Example usage]
428
+ * https://rubydoc.info/github/immutable-ruby/immutable-ruby/master/Immutable/Vector[API docs]
429
429
 
430
430
  ==== Hash
431
431
 
432
- Built on top of `Hamster::Hash`
432
+ Built on top of `Immutable::Hash`
433
433
 
434
- * https://github.com/hamstergem/hamster#hash-api-documentation[Example usage]
435
- * http://rubydoc.info/github/hamstergem/hamster/master/Hamster/Hash[API docs]
434
+ * https://github.com/immutable-ruby/immutable-ruby#hash-api-documentation[Example usage]
435
+ * http://rubydoc.info/github/immutable-ruby/immutable-ruby/master/Immutable/Hash[API docs]
436
436
 
437
437
  ==== Set
438
438
 
439
- Built on top of `Hamster::Set`
439
+ Built on top of `Immutable::Set`
440
440
 
441
- * https://github.com/hamstergem/hamster#set-api-documentation[Example usage]
442
- * http://www.rubydoc.info/github/hamstergem/hamster/master/Hamster/Set[API docs]
441
+ * https://github.com/immutable-ruby/immutable-ruby#set-api-documentation[Example usage]
442
+ * http://rubydoc.info/github/immutable-ruby/immutable-ruby/master/Immutable/Set[API docs]
443
443
 
444
444
  == AAARGH YOU FIEND WHY IS THERE AN EMOJI ON MY CODEBASE?
445
445
 
@@ -504,6 +504,6 @@ Everyone interacting in the Persistent-πŸ’Ž project’s codebases, issue tracker
504
504
 
505
505
  Interested in immutable/persistent data structures? Here are some interesting resources for your exploration:
506
506
 
507
- * https://github.com/hamstergem/hamster[hamster gem]
508
507
  * https://github.com/immutable-ruby/immutable-ruby[immmutable-ruby gem]
508
+ * https://github.com/hamstergem/hamster[hamster gem]
509
509
  * https://gitlab.com/ivoanjo/persistent-dmnd/issues[Your suggestion here]
data/UPSTREAM_TODO.adoc CHANGED
@@ -120,13 +120,3 @@ def <=>(other)
120
120
  self == other ? 0 : nil
121
121
  end
122
122
  ----
123
-
124
- === Fix `Hash` comparison with Ruby hashes using `<`/`+++<=+++` breaks on Ruby 2.2 or older
125
-
126
- Because the default implementation of this methods is `other > self` or `other >= self`, this breaks on older rubies as Hash does not implement these methods.
127
-
128
- By relying supplying our own comparison code (similar to `>`/`>=`) we can workaround this.
129
-
130
- === Fix unneeded complex comparison in `Hash#>`
131
-
132
- Instead of implementing it as `self != other && self >= other` and thus requiring twice the iterations/comparisons, this can just be `self.size > other.size`.
data/gems.rb CHANGED
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: false
3
-
4
1
  source "https://rubygems.org"
5
2
 
6
3
  gemspec
@@ -8,4 +5,4 @@ gemspec
8
5
  # Specify ffi version to avoid dependency issues when switching between MRI
9
6
  # and JRuby with the same gems.lock
10
7
  # Only used in development
11
- gem "ffi", "~> 1.9.18"
8
+ gem "ffi", "~> 1.15.5"
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: strong
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: true
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -35,11 +32,8 @@ require "persistent_dmnd/array"
35
32
  require "persistent_dmnd/hash"
36
33
  require "persistent_dmnd/set"
37
34
  require "persistent_dmnd/dmndifier"
38
- require "persistent_dmnd/jruby_workaround"
39
35
 
40
36
  module PersistentπŸ’Ž
41
- include JRubyWorkaround
42
-
43
37
  def self.included(klass)
44
38
  # Make methods on this module also available inside classes (e.g. not just in instances)
45
39
  klass.extend(self)
@@ -103,7 +97,7 @@ module PersistentπŸ’Ž
103
97
  # * Converts strings into immutable Strings (without modifying the original String)
104
98
  # * Converts objects that answer to #to_str into frozen Strings
105
99
  # * Converts sets (e.g. something that #is_a?(::Set) or answers to #to_set) into persistent sets
106
- # * Converts Hamster and Concurrent (from concurrent-ruby) data structures to their persistent counterparts
100
+ # * Converts Hamster (from hamster), Immutable and Concurrent (from concurrent-ruby) data structures to their persistent counterparts
107
101
  #
108
102
  def πŸ’Žify
109
103
  PersistentπŸ’Ž::Dmndifier
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: false
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -33,16 +30,14 @@
33
30
  require "persistent_dmnd/self_conversion"
34
31
  require "persistent_dmnd/is_persistent"
35
32
  require "persistent_dmnd/concurrent_ruby_support"
36
- require "persistent_dmnd/jruby_workaround"
37
33
 
38
- require "hamster"
34
+ require "immutable"
39
35
  require "set"
40
36
 
41
37
  module PersistentπŸ’Ž
42
- class Array < Hamster::Vector
38
+ class Array < Immutable::Vector
43
39
  include SelfConversion
44
40
  include IsPersistent
45
- include JRubyWorkaround
46
41
  include PersistentπŸ’Ž
47
42
 
48
43
  def self.[](*items)
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: true
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -30,8 +27,6 @@
30
27
 
31
28
  # frozen_string_literal: true
32
29
 
33
- require "thread"
34
-
35
30
  module PersistentπŸ’Ž
36
31
  # Simple module that attempts to load concurrent-ruby, and then stores the result for quick lookup
37
32
  # This way we take care of loading concurrent-ruby ONLY when the library client asks us to, thus not bloating
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: true
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -30,9 +27,7 @@
30
27
 
31
28
  # frozen_string_literal: true
32
29
 
33
- require "persistent_dmnd/ruby_1_9_and_2_0_support"
34
-
35
- require "hamster"
30
+ require "immutable"
36
31
 
37
32
  module PersistentπŸ’Ž
38
33
  class Dmndifier
@@ -54,7 +49,11 @@ module PersistentπŸ’Ž
54
49
  arg.to_dmnd
55
50
  elsif arg.respond_to?(:to_hash)
56
51
  hπŸ’Ž[arg.to_hash]
57
- elsif arg.is_a?(Hamster::Set) || arg.is_a?(Hamster::SortedSet)
52
+ elsif arg.is_a?(Immutable::Set) || arg.is_a?(Immutable::SortedSet)
53
+ sπŸ’Ž[*arg.to_a]
54
+ elsif defined?(Hamster::Set) && arg.is_a?(Hamster::Set)
55
+ sπŸ’Ž[*arg.to_a]
56
+ elsif defined?(Hamster::SortedSet) && arg.is_a?(Hamster::SortedSet)
58
57
  sπŸ’Ž[*arg.to_a]
59
58
  elsif arg.respond_to?(:to_ary)
60
59
  aπŸ’Ž[*arg.to_ary]
@@ -63,9 +62,9 @@ module PersistentπŸ’Ž
63
62
  elsif arg.respond_to?(:to_set)
64
63
  sπŸ’Ž[*arg.to_set.to_a]
65
64
  elsif defined?(Concurrent::Map) && arg.is_a?(Concurrent::Map)
66
- hπŸ’Ž[PersistentπŸ’Ž::Ruby19And20Support.enumerable_to_h(arg.enum_for(:each_pair))]
65
+ hπŸ’Ž[arg.enum_for(:each_pair).to_h]
67
66
  elsif arg.respond_to?(:each_pair)
68
- hπŸ’Ž[PersistentπŸ’Ž::Ruby19And20Support.enumerable_to_h(arg.each_pair)]
67
+ hπŸ’Ž[arg.each_pair.to_h]
69
68
  else
70
69
  options.fetch(:on_unknown).call(arg)
71
70
  end
@@ -1,5 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: strict
3
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
4
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
5
3
  #
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: false
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -33,16 +30,14 @@
33
30
  require "persistent_dmnd/self_conversion"
34
31
  require "persistent_dmnd/is_persistent"
35
32
  require "persistent_dmnd/concurrent_ruby_support"
36
- require "persistent_dmnd/jruby_workaround"
37
33
 
38
- require "hamster"
34
+ require "immutable"
39
35
  require "set"
40
36
 
41
37
  module PersistentπŸ’Ž
42
- class Hash < Hamster::Hash
38
+ class Hash < Immutable::Hash
43
39
  include SelfConversion
44
40
  include IsPersistent
45
- include JRubyWorkaround
46
41
  include PersistentπŸ’Ž
47
42
 
48
43
  # Hashes are not arrays and thus should not implement :to_ary
@@ -79,26 +74,6 @@ module PersistentπŸ’Ž
79
74
  ::Set.new(self)
80
75
  end
81
76
 
82
- def <(other)
83
- if size >= other.size
84
- false
85
- else
86
- self <= other
87
- end
88
- end
89
-
90
- def <=(other)
91
- if size > other.size
92
- false
93
- else
94
- each do |key, value|
95
- return false if other[key] != value
96
- end
97
-
98
- true
99
- end
100
- end
101
-
102
77
  # Return each entry as a key, value pair inside an immutable array
103
78
  def eachπŸ’Ž
104
79
  if block_given?
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: true
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: false
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -43,7 +40,7 @@ module PersistentπŸ’Ž
43
40
  end
44
41
  end
45
42
 
46
- if RUBY_PLATFORM == "java" && (JRUBY_VERSION.start_with?("9.2.") || JRUBY_VERSION.start_with?("9.3.") || JRUBY_VERSION.start_with?("9.4.")) && workaround_needed?
43
+ if RUBY_PLATFORM == "java" && JRUBY_VERSION.start_with?("9.2.", "9.3.", "9.4.") && workaround_needed?
47
44
  class ::Set
48
45
  # Save existing Set methods
49
46
 
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: true
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -30,13 +27,9 @@
30
27
 
31
28
  # frozen_string_literal: true
32
29
 
33
- require "persistent_dmnd/jruby_workaround"
34
-
35
30
  module PersistentπŸ’Ž
36
31
  # Implements trivial conversion to persistent data structures for our own classes
37
32
  module SelfConversion
38
- include JRubyWorkaround
39
-
40
33
  def to_πŸ’Ž
41
34
  self
42
35
  end
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: true
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -33,17 +30,15 @@
33
30
  require "persistent_dmnd/self_conversion"
34
31
  require "persistent_dmnd/is_persistent"
35
32
  require "persistent_dmnd/concurrent_ruby_support"
36
- require "persistent_dmnd/jruby_workaround"
37
33
  require "persistent_dmnd/jruby_9_2_set_workaround"
38
34
 
39
- require "hamster"
35
+ require "immutable"
40
36
  require "set"
41
37
 
42
38
  module PersistentπŸ’Ž
43
- class Set < Hamster::Set
39
+ class Set < Immutable::Set
44
40
  include SelfConversion
45
41
  include IsPersistent
46
- include JRubyWorkaround
47
42
  include PersistentπŸ’Ž
48
43
 
49
44
  def self.from_set(set)
@@ -1,6 +1,3 @@
1
- # encoding: UTF-8
2
- # typed: strong
3
-
4
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
3
  #
@@ -31,5 +28,5 @@
31
28
  # frozen_string_literal: true
32
29
 
33
30
  module PersistentπŸ’Ž
34
- VERSION = "2.0.6"
31
+ VERSION = "3.0.0"
35
32
  end
@@ -1,5 +1,3 @@
1
- # encoding: UTF-8
2
-
3
1
  # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
4
2
  # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
5
3
  #
@@ -49,16 +47,18 @@ Gem::Specification.new do |spec|
49
47
  end
50
48
  spec.require_paths = ["lib"]
51
49
 
52
- spec.required_ruby_version = ">= 1.9.3"
50
+ spec.required_ruby_version = ">= 2.4.0"
53
51
 
54
- spec.add_development_dependency "bundler", "~> 1.16" if RUBY_VERSION < "2.6"
55
- spec.add_development_dependency "rake", "~> 12.2" # Note: Rake 12.2 is the last that supports Ruby 1.9
56
- spec.add_development_dependency "rspec", "~> 3.8"
52
+ spec.add_development_dependency "bundler", "~> 1.17" if RUBY_VERSION < "2.6"
53
+ spec.add_development_dependency "rake", "~> 13.1"
54
+ spec.add_development_dependency "rspec", "~> 3.13"
57
55
  spec.add_development_dependency "concurrent-ruby", "~> 1.1"
58
56
  spec.add_development_dependency "standard" if RUBY_VERSION >= "2.6.0"
59
- spec.add_development_dependency "pry" if RUBY_VERSION >= "2.0.0"
60
- spec.add_development_dependency "pry-byebug" if RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.4"
61
- spec.add_development_dependency "pry-debugger-jruby" if RUBY_ENGINE == "jruby" && !JRUBY_VERSION.start_with?("1.7.")
57
+ spec.add_development_dependency "pry"
58
+ spec.add_development_dependency "pry-byebug" if RUBY_ENGINE == "ruby"
59
+ spec.add_development_dependency "pry-debugger-jruby" if RUBY_ENGINE == "jruby"
60
+ spec.add_development_dependency "hamster", ">= 3.0.0"
61
+ spec.add_development_dependency "warning", "~> 1.3.0"
62
62
 
63
- spec.add_dependency "hamster", "~> 3.0"
63
+ spec.add_dependency "immutable-ruby", ">= 0.1.0"
64
64
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: persistent-dmnd
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivo Anjo
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '12.2'
19
+ version: '13.1'
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
- version: '12.2'
26
+ version: '13.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.8'
33
+ version: '3.13'
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
- version: '3.8'
40
+ version: '3.13'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: concurrent-ruby
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -96,18 +96,46 @@ dependencies:
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: hamster
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: warning
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '3.0'
104
- type: :runtime
117
+ version: 1.3.0
118
+ type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: '3.0'
124
+ version: 1.3.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: immutable-ruby
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 0.1.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 0.1.0
111
139
  description: A tiny ruby gem that gives you a beautiful short-hand syntax for creating
112
140
  immutable arrays, hashes and sets
113
141
  email: ivo@ivoanjo.me
@@ -137,8 +165,6 @@ files:
137
165
  - lib/persistent_dmnd/hash.rb
138
166
  - lib/persistent_dmnd/is_persistent.rb
139
167
  - lib/persistent_dmnd/jruby_9_2_set_workaround.rb
140
- - lib/persistent_dmnd/jruby_workaround.rb
141
- - lib/persistent_dmnd/ruby_1_9_and_2_0_support.rb
142
168
  - lib/persistent_dmnd/self_conversion.rb
143
169
  - lib/persistent_dmnd/set.rb
144
170
  - lib/persistent_dmnd/version.rb
@@ -155,14 +181,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
181
  requirements:
156
182
  - - ">="
157
183
  - !ruby/object:Gem::Version
158
- version: 1.9.3
184
+ version: 2.4.0
159
185
  required_rubygems_version: !ruby/object:Gem::Requirement
160
186
  requirements:
161
187
  - - ">="
162
188
  - !ruby/object:Gem::Version
163
189
  version: '0'
164
190
  requirements: []
165
- rubygems_version: 3.1.4
191
+ rubygems_version: 3.5.3
166
192
  signing_key:
167
193
  specification_version: 4
168
194
  summary: "Persistent-\U0001F48E: Because Immutable Data Is Forever"
@@ -1,107 +0,0 @@
1
- # encoding: UTF-8
2
- # typed: false
3
-
4
- # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
- # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
- #
7
- # This file is part of Persistent-πŸ’Ž.
8
- #
9
- # MIT License
10
- #
11
- # Copyright (c) 2017-2021 Ivo Anjo
12
- #
13
- # Permission is hereby granted, free of charge, to any person obtaining a copy
14
- # of this software and associated documentation files (the "Software"), to deal
15
- # in the Software without restriction, including without limitation the rights
16
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
- # copies of the Software, and to permit persons to whom the Software is
18
- # furnished to do so, subject to the following conditions:
19
- #
20
- # The above copyright notice and this permission notice shall be included in all
21
- # copies or substantial portions of the Software.
22
- #
23
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
- # SOFTWARE.
30
-
31
- # frozen_string_literal: true
32
-
33
- module PersistentπŸ’Ž
34
- module JRubyWorkaround
35
- if RUBY_PLATFORM == "java" && JRUBY_VERSION < "9.2.0.0" # Only supposed to do something on legacy JRuby versions
36
- BROKEN_ENCODING = "\x00"
37
- private_constant :BROKEN_ENCODING
38
-
39
- BROKEN_ENCODING_JRUBY_1_7 = [239, 146, 142].pack("c*").force_encoding("UTF-8")
40
- private_constant :BROKEN_ENCODING_JRUBY_1_7
41
-
42
- def self.included(klass)
43
- # Make methods on this module also available inside classes (e.g. not just in instances)
44
- klass.extend(self)
45
- end
46
-
47
- def method_added(name)
48
- super
49
- maybe_fix_broken_encoding(name)
50
- end
51
-
52
- def singleton_method_added(name)
53
- super
54
- maybe_fix_broken_encoding(name, singleton_class)
55
- end
56
-
57
- private
58
-
59
- # Workaround JRuby encoding bug
60
- # See https://github.com/jruby/jruby/issues/4878
61
- # and https://gitlab.com/ivoanjo/persistent-dmnd/issues/5
62
- #
63
- # The trick here is that on JRuby, methods with emojis in the name are defined, but the resulting name is mangled
64
- # so instead of for instance #to_πŸ’Ž the result is #to_?\x00. (Or #πŸ’Žify will become #?ify\x00.) This behavior is
65
- # consistent between def and calling a method, so def will register a method #to_?\x00, and a normal method call
66
- # will do the same mangling and thus look for a method **WITH** the mangled name.
67
- #
68
- # But there are still other places in the code that rely on the correct name, such as alias and public_send/send,
69
- # so we additionally use this module to define the correct name as an alias for the broken name.
70
- #
71
- # Thus, it all works on JRuby, albeit in a very roundabout way!
72
- #
73
- # FOR JRUBY 1.7:
74
- # On JRuby 1.7 it seems that the mangling is different, and the emoji just gets replaced with ?, so for
75
- # instance #to_πŸ’Ž becomes #to_?. But then, to make things interesting, on symbols created without quotes, it
76
- # gets mangled with the BROKEN_ENCODING_JRUBY_1_7, e.g :to_πŸ’Ž becomes :to_BROKEN_ENCODING_JRUBY_1_7 (but
77
- # :"to_πŸ’Ž" is still correct).
78
- # To support both of these, we add an extra alias on JRuby, so that everything else seems to work even if it is
79
- # actually using the name with the mangled encoding.
80
- #
81
- def maybe_fix_broken_encoding(name, target = nil)
82
- name_string = name.to_s
83
-
84
- if JRUBY_VERSION.start_with?("1.7.")
85
- unless name_string.match(/\?.+/) ||
86
- ["a?", "h?", "s?", "each?"].include?(name_string) ||
87
- ["_?", "_a?", "_h?", "_s?"].any? { |suffix| name_string.end_with?(suffix) }
88
- return
89
- end
90
- else
91
- return unless name_string.end_with?(BROKEN_ENCODING)
92
- end
93
-
94
- fixed_name = name_string.sub("?", "πŸ’Ž").delete(BROKEN_ENCODING).to_sym
95
- fixed_name_jruby_1_7 = name_string.sub("?", BROKEN_ENCODING_JRUBY_1_7).to_sym
96
-
97
- if target
98
- target.instance_eval { alias_method(fixed_name, name) }
99
- target.instance_eval { alias_method(fixed_name_jruby_1_7, name) } if JRUBY_VERSION.start_with?("1.7.")
100
- else
101
- alias_method(fixed_name, name)
102
- alias_method(fixed_name_jruby_1_7, name) if JRUBY_VERSION.start_with?("1.7.")
103
- end
104
- end
105
- end
106
- end
107
- end
@@ -1,48 +0,0 @@
1
- # encoding: UTF-8
2
- # typed: true
3
-
4
- # Persistent-πŸ’Ž: Ruby gem for easily creating immutable data structures
5
- # Copyright (c) 2017-2021 Ivo Anjo <ivo@ivoanjo.me>
6
- #
7
- # This file is part of Persistent-πŸ’Ž.
8
- #
9
- # MIT License
10
- #
11
- # Copyright (c) 2017-2021 Ivo Anjo
12
- #
13
- # Permission is hereby granted, free of charge, to any person obtaining a copy
14
- # of this software and associated documentation files (the "Software"), to deal
15
- # in the Software without restriction, including without limitation the rights
16
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
- # copies of the Software, and to permit persons to whom the Software is
18
- # furnished to do so, subject to the following conditions:
19
- #
20
- # The above copyright notice and this permission notice shall be included in all
21
- # copies or substantial portions of the Software.
22
- #
23
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
- # SOFTWARE.
30
-
31
- # frozen_string_literal: true
32
-
33
- module PersistentπŸ’Ž
34
- module Ruby19And20Support
35
- # Enumerable#to_h was only introduced in Ruby 2.1 so we have to do it by hand on 2.0/1.9
36
- if RUBY_VERSION.start_with?("2.0.") || RUBY_VERSION.start_with?("1.9.")
37
- def self.enumerable_to_h(enumerable)
38
- enumerable.each_with_object({}) do |(key, value), result|
39
- result[key] = value
40
- end
41
- end
42
- else
43
- def self.enumerable_to_h(enumerable)
44
- enumerable.to_h
45
- end
46
- end
47
- end
48
- end