os 0.6.3 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/README.rdoc +4 -2
  2. data/Rakefile +1 -0
  3. data/VERSION +1 -1
  4. data/lib/os.rb +75 -8
  5. data/spec/spec.os.rb +65 -20
  6. metadata +35 -13
@@ -29,8 +29,10 @@ rubygems:
29
29
  Gem::Platform.local
30
30
  Gem.ruby
31
31
 
32
- facets gem (similar)
32
+ facets gem (similar to rubygems, above)
33
33
  require 'facets/platform'
34
34
  Platform.local
35
35
 
36
- the Platform gem
36
+ the "platform" gem, itself (different gem)
37
+
38
+ The reason Gem::Platform.local felt wrong to me is that it treated cygwin as windows--which for most build environments, is wrong.
data/Rakefile CHANGED
@@ -13,6 +13,7 @@ begin
13
13
  gem.add_development_dependency "rspec", ">= 1.2.9"
14
14
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
15
  gem.add_development_dependency "sane"
16
+ # gem.add_development_dependency "fast_require"
16
17
  end
17
18
  Jeweler::GemcutterTasks.new
18
19
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.3
1
+ 0.7.2
data/lib/os.rb CHANGED
@@ -1,4 +1,4 @@
1
- # a set of friendly files for determining your Ruby runtime
1
+ # a set of friendly files for determining your Ruby runtime
2
2
  # treats cygwin as linux
3
3
  # also treats IronRuby on mono as...linux
4
4
  class OS
@@ -29,7 +29,7 @@ class OS
29
29
  # untested, of course
30
30
  Process.wait fork{}
31
31
  true
32
- rescue NotImplementedError
32
+ rescue NotImplementedError, NoMethodError
33
33
  false
34
34
  end
35
35
  end
@@ -44,17 +44,27 @@ class OS
44
44
  class << self
45
45
  alias :doze? :windows? # a joke but I use it
46
46
  end
47
+
48
+ def self.iron_ruby?
49
+ @iron_ruby ||= begin
50
+ if defined?(RUBY_ENGINE) && (RUBY_ENGINE == 'ironruby')
51
+ true
52
+ else
53
+ false
54
+ end
55
+ end
56
+ end
47
57
 
48
58
  def self.bits
49
59
  @bits ||= begin
50
60
  require 'rbconfig'
51
- host_cpu = RbConfig::CONFIG['host_cpu']
61
+ host_cpu = RbConfig::CONFIG['host_cpu']
52
62
  if host_cpu =~ /_64$/ # x86_64
53
63
  64
54
64
  elsif RUBY_PLATFORM == 'java' && ENV_JAVA['sun.arch.data.model'] # "32" or "64" http://www.ruby-forum.com/topic/202173#880613
55
- ENV_JAVA['sun.arch.data.model'].to_i
56
- elsif host_cpu == 'i386'
57
- 32
65
+ ENV_JAVA['sun.arch.data.model'].to_i
66
+ elsif host_cpu == 'i386'
67
+ 32
58
68
  elsif RbConfig::CONFIG['host_os'] =~ /32$/ # mingw32, mswin32
59
69
  32
60
70
  else # cygwin only...I think
@@ -85,9 +95,66 @@ class OS
85
95
  File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
86
96
  end
87
97
  end
88
-
98
+
89
99
  def self.mac?
