ftp_transfer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/ftp_transfer.rb +63 -0
  3. metadata +72 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8d7063aae5241ea45be268c24339f1558350fa31
4
+ data.tar.gz: e47c6e917f558fe7249a116405a906174effd4e2
5
+ SHA512:
6
+ metadata.gz: 55ec85183f3cecd38928dc714dcfaddfd3d0f4440505f0cd0b8d8f701f1457cf94789f5d6da7a9d466e0390bdeae1408c2b5dce3a6b8cdc19bf2f0b6b275c7e7
7
+ data.tar.gz: de7fbceea0bf3c48cef384180cf133d86c5d6b473fe4e0d2b6f93003bc2ee6e70b0cad08b75e919fdb703fa0661ce1c2fa489322c4a18f72b1a46a1ba548d7b8
@@ -0,0 +1,63 @@
1
+ require 'net/ftp'
2
+ require 'digest/md5'
3
+ require 'fileutils'
4
+ require 'stringglob'
5
+
6
+ class FtpTransfer
7
+ def initialize(host, user, password, local_directory, options = {})
8
+ @host = host
9
+ @user = user
10
+ @password = password
11
+ @local_directory = File.expand_path(local_directory)
12
+ @archive_directory = nil
13
+ if options[:archive_dir]
14
+ @archive_directory = File.expand_path(options[:archive_dir])
15
+ end
16
+ @pattern = options[:pattern] || '*'
17
+ @ftp = Net::FTP.new(@host, @user, @password)
18
+ @ftp.passive = true
19
+ end
20
+
21
+ def upload(remote_directory)
22
+ @ftp.chdir(remote_directory)
23
+ Dir["#{@local_directory}/#{@pattern}"].each do |file|
24
+ begin
25
+ @ftp.putbinaryfile(file)
26
+ rescue
27
+ raise Net::FTPError, 'files did not transfer successfully'
28
+ end
29
+ archive_locally(file) if transfer_success?(file) && archive?
30
+ end
31
+ end
32
+
33
+ def download(remote_directory)
34
+ @ftp.chdir(remote_directory)
35
+ Dir.chdir(File.expand_path(@local_directory))
36
+ @ftp.nlst
37
+ .select { |file| StringGlob.regexp(@pattern) =~ file }
38
+ .each do |file|
39
+ begin
40
+ @ftp.getbinaryfile(file)
41
+ rescue
42
+ raise Net::FTPError, 'files did not transfer successfully'
43
+ end
44
+ @ftp.delete(file) if transfer_success?(file)
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def transfer_success?(file)
51
+ @ftp.size(File.basename(file)) > 0 &&
52
+ Digest::MD5.hexdigest(@ftp.getbinaryfile(File.basename(file), nil)) ==
53
+ Digest::MD5.hexdigest(File.read(file))
54
+ end
55
+
56
+ def archive_locally(file)
57
+ FileUtils.move(file, @archive_directory) if File.exists?(file) && archive?
58
+ end
59
+
60
+ def archive?
61
+ !@archive_directory.nil?
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ftp_transfer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Eric Mathison
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-07-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fake_ftp
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.9
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.9
27
+ - !ruby/object:Gem::Dependency
28
+ name: stringglob
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.3
41
+ description: A bulk ftp transfer library
42
+ email: dev@ekmathison.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/ftp_transfer.rb
48
+ homepage: http://github.com/ericmathison/ftp_transfer
49
+ licenses:
50
+ - GPL-2
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.0.5
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Bulk FTP Transfer
72
+ test_files: []