Class: USER_SPACE::UserSpace
- Inherits:
-
Object
- Object
- USER_SPACE::UserSpace
- Defined in:
- lib/user_space/user_space.rb
Constant Summary collapse
- OPTIONS =
{:config => 'config', :parser => JSON, :ext => nil, :version => 'VERSION'}
- PARAMETERS =
{:appname => File.basename($PROGRAM_NAME), :appdir => nil, # Can't guess at this point yet? :xdgbases => ['CACHE', 'CONFIG', 'DATA']}
Instance Attribute Summary collapse
-
#appdir ⇒ Object
readonly
Returns the value of attribute appdir.
-
#appname ⇒ Object
readonly
Returns the value of attribute appname.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#trace ⇒ Object
Returns the value of attribute trace.
-
#verbose ⇒ Object
Returns the value of attribute verbose.
-
#xdgbases ⇒ Object
readonly
Returns the value of attribute xdgbases.
Instance Method Summary collapse
- #cachedir ⇒ Object
-
#config(options = @options) ⇒ Object
Reads config.
-
#config=(obj, options = @options) ⇒ Object
Saves config.
- #config?(options = @options) ⇒ Boolean
-
#config_file_name(options = @options) ⇒ Object
Not really for public use.
- #configdir ⇒ Object
- #configures(hash) ⇒ Object
- #datadir ⇒ Object
-
#initialize(parameters = PARAMETERS) ⇒ UserSpace
constructor
A new instance of UserSpace.
-
#install(overwrite = true) ⇒ Object
Note that initialize will not overwrite anything.
-
#version ⇒ Object
This reads the data directory’s version file.
- #version=(v) ⇒ Object
- #version? ⇒ Boolean
-
#version_file_name ⇒ Object
Not really for public use.
- #xdg_pairs ⇒ Object
Constructor Details
#initialize(parameters = PARAMETERS) ⇒ UserSpace
Returns a new instance of UserSpace.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/user_space/user_space.rb', line 15 def initialize(parameters=PARAMETERS) @appname = parameters[:appname] || PARAMETERS[:appname] @appdir = parameters[:appdir] || PARAMETERS[:appdir] @xdgbases = parameters[:xdgbases] || PARAMETERS[:xdgbases] @options = OPTIONS unless @appdir appdir = File.dirname File.dirname caller_locations(1,1)[0].path appdir = File.dirname appdir if File.basename(appdir)=='lib' @appdir = File. appdir verbose.puts "Warning: UserSpace#appdir heuristics used" if verbose end # install with no overwrite install(false) end |
Instance Attribute Details
#appdir ⇒ Object (readonly)
Returns the value of attribute appdir.
14 15 16 |
# File 'lib/user_space/user_space.rb', line 14 def appdir @appdir end |
#appname ⇒ Object (readonly)
Returns the value of attribute appname.
14 15 16 |
# File 'lib/user_space/user_space.rb', line 14 def appname @appname end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
14 15 16 |
# File 'lib/user_space/user_space.rb', line 14 def @options end |
#trace ⇒ Object
Returns the value of attribute trace.
13 14 15 |
# File 'lib/user_space/user_space.rb', line 13 def trace @trace end |
#verbose ⇒ Object
Returns the value of attribute verbose.
13 14 15 |
# File 'lib/user_space/user_space.rb', line 13 def verbose @verbose end |
#xdgbases ⇒ Object (readonly)
Returns the value of attribute xdgbases.
14 15 16 |
# File 'lib/user_space/user_space.rb', line 14 def xdgbases @xdgbases end |
Instance Method Details
#cachedir ⇒ Object
63 64 65 |
# File 'lib/user_space/user_space.rb', line 63 def cachedir File.join XDG['CACHE'].to_s, @appname end |
#config(options = @options) ⇒ Object
Reads config
93 94 95 96 97 98 99 |
# File 'lib/user_space/user_space.rb', line 93 def config(=@options) [:parser].parse File.read(config_file_name()) rescue trace.puts $!. if trace verbose.puts $!.backtrace if verbose nil end |
#config=(obj, options = @options) ⇒ Object
Saves config
102 103 104 |
# File 'lib/user_space/user_space.rb', line 102 def config=(obj, =@options) File.open(config_file_name, 'w', 0600){|fh| fh.puts [:parser].pretty_generate obj} end |
#config?(options = @options) ⇒ Boolean
88 89 90 |
# File 'lib/user_space/user_space.rb', line 88 def config?(=@options) File.exist?(config_file_name()) end |
#config_file_name(options = @options) ⇒ Object
Not really for public use.
76 77 78 79 80 81 |
# File 'lib/user_space/user_space.rb', line 76 def config_file_name(=@options) parser = [:parser] ext = [:ext] || parser.to_s.downcase basename = "#{[:config]}.#{ext}" File.join XDG['CONFIG'].to_s, @appname, basename end |
#configdir ⇒ Object
67 68 69 |
# File 'lib/user_space/user_space.rb', line 67 def configdir File.join XDG['CONFIG'].to_s, @appname end |
#configures(hash) ⇒ Object
106 107 108 109 110 111 112 113 |
# File 'lib/user_space/user_space.rb', line 106 def configures(hash) if self.config? # file exists self.config.each{|opt, value| hash[opt.to_sym] = value} else trace.puts config_file_name if trace self.config = hash end end |
#datadir ⇒ Object
71 72 73 |
# File 'lib/user_space/user_space.rb', line 71 def datadir File.join XDG['DATA'].to_s, @appname end |
#install(overwrite = true) ⇒ Object
Note that initialize will not overwrite anything. This overwrites the user’s data directory with a fresh install. App should consider being nice about this, like warn the user or something.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/user_space/user_space.rb', line 46 def install(overwrite=true) xdg_pairs do |basedir, userdir| if File.exist?(userdir) # Sanity check raise "Not a directory: #{userdir}" unless File.directory?(userdir) # Pre-existing directory. # Return unless user wants to overwrite. next unless overwrite else Dir.mkdir(userdir, 0700) end FileUtils.cp_r(Dir.glob("#{basedir}/*"), userdir) if File.directory? basedir FileUtils.chmod_R 'og-rwx', userdir FileUtils.chmod_R 'u+rwX', userdir end end |
#version ⇒ Object
This reads the data directory’s version file
120 121 122 123 124 125 126 |
# File 'lib/user_space/user_space.rb', line 120 def version File.read(version_file_name).strip rescue trace.puts $!. if trace verbose.puts $!.backtrace if verbose nil end |
#version=(v) ⇒ Object
128 129 130 |
# File 'lib/user_space/user_space.rb', line 128 def version=(v) File.open(version_file_name, 'w', 0600){|fh| fh.puts v} end |
#version? ⇒ Boolean
115 116 117 |
# File 'lib/user_space/user_space.rb', line 115 def version? File.exist?(version_file_name) end |
#version_file_name ⇒ Object
Not really for public use.
84 85 86 |
# File 'lib/user_space/user_space.rb', line 84 def version_file_name File.join XDG['DATA'].to_s, @appname, @options[:version] end |
#xdg_pairs ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/user_space/user_space.rb', line 33 def xdg_pairs @xdgbases.each do |base| xdg = XDG[base].to_s userdir = File.join(xdg, @appname) basedir = File.join @appdir, base.downcase yield basedir, userdir end end |