diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-05-27 07:43:38 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-05-27 07:43:38 +0000 |
commit | 979de48915cd1c0d903eeed0fcec181ab80ef1ae (patch) | |
tree | 5caa2535e7447380b264c1ddedbad23da070ceb2 /lib/yaml | |
parent | 87fb7bb66daa35dcf1750e2f764da0167ac79938 (diff) | |
download | ruby-979de48915cd1c0d903eeed0fcec181ab80ef1ae.tar.gz |
* lib/pstore.rb (transaction): allow overriding dump and load.
[ruby-dev:23567]
* lib/yaml/store.rb: follow lib/pstore.rb's change.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6420 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/yaml')
-rw-r--r-- | lib/yaml/store.rb | 85 |
1 files changed, 19 insertions, 66 deletions
diff --git a/lib/yaml/store.rb b/lib/yaml/store.rb index d36887720f..2ffa9554b9 100644 --- a/lib/yaml/store.rb +++ b/lib/yaml/store.rb @@ -3,74 +3,27 @@ # require 'yaml' require 'pstore' -require 'fileutils' -module YAML +class YAML::Store < PStore + def initialize( *o ) + @opt = YAML::DEFAULTS.dup + if String === o.first + super(o.shift) + end + if o.last.is_a? Hash + @opt.update(o.pop) + end + end - class Store < PStore - # - # Constructor - # - def initialize( *o ) - @opt = YAML::DEFAULTS.dup - if String === o.first - super(o.shift) - end - if o.last.is_a? Hash - @opt.update(o.pop) - end - end + def dump(table) + @table.to_yaml(@opt) + end - # - # Override Pstore#transaction - # - def transaction - raise YAML::Error, "nested transaction" if @transaction - raise YAML::Error, "no filename for transaction" unless @filename - begin - @transaction = true - value = nil - backup = @filename+"~" - if File::exist?(@filename) - file = File::open(@filename, "rb+") - orig = true - else - @table = {} - file = File::open(@filename, "wb+") - file.write( @table.to_yaml( @opt ) ) - end - file.flock(File::LOCK_EX) - if orig - FileUtils::copy @filename, backup - @table = YAML::load( file ) - end - begin - catch(:pstore_abort_transaction) do - value = yield(self) - end - rescue Exception - @abort = true - raise - ensure - unless @abort - begin - file.rewind - file.write( @table.to_yaml( @opt ) ) - file.truncate(file.pos) - rescue - File::rename backup, @filename if File::exist?(backup) - raise - end - end - @abort = false - end - ensure - @table = nil - @transaction = false - file.close if file - end - value - end - end + def load(content) + YAML::load(content) + end + def load_file(file) + YAML::load(file) + end end |