sys-uname 1.2.2 → 1.2.3
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.md +7 -0
- data/Gemfile +2 -7
- data/README.md +21 -6
- data/Rakefile +4 -2
- data/doc/uname.rdoc +1 -1
- data/lib/sys/platform.rb +17 -13
- data/lib/sys/uname.rb +3 -1
- data/lib/sys/unix/uname.rb +20 -35
- data/lib/sys/windows/uname.rb +221 -237
- data/lib/sys-uname.rb +2 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/sys_platform_spec.rb +32 -38
- data/spec/sys_uname_spec.rb +140 -136
- data/sys-uname.gemspec +11 -7
- data.tar.gz.sig +0 -0
- metadata +36 -5
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da53561b44caf45c227aad7130b9b120e9bbdd3cd35b665ecf527b8a7ad51996
|
4
|
+
data.tar.gz: ce041695020d00b6eeacb5861fc39268a84a6bc4f586f3c2576f2b4e599816d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd826360df12898bb135c2a442c475cbf209c1dae207b290214af3ae8130eaaed41800c2744942908ac11469c4ec9c7d2bebbd25bf112041148c629b502431d3
|
7
|
+
data.tar.gz: bd9cdeff9d5459e7c66e86b280c6f19f046812bfdb3abb05b8c874cfd535df3895f8ad3198026df3ac2f845690bc85dd0b9ab939212b6563c95071215e011453
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 1.2.3 - 9-Apr-2023
|
2
|
+
* Added rubygems_mfa_required and github_repo to metadata.
|
3
|
+
* Miscellaneous rubocop related updates.
|
4
|
+
* Fixed one test for Windows.
|
5
|
+
* The rubocop and rubocop-rspec gems are now development dependencies.
|
6
|
+
* Now assumes Ruby 2.0 or later.
|
7
|
+
|
1
8
|
## 1.2.2 - 30-Oct-2020
|
2
9
|
* Added a Gemfile.
|
3
10
|
* The ffi dependency is now slightly more restrictive.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](https://github.com/djberg96/sys-uname/actions/workflows/ruby.yml)
|
2
|
+
|
1
3
|
## Description
|
2
4
|
A cross-platform Ruby interface for getting operating system information. The name
|
3
5
|
comes from the Unix 'uname' command, but this library works on MS Windows as well.
|
@@ -8,8 +10,11 @@ ffi 1.0 or later
|
|
8
10
|
## Installation
|
9
11
|
`gem install sys-uname`
|
10
12
|
|
13
|
+
## Adding the trusted cert
|
14
|
+
`gem cert --add <(curl -Ls https://raw.githubusercontent.com/djberg96/sys-uname/main/certs/djberg96_pub.pem)`
|
15
|
+
|
11
16
|
## Synopsis
|
12
|
-
```
|
17
|
+
```ruby
|
13
18
|
require 'sys/uname' # require 'sys-uname' works, too
|
14
19
|
|
15
20
|
# You now have Sys::Uname and Sys::Platform classes available.
|
@@ -23,21 +28,31 @@ p Sys::Platform::ARCH # => :x86_64
|
|
23
28
|
```
|
24
29
|
|
25
30
|
## Solaris Notes
|
26
|
-
Users on SunOS get several extra methods:
|
27
|
-
|
31
|
+
Users on SunOS get several extra methods:
|
32
|
+
|
33
|
+
* architecture
|
34
|
+
* platform
|
35
|
+
* hw_serial
|
36
|
+
* hw_provider
|
37
|
+
* srpc_domain
|
38
|
+
* isa_list
|
39
|
+
* dhcp_cache
|
40
|
+
|
41
|
+
Note that Solaris is essentially a dead OS at this point, so it will not be
|
42
|
+
supported going forward, and will likely be dropped in the next major release.
|
28
43
|
|
29
44
|
## BSD flavors, including OS X
|
30
|
-
Users on BSD platforms get the extra Uname.model method.
|
45
|
+
Users on BSD platforms get the extra `Uname.model` method.
|
31
46
|
|
32
47
|
## HP-UX Notes
|
33
|
-
HP-UX users get the extra Uname.id_number method. This is actually a
|
48
|
+
HP-UX users get the extra `Uname.id_number` method. This is actually a
|
34
49
|
String, not a Fixnum, because that's how it's defined in the utsname
|
35
50
|
struct.
|
36
51
|
|
37
52
|
## MS Windows Notes
|
38
53
|
The C version for Windows has been completely scrapped in favor of an OLE
|
39
54
|
plus WMI approach. It is pure Ruby. Please see the MSDN documentation for
|
40
|
-
the Win32_OperatingSystem class for a complete list of what each of the
|
55
|
+
the `Win32_OperatingSystem` class for a complete list of what each of the
|
41
56
|
UnameStruct members mean.
|
42
57
|
|
43
58
|
## The Platform Class
|
data/Rakefile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'rake'
|
2
|
-
require 'rake/testtask'
|
3
2
|
require 'rake/clean'
|
4
3
|
require 'rbconfig'
|
5
4
|
require 'rspec/core/rake_task'
|
5
|
+
require 'rubocop/rake_task'
|
6
6
|
|
7
7
|
CLEAN.include("**/*.rbc", "**/*.rbx", "**/*.gem", "**/*.lock")
|
8
8
|
|
@@ -19,7 +19,7 @@ namespace :gem do
|
|
19
19
|
desc "Create the sys-uname gem"
|
20
20
|
task :create => [:clean] do
|
21
21
|
require 'rubygems/package'
|
22
|
-
spec =
|
22
|
+
spec = Gem::Specification.load('sys-uname.gemspec')
|
23
23
|
spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
|
24
24
|
Gem::Package.build(spec)
|
25
25
|
end
|
@@ -31,6 +31,8 @@ namespace :gem do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
RuboCop::RakeTask.new
|
35
|
+
|
34
36
|
desc "Run the test suite"
|
35
37
|
RSpec::Core::RakeTask.new(:spec)
|
36
38
|
|
data/doc/uname.rdoc
CHANGED
data/lib/sys/platform.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# The Sys module is a namespace only.
|
1
4
|
module Sys
|
5
|
+
# The Platform class provides singleton methods to tell you what OS you're on.
|
2
6
|
class Platform
|
3
7
|
# The CPU architecture
|
4
8
|
ARCH = File::ALT_SEPARATOR ? Uname.architecture.to_sym : Uname.machine.to_sym
|
@@ -8,18 +12,18 @@ module Sys
|
|
8
12
|
|
9
13
|
# Returns the OS type, :macosx, :linux, :mingw32, etc
|
10
14
|
IMPL = case Uname.sysname
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
when /darwin|mac/i
|
16
|
+
:macosx
|
17
|
+
when /mingw|windows/i
|
18
|
+
require 'rbconfig'
|
19
|
+
RbConfig::CONFIG['host_os'].split('_').first[/[a-z]+/i].downcase.to_sym
|
20
|
+
when /linux/i
|
21
|
+
:linux
|
22
|
+
when /sunos|solaris/i
|
23
|
+
:solaris
|
24
|
+
when /bsd/i
|
25
|
+
:bsd
|
26
|
+
end
|
23
27
|
|
24
28
|
# Returns whether or not you're on a Windows OS
|
25
29
|
def self.windows?
|
@@ -28,7 +32,7 @@ module Sys
|
|
28
32
|
|
29
33
|
# Returns whether or not you're on a Unixy (non-Windows) OS
|
30
34
|
def self.unix?
|
31
|
-
Uname.sysname
|
35
|
+
Uname.sysname =~ /microsoft/i ? false : true
|
32
36
|
end
|
33
37
|
|
34
38
|
# Returns whether or not you're on a mac, i.e. OSX
|
data/lib/sys/uname.rb
CHANGED
data/lib/sys/unix/uname.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'ffi'
|
2
4
|
require 'rbconfig'
|
3
5
|
require 'ostruct'
|
@@ -30,7 +32,7 @@ module Sys
|
|
30
32
|
private_class_method :uname_c
|
31
33
|
|
32
34
|
begin
|
33
|
-
attach_function :sysctl, [
|
35
|
+
attach_function :sysctl, %i[pointer uint pointer pointer pointer size_t], :int
|
34
36
|
private_class_method :sysctl
|
35
37
|
|
36
38
|
CTL_HW = 6 # Generic hardware/cpu
|
@@ -40,7 +42,7 @@ module Sys
|
|
40
42
|
end
|
41
43
|
|
42
44
|
begin
|
43
|
-
attach_function :sysinfo, [
|
45
|
+
attach_function :sysinfo, %i[int pointer long], :long
|
44
46
|
private_class_method :sysinfo
|
45
47
|
|
46
48
|
SI_SYSNAME = 1 # OS name
|
@@ -59,6 +61,7 @@ module Sys
|
|
59
61
|
# Ignore. Not suppored.
|
60
62
|
end
|
61
63
|
|
64
|
+
# FFI class passed to the underlying C uname function.
|
62
65
|
class UnameFFIStruct < FFI::Struct
|
63
66
|
members = [
|
64
67
|
:sysname, [:char, BUFSIZE],
|
@@ -68,13 +71,8 @@ module Sys
|
|
68
71
|
:machine, [:char, BUFSIZE]
|
69
72
|
]
|
70
73
|
|
71
|
-
if RbConfig::CONFIG['host_os'] =~ /linux/i
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
76
|
-
members.push(:__id_number, [:char, BUFSIZE])
|
77
|
-
end
|
74
|
+
members.push(:domainname, [:char, BUFSIZE]) if RbConfig::CONFIG['host_os'] =~ /linux/i
|
75
|
+
members.push(:__id_number, [:char, BUFSIZE]) if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
78
76
|
|
79
77
|
layout(*members)
|
80
78
|
end
|
@@ -87,13 +85,8 @@ module Sys
|
|
87
85
|
machine
|
88
86
|
]
|
89
87
|
|
90
|
-
if RbConfig::CONFIG['host_os'] =~ /linux/i
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
95
|
-
fields.push('id_number')
|
96
|
-
end
|
88
|
+
fields.push('domainname') if RbConfig::CONFIG['host_os'] =~ /linux/i
|
89
|
+
fields.push('id_number') if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
97
90
|
|
98
91
|
if RbConfig::CONFIG['host_os'] =~ /sunos|solaris/i
|
99
92
|
fields.push(
|
@@ -107,13 +100,13 @@ module Sys
|
|
107
100
|
)
|
108
101
|
end
|
109
102
|
|
110
|
-
if RbConfig::CONFIG['host_os'] =~ /darwin|bsd/i
|
111
|
-
|
112
|
-
|
103
|
+
fields.push('model') if RbConfig::CONFIG['host_os'] =~ /darwin|bsd/i
|
104
|
+
|
105
|
+
private_constant :UnameFFIStruct
|
113
106
|
|
114
107
|
# :startdoc:
|
115
108
|
|
116
|
-
UnameStruct = Struct.new(
|
109
|
+
UnameStruct = Struct.new('UnameStruct', *fields)
|
117
110
|
|
118
111
|
# Returns a struct that contains the sysname, nodename, machine, version
|
119
112
|
# and release of your system.
|
@@ -133,9 +126,7 @@ module Sys
|
|
133
126
|
def self.uname
|
134
127
|
utsname = UnameFFIStruct.new
|
135
128
|
|
136
|
-
if uname_c(utsname) < 0
|
137
|
-
raise Error, "uname() function call failed"
|
138
|
-
end
|
129
|
+
raise Error, 'uname() function call failed' if uname_c(utsname) < 0
|
139
130
|
|
140
131
|
struct = UnameStruct.new
|
141
132
|
struct[:sysname] = utsname[:sysname].to_s
|
@@ -144,9 +135,7 @@ module Sys
|
|
144
135
|
struct[:version] = utsname[:version].to_s
|
145
136
|
struct[:machine] = utsname[:machine].to_s
|
146
137
|
|
147
|
-
if RbConfig::CONFIG['host_os'] =~ /darwin|bsd/i
|
148
|
-
struct[:model] = get_model()
|
149
|
-
end
|
138
|
+
struct[:model] = get_model() if RbConfig::CONFIG['host_os'] =~ /darwin|bsd/i
|
150
139
|
|
151
140
|
if RbConfig::CONFIG['host_os'] =~ /sunos|solaris/i
|
152
141
|
struct[:architecture] = get_si(SI_ARCHITECTURE)
|
@@ -165,21 +154,17 @@ module Sys
|
|
165
154
|
struct[:machine] = get_si(SI_MACHINE) if struct.machine.empty?
|
166
155
|
end
|
167
156
|
|
168
|
-
if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
169
|
-
struct[:id_number] = utsname[:__id_number].to_s
|
170
|
-
end
|
157
|
+
struct[:id_number] = utsname[:__id_number].to_s if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
171
158
|
|
172
|
-
if RbConfig::CONFIG['host_os'] =~ /linux/i
|
173
|
-
struct[:domainname] = utsname[:domainname].to_s
|
174
|
-
end
|
159
|
+
struct[:domainname] = utsname[:domainname].to_s if RbConfig::CONFIG['host_os'] =~ /linux/i
|
175
160
|
|
176
161
|
# Let's add a members method that works for testing and compatibility
|
177
162
|
if struct.members.nil?
|
178
|
-
struct.instance_eval
|
163
|
+
struct.instance_eval <<-RUBY, __FILE__, __LINE__ + 1
|
179
164
|
def members
|
180
|
-
@table.keys.map
|
165
|
+
@table.keys.map(&:to_s)
|
181
166
|
end
|
182
|
-
|
167
|
+
RUBY
|
183
168
|
end
|
184
169
|
|
185
170
|
struct.freeze
|