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 |
# 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.first.split(/:/,2).first @appdir = File. appdir 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
61 62 63 |
# File 'lib/user_space/user_space.rb', line 61 def cachedir File.join XDG['CACHE'].to_s, @appname end |
#config(options = @options) ⇒ Object
Reads config
91 92 93 94 95 96 97 |
# File 'lib/user_space/user_space.rb', line 91 def config(=@options) [:parser].parse File.read(config_file_name()) rescue trace.puts $!. if trace vebose.puts $!.backtrace if verbose nil end |
#config=(obj, options = @options) ⇒ Object
Saves config
100 101 102 |
# File 'lib/user_space/user_space.rb', line 100 def config=(obj, =@options) File.open(config_file_name, 'w', 0600){|fh| fh.puts [:parser].pretty_generate obj} end |
#config?(options = @options) ⇒ Boolean
86 87 88 |
# File 'lib/user_space/user_space.rb', line 86 def config?(=@options) File.exist?(config_file_name()) end |
#config_file_name(options = @options) ⇒ Object
Not really for public use.
74 75 76 77 78 79 |
# File 'lib/user_space/user_space.rb', line 74 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
65 66 67 |
# File 'lib/user_space/user_space.rb', line 65 def configdir File.join XDG['CONFIG'].to_s, @appname end |
#configures(hash) ⇒ Object
104 105 106 107 108 109 110 111 |
# File 'lib/user_space/user_space.rb', line 104 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
69 70 71 |
# File 'lib/user_space/user_space.rb', line 69 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.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/user_space/user_space.rb', line 44 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
118 119 120 121 122 123 124 |
# File 'lib/user_space/user_space.rb', line 118 def version File.read(version_file_name).strip rescue trace.puts $!. if trace vebose.puts $!.backtrace if verbose nil end |
#version=(v) ⇒ Object
126 127 128 |
# File 'lib/user_space/user_space.rb', line 126 def version=(v) File.open(version_file_name, 'w', 0600){|fh| fh.puts v} end |
#version? ⇒ Boolean
113 114 115 |
# File 'lib/user_space/user_space.rb', line 113 def version? File.exist?(version_file_name) end |
#version_file_name ⇒ Object
Not really for public use.
82 83 84 |
# File 'lib/user_space/user_space.rb', line 82 def version_file_name File.join XDG['DATA'].to_s, @appname, @options[:version] end |
#xdg_pairs ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/user_space/user_space.rb', line 31 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 |