sys-admin 1.7.3 → 1.8.0
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/{CHANGES.rdoc → CHANGES.md} +48 -26
- data/Gemfile +2 -0
- data/LICENSE +177 -0
- data/{MANIFEST.rdoc → MANIFEST.md} +5 -3
- data/{README.rdoc → README.md} +53 -44
- data/Rakefile +15 -18
- data/lib/bsd/sys/admin.rb +13 -7
- data/lib/darwin/sys/admin.rb +14 -7
- data/lib/linux/sys/admin.rb +13 -14
- data/lib/sunos/sys/admin.rb +12 -5
- data/lib/sys/admin/common.rb +3 -6
- data/lib/sys/admin.rb +1 -1
- data/lib/unix/sys/admin.rb +7 -5
- data/lib/windows/sys/admin.rb +324 -303
- data/spec/sys_admin_unix_spec.rb +262 -0
- data/spec/sys_admin_windows_spec.rb +350 -0
- data/sys-admin.gemspec +10 -5
- data.tar.gz.sig +0 -0
- metadata +37 -57
- metadata.gz.sig +0 -0
- data/test/test_sys_admin.rb +0 -23
- data/test/test_sys_admin_unix.rb +0 -260
- data/test/test_sys_admin_windows.rb +0 -337
data/sys-admin.gemspec
CHANGED
@@ -3,27 +3,32 @@ require 'rubygems'
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'sys-admin'
|
6
|
-
spec.version = '1.
|
6
|
+
spec.version = '1.8.0'
|
7
7
|
spec.author = 'Daniel J. Berger'
|
8
8
|
spec.license = 'Apache-2.0'
|
9
9
|
spec.email = 'djberg96@gmail.com'
|
10
10
|
spec.homepage = 'http://www.github.com/djberg96/sys-admin'
|
11
11
|
spec.summary = 'A unified, cross platform replacement for the "etc" library.'
|
12
|
-
spec.
|
12
|
+
spec.test_files = Dir['spec/*.rb']
|
13
13
|
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
14
14
|
spec.cert_chain = ['certs/djberg96_pub.pem']
|
15
15
|
|
16
16
|
spec.extra_rdoc_files = Dir['*.rdoc']
|
17
17
|
|
18
|
-
spec.add_dependency('ffi', '
|
18
|
+
spec.add_dependency('ffi', '~> 1.1')
|
19
19
|
|
20
|
-
|
20
|
+
if Gem.win_platform?
|
21
|
+
spec.platform = Gem::Platform.new(['universal', 'mingw32'])
|
22
|
+
spec.add_dependency('win32-security', '~> 0.5')
|
23
|
+
end
|
24
|
+
|
25
|
+
spec.add_development_dependency('rspec', '~> 3.9')
|
21
26
|
spec.add_development_dependency('rake')
|
22
27
|
|
23
28
|
spec.metadata = {
|
24
29
|
'homepage_uri' => 'https://github.com/djberg96/sys-admin',
|
25
30
|
'bug_tracker_uri' => 'https://github.com/djberg96/sys-admin/issues',
|
26
|
-
'changelog_uri' => 'https://github.com/djberg96/sys-admin/blob/
|
31
|
+
'changelog_uri' => 'https://github.com/djberg96/sys-admin/blob/main/CHANGES.md',
|
27
32
|
'documentation_uri' => 'https://github.com/djberg96/sys-admin/wiki',
|
28
33
|
'source_code_uri' => 'https://github.com/djberg96/sys-admin',
|
29
34
|
'wiki_uri' => 'https://github.com/djberg96/sys-admin/wiki'
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sys-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
11
|
- |
|
@@ -35,36 +35,36 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2021-08-26 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: ffi
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- - "
|
44
|
+
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 1.1
|
46
|
+
version: '1.1'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "
|
51
|
+
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.1
|
53
|
+
version: '1.1'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
55
|
+
name: rspec
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- - "
|
58
|
+
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
60
|
+
version: '3.9'
|
61
61
|
type: :development
|
62
62
|
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - "
|
65
|
+
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: '3.9'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
69
|
name: rake
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,52 +88,31 @@ description: |2
|
|
88
88
|
email: djberg96@gmail.com
|
89
89
|
executables: []
|
90
90
|
extensions: []
|
91
|
-
extra_rdoc_files:
|
92
|
-
- CHANGES.rdoc
|
93
|
-
- MANIFEST.rdoc
|
94
|
-
- README.rdoc
|
91
|
+
extra_rdoc_files: []
|
95
92
|
files:
|
96
|
-
-
|
97
|
-
-
|
98
|
-
-
|
99
|
-
-
|
100
|
-
-
|
93
|
+
- CHANGES.md
|
94
|
+
- Gemfile
|
95
|
+
- LICENSE
|
96
|
+
- MANIFEST.md
|
97
|
+
- README.md
|
98
|
+
- Rakefile
|
99
|
+
- certs/djberg96_pub.pem
|
100
|
+
- doc/sys-admin-unix.txt
|
101
|
+
- doc/sys-admin-windows.txt
|
101
102
|
- examples/example_groups.rb
|
102
103
|
- examples/example_users.rb
|
103
|
-
- doc
|
104
|
-
- doc/sys-admin-windows.txt
|
105
|
-
- doc/sys-admin-unix.txt
|
106
|
-
- Rakefile
|
107
|
-
- lib
|
108
|
-
- lib/windows
|
109
|
-
- lib/windows/sys
|
110
|
-
- lib/windows/sys/admin.rb
|
111
|
-
- lib/sys-admin.rb
|
112
|
-
- lib/sunos
|
113
|
-
- lib/sunos/sys
|
114
|
-
- lib/sunos/sys/admin.rb
|
115
|
-
- lib/linux
|
116
|
-
- lib/linux/sys
|
117
|
-
- lib/linux/sys/admin.rb
|
118
|
-
- lib/bsd
|
119
|
-
- lib/bsd/sys
|
120
104
|
- lib/bsd/sys/admin.rb
|
121
|
-
- lib/darwin
|
122
|
-
- lib/darwin/sys
|
123
105
|
- lib/darwin/sys/admin.rb
|
124
|
-
- lib/
|
125
|
-
- lib/
|
126
|
-
- lib/
|
127
|
-
- lib/sys
|
128
|
-
- lib/sys/admin
|
129
|
-
- lib/sys/admin/custom.rb
|
130
|
-
- lib/sys/admin/common.rb
|
106
|
+
- lib/linux/sys/admin.rb
|
107
|
+
- lib/sunos/sys/admin.rb
|
108
|
+
- lib/sys-admin.rb
|
131
109
|
- lib/sys/admin.rb
|
132
|
-
-
|
133
|
-
-
|
134
|
-
-
|
135
|
-
-
|
136
|
-
-
|
110
|
+
- lib/sys/admin/common.rb
|
111
|
+
- lib/sys/admin/custom.rb
|
112
|
+
- lib/unix/sys/admin.rb
|
113
|
+
- lib/windows/sys/admin.rb
|
114
|
+
- spec/sys_admin_unix_spec.rb
|
115
|
+
- spec/sys_admin_windows_spec.rb
|
137
116
|
- sys-admin.gemspec
|
138
117
|
homepage: http://www.github.com/djberg96/sys-admin
|
139
118
|
licenses:
|
@@ -141,11 +120,11 @@ licenses:
|
|
141
120
|
metadata:
|
142
121
|
homepage_uri: https://github.com/djberg96/sys-admin
|
143
122
|
bug_tracker_uri: https://github.com/djberg96/sys-admin/issues
|
144
|
-
changelog_uri: https://github.com/djberg96/sys-admin/blob/
|
123
|
+
changelog_uri: https://github.com/djberg96/sys-admin/blob/main/CHANGES.md
|
145
124
|
documentation_uri: https://github.com/djberg96/sys-admin/wiki
|
146
125
|
source_code_uri: https://github.com/djberg96/sys-admin
|
147
126
|
wiki_uri: https://github.com/djberg96/sys-admin/wiki
|
148
|
-
post_install_message:
|
127
|
+
post_install_message:
|
149
128
|
rdoc_options: []
|
150
129
|
require_paths:
|
151
130
|
- lib
|
@@ -160,9 +139,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
139
|
- !ruby/object:Gem::Version
|
161
140
|
version: '0'
|
162
141
|
requirements: []
|
163
|
-
rubygems_version: 3.
|
164
|
-
signing_key:
|
142
|
+
rubygems_version: 3.1.4
|
143
|
+
signing_key:
|
165
144
|
specification_version: 4
|
166
145
|
summary: A unified, cross platform replacement for the "etc" library.
|
167
146
|
test_files:
|
168
|
-
-
|
147
|
+
- spec/sys_admin_unix_spec.rb
|
148
|
+
- spec/sys_admin_windows_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|
data/test/test_sys_admin.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
###############################################################################
|
2
|
-
# test_sys_admin.rb
|
3
|
-
#
|
4
|
-
# This exists mostly for the sake of the gemspec, so that it calls the right
|
5
|
-
# test suite based on the platform.
|
6
|
-
###############################################################################
|
7
|
-
require 'test-unit'
|
8
|
-
|
9
|
-
if File::ALT_SEPARATOR
|
10
|
-
require 'test_sys_admin_windows'
|
11
|
-
else
|
12
|
-
require 'test_sys_admin_unix'
|
13
|
-
end
|
14
|
-
|
15
|
-
class TC_Sys_Admin_All < Test::Unit::TestCase
|
16
|
-
test "version is set to expected value" do
|
17
|
-
assert_equal('1.7.3', Sys::Admin::VERSION)
|
18
|
-
end
|
19
|
-
|
20
|
-
test "version constant is frozen" do
|
21
|
-
assert_true(Sys::Admin::VERSION.frozen?)
|
22
|
-
end
|
23
|
-
end
|
data/test/test_sys_admin_unix.rb
DELETED
@@ -1,260 +0,0 @@
|
|
1
|
-
###############################################################################
|
2
|
-
# test_sys_admin_unix.rb
|
3
|
-
#
|
4
|
-
# Test suite for the Unix version of sys-admin. This test should be run
|
5
|
-
# via the 'rake test' task.
|
6
|
-
###############################################################################
|
7
|
-
require 'test-unit'
|
8
|
-
require 'sys/admin'
|
9
|
-
include Sys
|
10
|
-
|
11
|
-
class TC_Sys_Admin_Unix < Test::Unit::TestCase
|
12
|
-
def setup
|
13
|
-
@user = 'nobody'
|
14
|
-
@user_id = 0
|
15
|
-
@group = 'sys'
|
16
|
-
@group_id = 3
|
17
|
-
end
|
18
|
-
|
19
|
-
## Admin singleton methods
|
20
|
-
|
21
|
-
test "get_login basic functionality" do
|
22
|
-
assert_respond_to(Admin, :get_login)
|
23
|
-
assert_nothing_raised{ Admin.get_login }
|
24
|
-
end
|
25
|
-
|
26
|
-
test "get_login returns a string" do
|
27
|
-
assert_kind_of(String, Admin.get_login)
|
28
|
-
assert_true(Admin.get_login.length > 0)
|
29
|
-
end
|
30
|
-
|
31
|
-
test "get_user basic functionality" do
|
32
|
-
assert_respond_to(Admin, :get_user)
|
33
|
-
assert_nothing_raised{ Admin.get_user(@user) }
|
34
|
-
assert_nothing_raised{ Admin.get_user(@user_id) }
|
35
|
-
end
|
36
|
-
|
37
|
-
test "get_user with a string argument works as expected" do
|
38
|
-
assert_kind_of(Admin::User, Admin.get_user(@user))
|
39
|
-
end
|
40
|
-
|
41
|
-
test "get_user with an integer argument works as expected" do
|
42
|
-
assert_kind_of(Admin::User, Admin.get_user(@user_id))
|
43
|
-
end
|
44
|
-
|
45
|
-
test "get_user requires one argument only" do
|
46
|
-
assert_raise(ArgumentError){ Admin.get_user }
|
47
|
-
assert_raise(ArgumentError){ Admin.get_user(@user, @user) }
|
48
|
-
end
|
49
|
-
|
50
|
-
test "get_user requires a string or integer argument" do
|
51
|
-
assert_raise(TypeError){ Admin.get_user([]) }
|
52
|
-
end
|
53
|
-
|
54
|
-
test "get_user raises an Error if the user cannot be found" do
|
55
|
-
assert_raise(Admin::Error){ Admin.get_user('foofoofoo') }
|
56
|
-
end
|
57
|
-
|
58
|
-
test "users basic functionality" do
|
59
|
-
assert_respond_to(Admin, :users)
|
60
|
-
assert_nothing_raised{ Admin.users }
|
61
|
-
end
|
62
|
-
|
63
|
-
test "users returns an array of User objects" do
|
64
|
-
users = Admin.users
|
65
|
-
assert_kind_of(Array, users)
|
66
|
-
assert_kind_of(Admin::User, users.first)
|
67
|
-
end
|
68
|
-
|
69
|
-
test "users does not accept any arguments" do
|
70
|
-
assert_raise(ArgumentError){ Admin.users(@user_id) }
|
71
|
-
end
|
72
|
-
|
73
|
-
test "get_group basic functionality" do
|
74
|
-
assert_respond_to(Admin, :get_group)
|
75
|
-
assert_nothing_raised{ Admin.get_group(@group) }
|
76
|
-
assert_nothing_raised{ Admin.get_group(@group_id) }
|
77
|
-
end
|
78
|
-
|
79
|
-
test "get_group accepts a string argument" do
|
80
|
-
assert_kind_of(Admin::Group, Admin.get_group(@group))
|
81
|
-
end
|
82
|
-
|
83
|
-
test "get_group accepts an integer argument" do
|
84
|
-
assert_kind_of(Admin::Group, Admin.get_group(@group_id))
|
85
|
-
end
|
86
|
-
|
87
|
-
test "get_group requires one argument only" do
|
88
|
-
assert_raise(ArgumentError){ Admin.get_group }
|
89
|
-
assert_raise(ArgumentError){ Admin.get_group(@group_id, @group_id) }
|
90
|
-
end
|
91
|
-
|
92
|
-
test "get_group raises a TypeError if an invalid type is passed" do
|
93
|
-
assert_raise(TypeError){ Admin.get_group([]) }
|
94
|
-
end
|
95
|
-
|
96
|
-
test "get_group raises an Error if the group cannot be found" do
|
97
|
-
assert_raise(Admin::Error){ Admin.get_group('foofoofoo') }
|
98
|
-
end
|
99
|
-
|
100
|
-
test "groups basic functionality" do
|
101
|
-
assert_respond_to(Admin, :groups)
|
102
|
-
assert_nothing_raised{ Admin.groups }
|
103
|
-
end
|
104
|
-
|
105
|
-
test "groups returns an array of Group objects" do
|
106
|
-
groups = Admin.groups
|
107
|
-
assert_kind_of(Array, groups)
|
108
|
-
assert_kind_of(Admin::Group, groups.first)
|
109
|
-
end
|
110
|
-
|
111
|
-
test "groups method does not accept any arguments" do
|
112
|
-
assert_raise(ArgumentError){ Admin.groups(@group_id) }
|
113
|
-
end
|
114
|
-
|
115
|
-
## User Tests
|
116
|
-
|
117
|
-
test "user.name behaves as expected" do
|
118
|
-
@user = Admin.get_user(@user_id)
|
119
|
-
assert_respond_to(@user, :name)
|
120
|
-
assert_kind_of(String, @user.name)
|
121
|
-
end
|
122
|
-
|
123
|
-
test "user.passwd behaves as expected" do
|
124
|
-
@user = Admin.get_user(@user_id)
|
125
|
-
assert_respond_to(@user, :passwd)
|
126
|
-
assert_kind_of(String, @user.passwd)
|
127
|
-
end
|
128
|
-
|
129
|
-
test "user.uid behaves as expected" do
|
130
|
-
@user = Admin.get_user(@user_id)
|
131
|
-
assert_respond_to(@user, :uid)
|
132
|
-
assert_kind_of(Integer, @user.uid)
|
133
|
-
end
|
134
|
-
|
135
|
-
test "user.gid behaves as expected" do
|
136
|
-
@user = Admin.get_user(@user_id)
|
137
|
-
assert_respond_to(@user, :gid)
|
138
|
-
assert_kind_of(Integer, @user.gid)
|
139
|
-
end
|
140
|
-
|
141
|
-
test "user.dir behaves as expected" do
|
142
|
-
@user = Admin.get_user(@user_id)
|
143
|
-
assert_respond_to(@user, :dir)
|
144
|
-
assert_kind_of(String, @user.dir)
|
145
|
-
end
|
146
|
-
|
147
|
-
test "user.shell behaves as expected" do
|
148
|
-
@user = Admin.get_user(@user_id)
|
149
|
-
assert_respond_to(@user, :shell)
|
150
|
-
assert_kind_of(String, @user.shell)
|
151
|
-
end
|
152
|
-
|
153
|
-
test "user.gecos behaves as expected" do
|
154
|
-
@user = Admin.get_user(@user_id)
|
155
|
-
assert_respond_to(@user, :gecos)
|
156
|
-
assert_kind_of([String, NilClass], @user.gecos)
|
157
|
-
end
|
158
|
-
|
159
|
-
test "user.quota behaves as expected" do
|
160
|
-
@user = Admin.get_user(@user_id)
|
161
|
-
assert_respond_to(@user, :quota)
|
162
|
-
assert_true([Integer, NilClass].include?(@user.quota.class))
|
163
|
-
end
|
164
|
-
|
165
|
-
test "user.age behaves as expected" do
|
166
|
-
@user = Admin.get_user(@user_id)
|
167
|
-
assert_respond_to(@user, :age)
|
168
|
-
assert_true([Integer, NilClass].include?(@user.age.class))
|
169
|
-
end
|
170
|
-
|
171
|
-
test "user.access behaves as expected" do
|
172
|
-
@user = Admin.get_user(@user_id)
|
173
|
-
assert_respond_to(@user, :access_class)
|
174
|
-
assert_true([String, NilClass].include?(@user.access_class.class))
|
175
|
-
end
|
176
|
-
|
177
|
-
test "user.comment behaves as expected" do
|
178
|
-
@user = Admin.get_user(@user_id)
|
179
|
-
assert_respond_to(@user, :comment)
|
180
|
-
assert_true([String, NilClass].include?(@user.comment.class))
|
181
|
-
end
|
182
|
-
|
183
|
-
test "user.expire behaves as expected" do
|
184
|
-
@user = Admin.get_user(@user_id)
|
185
|
-
assert_respond_to(@user, :expire)
|
186
|
-
assert_true([Time, NilClass].include?(@user.expire.class))
|
187
|
-
end
|
188
|
-
|
189
|
-
test "user.change behaves as expected" do
|
190
|
-
@user = Admin.get_user(@user_id)
|
191
|
-
assert_respond_to(@user, :change)
|
192
|
-
assert_true([Time, NilClass].include?(@user.change.class))
|
193
|
-
end
|
194
|
-
|
195
|
-
test "user.login_time behaves as expected" do
|
196
|
-
@user = Admin.get_user(@user_id)
|
197
|
-
assert_respond_to(@user, :login_time)
|
198
|
-
assert_true([Time, NilClass].include?(@user.login_time.class))
|
199
|
-
end
|
200
|
-
|
201
|
-
test "user.login_device behaves as expected" do
|
202
|
-
@user = Admin.get_user(@user_id)
|
203
|
-
assert_respond_to(@user, :login_device)
|
204
|
-
assert_true([String, NilClass].include?(@user.login_device.class))
|
205
|
-
end
|
206
|
-
|
207
|
-
test "user.login_host behaves as expected" do
|
208
|
-
@user = Admin.get_user(@user_id)
|
209
|
-
assert_respond_to(@user, :login_host)
|
210
|
-
assert_true([String, NilClass].include?(@user.login_host.class))
|
211
|
-
end
|
212
|
-
|
213
|
-
test "user.groups behaves as expected" do
|
214
|
-
@user = Admin.get_user(@user_id)
|
215
|
-
assert_respond_to(@user, :groups)
|
216
|
-
assert_kind_of(Array, @user.groups)
|
217
|
-
end
|
218
|
-
|
219
|
-
## Group Tests
|
220
|
-
|
221
|
-
test "group.name behaves as expected" do
|
222
|
-
@group = Admin.get_group(@group_id)
|
223
|
-
assert_respond_to(@group, :name)
|
224
|
-
assert_kind_of(String, @group.name)
|
225
|
-
end
|
226
|
-
|
227
|
-
test "group.gid behaves as expected" do
|
228
|
-
@group = Admin.get_group(@group_id)
|
229
|
-
assert_respond_to(@group, :gid)
|
230
|
-
assert_kind_of(Integer, @group.gid)
|
231
|
-
end
|
232
|
-
|
233
|
-
test "group.members behaves as expected" do
|
234
|
-
@group = Admin.get_group(@group_id)
|
235
|
-
assert_respond_to(@group, :members)
|
236
|
-
assert_kind_of(Array, @group.members)
|
237
|
-
end
|
238
|
-
|
239
|
-
test "group.passwd behaves as expected" do
|
240
|
-
@group = Admin.get_group(@group_id)
|
241
|
-
assert_respond_to(@group, :passwd)
|
242
|
-
assert_kind_of(String, @group.passwd)
|
243
|
-
end
|
244
|
-
|
245
|
-
## FFI
|
246
|
-
|
247
|
-
test "ffi functions are private" do
|
248
|
-
methods = Admin.methods(false).map{ |e| e.to_s }
|
249
|
-
assert_false(methods.include?('getlogin'))
|
250
|
-
assert_false(methods.include?('getlogin_r'))
|
251
|
-
assert_false(methods.include?('strerror'))
|
252
|
-
end
|
253
|
-
|
254
|
-
def teardown
|
255
|
-
@user = nil
|
256
|
-
@user_id = nil
|
257
|
-
@group = nil
|
258
|
-
@group_id = nil
|
259
|
-
end
|
260
|
-
end
|