90
- RUBY_PLATFORM =~ /darwin/
100
+ @mac = begin
101
+ if RUBY_PLATFORM =~ /darwin/
102
+ true
103
+ else
104
+ false
105
+ end
106
+ end
107
+ end
108
+
109
+ # amount of memory the current process "is using", in RAM
110
+ # (doesn't include any swap memory that it may be using, just that in actual RAM)
111
+ # raises 'unknown' on jruby currently
112
+ def self.rss_bytes
113
+ # attempt to do this in a jruby friendly way
114
+ if OS::Underlying.windows?
115
+ # MRI, Java, IronRuby, Cygwin
116
+ if OS.java?
117
+ # no win32ole yet available...
118
+ require 'java'
119
+ mem_bean = java.lang.management.ManagementFactory.memory_mxbean
120
+ mem_bean.heap_memory_usage.used + mem_bean.non_heap_memory_usage.used
121
+ else
122
+ wmi = nil
123
+ begin
124
+ require 'win32ole'
125
+ wmi = WIN32OLE.connect("winmgmts://")
126
+ rescue LoadError, NoMethodError # NoMethod for IronRuby currently [sigh]
127
+ raise 'rss unknown for this platform'
128
+ end
129
+ processes = wmi.ExecQuery("select * from win32_process where ProcessId = #{Process.pid}")
130
+ memory_used = nil
131
+ # only allow for one...
132
+ for process in processes; raise if memory_used; memory_used = process.WorkingSetSize.to_i; end
133
+ memory_used
134
+ end
135
+ elsif OS.posix? # assume linux I guess...
136
+ kb = `ps -o rss= -p #{Process.pid}`.to_i # in kilobytes
137
+ else
138
+ raise 'unknown rss for this platform'
139
+ end
140
+ end
141
+
142
+ class Underlying
143
+
144
+ def self.windows?
145
+ ENV['OS'] == 'Windows_NT'
146
+ end
147
+
91
148
  end
92
149
 
150
+ def self.cygwin?
151
+ @cygwin = begin
152
+ if RUBY_PLATFORM =~ /-cygwin/
153
+ true
154
+ else
155
+ false
156
+ end
157
+ end
158
+ end
159
+
93
160
  end
@@ -1,65 +1,110 @@
1
1
  require 'rubygems' if RUBY_VERSION < '1.9'
2
+ #require 'fast_require'
2
3
  require File.dirname(__FILE__) + '/../lib/os.rb' # load before sane
3
4
  require 'sane'
4
5
  load File.dirname(__FILE__) + '/../lib/os.rb'
5
6
  require 'spec/autorun'
7
+ require 'rbconfig'
6
8
 
7
9
  describe "OS" do
8
10
 
9
11
  it "has a windows? method" do
10
- if RUBY_PLATFORM =~ /mingw|mswin/
11
- assert OS.windows? == true
12
- assert OS.doze? == true
13
- assert OS.posix? == false
14
- else # ltodo jruby
15
- if RUBY_PLATFORM =~ /linux/
12
+ if ENV['OS'] == 'Windows_NT'
13
+ unless RUBY_PLATFORM =~ /cygwin/
14
+ assert OS.windows? == true
15
+ assert OS.doze? == true
16
+ assert OS.posix? == false
17
+ else
18
+ assert OS::Underlying.windows?
16
19
  assert OS.windows? == false
17
20
  assert OS.posix? == true
18
21
  end
22
+ assert OS::Underlying.windows?
23
+ elsif (RbConfig::CONFIG["host_os"] == 'linux') || RUBY_PLATFORM =~ /linux/
24
+ assert OS.windows? == false
25
+ assert OS.posix? == true
26
+ assert !OS::Underlying.windows?
27
+ else
28
+ pending "create test"
19
29
  end
20
30
  end
21
31
 
22
32
  it "has a bits method" do
23
33
  if RUBY_PLATFORM =~ /mingw32/
24
- assert OS.bits == 32
34
+ assert OS.bits == 32
25
35
  elsif RUBY_PLATFORM =~ /64/ # linux...
26
- assert OS.bits == 64
36
+ assert OS.bits == 64
27
37
  elsif RUBY_PLATFORM =~ /i686/
28
- assert OS.bits == 32
38
+ assert OS.bits == 32
29
39
  elsif RUBY_PLATFORM =~ /java/ && RbConfig::CONFIG['host_os'] =~ /32$/
30
- assert OS.bits == 32
40
+ assert OS.bits == 32
31
41
  elsif RUBY_PLATFORM =~ /java/ && RbConfig::CONFIG['host_cpu'] =~ /i386/
32
- assert OS.bits == 32
42
+ assert OS.bits == 32
33
43
  elsif RUBY_PLATFORM =~ /i386/
34
44
  assert OS.bits == 32
35
- else
36
- pending "os bits not tested!" + RUBY_PLATFORM + ' ' + RbConfig::CONFIG['host_os']
45
+ else
46
+ pending "os bits not tested!" + RUBY_PLATFORM + ' ' + RbConfig::CONFIG['host_os']
37
47
  end
