sys-host 0.6.1 → 0.6.2

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.
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'rbconfig'
3
+ include Config
4
+
5
+ # Some additional specification options are handled by the gem:create task.
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'sys-host'
9
+ spec.version = '0.6.2'
10
+ spec.author = 'Daniel J. Berger'
11
+ spec.license = 'Artistic 2.0'
12
+ spec.email = 'djberg96@gmail.com'
13
+ spec.homepage = 'http://www.rubyforge.org/projects/sysutils'
14
+ spec.platform = Gem::Platform::RUBY
15
+ spec.summary = 'Provides hostname and ip address info for a given host'
16
+ spec.test_file = 'test/test_sys_host.rb'
17
+ spec.has_rdoc = true
18
+
19
+ spec.files = %w[
20
+ CHANGES
21
+ MANIFEST
22
+ README
23
+ Rakefile
24
+ sys-host.gemspec
25
+ doc/host.txt
26
+ examples/example_sys_host.rb
27
+ test/test_sys_host.rb
28
+ ]
29
+
30
+ spec.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST']
31
+ spec.rubyforge_project = 'sysutils'
32
+
33
+ spec.add_development_dependency('test-unit', '>= 2.0.7')
34
+
35
+ spec.description = <<-EOF
36
+ The sys-host library provides information about the current machine that
37
+ your program is running on. Specifically, it returns hostname, IP
38
+ address information, aliases and so on.
39
+ EOF
40
+ end
@@ -14,82 +14,116 @@ include Config
14
14
  include Sys
15
15
 
16
16
  class TC_Sys_Host < Test::Unit::TestCase
