declutter 1.1 → 1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/lib/declutter.rb +159 -159
  4. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f9dbc1622dadba96ab55c42f8e7a477dac2ed481557703e074b096b6c4fffaa5
4
- data.tar.gz: d147bd94493a740d1854a94bed6adb1d09891217ff60637b8c4d75dbc331e5a7
3
+ metadata.gz: 405d0434633c9cbad8fb8618c6120342e441910fad8134878f5c6bf320ac340c
4
+ data.tar.gz: 828c40921b050e099a612485de9179cd029a0d1d2311109d5fb6c8892412d94c
5
5
  SHA512:
6
- metadata.gz: 6c08b8c3c36da7bd3b3af62eded77f0843b4af7f8b77ce01c12d5af248e6584cc3daf5942568c617b7a4c2bba75e736420dc1490b3bfb71e770fa65885118677
7
- data.tar.gz: 47d13c23af1e61d2e4d2c2b7809c175fc61e194dd86ddf3d57ee7a748548fb65efcd50527374d11ed38af99c031034840ac00a44ca15ed5ca174dc01a0446780
6
+ metadata.gz: 9e386bd19f6a3a63f5742f84da21f4debf70f89bbdc67d41777bd0e0504ad87f8fce080d3fc6be40815c0b7faabdb20220b44cf3a9209060dc9b073b05eb65a6
7
+ data.tar.gz: 67bb244674d0bdc11ffa59eac0b847082888a9190b452326a4b35e0ecd59a35aff247ad6fda6286a41cfbcb9dc68daff17e8de17a1e87900d769e6f1c5716bc3
data/README.md CHANGED
@@ -184,4 +184,5 @@ puts hsh # => {"keep-it"=>#<KeepMe:0x000055e5ffd46f80>, "delete-it"=>#<DeleteMe:
184
184
  | date | version | notes |
185
185
  |--------------|---------|-----------------|
186
186
  | May 23, 2023 | 1.0 | Initial upload. |
187
- | May 29, 2023 | 1.1 | Added ability to call #declutter on any object that responds to that method. |
187
+ | May 29, 2023 | 1.1 | Added ability to call #declutter on any object that responds to that method. |
188
+ | June 9, 2023 | 1.2 | Changed tests to Minitest. No change to functionality. |
data/lib/declutter.rb CHANGED
@@ -2,165 +2,165 @@
2
2
  # Declutter
3
3
  #
4
4
  class Declutter
