lib/resync/client/mixins/dump.rb in resync-client-0.2.5 vs lib/resync/client/mixins/dump.rb in resync-client-0.3.0

- old
+ new

@@ -1,36 +1,64 @@ require 'resync' +require 'lazy' require_relative '../zip' require_relative 'zipped_resource' module Resync class Client module Mixins # A list of resources each of which refers to a zipped bitstream package. module Dump + + # Makes each resource a {ZippedResource} def resources=(value) super resources.each do |r| next if r.respond_to?(:zip_package) class << r prepend ZippedResource end end end - # A list (downloaded lazily) of the {Resync::Client::Zip::ZipPackage}s for each resource - # @return [Resync::Client::Zip::ZipPackages] the zip packages for each resource + # The {Resync::Client::Zip::ZipPackage}s for each resource, downloaded lazily + # @return [Array<Lazy::Promise<Resync::Client::Zip::ZipPackage>>] the zip packages for each resource def zip_packages - @zip_packages ||= Resync::Client::Zip::ZipPackages.new(resources) + @zip_packages ||= resources.map { |r| Lazy.promise { r.zip_package } } end + + # Aliases +:zip_packages+ as +:all_zip_packages+ for transparent + # interoperability between +ResourceDump+ and +ResourceDumpIndex+, + # +ChangeDump+ and +ChangeDumpIndex+ + def self.prepended(ext) + ext.send(:alias_method, :all_zip_packages, :zip_packages) + end + end end end class ResourceDump prepend Client::Mixins::Dump end class ChangeDump - prepend Client::Mixins::Dump + include Client::Mixins::Dump + + # A list (downloaded lazily) of the {Resync::Client::Zip::ZipPackage}s for each resource + # If a time range parameter is provided, the lists of packages is filtered by +from_time+ + # and +until_time+, in non-strict mode (only excluding those lists provably not in the range, + # i.e., including packages without +from_time+ or +until_time+). + # @param in_range [Range<Time>] the range of times to filter by + # @return [Array<Lazy::Promise<Resync::Client::Zip::ZipPackage>>] the zip packages for each resource + def zip_packages(in_range: nil) + if in_range + change_lists = change_lists(in_range: in_range, strict: false) + change_lists.map { |r| Lazy.promise { r.zip_package } } + else + super() + end + end + + alias_method :all_zip_packages, :zip_packages end end