17
- def self.startup
18
- if CONFIG['host_os'] =~ /mswin|solaris|linux|bsd|mach|darwin|osx/i
19
- @@info_supported = true
20
- else
21
- @@info_supported = false
22
- end
23
-
24
- @@windows = CONFIG['host_os'].match('mswin')
25
- end
26
-
27
- def test_version
28
- assert_equal('0.6.1', Host::VERSION)
29
- end
30
-
31
- def test_hostname_basic
32
- assert_respond_to(Host, :hostname)
33
- assert_nothing_raised{ Host.hostname }
34
- end
35
-
36
- def test_hostname
37
- assert_kind_of(String, Host.hostname)
38
- assert_equal(`hostname`.chomp, Host.hostname) # sanity check
39
- end
40
-
41
- def test_hostname_expected_errors
42
- assert_raise(ArgumentError){ Host.hostname(true) }
43
- end
44
-
45
- def test_ip_addr_basic
46
- assert_respond_to(Host, :ip_addr)
47
- assert_nothing_raised{ Host.ip_addr }
48
- end
49
-
50
- def test_ip_addr
51
- assert_kind_of(Array, Host.ip_addr)
52
- assert_kind_of(String, Host.ip_addr.first)
53
- end
54
-
55
- def test_ip_addr_expected_errors
56
- assert_raise(ArgumentError){ Host.ip_addr(true) }
57
- end
58
-
59
- def test_host_id_basic
60
- assert_respond_to(Host, :host_id)
61
- assert_nothing_raised{ Host.host_id }
62
- end
63
-
64
- def test_host_id
65
- type = @@windows ? String : Integer
66
- assert_kind_of(type, Host.host_id)
67
- end
68
-
69
- def test_host_id_expected_errors
70
- assert_raise(ArgumentError){ Host.host_id(true) }
71
- end
72
-
73
- def test_info_basic
74
- omit_unless(@@info_supported, 'info test skipped on this platform')
75
- assert_respond_to(Host, :info)
76
- assert_nothing_raised{ Host.info }
77
- end
78
-
79
- def test_info
80
- omit_unless(@@info_supported, 'info test skipped on this platform')
81
- assert_kind_of(Array, Host.info)
82
- assert_kind_of(Struct::HostInfo, Host.info.first)
83
- assert_nil(Host.info{ })
84
- end
85
-
86
- def test_info_high_iteration
87
- omit_unless(@@info_supported, 'info test skipped on this platform')
88
- assert_nothing_raised{ 100.times{ Host.info } }
89
- end
90
-
91
- def self.shutdown
92
- @@info_supported = nil
93
- @@windows = nil
94
- end
17
+ def self.startup
18
+ if CONFIG['host_os'] =~ /mswin|solaris|linux|bsd|mach|darwin|osx/i
19
+ @@info_supported = true
20
+ else
21
+ @@info_supported = false
22
+ end
23
+
24
+ @@windows = CONFIG['host_os'].match('mswin')
25
+ end
26
+
27
+ def test_version
28
+ assert_equal('0.6.2', Host::VERSION)
29
+ end
30
+
31
+ def test_hostname_basic
32
+ assert_respond_to(Host, :hostname)
33
+ assert_nothing_raised{ Host.hostname }
34
+ end
35
+
36
+ def test_hostname
37
+ assert_kind_of(String, Host.hostname)
38
+ assert_equal(`hostname`.chomp, Host.hostname) # sanity check
39
+ end
40
+
41
+ def test_hostname_expected_errors
42
+ assert_raise(ArgumentError){ Host.hostname(true) }
43
+ end
44
+
45
+ def test_ip_addr_basic
46
+ assert_respond_to(Host, :ip_addr)
47
+ assert_nothing_raised{ Host.ip_addr }
48
+ end
49
+
50
+ def test_ip_addr
51
+ assert_kind_of(Array, Host.ip_addr)
52
+ assert_kind_of(String, Host.ip_addr.first)
53
+ end
54
+
55
+ def test_ip_addr_expected_errors
56
+ assert_raise(ArgumentError){ Host.ip_addr(true) }
57
+ end
58
+
59
+ def test_host_id_basic
60
+ assert_respond_to(Host, :host_id)
61
+ assert_nothing_raised{ Host.host_id }
62
+ end
63
+
64
+ def test_host_id
65
+ type = @@windows ? String : Integer
66
+ assert_kind_of(type, Host.host_id)
67
+ end
68
+
69
+ def test_host_id_expected_errors
70
+ assert_raise(ArgumentError){ Host.host_id(true) }
71
+ end
72
+
73
+ def test_info_basic
74
+ omit_unless(@@info_supported, 'info test skipped on this platform')
75
+ assert_respond_to(Host, :info)
76
+ assert_nothing_raised{ Host.info }
77
+ end
78
+
79
+ def test_info
80
+ omit_unless(@@info_supported, 'info test skipped on this platform')
81
+ assert_kind_of(Array, Host.info)
82
+ assert_kind_of(Struct::HostInfo, Host.info.first)
83
+ assert_nil(Host.info{ })
84
+ end
85
+
86
+ def test_info_name_member
87
+ omit_unless(@@info_supported, 'info test skipped on this platform')
88
+ assert_true(Host.info.first.members.map{ |e| e.to_s }.include?('name'))
89
+ assert_kind_of(String, Host.info.first.name)
90
+ assert_true(Host.info.first.name.size > 0)
91
+ end
92
+
93
+ def test_info_addr_type_member
94
+ omit_unless(@@info_supported, 'info test skipped on this platform')
95
+ assert_true(Host.info.first.members.map{ |e| e.to_s }.include?('addr_type'))
96
+ assert_kind_of(Fixnum, Host.info.first.addr_type)
97
+ assert_true(Host.info.first.addr_type >= 0)
98
+ end
99
+
100
+ def test_info_aliases_member
101
+ omit_unless(@@info_supported, 'info test skipped on this platform')
102
+ assert_true(Host.info.first.members.map{ |e| e.to_s }.include?('aliases'))
103
+ assert_kind_of(Array, Host.info.first.aliases)
104
+ end
105
+
106
+ def test_info_length_member
107
+ omit_unless(@@info_supported, 'info test skipped on this platform')
108
+ assert_true(Host.info.first.members.map{ |e| e.to_s }.include?('length'))
109
+ assert_kind_of(Fixnum, Host.info.first.length)
110
+ assert_true(Host.info.first.length >= 4)
111
+ end
112
+
113
+ def test_info_addr_list_member
114
+ omit_unless(@@info_supported, 'info test skipped on this platform')
115
+ assert_true(Host.info.first.members.map{ |e| e.to_s }.include?('addr_list'))
116
+ assert_kind_of(Array, Host.info.first.addr_list)
117
+ assert_true(Host.info.first.addr_list.first.length > 0)
118
+ end
119
+
120
+ def test_info_high_iteration
121
+ omit_unless(@@info_supported, 'info test skipped on this platform')
122
+ assert_nothing_raised{ 100.times{ Host.info } }
123
+ end
124
+
125
+ def self.shutdown
126
+ @@info_supported = nil
127
+ @@windows = nil
128
+ end
95
129
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sys-host
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 6
8
+ - 2
9
+ version: 0.6.2
5
10
  platform: ruby
