os 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -24,6 +24,7 @@ GEM
24
24
 
25
25
  PLATFORMS
26
26
  ruby
27
+ x86-mingw32
27
28
 
28
29
  DEPENDENCIES
29
30
  jeweler
@@ -3,13 +3,13 @@ The OS gem allows for some easy telling if you're on windows or not.
3
3
  require 'os'
4
4
 
5
5
  >> OS.windows?
6
- => true # also OS.doze?
6
+ => true # or OS.doze?
7
7
 
8
8
  >> OS.bits
9
9
  => 32
10
10
 
11
11
  >> OS.java?
12
- => true # if you're running in jruby also OS.jruby?
12
+ => true # if you're running in jruby. Also OS.jruby?
13
13
 
14
14
  >> OS.ruby_bin
15
15
  => "c:\ruby18\bin\ruby.exe" # or "/usr/local/bin/ruby" or what not
@@ -20,14 +20,11 @@ The OS gem allows for some easy telling if you're on windows or not.
20
20
  >> OS.mac?
21
21
  => false
22
22
 
23
- >> OS.java? # same as OS.jruby?
24
- => true
25
-
26
23
  >> OS.dev_null
27
24
  => "NUL" # or "/dev/null" depending on which platform
28
25
 
29
26
  >> OS.rss_bytes
30
- => 12300033 # rss bytes this process is using currently, works in Linux/windows
27
+ => 12300033 # number of rss bytes this process is using currently. Basically "total in memory footprint" (doesn't include RAM used by the process that's in swap/page file)
31
28
 
32
29
  >> puts OS.report
33
30
  ==> # a yaml report of helpful values
@@ -43,20 +40,23 @@ The OS gem allows for some easy telling if you're on windows or not.
43
40
  host: i386-apple-darwin10.6.0
44
41
  RUBY_PLATFORM: x86_64-darwin10.6.0
45
42
 
46
- If there are any other features you'd like, let me know.
43
+ >> OS.cpu_count
44
+ => 2 # number of cores
45
+
46
+ If there are any other features you'd like, let me know, I'll do what I can to add them :)
47
47
 
48
- github.com/rdp/os for feedback et al
48
+ http://github.com/rdp/os for feedback et al
49
49
 
50
50
  Related projects:
51
51
 
52
52
  rubygems:
53
- Gem::Platform.local
54
- Gem.ruby
53
+ Gem::Platform.local
54
+ Gem.ruby
55
55
 
56
- facets gem (similar to rubygems, above)
57
- require 'facets/platform'
58
- Platform.local
56
+ the facets gem (has a class similar to rubygems, above)
57
+ require 'facets/platform'
58
+ Platform.local
59
59
 
60
- the "platform" gem, itself (different gem)
60
+ the "platform" gem, itself (a different gem)
61
61
 
62
- The reason Gem::Platform.local felt wrong to me is that it treated cygwin as windows--which for most build environments, is wrong.
62
+ The reason Gem::Platform.local felt wrong to me is that it treated cygwin as windows--which for most build environments, is wrong. Hence the creation of this.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.0
1
+ 0.9.0
data/lib/os.rb CHANGED
@@ -143,7 +143,10 @@ class OS
143
143
  processes = wmi.ExecQuery("select * from win32_process where ProcessId = #{Process.pid}")
144
144
  memory_used = nil
145
145
  # only allow for one...
146
- for process in processes; raise if memory_used; memory_used = process.WorkingSetSize.to_i; end
146
+ for process in processes
147
+ raise if memory_used
148
+ memory_used = process.WorkingSetSize.to_i
149
+ end
147
150
  memory_used
148
151
  end
149
152
  elsif OS.posix? # linux [though I've heard it works in OS X]
@@ -205,6 +208,36 @@ class OS
205
208
  RbConfig::CONFIG.reject {|key, val| !relevant_keys.include? key }.merge({'RUBY_PLATFORM' => RUBY_PLATFORM}).to_yaml
206
209
  end
207
210
 
