ftp_transfer 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []