statinize 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/core_ext/deep_dup.rb +53 -0
- data/lib/core_ext/duplicable.rb +42 -0
- data/lib/core_ext.rb +2 -0
- data/lib/statinize/statinizable.rb +1 -1
- data/lib/statinize.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2a7fe61fb4cc14c6a74ff3847b650a365688269d1e0ef34d7f1d061cd17a7a9
|
4
|
+
data.tar.gz: 9c8fe51192997a3e22bc15d392a1a7df7489e080dc6c6c8db6e615d40807961d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e81d152b1d3e596147d5d39ca4afdc701345cd6310b667823c824c3c88331081e4cbb3913914d48fade0b496e1b2ea5bdc32beafa6514ffdc54d679523dce1c4
|
7
|
+
data.tar.gz: ae3a96d472a35a3ccd04c6b52b62cbd1aedf66676006335442e3ef5a4c9f44a75b448dfd7e66a99fb6c3fd6b194ec178a2a6ad7254a96092588b04ddcda1b043
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# https://github.com/rails/rails/blob/main/activesupport/lib/active_support/core_ext/object/deep_dup.rb
|
2
|
+
|
3
|
+
class Object
|
4
|
+
# Returns a deep copy of object if it's duplicable. If it's
|
5
|
+
# not duplicable, returns +self+.
|
6
|
+
#
|
7
|
+
# object = Object.new
|
8
|
+
# dup = object.deep_dup
|
9
|
+
# dup.instance_variable_set(:@a, 1)
|
10
|
+
#
|
11
|
+
# object.instance_variable_defined?(:@a) # => false
|
12
|
+
# dup.instance_variable_defined?(:@a) # => true
|
13
|
+
def deep_dup
|
14
|
+
duplicable? ? dup : self
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Array
|
19
|
+
# Returns a deep copy of array.
|
20
|
+
#
|
21
|
+
# array = [1, [2, 3]]
|
22
|
+
# dup = array.deep_dup
|
23
|
+
# dup[1][2] = 4
|
24
|
+
#
|
25
|
+
# array[1][2] # => nil
|
26
|
+
# dup[1][2] # => 4
|
27
|
+
def deep_dup
|
28
|
+
map(&:deep_dup)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Hash
|
33
|
+
# Returns a deep copy of hash.
|
34
|
+
#
|
35
|
+
# hash = { a: { b: 'b' } }
|
36
|
+
# dup = hash.deep_dup
|
37
|
+
# dup[:a][:c] = 'c'
|
38
|
+
#
|
39
|
+
# hash[:a][:c] # => nil
|
40
|
+
# dup[:a][:c] # => "c"
|
41
|
+
def deep_dup
|
42
|
+
hash = dup
|
43
|
+
each_pair do |key, value|
|
44
|
+
if ::String === key || ::Symbol === key
|
45
|
+
hash[key] = value.deep_dup
|
46
|
+
else
|
47
|
+
hash.delete(key)
|
48
|
+
hash[key.deep_dup] = value.deep_dup
|
49
|
+
end
|
50
|
+
end
|
51
|
+
hash
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# https://github.com/rails/rails/blob/main/activesupport/lib/active_support/core_ext/object/duplicable.rb
|
2
|
+
|
3
|
+
class Object
|
4
|
+
# Can you safely dup this object?
|
5
|
+
#
|
6
|
+
# False for method objects;
|
7
|
+
# true otherwise.
|
8
|
+
def duplicable?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Method
|
14
|
+
# Methods are not duplicable:
|
15
|
+
#
|
16
|
+
# method(:puts).duplicable? # => false
|
17
|
+
# method(:puts).dup # => TypeError: allocator undefined for Method
|
18
|
+
def duplicable?
|
19
|
+
false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class UnboundMethod
|
24
|
+
# Unbound methods are not duplicable:
|
25
|
+
#
|
26
|
+
# method(:puts).unbind.duplicable? # => false
|
27
|
+
# method(:puts).unbind.dup # => TypeError: allocator undefined for UnboundMethod
|
28
|
+
def duplicable?
|
29
|
+
false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
require "singleton"
|
34
|
+
|
35
|
+
module Singleton
|
36
|
+
# Singleton instances are not duplicable:
|
37
|
+
#
|
38
|
+
# Class.new.include(Singleton).instance.dup # TypeError (can't dup instance of singleton
|
39
|
+
def duplicable?
|
40
|
+
false
|
41
|
+
end
|
42
|
+
end
|
data/lib/core_ext.rb
ADDED
@@ -70,7 +70,7 @@ module Statinize
|
|
70
70
|
|
71
71
|
def instantiate_defaults
|
72
72
|
statinizer.attributes.select { |a| a.options.key?(:default) }.each do |attribute|
|
73
|
-
public_send("#{attribute.name}=", attribute.default)
|
73
|
+
public_send("#{attribute.name}=", attribute.default.deep_dup)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
data/lib/statinize.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statinize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Barseek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Statinization gem. Allows for creation of attributes for a class with
|
14
14
|
a given type.
|
@@ -17,6 +17,9 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
+
- lib/core_ext.rb
|
21
|
+
- lib/core_ext/deep_dup.rb
|
22
|
+
- lib/core_ext/duplicable.rb
|
20
23
|
- lib/statinize.rb
|
21
24
|
- lib/statinize/attribute.rb
|
22
25
|
- lib/statinize/attribute/options.rb
|