211
+ def self.cpu_count
212
+ @cpu_count ||=
213
+ case RUBY_PLATFORM
214
+ when /darwin9/
215
+ `hwprefs cpu_count`.to_i
216
+ when /darwin10/
217
+ (hwprefs_available? ? `hwprefs thread_count` : `sysctl -n hw.ncpu`).to_i
218
+ when /linux/
219
+ `cat /proc/cpuinfo | grep processor | wc -l`.to_i
220
+ when /freebsd/
221
+ `sysctl -n hw.ncpu`.to_i
222
+ else
223
+ if RbConfig::CONFIG['host_os'] =~ /darwin/
224
+ (hwprefs_available? ? `hwprefs thread_count` : `sysctl -n hw.ncpu`).to_i
225
+ elsif self.windows?
226
+ out = ENV['NUMBER_OF_PROCESSORS'].to_i
227
+ if out == 0
228
+ # in case env. variable not set
229
+ require 'win32ole'
230
+ wmi = WIN32OLE.connect("winmgmts://")
231
+ cpu = wmi.ExecQuery("select NumberOfCores from Win32_Processor") # don't count hyper-threaded in this
232
+ out = cpu.to_enum.first.NumberOfCores
233
+ end
234
+ out
235
+ else
236
+ raise 'unknown platform processor_count'
237
+ end
238
+ end
239
+ end
240
+
208
241
  class << self
209
242
  alias :doze? :windows? # a joke name but I use it and like it :P
210
243
  alias :jruby? :java?
@@ -213,6 +246,13 @@ class OS
213
246
  %w(host host_cpu host_os).each do |method_name|
214
247
  define_method(method_name) { config[method_name] }
215
248
  end
249
+
250
+ end
251
+
252
+ private
253
+
254
+ def self.hwprefs_available?
255
+ `which hwprefs` != ''
216
256
  end
217
257
 
218
258
  end
