core-copy 0.0.0 → 0.2.1

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: d191a1b7d4325322daf22cafb2ea579ef1f82e7f21b2ec1a129a61e3f44fa6be
4
- data.tar.gz: 7885318f05b951dd03a5cab32696d3736c2c38143a9e33589c2a221c8ba0ab7a
3
+ metadata.gz: c7b584f0dc66f5c70c86bedc900ec15318003a965cb012ebfdde93741ff24c4e
4
+ data.tar.gz: 3ff2c314bf5a0a29af44cf2b8690340028c730c4b66643b0df8736f0b294df86
5
5
  SHA512:
6
- metadata.gz: 578e6e73ce15d0aa061b8bb9d6e04fe9c5d8e1553056021e5aa806cc2a755530d864ceb06d051fc13907b7042f08f0f5a25b39f6f1337a043ed4c6aa82142e8c
7
- data.tar.gz: 9b2cad7f168c2f2bc954bd2a5495705e6931c4263227430ccd75e62f9c58cf2370fc5cf655562a9dc9422c7ac554142806f3e0a37e84ff7251753c6a1de1a15e
6
+ metadata.gz: efd4ca0ce7f6d89b243645ce02769e36435af6d6cdb85e2791ead27951d7f74b6b62c7ac6a37dc868624688c1ac8839a7ea20539930463b060713404f4d82efe
7
+ data.tar.gz: b9e328860b41963a32891dac1e8ae5711883dbc161c6b5f126c3daf54d36491cf45465f92a9dca02adea35608dd624a3a6c9926a9a9ce27d2d6ae2d4fad9d79d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,28 @@
1
+ ## [v0.2.1](https://github.com/metabahn/corerb/releases/tag/2021-11-02)
2
+
3
+ *released on 2021-11-02*
4
+
5
+ * `chg` [#97](https://github.com/metabahn/corerb/pull/97) Designate internal state with leading and trailing double underscores ([bryanp](https://github.com/bryanp))
6
+
7
+ ## [v0.2.0](https://github.com/metabahn/corerb/releases/tag/2021-10-24)
8
+
9
+ *released on 2021-10-24*
10
+
11
+ * `add` [#74](https://github.com/metabahn/corerb/pull/74) Introduce a core.copy event ([bryanp](https://github.com/bryanp))
12
+
13
+ ## [v0.1.0](https://github.com/metabahn/corerb/releases/tag/2021-07-07)
14
+
15
+ *released on 2021-07-07*
16
+
17
+ * `chg` [#39](https://github.com/metabahn/corerb/pull/39) Drop Ruby 2.6 support from core-copy ([bryanp](https://github.com/bryanp))
18
+
19
+ ## [v0.0.1](https://github.com/metabahn/corerb/releases/tag/2021-05-22)
20
+
21
+ *released on 2021-05-22*
22
+
23
+ * `fix` [#33](https://github.com/metabahn/corerb/pull/33) Resolve several differences between supported ruby versions ([bryanp](https://github.com/bryanp))
24
+ * `fix` [#32](https://github.com/metabahn/corerb/pull/32) Add core-local as a dependency to core-copy ([bryanp](https://github.com/bryanp))
25
+
1
26
  ## [v0.0.0](https://github.com/metabahn/corerb/releases/tag/2021-03-17)
2
27
 
3
28
  *released on 2021-03-17*
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Core
4
4
  module Copy
5
- VERSION = "0.0.0"
5
+ VERSION = "0.2.1"
6
6
 
7
7
  def self.version
8
8
  VERSION
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "is/eventable"
4
+ require "is/extension"
5
+
6
+ module Is
7
+ module Copyable
8
+ extend Is::Extension
9
+
10
+ applies do
11
+ event "core.copy"
12
+ end
13
+
14
+ extends dependencies: [Is::Eventable]
15
+
16
+ extends :implementation, prepend: true do
17
+ def initialize_copy(...)
18
+ performing "core.copy" do
19
+ super
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -5,25 +5,46 @@ require "core/local"
5
5
  module Refine
6
6
  module Object
7
7
  module Copy
8
+ DEFAULT = ::Object.new
9
+
8
10
  refine ::Object do
9
11
  # [public] Copies the object using `clone`.
10
12
  #
11
- def copy(freeze: nil)
12
- clone(freeze: freeze)
13
+ if RbConfig::CONFIG["RUBY_PROGRAM_VERSION"] < "3"
14
+ def copy(freeze: DEFAULT)
15
+ should_freeze = resolve_freeze_argument(freeze)
16
+
17
+ value = clone(freeze: should_freeze)
18
+ value.freeze if should_freeze
19
+ value
20
+ end
21
+ else
22
+ def copy(freeze: DEFAULT)
23
+ clone(freeze: resolve_freeze_argument(freeze))
24
+ end
25
+ end
26
+
27
+ private def resolve_freeze_argument(value)
28
+ case value
29
+ when DEFAULT
30
+ frozen?
31
+ else
32
+ !!value
33
+ end
13
34
  end
14
35
  end
15
36
 
16
37
  refine Array do
17
38
  # [public] Copies the array, along with each value.
18
39
  #
19
- def copy(freeze: nil)
40
+ def copy(freeze: DEFAULT)
20
41
  unless Copy.copying?(self)
21
42
  Copy.prevent_recursion(self) do
22
43
  array = map { |value|
23
44
  value.copy(freeze: freeze)
24
45
  }
25
46
 
26
- array.freeze if freeze || (freeze.nil? && frozen?)
47
+ array.freeze if resolve_freeze_argument(freeze)
27
48
 
28
49
  array
29
50
  end
@@ -34,7 +55,7 @@ module Refine
34
55
  refine Hash do
35
56
  # [public] Copies the hash, along with each key and value.
36
57
  #
37
- def copy(freeze: nil)
58
+ def copy(freeze: DEFAULT)
38
59
  unless Copy.copying?(self)
39
60
  Copy.prevent_recursion(self) do
40
61
  hash = {}
@@ -43,7 +64,7 @@ module Refine
43
64
  hash[key.copy(freeze: freeze)] = value.copy(freeze: freeze)
44
65
  end
45
66
 
46
- hash.freeze if freeze || (freeze.nil? && frozen?)
67
+ hash.freeze if resolve_freeze_argument(freeze)
47
68
 
48
69
  hash
49
70
  end
@@ -55,11 +76,11 @@ module Refine
55
76
  include Is::Localized
56
77
 
57
78
  def prevent_recursion(object)
58
- copied_objects[object.object_id] = true
59
-
79
+ object_id = object.object_id
80
+ copied_objects[object_id] = true
60
81
  yield
61
82
  ensure
62
- copied_objects.delete(object.object_id)
83
+ copied_objects.delete(object_id)
63
84
  end
64
85
 
65
86
  def copying?(object)
@@ -67,7 +88,7 @@ module Refine
67
88
  end
68
89
 
69
90
  def copied_objects
70
- localized(:__corerb_copied_objects) || localize(:__corerb_copied_objects, {})
91
+ localized(:__corerb_copied_objects__) || localize(:__corerb_copied_objects__, {})
71
92
  end
72
93
  end
73
94
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: core-copy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Powell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-17 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-11-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: core-event
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: core-extension
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: core-local
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.0'
13
55
  description: Manage how internal object state is copied.
14
56
  email: bryan@metabahn.com
15
57
  executables: []
@@ -20,6 +62,7 @@ files:
20
62
  - LICENSE
21
63
  - lib/core/copy.rb
22
64
  - lib/core/copy/version.rb
65
+ - lib/is/copyable.rb
23
66
  - lib/refine/object/copy.rb
24
67
  homepage: https://github.com/metabahn/corerb/
25
68
  licenses:
@@ -33,14 +76,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
33
76
  requirements:
34
77
  - - ">="
35
78
  - !ruby/object:Gem::Version
36
- version: 2.5.0
79
+ version: '2.7'
37
80
  required_rubygems_version: !ruby/object:Gem::Requirement
38
81
  requirements:
39
82
  - - ">="
40
83
  - !ruby/object:Gem::Version
41
84
  version: '0'
42
85
  requirements: []
43
- rubygems_version: 3.2.4
86
+ rubygems_version: 3.2.22
44
87
  signing_key:
45
88
  specification_version: 4
46
89
  summary: Manage how internal object state is copied.