Class: S3download::Cli

Inherits:
Thor
  • Object
show all
Defined in:
lib/s3download/cli.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#bucketObject

Returns the value of attribute bucket.



13
14
15
# File 'lib/s3download/cli.rb', line 13

def bucket
  @bucket
end

#debugObject

Returns the value of attribute debug.



13
14
15
# File 'lib/s3download/cli.rb', line 13

def debug
  @debug
end

#files_foundObject

Returns the value of attribute files_found.



13
14
15
# File 'lib/s3download/cli.rb', line 13

def files_found
  @files_found
end

#fromObject

Returns the value of attribute from.



13
14
15
# File 'lib/s3download/cli.rb', line 13

def from
  @from
end

#rangeObject

Returns the value of attribute range.



13
14
15
# File 'lib/s3download/cli.rb', line 13

def range
  @range
end

#s3Object

Returns the value of attribute s3.



13
14
15
# File 'lib/s3download/cli.rb', line 13

def s3
  @s3
end

#targetObject

Returns the value of attribute target.



13
14
15
# File 'lib/s3download/cli.rb', line 13

def target
  @target
end

#toObject

Returns the value of attribute to.



13
14
15
# File 'lib/s3download/cli.rb', line 13

def to
  @to
end

Instance Method Details

#fetchObject

Raises:

  • (Thor::RequiredArgumentMissingError)


24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/s3download/cli.rb', line 24

def fetch
  raise Thor::RequiredArgumentMissingError, 'You must supply an S3 bucket name' if options[:bucket].nil?
  raise Thor::RequiredArgumentMissingError, 'You must supply a prefix (folder within the s3 bucket to filter by' if options[:prefix].nil?
  raise Thor::RequiredArgumentMissingError, 'You must supply a location where to save the downloaded files to' if options[:save_to].nil?
  init  

  ProgressBar.new("Filter Files", bucket.count) do |pbar|
    
    bucket.each do |object|
      if options[:verbose]
        say "timezone: #{options[:timezone]}" 
        say "object last modified: #{object.last_modified}"
        say "object last modified in timezone: #{object.last_modified.in_time_zone(options[:timezone])}"
        say "object falls in range: #{self.range}? => #{self.range.cover?(object.last_modified.in_time_zone(options[:timezone]))}"
      end

      if self.range.cover?(object.last_modified.in_time_zone(options[:timezone]))
        self.files_found += 1
        say("Downloading #{object.key} #{object.last_modified.in_time_zone(options[:timezone])}\n", color = :white) if options[:debug]
        FileUtils.mkdir_p "#{target}/#{object.key.match(/(.+)\//)[1]}"

        begin
          File.open("#{target}/#{object.key}", "w") do |f|
            f.write(object.read)
          end
        rescue Exception => e
           say "Unable to save file: #{e}", color = :red
        end
      end
      pbar.inc
    end
  end
  say "Total files downloaded from S3: #{self.files_found}", color = :yellow
end

#list_timezonesObject



60
61
62
# File 'lib/s3download/cli.rb', line 60

def list_timezones
   say JSON.pretty_generate(ActiveSupport::TimeZone::MAPPING), color = :white
end

#versionObject



66
67
68
# File 'lib/s3download/cli.rb', line 66

def version
  say S3download::ABOUT
end