data/os.gemspec CHANGED
@@ -1,60 +1,48 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{os}
8
- s.version = "0.8.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["rdp", "David McCullars"]
12
- s.date = %q{2011-05-19}
13
- s.description = %q{The OS gem allows for some useful and easy functions, like OS.windows? (=> true or false) OS.bits ( => 32 or 64) etc"}
14
- s.email = %q{rogerpack2005@gmail.com}
15
- s.extra_rdoc_files = [
16
- "README.rdoc"
17
- ]
18
- s.files = [
19
- ".autotest",
20
- ".document",
21
- ".gitignore",
22
- "Gemfile",
23
- "Gemfile.lock",
24
- "README.rdoc",
25
- "Rakefile",
26
- "VERSION",
27
- "autotest/discover.rb",
28
- "lib/os.rb",
29
- "os.gemspec",
30
- "spec/linux_spec.rb",
31
- "spec/os_spec.rb",
32
- "spec/osx_spec.rb",
33
- "spec/spec_helper.rb"
34
- ]
35
- s.homepage = %q{http://github.com/rdp/os}
36
- s.rdoc_options = ["--charset=UTF-8"]
37
- s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.3.7}
39
- s.summary = %q{Simple and easy way to know if you're on windows or not (reliably), as well as how many bits the OS is, etc.}
40
- s.test_files = [
41
- "spec/linux_spec.rb",
42
- "spec/osx_spec.rb",
43
- "spec/os_spec.rb",
44
- "spec/spec_helper.rb"
45
- ]
46
-
47
- if s.respond_to? :specification_version then
48
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
49
- s.specification_version = 3
50
-
51
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
- s.add_development_dependency(%q<rspec>, [">= 2.0"])
53
- else
54
- s.add_dependency(%q<rspec>, [">= 2.0"])
55
- end
56
- else
57
- s.add_dependency(%q<rspec>, [">= 2.0"])
58
- end
59
- end
60
-
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{os}
8
+ s.version = "0.7.4"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["rdp", "David McCullars"]
12
+ s.date = %q{2011-05-03}
13
+ s.description = %q{The OS gem allows for some useful and easy functions, like OS.windows? (=> true or false) OS.bits ( => 32 or 64) etc"}
14
+ s.email = %q{rogerpack2005@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ ".document",
20
+ "README.rdoc",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "lib/os.rb",
24
+ ]
25
+ s.homepage = %q{http://github.com/rdp/os}
26
+ s.require_paths = ["lib"]
27
+ s.rubygems_version = %q{1.7.2}
28
+ s.summary = %q{Simple and easy way to know if you're on windows or not (reliably), as well as how many bits the OS is, etc.}
29
+ s.test_files = [
30
+ "spec/spec.os.rb"
31
+ ]
32
+
33
+ if s.respond_to? :specification_version then
34
+ s.specification_version = 3
35
+
36
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
37
+ s.add_development_dependency(%q<jeweler>)
38
+ s.add_development_dependency(%q<rspec>, [">= 2.0"])
39
+ else
40
+ s.add_dependency(%q<jeweler>)
41
+ s.add_dependency(%q<rspec>, [">= 2.0"])
42
+ end
43
+ else
44
+ s.add_dependency(%q<jeweler>)
45
+ s.add_dependency(%q<rspec>, [">= 2.0"])
46
+ end
47
+ end
48
+
@@ -7,7 +7,7 @@ describe "OS" do
7
7
  unless RUBY_PLATFORM =~ /cygwin/
8
8
  assert OS.windows? == true
9
9
  assert OS.doze? == true
10
- assert OS.posix? == false
10
+ assert OS.posix? == false # can fail in error at times...I guess because some other spec has reset ENV on us...
11
11
  else
12
12
  assert OS::Underlying.windows?
13
13
  assert OS.windows? == false
@@ -88,7 +88,11 @@ describe "OS" do
88
88
  if RUBY_PLATFORM =~ /darwin/
89
89
  assert OS.mac? == true
90
90
  else
91
- assert OS.mac? == false
91
+ if OS.host_os == 'darwin'
92
+ assert OS.mac? == true
93
+ else
94
+ assert OS.mac? == false
95
+ end
92
96
  end
93
97
  end
94
98
 
@@ -114,6 +118,21 @@ describe "OS" do
114
118
  end
115
119
  end
116
120
 
121
+ it "has working cpu count method" do
122
+ assert OS.cpu_count >= 1
123
+ if OS.mac?
124
+ assert OS.cpu_count == 2 # my own developer box :P
125
+ end
126
+ end
127
+
128
+ it "has working cpu count method with no env. variable" do
129
+ OS.instance_variable_set(:@cpu_count, nil) # reset it
130
+ if OS.windows?
131
+ ENV.delete('NUMBER_OF_PROCESSORS')
132
+ assert OS.cpu_count >= 1
133
+ end
134
+ end
135
+
117
136
  end
118
137
 
119
138
  describe OS, "provides access to to underlying config values" do
@@ -2,6 +2,7 @@ require 'rubygems' if RUBY_VERSION < '1.9.0'
2
2
  require File.expand_path('../lib/os.rb', File.dirname(__FILE__))
3
3
 
4
4
  require 'rspec' # rspec2
5
+ require 'rspec/autorun'
5
6
 
6
7
  RSpec.configure do |config|
7
8
  config.expect_with :rspec, :stdlib # enable `should` OR `assert`
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: os
3
3
  version: !ruby/object:Gem::Version
4
- hash: 63
5
- prerelease: false
4
+ hash: 59
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 8
8
+ - 9
9
9
  - 0
10
- version: 0.8.0
10
+ version: 0.9.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - rdp
@@ -16,13 +16,38 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-05-19 00:00:00 -06:00
20
- default_executable:
19
+ date: 2011-06-01 00:00:00 Z
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
23
- name: rspec
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
24
32
  prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
33
+ name: os
34
+ requirement: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :development
46
+ prerelease: false
47
+ name: jeweler
48
+ requirement: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ version_requirements: &id003 !ruby/object:Gem::Requirement
26
51
  none: false
27
52
  requirements:
28
53
  - - ">="
@@ -33,7 +58,24 @@ dependencies:
33
58
  - 0
34
59
  version: "2.0"
35
60
  type: :development
36
- version_requirements: *id001
61
+ prerelease: false
62
+ name: rspec
63
+ requirement: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ version_requirements: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 2
73
+ - 0
74
+ version: "2.0"
75
+ type: :development
76
+ prerelease: false
77
+ name: rspec
78
+ requirement: *id004
37
79
  description: The OS gem allows for some useful and easy functions, like OS.windows? (=> true or false) OS.bits ( => 32 or 64) etc"
38
80
  email: rogerpack2005@gmail.com
39
81
  executables: []
@@ -45,7 +87,6 @@ extra_rdoc_files:
45
87
  files:
46
88
  - .autotest
47
89
  - .document
48
- - .gitignore
49
90
  - Gemfile
50
91
  - Gemfile.lock
51
92
  - README.rdoc
@@ -58,13 +99,12 @@ files:
58
99
  - spec/os_spec.rb
59
100
  - spec/osx_spec.rb
60
101
  - spec/spec_helper.rb
61
- has_rdoc: true
62
102
  homepage: http://github.com/rdp/os
63
103
  licenses: []
64
104
 
65
105
  post_install_message:
66
- rdoc_options:
67
- - --charset=UTF-8
106
+ rdoc_options: []
107
+
68
108
  require_paths:
69
109
  - lib
70
110
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -88,12 +128,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
128
  requirements: []
89
129
 
90
130
  rubyforge_project:
91
- rubygems_version: 1.3.7
131
+ rubygems_version: 1.8.2
92
132
  signing_key:
93
133
  specification_version: 3
94
134
  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.
95
- test_files:
96
- - spec/linux_spec.rb
97
- - spec/osx_spec.rb
98
- - spec/os_spec.rb
99
- - spec/spec_helper.rb
135
+ test_files: []
136
+
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC