core-copy 0.0.0 → 0.2.1

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