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