6
11
  authors:
7
12
  - Daniel J. Berger
@@ -9,47 +14,48 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2008-11-18 00:00:00 -07:00
17
+ date: 2010-03-20 00:00:00 -06:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: test-unit
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
23
- version: 2.0.0
24
- version:
25
- description: Provides hostname and ip address info for a given host
27
+ segments:
28
+ - 2
29
+ - 0
30
+ - 7
31
+ version: 2.0.7
32
+ type: :development
33
+ version_requirements: *id001
34
+ description: " The sys-host library provides information about the current machine that\n your program is running on. Specifically, it returns hostname, IP\n address information, aliases and so on.\n"
26
35
  email: djberg96@gmail.com
27
36
  executables: []
28
37
 
29
38
  extensions:
30
- - ext/extconf.rb
39
+ - ext/bsd/extconf.rb
31
40
  extra_rdoc_files:
32
41
  - CHANGES
33
42
  - README
34
43
  - MANIFEST
35
- - ext/bsd/bsd.c
36
- - ext/generic/generic.c
37
- - ext/linux/linux.c
38
- - ext/sunos/sunos.c
44
+ - ext/bsd/sys/host.c
39
45
  files:
40
- - doc/host.txt
41
- - test/test_sys_host.rb
42
46
  - CHANGES
43
47
  - MANIFEST
44
48
  - README
45
49
  - Rakefile
46
- - ext/bsd/bsd.c
47
- - ext/generic/generic.c
48
- - ext/linux/linux.c
49
- - ext/sunos/sunos.c
50
- - ext/constants.h
50
+ - sys-host.gemspec
51
+ - doc/host.txt
52
+ - examples/example_sys_host.rb
53
+ - test/test_sys_host.rb
54
+ - ext/bsd/sys/host.c
51
55
  has_rdoc: true
52
56
  homepage: http://www.rubyforge.org/projects/sysutils
57
+ licenses:
58
+ - Artistic 2.0
53
59
  post_install_message:
54
60
  rdoc_options: []
55
61
 
@@ -59,20 +65,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
59
65
  requirements:
60
66
  - - ">="
61
67
  - !ruby/object:Gem::Version
62
- version: 1.8.0
63
- version:
68
+ segments:
69
+ - 0
70
+ version: "0"
64
71
  required_rubygems_version: !ruby/object:Gem::Requirement
65
72
  requirements:
66
73
  - - ">="
67
74
  - !ruby/object:Gem::Version
75
+ segments:
76
+ - 0
68
77
  version: "0"
69
- version:
70
78
  requirements: []
71
79
 
72
80
  rubyforge_project: sysutils
73
- rubygems_version: 1.2.0
81
+ rubygems_version: 1.3.6
74
82
  signing_key:
75
- specification_version: 2
83
+ specification_version: 3
76
84
  summary: Provides hostname and ip address info for a given host
77
85
  test_files:
78
86
  - test/test_sys_host.rb