38
48
 
39
49
  end
50
+
51
+ it "should have an iron_ruby method" do
52
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ironruby'
53
+ assert OS.iron_ruby? == true
54
+ else
55
+ assert OS.iron_ruby? == false
56
+ end
57
+ end
40
58
 
41
59
  it "should know if you're on java" do
42
60
  if RUBY_PLATFORM == 'java'
43
- assert OS.java? == true # I want just this value...
61
+ assert OS.java? == true # must be [true | false]
44
62
  else
45
63
  assert OS.java? == false
46
64
  end
47
65
  end
48
-
49
- it "should have a ruby.exe method" do
66
+
67
+ it "should have a ruby_bin method" do
50
68
  if OS.windows?
51
- assert OS.ruby_bin.include?('ruby.exe')
69
+ assert OS.ruby_bin.include?('.exe')
70
+ if OS.iron_ruby?
71
+ assert OS.ruby_bin.include?('ir.exe')
72
+ else
73
+ assert OS.ruby_bin.include?('ruby.exe')
74
+ end
52
75
  else
53
76
  assert OS.ruby_bin.include?('ruby') && OS.ruby_bin.include?('/')
54
77
  end
78
+
79
+ if OS.java?
80
+ assert OS.ruby_bin.include?('jruby') # I think
81
+ end
82
+
55
83
  end
56
84
 
85
+ it "should have a cygwin? method" do
86
+ if RUBY_PLATFORM =~ /cygwin/
87
+ assert OS.cygwin? == true
88
+ else
89
+ assert OS.cygwin? == false
90
+ end
91
+ end
92
+
57
93
  it "should have a mac? method" do
58
94
  if RUBY_PLATFORM =~ /darwin/
59
- assert OS.mac?
95
+ assert OS.mac? == true
60
96
  else
61
- assert !OS.mac?
97
+ assert OS.mac? == false
62
98
  end
63
99
  end
64
-
100
+
101
+ it "should have a way to get rss_bytes on each platform" do
102
+ if !OS.iron_ruby?
103
+ bytes = OS.rss_bytes
104
+ assert bytes > 0 # should always be true
105
+ assert bytes.is_a?(Numeric) # don't want strings from any platform...
106
+ end
107
+ end
108
+
109
+
65
110
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: os
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ hash: 7
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 7
9
+ - 2
10
+ version: 0.7.2
5
11
  platform: ruby
6
12
  authors:
7
13
  - rdp
@@ -9,29 +15,39 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-01-15 00:00:00 -07:00
18
+ date: 2010-05-18 00:00:00 -06:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 13
30
+ segments:
31
+ - 1
32
+ - 2
33
+ - 9
23
34
  version: 1.2.9
24
- version:
35
+ type: :development
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: sane
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
30
42
  requirements:
31
43
  - - ">="
32
44
  - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
33
48
  version: "0"
34
- version:
49
+ type: :development
50
+ version_requirements: *id002
35
51
  description: The OS gem allows for some useful and easy functions, like OS.windows? (=> true or false) OS.bits ( => 32 or 64) etc"
36
52
  email: rogerpack2005@gmail.com
37
53
  executables: []
@@ -58,21 +74,27 @@ rdoc_options:
58
74
  require_paths:
59
75
  - lib
60
76
  required_ruby_version: !ruby/object:Gem::Requirement
77
+ none: false
61
78
  requirements:
62
79
  - - ">="
63
80
  - !ruby/object:Gem::Version
81
+ hash: 3
82
+ segments:
83
+ - 0
64
84
  version: "0"
65
- version:
66
85
  required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
67
87
  requirements:
68
88
  - - ">="
69
89
  - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
70
93
  version: "0"
71
- version:
72
94
  requirements: []
73
95
 
74
96
  rubyforge_project:
75
- rubygems_version: 1.3.5
97
+ rubygems_version: 1.3.7
76
98
  signing_key:
77
99
  specification_version: 3
78
100
  summary: Simple and easy way to know if you're on windows or not (reliably), as well as how many bits the OS is, etc.