5
- # If empty hashes should be deleted. True by default.
6
- attr_accessor :delete_empty_hashes
7
-
8
- # If empty arrays should be deleted. True by default.
9
- attr_accessor :delete_empty_arrays
10
-
11
- # If redundant array elements should be deleted. False by default.
12
- attr_accessor :delete_redundancies
13
-
14
- # If nils should be deleted. False by default.
15
- attr_accessor :delete_nils
16
-
17
- # If falses should be deleted. False by default.
18
- attr_accessor :delete_falses
19
-
20
- # If objects that respond to #declutter should be processed Defaults
21
- # to true.
22
- attr_accessor :process_others
23
-
24
- #---------------------------------------------------------------------------
25
- # initialize
26
- #
27
-
28
- # Creates a new Declutter object. Takes no params.
29
-
30
- def initialize
31
- @delete_empty_hashes = true
32
- @delete_empty_arrays = true
33
- @delete_redundancies = false
34
- @delete_nils = false
35
- @delete_falses = false
36
- @process_others = true
37
- end
38
- #
39
- # initialize
40
- #---------------------------------------------------------------------------
41
-
42
-
43
- #---------------------------------------------------------------------------
44
- # process
45
- #
46
-
47
- # Declutter a hash or array.
48
-
49
- def process(obj)
50
- # declutter hash
51
- if obj.is_a?(Hash)
52
- process_hash obj
53
-
54
- # declutter array
55
- elsif obj.is_a?(Array)
56
- process_array obj
57
- end
58
- end
59
- #
60
- # process
61
- #---------------------------------------------------------------------------
62
-
63
-
64
- #---------------------------------------------------------------------------
65
- # self.process
66
- #
67
-
68
- # Shortcut for decluttering with default settings.
69
-
70
- def self.process(obj)
71
- self.new.process obj
72
- end
73
- #
74
- # self.process
75
- #---------------------------------------------------------------------------
76
-
77
-
78
- # private
79
- private
80
-
81
-
82
- #---------------------------------------------------------------------------
83
- # process_hash
84
- #
85
- def process_hash(hsh)
86
- hsh.keys.each do |k|
87
- v = hsh[k]
88
- process v
89
-
90
- # delete or process element
91
- if not keep_element?(v)
92
- hsh.delete k
93
- end
94
- end
95
- end
96
- #
97
- # process_hash
98
- #---------------------------------------------------------------------------
99
-
100
-
101
- #---------------------------------------------------------------------------
102
- # process_array
103
- #
104
- def process_array(arr)
105
- hold = arr.clone
106
- arr.clear
107
-
108
- # add back elements that are acceptable
109
- hold.each do |child|
110
- process child
111
-
112
- if keep_element?(child)
113
- arr.push child
114
- end
115
- end
116
-
117
- # uniq array if necessary
118
- if @delete_redundancies
119
- arr.uniq!
120
- end
121
- end
122
- #
123
- # process_array
124
- #---------------------------------------------------------------------------
125
-
126
-
127
- #---------------------------------------------------------------------------
128
- # keep_element
129
- #
130
- def keep_element?(v)
131
- # hash
132
- if v.is_a?(Hash)
133
- if @delete_empty_hashes and v.empty?
134
- return false
135
- end
136
-
137
- # array
138
- elsif v.is_a?(Array)
139
- if @delete_empty_arrays and v.empty?
140
- return false
141
- end
142
-
143
- # nil
144
- elsif v.nil?
145
- return !@delete_nils
146
-
147
- # false
148
- elsif not v
149
- return !@delete_falses
150
-
151
- # other class
152
- elsif @process_others and v.respond_to?('declutter')
153
- if not v.declutter
154
- return false
155
- end
156
- end
157
-
158
- # if we get this far then we're keeping the element
159
- return true
160
- end
161
- #
162
- # keep_element
163
- #---------------------------------------------------------------------------
5
+ # If empty hashes should be deleted. True by default.
6
+ attr_accessor :delete_empty_hashes
7
+
8
+ # If empty arrays should be deleted. True by default.
9
+ attr_accessor :delete_empty_arrays
10
+
11
+ # If redundant array elements should be deleted. False by default.
12
+ attr_accessor :delete_redundancies
13
+
14
+ # If nils should be deleted. False by default.
15
+ attr_accessor :delete_nils
16
+
17
+ # If falses should be deleted. False by default.
18
+ attr_accessor :delete_falses
19
+
20
+ # If objects that respond to #declutter should be processed. Defaults
21
+ # to true.
22
+ attr_accessor :process_others
23
+
24
+ #---------------------------------------------------------------------------
25
+ # initialize
26
+ #
27
+
28
+ # Creates a new Declutter object. Takes no params.
29
+
30
+ def initialize
31
+ @delete_empty_hashes = true
32
+ @delete_empty_arrays = true
33
+ @delete_redundancies = false
34
+ @delete_nils = false
35
+ @delete_falses = false
36
+ @process_others = true
37
+ end
38
+ #
39
+ # initialize
40
+ #---------------------------------------------------------------------------
41
+
42
+
43
+ #---------------------------------------------------------------------------
44
+ # process
45
+ #
46
+
47
+ # Declutter a hash or array.
48
+
49
+ def process(obj)
50
+ # declutter hash
51
+ if obj.is_a?(Hash)
52
+ process_hash obj
53
+
54
+ # declutter array
55
+ elsif obj.is_a?(Array)
56
+ process_array obj
57
+ end
58
+ end
59
+ #
60
+ # process
61
+ #---------------------------------------------------------------------------
62
+
63
+
64
+ #---------------------------------------------------------------------------
65
+ # self.process
66
+ #
67
+
68
+ # Shortcut for decluttering with default settings.
69
+
70
+ def self.process(obj)
71
+ self.new.process obj
72
+ end
73
+ #
74
+ # self.process
75
+ #---------------------------------------------------------------------------
76
+
77
+
78
+ # private
79
+ private
80
+
81
+
82
+ #---------------------------------------------------------------------------
83
+ # process_hash
84
+ #
85
+ def process_hash(hsh)
86
+ hsh.keys.each do |k|
87
+ v = hsh[k]
88
+ process v
89
+
90
+ # delete or process element
91
+ if not keep_element?(v)
92
+ hsh.delete k
93
+ end
94
+ end
95
+ end
96
+ #
97
+ # process_hash
98
+ #---------------------------------------------------------------------------
99
+
100
+
101
+ #---------------------------------------------------------------------------
102
+ # process_array
103
+ #
104
+ def process_array(arr)
105
+ hold = arr.clone
106
+ arr.clear
107
+
108
+ # add back elements that are acceptable
109
+ hold.each do |child|
110
+ process child
111
+
112
+ if keep_element?(child)
113
+ arr.push child
114
+ end
115
+ end
116
+
117
+ # uniq array if necessary
118
+ if @delete_redundancies
119
+ arr.uniq!
120
+ end
121
+ end
122
+ #
123
+ # process_array
124
+ #---------------------------------------------------------------------------
125
+
126
+
127
+ #---------------------------------------------------------------------------
128
+ # keep_element
129
+ #
130
+ def keep_element?(v)
131
+ # hash
132
+ if v.is_a?(Hash)
133
+ if @delete_empty_hashes and v.empty?
134
+ return false
135
+ end
136
+
137
+ # array
138
+ elsif v.is_a?(Array)
139
+ if @delete_empty_arrays and v.empty?
140
+ return false
141
+ end
142
+
143
+ # nil
144
+ elsif v.nil?
145
+ return !@delete_nils
146
+
147
+ # false
148
+ elsif not v
149
+ return !@delete_falses
150
+
151
+ # other class
152
+ elsif @process_others and v.respond_to?('declutter')
153
+ if not v.declutter
154
+ return false
155
+ end
156
+ end
157
+
158
+ # if we get this far then we're keeping the element
159
+ return true
160
+ end
161
+ #
162
+ # keep_element
163
+ #---------------------------------------------------------------------------
164
164
  end
165
165
  #
166
166
  # Declutter
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: declutter
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.1'
4
+ version: '1.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike O'Sullivan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-29 00:00:00.000000000 Z
11
+ date: 2023-06-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Declutter your Ruby objects by removing empty hashes and arrays
14
14
  email: mike@idocs.com
@@ -22,7 +22,7 @@ homepage: https://github.com/mikosullivan/declutter
22
22
  licenses:
23
23
  - MIT
24
24
  metadata: {}
25
- post_install_message:
25
+ post_install_message:
26
26
  rdoc_options: []
27
27
  require_paths:
28
28
  - lib
@@ -37,8 +37,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  requirements: []
40
- rubygems_version: 3.1.2
41
- signing_key:
40
+ rubygems_version: 3.3.5
41
+ signing_key:
42
42
  specification_version: 4
43
43
  summary: Declutter
44
44
  test_files: []