sys-host 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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