lib/tori/file.rb in tori-0.4.1 vs lib/tori/file.rb in tori-0.5.0

- old
+ new

@@ -1,53 +1,68 @@ module Tori class File - def initialize(model, title: nil, from: nil, &block) + def initialize(model, title: nil, from: nil, to: nil, &block) @model = model @title = title.kind_of?(String) ? title.to_sym : title - if from.respond_to?(:read) and from.respond_to?(:rewind) + + @from_path = if from.respond_to?(:path) + from.path + else + nil + end + + @backend = to + + @from = if from.respond_to?(:read) and from.respond_to?(:rewind) from.rewind - @from = from.read + from.read else - @from = from + from end @filename_callback = block end def name context = Context.new(@title) - filename_callback = if @filename_callback - @filename_callback - else - Tori.config.filename_callback - end context.define_singleton_method(:__filename_callback__, filename_callback) context.__filename_callback__(@model) end alias to_s name def from? !@from.nil? end def read - Tori.config.backend.read name + backend.read name end def write(opts = nil) - Tori.config.backend.write name, @from, opts + opts ||= {} + backend.write name, @from, opts.merge(from_path: @from_path) end def delete - Tori.config.backend.delete name if exist? + backend.delete name if exist? end + def filename_callback + @filename_callback || Tori.config.filename_callback + end + + def backend + @backend || Tori.config.backend + end + + private + def respond_to_missing?(sym, include_private) - Tori.config.backend.respond_to?(sym, include_private) + backend.respond_to?(sym, include_private) end def method_missing(sym, *args) if respond_to_missing?(sym, false) - Tori.config.backend.__send__ sym, name, *args + backend.__send__ sym, name, *args else fail NameError, "undefined method `#{sym}' for #{Tori.config.backend.inspect}" end end end