@@ -1,247 +0,0 @@
1
- /******************************************************************************
2
- * bsd.c (host.c) - Ruby extension for the sys-host package for BSD flavors,
3
- * including OS X.
4
- *
5
- * Author: Daniel Berger
6
- *****************************************************************************/
7
- #include <ruby.h>
8
- #include <constants.h>
9
- #include <unistd.h>
10
- #include <netdb.h>
11
- #include <arpa/inet.h>
12
- #include <sys/socket.h>
13
- #include <sys/types.h>
14
- #include <errno.h>
15
-
16
- #ifdef __cplusplus
17
- extern "C"
18
- {
19
- #endif
20
-
21
- VALUE cHostError, sHostInfo;
22
-
23
- /*
24
- * call-seq:
25
- * Host.hostname
26
- *
27
- * Returns the hostname of the current host. This may or not return the FQDN,
28
- * depending on your system.
29
- */
30
- static VALUE host_hostname(){
31
- char host_name[MAXHOSTNAMELEN];
32
- int rv;
33
- rv = gethostname(host_name, MAXHOSTNAMELEN);
34
-
35
- /* If you get this exception, you've got big problems */
36
- if(rv != 0)
37
- rb_raise(cHostError, "gethostname() call failed: %s", strerror(errno));
38
-
39
- return rb_str_new2(host_name);
40
- }
41
-
42
- /*
43
- * call-seq:
44
- * Host.ip_addr
45
- *
46
- * Returns a list of IP addresses for the current host (yes, it is possible
47
- * to have more than one).
48
- */
49
- static VALUE host_ip_addr(){
50
- char host_name[MAXHOSTNAMELEN];
51
- char str[INET_ADDRSTRLEN];
52
- char **pptr;
53
- struct hostent* hp;
54
- int err;
55
- VALUE v_results = rb_ary_new();
56
- #ifndef HAVE_INET_NTOP
57
- struct in_addr ipa;
58
- int n;
59
- #endif
60
-
61
- if(gethostname(host_name, MAXHOSTNAMELEN) != 0)
62
- rb_raise(cHostError, "gethostname() call failed");
63
-
64
- #ifdef HAVE_GETIPNODEBYNAME
65
- hp = getipnodebyname(host_name, AF_INET, AI_DEFAULT, &err);
66
- #else
67
- hp = gethostbyname(host_name);
68
- #endif
69
-
70
- if(hp == NULL)
71
- rb_raise(cHostError, "getipnodebyname() call failed");
72
-
73
- pptr = hp->h_addr_list;
74
-
75
- #ifdef HAVE_INET_NTOP
76
- for( ; *pptr != NULL; pptr++){
77
- rb_ary_push(v_results,
78
- rb_str_new2(inet_ntop(hp->h_addrtype, *pptr, str, INET_ADDRSTRLEN)));
79
- }
80
- #else
81
- for(n = 0; hp->h_addr_list[n] != NULL; n++){
82
- memcpy(&ipa.s_addr, hp->h_addr_list[n], hp->h_length);
83
- rb_ary_push(v_results, rb_str_new2(inet_ntoa(ipa)));
84
- }
85
- #endif
86
- return v_results;
87
- }
88
-
89
- /* :call-seq:
90
- * Sys::Host.info
91
- * Sys::Host.info{ |i| ... }
92
- *
93
- * Yields a HostInfo struct containing various bits of information about
94
- * the local machine for each entry in the hosts table. In non-block form,
95
- * returns an array of HostInfo structs.
96
- *
97
- * The Struct::HostInfo struct contains 5 fields:
98
- *
99
- * * name (String)
100
- * * aliases (Array)
101
- * * addr_type (Integer)
102
- * * length (Integer)
103
- * * addr_list (Array)
104
- */
105
- static VALUE host_info(VALUE klass){
106
- VALUE v_hostinfo = Qnil;
107
- VALUE v_addr = rb_ary_new();
108
- VALUE v_array = rb_ary_new();
109
- VALUE v_aliases = rb_ary_new();
110
-
111
- sethostent(0);
112
-
113
- #ifdef HAVE_GETHOSTENT_R
114
- struct hostent host;
115
- struct hostent* result;
116
- char buf[HOSTENT_BUF];
117
- int err;
118
-
119
- while(!gethostent_r(&host, buf, HOSTENT_BUF, &result, &err)){
120
- while(*result->h_aliases){
121
- rb_ary_push(v_aliases, rb_str_new2(*result->h_aliases));
122
- *result->h_aliases++;
123
- }
124
-
125
- #ifdef __MACH__ or #ifdef __APPLE__
126
- char **addrs = host->h_addr_list;
127
- while(*addrs){
128
- inet_ntop(result->h_addrtype, addrs, buf, HOSTENT_BUF);
129
- rb_ary_push(v_addr, rb_str_new2(buf));
130
- addrs++;
131
- }
132
- #else
133
- while(*result->h_addr_list){
134
- inet_ntop(result->h_addrtype, *result->h_addr_list, buf, HOSTENT_BUF);
135
- rb_ary_push(v_addr, rb_str_new2(buf));
136
- *result->h_addr_list++;
137
- }
138
- #endif
139
-
140
- /* We need to dup the arrays because Ruby is holding onto the same
141
- * reference.
142
- */
143
- v_hostinfo = rb_struct_new(sHostInfo,
144
- rb_str_new2(result->h_name),
145
- rb_ary_dup(v_aliases),
146
- INT2FIX(result->h_addrtype),
147
- INT2FIX(result->h_length),
148
- rb_ary_dup(v_addr)
149
- );
150
- #else
151
- struct hostent* host;
152
- char buf[INET_ADDRSTRLEN];
153
-
154
- while((host = gethostent())){
155
- while(*host->h_aliases){
156
- rb_ary_push(v_aliases, rb_str_new2(*host->h_aliases));
157
- *host->h_aliases++;
158
- }
159
-
160
- #ifdef __MACH__ or #ifdef __APPLE__
161
- char **addrs = host->h_addr_list;
162
- while(*addrs){
163
- inet_ntop(host->h_addrtype, addrs, buf, HOSTENT_BUF);
164
- rb_ary_push(v_addr, rb_str_new2(buf));
165
- addrs++;
166
- }
167
- #else
168
- while(*host->h_addr_list){
169
- inet_ntop(host->h_addrtype, *host->h_addr_list, buf, HOSTENT_BUF);
170
- rb_ary_push(v_addr, rb_str_new2(buf));
171
- *host->h_addr_list++;
172
- }
173
- #endif
174
-
175
- v_hostinfo = rb_struct_new(sHostInfo,
176
- rb_str_new2(host->h_name),
177
- rb_ary_dup(v_aliases),
178
- INT2FIX(host->h_addrtype),
179
- INT2FIX(host->h_length),
180
- rb_ary_dup(v_addr)
181
- );
182
- #endif
183
-
184
- if(rb_block_given_p())
185
- rb_yield(v_hostinfo);
186
- else
187
- rb_ary_push(v_array, v_hostinfo);
188
-
189
- rb_ary_clear(v_aliases);
190
- rb_ary_clear(v_addr);
191
- }
192
-
193
- endhostent();
194
-
195
- if(rb_block_given_p())
196
- return Qnil;
197
-
198
- return v_array;
199
- }
200
-
201
- #ifdef HAVE_GETHOSTID
202
- /*
203
- * Sys::Host.host_id
204
- *
205
- * Returns the host id of the current machine.
206
- */
207
- static VALUE host_host_id(){
208
- return ULL2NUM(gethostid());
209
- }
210
- #endif
211
-
212
- void Init_host()
213
- {
214
- VALUE sys_mSys, cHost;
215
-
216
- /* The Sys module serves as a toplevel namespace, nothing more. */
217
- sys_mSys = rb_define_module("Sys");
218
-
219
- /* The Host class encapsulates information about your machine, such as
220
- * the host name and IP address.
221
- */
222
- cHost = rb_define_class_under(sys_mSys, "Host", rb_cObject);
223
-
224
- /* This error is raised if any of the Host methods fail. */
225
- cHostError = rb_define_class_under(cHost, "Error", rb_eStandardError);
226
-
227
- /* 0.6.1: The version of this library. This is a string, not a number. */
228
- rb_define_const(cHost, "VERSION", rb_str_new2(SYS_HOST_VERSION));
229
-
230
- /* Structs */
231
- sHostInfo = rb_struct_define("HostInfo", "name", "aliases", "addr_type",
232
- "length", "addr_list", NULL
233
- );
234
-
235
- /* Class Methods */
236
- rb_define_singleton_method(cHost, "hostname", host_hostname, 0);
237
- rb_define_singleton_method(cHost, "ip_addr", host_ip_addr, 0);
238
- rb_define_singleton_method(cHost, "info", host_info, 0);
239
-
240
- #ifdef HAVE_GETHOSTID
241
- rb_define_singleton_method(cHost, "host_id", host_host_id, 0);
242
- #endif
243
- }
244
-
245
- #ifdef __cplusplus
246
- }
247
- #endif