Class: UserSpace
- Inherits:
-
Object
- Object
- UserSpace
- Defined in:
- lib/user_space/version.rb,
lib/user_space/user_space.rb
Constant Summary collapse
- VERSION =
'2.0.1'- OPTIONS =
{ config: 'config', version: 'VERSION', ext: nil, parser: nil, }
- PARAMETERS =
{ appname: File.basename($0), 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.
-
#xdgbases ⇒ Object
readonly
Returns the value of attribute xdgbases.
Instance Method Summary collapse
- #cachedir ⇒ Object
-
#config ⇒ Object
Reads config.
-
#config=(obj) ⇒ Object
Saves config.
- #config? ⇒ Boolean
-
#config_file_name ⇒ 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
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/user_space/user_space.rb', line 25 def initialize(parameters=PARAMETERS) @appname = parameters[:appname] || PARAMETERS[:appname] @appdir = parameters[:appdir] || PARAMETERS[:appdir] @xdgbases = parameters[:xdgbases] || PARAMETERS[:xdgbases] @options = OPTIONS.dup 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 $stderr.puts "UserSpace#appdir=\"#{@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.
24 25 26 |
# File 'lib/user_space/user_space.rb', line 24 def appdir @appdir end |
#appname ⇒ Object (readonly)
Returns the value of attribute appname.
24 25 26 |
# File 'lib/user_space/user_space.rb', line 24 def appname @appname end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
24 25 26 |
# File 'lib/user_space/user_space.rb', line 24 def @options end |
#xdgbases ⇒ Object (readonly)
Returns the value of attribute xdgbases.
24 25 26 |
# File 'lib/user_space/user_space.rb', line 24 def xdgbases @xdgbases end |
Instance Method Details
#cachedir ⇒ Object
73 74 75 |
# File 'lib/user_space/user_space.rb', line 73 def cachedir File.join XDG['CACHE'].to_s, @appname end |
#config ⇒ Object
Reads config
103 104 105 106 107 108 109 110 |
# File 'lib/user_space/user_space.rb', line 103 def config p, d = @options[:parser], File.read(config_file_name) p.load(d) rescue $stderr.puts $!. if $VERBOSE $stderr.puts $!.backtrace if $DEBUG nil end |
#config=(obj) ⇒ Object
Saves config
113 114 115 116 117 |
# File 'lib/user_space/user_space.rb', line 113 def config=(obj) p = @options[:parser] d = (p.respond_to?(:pretty_generate))? p.pretty_generate(obj) : p.dump(obj) File.open(config_file_name, 'w', 0600){|fh| fh.puts d} end |
#config? ⇒ Boolean
98 99 100 |
# File 'lib/user_space/user_space.rb', line 98 def config? File.exist?(config_file_name) end |
#config_file_name ⇒ Object
Not really for public use.
86 87 88 89 90 91 |
# File 'lib/user_space/user_space.rb', line 86 def config_file_name parser = @options[:parser] ext = @options[:ext] || parser.to_s.downcase basename = "#{@options[:config]}.#{ext}" File.join XDG['CONFIG'].to_s, @appname, basename end |
#configdir ⇒ Object
77 78 79 |
# File 'lib/user_space/user_space.rb', line 77 def configdir File.join XDG['CONFIG'].to_s, @appname end |
#configures(hash) ⇒ Object
119 120 121 122 123 124 125 126 |
# File 'lib/user_space/user_space.rb', line 119 def configures(hash) if self.config? # file exists self.config.each{|opt, value| hash[opt.to_sym] = value} else $stderr.puts config_file_name if $VERBOSE self.config = hash end end |
#datadir ⇒ Object
81 82 83 |
# File 'lib/user_space/user_space.rb', line 81 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.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/user_space/user_space.rb', line 56 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
133 134 135 136 137 138 139 |
# File 'lib/user_space/user_space.rb', line 133 def version File.read(version_file_name).strip rescue $stderr.puts $!. if $VERBOSE $stderr.puts $!.backtrace if $DEBUG nil end |
#version=(v) ⇒ Object
141 142 143 |
# File 'lib/user_space/user_space.rb', line 141 def version=(v) File.open(version_file_name, 'w', 0600){|fh| fh.puts v} end |
#version? ⇒ Boolean
128 129 130 |
# File 'lib/user_space/user_space.rb', line 128 def version? File.exist?(version_file_name) end |
#version_file_name ⇒ Object
Not really for public use.
94 95 96 |
# File 'lib/user_space/user_space.rb', line 94 def version_file_name File.join XDG['DATA'].to_s, @appname, @options[:version] end |
#xdg_pairs ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'lib/user_space/user_space.rb', line 43 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 |