Robert Klemme said:
I don't exactly understand this last sentence. Can you elaborate?
first the versions i'm speaking about are the versions of my
application.
for example the first release might have those attributes :
attr_accessor :roundTripTimeValues, :roundTripTimeDefaultValue
attr_accessor :defaultSettingsDir
while the second version might have more attributes :
attr_accessor :roundTripTimeValues, :roundTripTimeDefaultValue
attr_accessor :defaultSettingsDir
attr_accessor :firstRun, :defaultVolumeName
the users i have might have a second version directly (new user) or the
first one (old user) which i want to updates automatically.
for the time being i've done that thru the usage of a defaults method
(in my case the preferences are saved into a yaml file)
here is the first version class :
-----------------------------------------------------------------------
#!/usr/bin/env ruby
HOME=ENV['HOME']
PREFS_FILE="#{HOME}/Desktop/org.ytho.MacSOUPSwitcher.yml"
class Preferences
attr_accessor :roundTripTimeValues, :roundTripTimeDefaultValue
attr_accessor :defaultSettingsDir
def initialize
@roundTripTimeValues=[]
@roundTripTimeDefaultValue
@defaultSettingsDir
end
def defaults
@roundTripTimeValues=[ 5, 15, 30, 60] if @roundTripTimeValues == []
@roundTripTimeDefaultValue=15 if @roundTripTimeDefaultValue == nil
@defaultSettingsDir="#{HOME}" if @defaultSettingsDir == nil
self.save
end
def save
File.open("#{PREFS_FILE}", "w") {|f| f.write(self.to_yaml)}
end
def to_s
s="Préférences :\n"
s+=" roundTripTimeValues = #{self.roundTripTimeValues}\n"
s+=" roundTripTimeDefaultValue =
#{self.roundTripTimeDefaultValue}\n"
s+=" defaultSettingsDir = #{self.defaultSettingsDir}\n"
return s
end
end
-----------------------------------------------------------------------
the second version with added attributes :
-----------------------------------------------------------------------
#!/usr/bin/env ruby
HOME=ENV['HOME']
VOLUMES="/volumes"
PREFS_FILE="#{HOME}/Desktop/org.ytho.MacSOUPSwitcher.yml"
class Preferences
attr_accessor :roundTripTimeValues, :roundTripTimeDefaultValue
attr_accessor :defaultSettingsDir
attr_accessor :firstRun, :defaultVolumeName
def initialize
@roundTripTimeValues=[]
@roundTripTimeDefaultValue
@defaultSettingsDir
@firstRun
@defaultVolumeName
end
def defaults
@roundTripTimeValues=[ 5, 15, 30, 60] if @roundTripTimeValues == []
@roundTripTimeDefaultValue=15 if @roundTripTimeDefaultValue == nil
@defaultSettingsDir="#{HOME}" if @defaultSettingsDir == nil
@firstRun=true if @firstRun == nil
@defaultVolumeName=self.findDefaultVolume if @defaultVolumeName ==
nil
self.save
end
def save
File.open("#{PREFS_FILE}", "w") {|f| f.write(self.to_yaml)}
end
def to_s
s="Préférences :\n"
s+=" roundTripTimeValues = #{self.roundTripTimeValues}\n"
s+=" roundTripTimeDefaultValue =
#{self.roundTripTimeDefaultValue}\n"
s+=" defaultSettingsDir = #{self.defaultSettingsDir}\n"
s+=" firstRun = #{self.firstRun}\n"
s+=" defaultVolumeName = #{self.defaultVolumeName}\n"
return s
end
def findDefaultVolume
Dir.open("#{VOLUMES}") do |dir|
dir.each do |file|
if File.symlink? "#{VOLUMES}/#{file}" and `readlink -n
"#{VOLUMES}/#{file}"`.chomp == "/"
return file
end
end
end
end
end
-----------------------------------------------------------------------
then when reading a yaml preferences file of any version, if the
software of of the second, those preferences will be updates
automatically by using :
def prefsSetUp
if FileTest.exists?("#{PREFS_FILE}")
prefs=YAML::load(File.open("#{PREFS_FILE}"))
if prefs.class == Preferences
prefs.defaults # set new default values if not allready assignied
prefs.save
return prefs
end
else
prefs=Preferences.new
prefs.defaults
prefs.save
return prefs
end
end
then, i want to know if their are other better and/or clever way to do
the same things ???