Class: OS

Inherits:
Object
  • Object
show all
Defined in:
lib/os.rb

Overview

a set of friendly files for determining your Ruby runtime treats cygwin as linux also treats IronRuby on mono as…linux

Defined Under Namespace

Classes: Underlying

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



8
9
10
# File 'lib/os.rb', line 8

def config
  @config
end

Class Method Details

.bitsObject



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/os.rb', line 72

def self.bits
  @bits ||= begin
    if host_cpu =~ /_64$/ || RUBY_PLATFORM =~ /x86_64/
      64
    elsif RUBY_PLATFORM == 'java' && ENV_JAVA['sun.arch.data.model'] # "32" or "64":http://www.ruby-forum.com/topic/202173#880613
      ENV_JAVA['sun.arch.data.model'].to_i
    elsif host_cpu == 'i386'
      32
    elsif host_os =~ /32$/ # mingw32, mswin32
      32
    else # cygwin only...I think
      if 1.size == 8
        64
      else
        32
      end
    end
  end
end

.configObject



10
11
12
# File 'lib/os.rb', line 10

def self.config
  @config ||= RbConfig::CONFIG
end

.cygwin?Boolean

Returns:

  • (Boolean)


172
173
174
175
176
177
178
179
180
# File 'lib/os.rb', line 172

def self.cygwin?
  @cygwin = begin
    if RUBY_PLATFORM =~ /-cygwin/
      true
    else
      false
    end
  end
end

.dev_nullObject



182
183
184
185
186
187
188
189
190
# File 'lib/os.rb', line 182

def self.dev_null
  @dev_null ||= begin
    if OS.windows?
      "NUL"
    else
      "/dev/null"
    end
  end
end

.iron_ruby?Boolean

Returns:

  • (Boolean)


62
63
64
65
66
67
68
69
70
# File 'lib/os.rb', line 62

def self.iron_ruby?
 @iron_ruby ||= begin
   if defined?(RUBY_ENGINE) && (RUBY_ENGINE == 'ironruby')
     true
   else
     false
   end
 end
end

.java?Boolean Also known as: jruby?

Returns:

  • (Boolean)


93
94
95
96
97
98
99
100
101
# File 'lib/os.rb', line 93

def self.java?
  @java ||= begin
    if RUBY_PLATFORM =~ /java/
      true
    else
      false
    end
  end
end

.linux?Boolean

true for linux, false for windows, os x, cygwin

Returns:

  • (Boolean)


54
55
56
57
58
59
60
# File 'lib/os.rb', line 54

def self.linux?
  if (host_os =~ /linux/)
    true
  else
    false
  end
end

.mac?Boolean

Returns:

  • (Boolean)


109
110
111
112
113
114
115
116
117
# File 'lib/os.rb', line 109

def self.mac?
  @mac = begin
    if host_os =~ /darwin/
      true
    else
      false
    end
  end      
end

.osx?Boolean

Returns:

  • (Boolean)


119
120
121
# File 'lib/os.rb', line 119

def self.osx?
  mac?
end

.posix?Boolean

true for linux, os x, cygwin

Returns:

  • (Boolean)


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/os.rb', line 31

def self.posix?
  @posix ||=
  begin
    if OS.windows?
      begin
        begin
          # what if we're on interix...
          # untested, of course
          Process.wait fork{}
          true
        rescue NotImplementedError, NoMethodError
          false
        end
      end
    else
      # assume non windows is posix
      true
    end
  end

end

.reportObject

provides easy way to see the relevant config entries



193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/os.rb', line 193

def self.report
  relevant_keys = [
    'arch',
    'host',
    'host_cpu',
    'host_os',
    'host_vendor',
    'target',
    'target_cpu',
    'target_os',
    'target_vendor',
  ]
  RbConfig::CONFIG.reject {|key, val| !relevant_keys.include? key }.merge({'RUBY_PLATFORM' => RUBY_PLATFORM}).to_yaml
end

.rss_bytesObject

amount of memory the current process “is using”, in RAM (doesn’t include any swap memory that it may be using, just that in actual RAM) raises ‘unknown’ on jruby currently



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/os.rb', line 126

def self.rss_bytes
  # attempt to do this in a jruby friendly way
  if OS::Underlying.windows?
    # MRI, Java, IronRuby, Cygwin
    if OS.java?
      # no win32ole on 1.5.x, so leave here for compatibility...maybe for awhile :P
      require 'java'
      mem_bean = java.lang.management.ManagementFactory.getMemoryMXBean
      mem_bean.heap_memory_usage.used + mem_bean.non_heap_memory_usage.used
    else
      wmi = nil
      begin
        require 'win32ole'
        wmi = WIN32OLE.connect("winmgmts://")
      rescue LoadError, NoMethodError => e # NoMethod for IronRuby currently [sigh]
        raise 'rss unknown for this platform ' + e.to_s
      end        
      processes = wmi.ExecQuery("select * from win32_process where ProcessId = #{Process.pid}")
      memory_used = nil
      # only allow for one...
      for process in processes; raise if memory_used; memory_used = process.WorkingSetSize.to_i; end
      memory_used
    end
  elsif OS.posix? # linux [though I've heard it works in OS X]
    kb = `ps -o rss= -p #{Process.pid}`.to_i # in kilobytes
  else
    raise 'unknown rss for this platform'
  end
end

.ruby_binObject



103
104
105
106
107
# File 'lib/os.rb', line 103

def self.ruby_bin
  @ruby_exe ||= begin
    File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
  end
end

.windows?Boolean Also known as: doze?

true if on windows [and/or jruby] false if on linux or cygwin on windows

Returns:

  • (Boolean)


17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/os.rb', line 17

def self.windows?
  @windows ||= begin
    if RUBY_PLATFORM =~ /cygwin/ # i386-cygwin
      false
    elsif ENV['OS'] == 'Windows_NT'
      true
    else
      false
    end
  end

end