The Inline module is the top-level module used. It is responsible for instantiating the builder for the right language used, compilation/linking when needed, and loading the inlined code into the current namespace.
# File lib/inline.rb, line 136 def self.directory unless defined? @@directory then version = "#{Gem.ruby_engine}-#{RbConfig::CONFIG['ruby_version']}" @@directory = File.join(self.rootdir, ".ruby_inline", version) end Dir.assert_secure @@directory @@directory end
# File lib/inline.rb, line 84 def self.register cls registered_inline_classes << cls registered_inline_classes.uniq! end
# File lib/inline.rb, line 89 def self.registered_inline_classes @@registered_inline_classes ||= [] end
rootdir can be forced using INLINEDIR variable if not defined, it should store in user HOME folder
Under Windows user data can be stored in several locations:
HOME HOMEDRIVE + HOMEPATH APPDATA USERPROFILE
Perform a check in that other to see if the environment is defined and if so, use it. only try this on Windows.
# File lib/inline.rb, line 106 def self.rootdir env = ENV['INLINEDIR'] || ENV['HOME'] if env.nil? and WINDOZE then # try HOMEDRIVE + HOMEPATH combination if ENV['HOMEDRIVE'] && ENV['HOMEPATH'] then env = ENV['HOMEDRIVE'] + ENV['HOMEPATH'] end # no HOMEDRIVE? use APPDATA env = ENV['APPDATA'] if env.nil? and ENV['APPDATA'] # bummer, still no env? then fall to USERPROFILE env = ENV['USERPROFILE'] if env.nil? and ENV['USERPROFILE'] end if env.nil? then abort "Define INLINEDIR or HOME in your environment and try again" end unless defined? @@rootdir and env == @@rootdir and test dd, @@rootdir then rootdir = env Dir.mkdir rootdir, 0700 unless test dd, rootdir Dir.assert_secure rootdir @@rootdir = rootdir end @@rootdir end