sys-admin 1.8.2-universal-mingw32 → 1.8.4-universal-mingw32

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: e0a5f8abb2d51fd89dfaba1749f6ebedc824e53c16f5d19c7a09d8e5964643f6
4
- data.tar.gz: b15cbcbdcb14f3c8067f0d445acad1eb4a106a9a0670640b03d04fd45d49ff03
3
+ metadata.gz: 30ad7b45ca84c45f1f2983b29100ae03b0334d72de8704a7d6c172a9fef38908
4
+ data.tar.gz: 1eceedd197d86d60ad7eda136873dbf2e3c1140d44b9dfd80ba68b6357cc3cd8
5
5
  SHA512:
6
- metadata.gz: 5344588bd21a2d4cbff3e845cf3dd1bff33f1e5e1996f499e874b100d40861c01f5646212bd0e860b48c6e67c458a4664092efd136beea30deef467476289b4e
7
- data.tar.gz: 7b8852c72276c2480320f3fe680baf1a1339b8b51f87a4558eb96610288ffebef45a53f247bf6ed129c2de838c32db37ce883d0d59d6a449287b9e26313830a9
6
+ metadata.gz: 676de3cf5b83c9fff2c7afa9334b53ca4c4ef0b07f867272b78ce8c329834e1a02d6df01e9dffe08ef4080c98dd0c5847f799b77ebaaef0239b4d70e8cc66191
7
+ data.tar.gz: 129cea70f8a2fb1da9bb25586e055d3ac700adada8ade4733605fb284e1d848a932f542dd7933ca361f5c1b96fd2af5ba316efbef69d81cbfdb8f1137bfd6f40
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGES.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 1.8.4 - 12-Jun-2024
2
+ * Fixes for DragonFly BSD support.
3
+
4
+ ## 1.8.3 - 20-Apr-2024
5
+ * Fixed up the get_group method on most platforms. Previously it was allocating
6
+ slightly more memory than it needed (wrong struct, oops). In addition, the
7
+ error handling wasn't consistent because I can't read a man page properly.
8
+ * More specs were added to properly test the get_group updates.
9
+ * The github actions test matrix was updated.
10
+
1
11
  ## 1.8.2 - 9-Apr-2023
2
12
  * Lots of rubocop related updates.
3
13
  * Refactored specs to use shared specs.
data/README.md CHANGED
@@ -162,7 +162,7 @@ None that I'm aware of. If you find any, please log them on the project page at:
162
162
  Apache-2.0
163
163
 
164
164
  ## Copyright
165
- (C) 2005-2020, Daniel J. Berger
165
+ (C) 2005-2024, Daniel J. Berger
166
166
  All Rights Reserved
167
167
 
168
168
  ## Author
data/Rakefile CHANGED
@@ -31,7 +31,7 @@ RSpec::Core::RakeTask.new(:spec) do |t|
31
31
  t.rspec_opts = '-Ilib/linux'
32
32
  when /sunos|solaris/i
33
33
  t.rspec_opts = '-Ilib/sunos'
34
- when /bsd/i
34
+ when /bsd|dragonfly/i
35
35
  t.rspec_opts = '-Ilib/bsd'
36
36
  when /windows|win32|mingw|cygwin|dos/i
37
37
  t.rspec_opts = '-Ilib/windows'
@@ -42,4 +42,9 @@ end
42
42
 
43
43
  RuboCop::RakeTask.new
44
44
 
45
+ # Clean up afterwards
46
+ Rake::Task[:spec].enhance do
47
+ Rake::Task[:clean].invoke
48
+ end
49
+
45
50
  task :default => :spec
data/lib/bsd/sys/admin.rb CHANGED
@@ -43,7 +43,7 @@ module Sys
43
43
  pw_expire time_t
44
44
  ]
45
45
 
46
- if RbConfig::CONFIG['host_os'] =~ /freebsd/i
46
+ if RbConfig::CONFIG['host_os'] =~ /freebsd|dragonfly/i
47
47
  fields.push(:pw_fields, :int)
48
48
  end
49
49
 
@@ -131,7 +131,7 @@ module Sys
131
131
  def self.get_group(gid)
132
132
  size = 1024
133
133
  buf = FFI::MemoryPointer.new(:char, size)
134
- pbuf = FFI::MemoryPointer.new(PasswdStruct)
134
+ pbuf = FFI::MemoryPointer.new(GroupStruct)
135
135
  temp = GroupStruct.new
136
136
 
137
137
  begin
@@ -142,7 +142,11 @@ module Sys
142
142
  val = getgrgid_r(gid, temp, buf, buf.size, pbuf)
143
143
  fun = 'getgrgid_r'
144
144
  end
145
- raise SystemCallError.new(fun, val) if val != 0
145
+
146
+ if pbuf.null?
147
+ raise SystemCallError.new(fun, val) if val != 0
148
+ raise Error, "group '#{gid}' not found"
149
+ end
146
150
  rescue Errno::ERANGE
147
151
  size += 1024
148
152
  raise if size > BUF_MAX
@@ -125,7 +125,7 @@ module Sys
125
125
  def self.get_group(gid)
126
126
  size = 1024
127
127
  buf = FFI::MemoryPointer.new(:char, size)
128
- pbuf = FFI::MemoryPointer.new(PasswdStruct)
128
+ pbuf = FFI::MemoryPointer.new(GroupStruct)
129
129
  temp = GroupStruct.new
130
130
 
131
131
  begin
@@ -136,7 +136,11 @@ module Sys
136
136
  val = getgrgid_r(gid, temp, buf, buf.size, pbuf)
137
137
  fun = 'getgrgid_r'
138
138
  end
139
- raise SystemCallError.new(fun, val) if val != 0
139
+
140
+ if pbuf.null?
141
+ raise SystemCallError.new(fun, val) if val != 0
142
+ raise Error, "group '#{gid}' not found"
143
+ end
140
144
  rescue Errno::ERANGE
141
145
  size += 1024
142
146
  raise if size > BUF_MAX
@@ -120,7 +120,7 @@ module Sys
120
120
  def self.get_group(gid)
121
121
  size = 1024
122
122
  buf = FFI::MemoryPointer.new(:char, size)
123
- pbuf = FFI::MemoryPointer.new(PasswdStruct)
123
+ pbuf = FFI::MemoryPointer.new(GroupStruct)
124
124
  temp = GroupStruct.new
125
125
 
126
126
  begin
@@ -131,7 +131,11 @@ module Sys
131
131
  val = getgrgid_r(gid, temp, buf, buf.size, pbuf)
132
132
  fun = 'getgrgid_r'
133
133
  end
134
- raise SystemCallError.new(fun, val) if val != 0
134
+
135
+ if pbuf.null?
136
+ raise SystemCallError.new(fun, val) if val != 0
137
+ raise Error, "group '#{gid}' not found"
138
+ end
135
139
  rescue Errno::ERANGE # Large groups
136
140
  size += 1024
137
141
  raise if size > BUF_MAX
data/lib/sys/admin.rb CHANGED
@@ -5,7 +5,7 @@ module Sys
5
5
  # The Admin class provides a unified, cross platform replacement for the Etc module.
6
6
  class Admin
7
7
  # The version of the sys-admin library.
8
- VERSION = '1.8.2'
8
+ VERSION = '1.8.4'
9
9
 
10
10
  private_class_method :new
11
11
  end
@@ -23,7 +23,7 @@ case RbConfig::CONFIG['host_os']
23
23
  require 'windows/sys/admin'
24
24
  when /darwin|mach/i
25
25
  require 'darwin/sys/admin'
26
- when /bsd/i
26
+ when /bsd|dragonfly/i
27
27
  require 'bsd/sys/admin'
28
28
  else
29
29
  require 'unix/sys/admin'
@@ -9,6 +9,7 @@ require 'sys/admin/common'
9
9
  module Sys
10
10
  # The Admin class provides a unified, cross platform replacement for the Etc module.
11
11
  class Admin
12
+ # Private wrapper class for a struct passwd.
12
13
  class PasswdStruct < FFI::Struct
13
14
  layout(
14
15
  :pw_name, :string,
@@ -23,6 +24,7 @@ module Sys
23
24
 
24
25
  private_constant :PasswdStruct
25
26
 
27
+ # Private wrapper class for a struct group.
26
28
  class GroupStruct < FFI::Struct
27
29
  layout(
28
30
  :gr_name, :string,
data/spec/spec_helper.rb CHANGED
@@ -15,7 +15,7 @@ RSpec.configure do |config|
15
15
 
16
16
  config.filter_run_excluding(:unix)
17
17
 
18
- config.before(:each, :requires_elevated => true) do
18
+ config.before(:each, :requires_elevated) do
19
19
  skip 'skipped unless administrator privileges' unless Win32::Security.elevated_security?
20
20
  end
21
21
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  RSpec.shared_examples Sys::Admin do
4
4
  example 'version is set to expected value' do
5
- expect(described_class::VERSION).to eq('1.8.2')
5
+ expect(described_class::VERSION).to eq('1.8.4')
6
6
  end
7
7
 
8
8
  example 'version constant is frozen' do
@@ -22,7 +22,7 @@ RSpec.describe Sys::Admin, :unix do
22
22
  end
23
23
 
24
24
  example 'get_login returns a string' do
25
- expect(described_class.get_login).to be_kind_of(String)
25
+ expect(described_class.get_login).to be_a(String)
26
26
  expect(described_class.get_login.length).to be > 0
27
27
  end
28
28
  end
@@ -35,11 +35,11 @@ RSpec.describe Sys::Admin, :unix do
35
35
  end
36
36
 
37
37
  example 'get_user with a string argument works as expected' do
38
- expect(described_class.get_user(user)).to be_kind_of(Sys::Admin::User)
38
+ expect(described_class.get_user(user)).to be_a(Sys::Admin::User)
39
39
  end
40
40
 
41
41
  example 'get_user with an integer argument works as expected' do
42
- expect(described_class.get_user(user_id)).to be_kind_of(Sys::Admin::User)
42
+ expect(described_class.get_user(user_id)).to be_a(Sys::Admin::User)
43
43
  end
44
44
 
45
45
  example 'get_user requires at least one argument' do
@@ -63,19 +63,25 @@ RSpec.describe Sys::Admin, :unix do
63
63
 
64
64
  example 'users returns an array of User objects' do
65
65
  users = described_class.users
66
- expect(users).to be_kind_of(Array)
67
- expect(users).to all(be_kind_of(Sys::Admin::User))
66
+ expect(users).to be_a(Array)
67
+ expect(users).to all(be_a(Sys::Admin::User))
68
68
  end
69
69
 
70
- example 'users accepts an optional lastlog argument on darwin', :darwin => true do
70
+ example 'users accepts an optional lastlog argument on darwin', :darwin do
71
71
  users = described_class.users(:lastlog => false)
72
- expect(users).to be_kind_of(Array)
73
- expect(users).to all(be_kind_of(Sys::Admin::User))
72
+ expect(users).to be_a(Array)
73
+ expect(users).to all(be_a(Sys::Admin::User))
74
74
  expect(users.first.login_time).to be_nil
75
75
  end
76
76
  end
77
77
 
78
78
  describe 'get_group' do
79
+ before do
80
+ described_class.class_eval do
81
+ public :getgrgid_r
82
+ end
83
+ end
84
+
79
85
  example 'get_group basic functionality' do
80
86
  expect(described_class).to respond_to(:get_group)
81
87
  expect{ described_class.get_group(group) }.not_to raise_error
@@ -83,11 +89,11 @@ RSpec.describe Sys::Admin, :unix do
83
89
  end
84
90
 
85
91
  example 'get_group accepts a string argument' do
86
- expect(described_class.get_group(group)).to be_kind_of(Sys::Admin::Group)
92
+ expect(described_class.get_group(group)).to be_a(Sys::Admin::Group)
87
93
  end
88
94
 
89
95
  example 'get_group accepts an integer argument' do
90
- expect(described_class.get_group(group_id)).to be_kind_of(Sys::Admin::Group)
96
+ expect(described_class.get_group(group_id)).to be_a(Sys::Admin::Group)
91
97
  end
92
98
 
93
99
  example 'get_group requires one argument only' do
@@ -100,8 +106,31 @@ RSpec.describe Sys::Admin, :unix do
100
106
  end
101
107
 
102
108
  example 'get_group raises an Error if the group cannot be found' do
109
+ expect{ described_class.get_group(123456789) }.to raise_error(Sys::Admin::Error)
103
110
  expect{ described_class.get_group('foofoofoo') }.to raise_error(Sys::Admin::Error)
104
111
  end
112
+
113
+ example 'get_group handles large groups and will retry an ERANGE' do
114
+ allow(described_class).to receive(:getgrgid_r).with(any_args).and_return(34)
115
+ allow(described_class).to receive(:getgrgid_r).with(any_args).and_call_original
116
+ expect{ described_class.get_group(group_id) }.not_to raise_error
117
+ end
118
+
119
+ example 'get_group will raise the expected error for an ENOENT' do
120
+ allow(described_class).to receive(:getgrgid_r).with(any_args).and_return(2)
121
+ expect{ described_class.get_group(group_id) }.to raise_error(Sys::Admin::Error)
122
+ end
123
+
124
+ example 'get_group will raise the expected error for a failed getgrxxx function call' do
125
+ allow(described_class).to receive(:getgrgid_r).with(any_args).and_return(22)
126
+ allow_any_instance_of(FFI::MemoryPointer).to receive(:null?).and_return(true)
127
+ expect{ described_class.get_group(group_id) }.to raise_error(Errno::EINVAL)
128
+ end
129
+
130
+ example 'get_group will not retry failures other than an ERANGE' do
131
+ allow(described_class).to receive(:getgrgid_r).with(any_args).and_return(35)
132
+ expect{ described_class.get_group(group_id) }.to raise_error(Sys::Admin::Error)
133
+ end
105
134
  end
106
135
 
107
136
  describe 'groups' do
@@ -112,8 +141,8 @@ RSpec.describe Sys::Admin, :unix do
112
141
 
113
142
  example 'groups returns an array of Group objects' do
114
143
  groups = described_class.groups
115
- expect(groups).to be_kind_of(Array)
116
- expect(groups).to all(be_kind_of(Sys::Admin::Group))
144
+ expect(groups).to be_a(Array)
145
+ expect(groups).to all(be_a(Sys::Admin::Group))
117
146
  end
118
147
 
119
148
  example 'groups method does not accept any arguments' do
@@ -127,103 +156,103 @@ RSpec.describe Sys::Admin, :unix do
127
156
  example 'user.name behaves as expected' do
128
157
  user = described_class.get_user(user_id)
129
158
  expect(user).to respond_to(:name)
130
- expect(user.name).to be_kind_of(String)
159
+ expect(user.name).to be_a(String)
131
160
  end
132
161
 
133
162
  example 'user.passwd behaves as expected' do
134
163
  user = described_class.get_user(user_id)
135
164
  expect(user).to respond_to(:passwd)
136
- expect(user.passwd).to be_kind_of(String)
165
+ expect(user.passwd).to be_a(String)
137
166
  end
138
167
 
139
168
  example 'user.uid behaves as expected' do
140
169
  user = described_class.get_user(user_id)
141
170
  expect(user).to respond_to(:uid)
142
- expect(user.uid).to be_kind_of(Integer)
171
+ expect(user.uid).to be_a(Integer)
143
172
  end
144
173
 
145
174
  example 'user.gid behaves as expected' do
146
175
  user = described_class.get_user(user_id)
147
176
  expect(user).to respond_to(:gid)
148
- expect(user.gid).to be_kind_of(Integer)
177
+ expect(user.gid).to be_a(Integer)
149
178
  end
150
179
 
151
180
  example 'user.dir behaves as expected' do
152
181
  user = described_class.get_user(user_id)
153
182
  expect(user).to respond_to(:dir)
154
- expect(user.dir).to be_kind_of(String)
183
+ expect(user.dir).to be_a(String)
155
184
  end
156
185
 
157
186
  example 'user.shell behaves as expected' do
158
187
  user = described_class.get_user(user_id)
159
188
  expect(user).to respond_to(:shell)
160
- expect(user.shell).to be_kind_of(String)
189
+ expect(user.shell).to be_a(String)
161
190
  end
162
191
 
163
192
  example 'user.gecos behaves as expected' do
164
193
  user = described_class.get_user(user_id)
165
194
  expect(user).to respond_to(:gecos)
166
- expect(user.gecos).to be_kind_of(String).or be_nil
195
+ expect(user.gecos).to be_a(String).or be_nil
167
196
  end
168
197
 
169
198
  example 'user.quota behaves as expected' do
170
199
  user = described_class.get_user(user_id)
171
200
  expect(user).to respond_to(:quota)
172
- expect(user.quota).to be_kind_of(Integer).or be_nil
201
+ expect(user.quota).to be_a(Integer).or be_nil
173
202
  end
174
203
 
175
204
  example 'user.age behaves as expected' do
176
205
  user = described_class.get_user(user_id)
177
206
  expect(user).to respond_to(:age)
178
- expect(user.age).to be_kind_of(Integer).or be_nil
207
+ expect(user.age).to be_a(Integer).or be_nil
179
208
  end
180
209
 
181
210
  example 'user.access behaves as expected' do
182
211
  user = described_class.get_user(user_id)
183
212
  expect(user).to respond_to(:access_class)
184
- expect(user.access_class).to be_kind_of(String).or be_nil
213
+ expect(user.access_class).to be_a(String).or be_nil
185
214
  end
186
215
 
187
216
  example 'user.comment behaves as expected' do
188
217
  user = described_class.get_user(user_id)
189
218
  expect(user).to respond_to(:comment)
190
- expect(user.comment).to be_kind_of(String).or be_nil
219
+ expect(user.comment).to be_a(String).or be_nil
191
220
  end
192
221
 
193
222
  example 'user.expire behaves as expected' do
194
223
  user = described_class.get_user(user_id)
195
224
  expect(user).to respond_to(:expire)
196
- expect(user.expire).to be_kind_of(Time).or be_nil
225
+ expect(user.expire).to be_a(Time).or be_nil
197
226
  end
198
227
 
199
228
  example 'user.change behaves as expected' do
200
229
  user = described_class.get_user(user_id)
201
230
  expect(user).to respond_to(:change)
202
- expect(user.change).to be_kind_of(Time).or be_nil
231
+ expect(user.change).to be_a(Time).or be_nil
203
232
  end
204
233
 
205
234
  example 'user.login_time behaves as expected' do
206
235
  user = described_class.get_user(user_id)
207
236
  expect(user).to respond_to(:login_time)
208
- expect(user.login_time).to be_kind_of(Time).or be_nil
237
+ expect(user.login_time).to be_a(Time).or be_nil
209
238
  end
210
239
 
211
240
  example 'user.login_device behaves as expected' do
212
241
  user = described_class.get_user(user_id)
213
242
  expect(user).to respond_to(:login_device)
214
- expect(user.login_device).to be_kind_of(String).or be_nil
243
+ expect(user.login_device).to be_a(String).or be_nil
215
244
  end
216
245
 
217
246
  example 'user.login_host behaves as expected' do
218
247
  user = described_class.get_user(user_id)
219
248
  expect(user).to respond_to(:login_host)
220
- expect(user.login_host).to be_kind_of(String).or be_nil
249
+ expect(user.login_host).to be_a(String).or be_nil
221
250
  end
222
251
 
223
252
  example 'user.groups behaves as expected' do
224
253
  user = described_class.get_user(user_id)
225
254
  expect(user).to respond_to(:groups)
226
- expect(user.groups).to be_kind_of(Array)
255
+ expect(user.groups).to be_a(Array)
227
256
  end
228
257
  end
229
258
 
@@ -231,25 +260,25 @@ RSpec.describe Sys::Admin, :unix do
231
260
  example 'group.name behaves as expected' do
232
261
  group = described_class.get_group(group_id)
233
262
  expect(group).to respond_to(:name)
234
- expect(group.name).to be_kind_of(String)
263
+ expect(group.name).to be_a(String)
235
264
  end
236
265
 
237
266
  example 'group.gid behaves as expected' do
238
267
  group = described_class.get_group(group_id)
239
268
  expect(group).to respond_to(:gid)
240
- expect(group.gid).to be_kind_of(Integer)
269
+ expect(group.gid).to be_a(Integer)
241
270
  end
242
271
 
243
272
  example 'group.members behaves as expected' do
244
273
  group = described_class.get_group(group_id)
245
274
  expect(group).to respond_to(:members)
246
- expect(group.members).to be_kind_of(Array)
275
+ expect(group.members).to be_a(Array)
247
276
  end
248
277
 
249
278
  example 'group.passwd behaves as expected' do
250
279
  group = described_class.get_group(group_id)
251
280
  expect(group).to respond_to(:passwd)
252
- expect(group.passwd).to be_kind_of(String)
281
+ expect(group.passwd).to be_a(String)
253
282
  end
254
283
  end
255
284
  end
@@ -23,7 +23,7 @@ RSpec.describe Sys::Admin, :windows do
23
23
  @group_id = 546 # best guess, may fail
24
24
  end
25
25
 
26
- describe 'add, configure and delete user', :order => :defined, :requires_elevated => true do
26
+ describe 'add, configure and delete user', :requires_elevated, :order => :defined do
27
27
  before(:all) do
28
28
  @local_user = 'foo'
29
29
  end
@@ -54,7 +54,7 @@ RSpec.describe Sys::Admin, :windows do
54
54
  end
55
55
  end
56
56
 
57
- describe 'add, configure and delete group', :order => :defined, :requires_elevated => true do
57
+ describe 'add, configure and delete group', :requires_elevated, :order => :defined do
58
58
  before(:all) do
59
59
  @local_user = 'foo'
60
60
  @local_group = 'bar'
@@ -100,7 +100,7 @@ RSpec.describe Sys::Admin, :windows do
100
100
  end
101
101
 
102
102
  example 'get_login returns a string' do
103
- expect(described_class.get_login).to be_kind_of(String)
103
+ expect(described_class.get_login).to be_a(String)
104
104
  expect(described_class.get_login.size).to be > 0
105
105
  end
106
106
 
@@ -116,24 +116,24 @@ RSpec.describe Sys::Admin, :windows do
116
116
 
117
117
  example 'get_user with string argument works as expected' do
118
118
  expect{ described_class.get_user(@user_name, :localaccount => true) }.not_to raise_error
119
- expect(described_class.get_user(@user_name, :localaccount => true)).to be_kind_of(Sys::Admin::User)
119
+ expect(described_class.get_user(@user_name, :localaccount => true)).to be_a(Sys::Admin::User)
120
120
  end
121
121
 
122
122
  example 'get user with integer argument works as expected' do
123
123
  expect{ described_class.get_user(@user_id, :localaccount => true) }.not_to raise_error
124
- expect(described_class.get_user(@user_id, :localaccount => true)).to be_kind_of(Sys::Admin::User)
124
+ expect(described_class.get_user(@user_id, :localaccount => true)).to be_a(Sys::Admin::User)
125
125
  end
126
126
 
127
127
  example 'get_user method by string accepts a hash of options' do
128
128
  options = {:host => host, :localaccount => true}
129
129
  expect{ described_class.get_user(@user_name, options) }.not_to raise_error
130
- expect(described_class.get_user(@user_name, options)).to be_kind_of(Sys::Admin::User)
130
+ expect(described_class.get_user(@user_name, options)).to be_a(Sys::Admin::User)
131
131
  end
132
132
 
133
133
  example 'get_user method by uid accepts a hash of options' do
134
134
  options = {:host => host, :localaccount => true}
135
135
  expect{ described_class.get_user(@user_id, options) }.not_to raise_error
136
- expect(described_class.get_user(@user_id, options)).to be_kind_of(Sys::Admin::User)
136
+ expect(described_class.get_user(@user_id, options)).to be_a(Sys::Admin::User)
137
137
  end
138
138
 
139
139
  example 'get_user method requires an argument' do
@@ -149,8 +149,8 @@ RSpec.describe Sys::Admin, :windows do
149
149
 
150
150
  example 'users method returns an array of User objects' do
151
151
  users = described_class.users(:localaccount => true)
152
- expect(users).to be_kind_of(Array)
153
- expect(users).to all(be_kind_of(Sys::Admin::User))
152
+ expect(users).to be_a(Array)
153
+ expect(users).to all(be_a(Sys::Admin::User))
154
154
  end
155
155
  end
156
156
 
@@ -161,18 +161,18 @@ RSpec.describe Sys::Admin, :windows do
161
161
 
162
162
  example 'get_group method returns expected results with a string argument' do
163
163
  expect{ described_class.get_group(@group_name, :localaccount => true) }.not_to raise_error
164
- expect(described_class.get_group(@group_name, :localaccount => true)).to be_kind_of(Sys::Admin::Group)
164
+ expect(described_class.get_group(@group_name, :localaccount => true)).to be_a(Sys::Admin::Group)
165
165
  end
166
166
 
167
167
  example 'get_group method returns expected results with an integer argument' do
168
168
  expect{ described_class.get_group(@group_id, :localaccount => true) }.not_to raise_error
169
- expect(described_class.get_group(@group_id, :localaccount => true)).to be_kind_of(Sys::Admin::Group)
169
+ expect(described_class.get_group(@group_id, :localaccount => true)).to be_a(Sys::Admin::Group)
170
170
  end
171
171
 
172
172
  example 'get_group method accepts a hash of options' do
173
173
  options = {:host => host, :localaccount => true}
174
174
  expect{ described_class.get_group(@group_name, options) }.not_to raise_error
175
- expect(described_class.get_group(@group_name, options)).to be_kind_of(Sys::Admin::Group)
175
+ expect(described_class.get_group(@group_name, options)).to be_a(Sys::Admin::Group)
176
176
  end
177
177
 
178
178
  example 'get_group method requires an argument' do
@@ -188,8 +188,8 @@ RSpec.describe Sys::Admin, :windows do
188
188
 
189
189
  example 'groups method returns an array of Group objects' do
190
190
  groups = described_class.groups(:localaccount => true)
191
- expect(groups).to be_kind_of(Array)
192
- expect(groups).to all(be_kind_of(Sys::Admin::Group))
191
+ expect(groups).to be_a(Array)
192
+ expect(groups).to all(be_a(Sys::Admin::Group))
193
193
  end
194
194
  end
195
195
  end
@@ -282,7 +282,7 @@ RSpec.describe Sys::Admin, :windows do
282
282
 
283
283
  example 'dir method returns either a string or nil' do
284
284
  expect{ @user = described_class.get_user(@user_name, :localaccount => true) }.not_to raise_error
285
- expect(@user.dir).to be_kind_of(String).or be_kind_of(NilClass)
285
+ expect(@user.dir).to be_a(String).or be_a(NilClass)
286
286
  end
287
287
  end
288
288
 
data/sys-admin.gemspec CHANGED
@@ -3,7 +3,7 @@ require 'rubygems'
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'sys-admin'
6
- spec.version = '1.8.2'
6
+ spec.version = '1.8.4'
7
7
  spec.author = 'Daniel J. Berger'
8
8
  spec.license = 'Apache-2.0'
9
9
  spec.email = 'djberg96@gmail.com'
@@ -35,7 +35,8 @@ Gem::Specification.new do |spec|
35
35
  'source_code_uri' => 'https://github.com/djberg96/sys-admin',
36
36
  'wiki_uri' => 'https://github.com/djberg96/sys-admin/wiki',
37
37
  'rubygems_mfa_required' => 'true',
38
- 'github_repo' => 'https://github.com/djberg96/sys-admin'
38
+ 'github_repo' => 'https://github.com/djberg96/sys-admin',
39
+ 'funding_uri' => 'https://github.com/sponsors/djberg96'
39
40
  }
40
41
 
41
42
  spec.description = <<-EOF
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,11 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sys-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.2
4
+ version: 1.8.4
5
5
  platform: universal-mingw32
6
6
  authors:
7
7
  - Daniel J. Berger
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain:
11
10
  - |
@@ -35,7 +34,7 @@ cert_chain:
35
34
  ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
36
35
  WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
37
36
  -----END CERTIFICATE-----
38
- date: 2023-04-09 00:00:00.000000000 Z
37
+ date: 1980-01-02 00:00:00.000000000 Z
39
38
  dependencies:
40
39
  - !ruby/object:Gem::Dependency
41
40
  name: ffi
@@ -170,7 +169,7 @@ metadata:
170
169
  wiki_uri: https://github.com/djberg96/sys-admin/wiki
171
170
  rubygems_mfa_required: 'true'
172
171
  github_repo: https://github.com/djberg96/sys-admin
173
- post_install_message:
172
+ funding_uri: https://github.com/sponsors/djberg96
174
173
  rdoc_options: []
175
174
  require_paths:
176
175
  - lib
@@ -185,8 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
184
  - !ruby/object:Gem::Version
186
185
  version: '0'
187
186
  requirements: []
188
- rubygems_version: 3.2.19
189
- signing_key:
187
+ rubygems_version: 3.6.7
190
188
  specification_version: 4
191
189
  summary: A unified, cross platform replacement for the "etc" library.
192
190
  test_files:
metadata.gz.sig CHANGED
Binary file