core-copy 0.2.1 → 0.3.0

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