ftpeter 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ecc761a5a1d0acb90260ac556b71f69f1025aa7b
4
- data.tar.gz: c790862e26ba4bc5d70dfd84130c1cf9374442d9
3
+ metadata.gz: c86268cfe83c63b53a5342410956738fbeaef88b
4
+ data.tar.gz: 02fa1e3409a5f3ecbc39378294b0716f886eccbd
5
5
  SHA512:
6
- metadata.gz: 3592f65606899aad4fc279a9966413018e85cdfbd08537ea22d8cbaf3542cc9f8b124b01de2e9642bb7ce471830946bbac06bce97b4f610d45d2359de459689f
7
- data.tar.gz: 4ca49adb7d7b27a490c941375722c4330a5ca675fb69f8be0480627edcf3a5c098bab6ee9ccc649b977d6cc7c9ac014fe5e0566a8d1bb5325deeadcbb10fafce
6
+ metadata.gz: 10bae2b564422d92537198d048d16fbeb5477863e3cfd4a2b6ea4a19842a515eb4ffb6cd2c997c63ef912780fc0b54ac1282233509a27aacfde99d6f1c95d7df
7
+ data.tar.gz: 20fe5332c67d3744ca8c8feea384998406be4e17dc255149d023905aaac368e41767b21f528bbdac1761e69347ae45fc258dfd1d9cf3c4f1e03f12b00a2eebd4
data/.rubocop.yml ADDED
@@ -0,0 +1,33 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ # Style Choices
4
+
5
+ Metrics/LineLength:
6
+ Max: 100
7
+
8
+ Style/BlockDelimiters:
9
+ EnforcedStyle: braces_for_chaining
10
+
11
+ Style/HashSyntax:
12
+ EnforcedStyle: ruby19_no_mixed_keys
13
+
14
+ Style/MultilineMethodCallIndentation:
15
+ EnforcedStyle: indented_relative_to_receiver
16
+
17
+ Style/FrozenStringLiteralComment:
18
+ EnforcedStyle: always
19
+
20
+ Style/PercentLiteralDelimiters:
21
+ PreferredDelimiters:
22
+ '%r': ~~
23
+
24
+ Style/AndOr:
25
+ EnforcedStyle: conditionals
26
+
27
+ # Rejection of nonsensical Rules and things I don't care about
28
+
29
+ Lint/AmbiguousRegexpLiteral:
30
+ Enabled: false
31
+
32
+ Style/RegexpLiteral:
33
+ Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,34 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-09-04 12:22:39 +0200 using RuboCop version 0.42.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ Metrics/AbcSize:
11
+ Max: 25
12
+
13
+ # Offense count: 2
14
+ # Configuration parameters: CountComments.
15
+ Metrics/MethodLength:
16
+ Max: 24
17
+
18
+ # Offense count: 7
19
+ Style/Documentation:
20
+ Exclude:
21
+ - 'spec/**/*'
22
+ - 'test/**/*'
23
+ - 'lib/ftpeter.rb'
24
+ - 'lib/ftpeter/backend.rb'
25
+ - 'lib/ftpeter/backend/git.rb'
26
+ - 'lib/ftpeter/cli.rb'
27
+ - 'lib/ftpeter/transport.rb'
28
+ - 'lib/ftpeter/transport/lftp.rb'
29
+
30
+ # Offense count: 1
31
+ # Configuration parameters: MinBodyLength.
32
+ Style/GuardClause:
33
+ Exclude:
34
+ - 'lib/ftpeter/cli.rb'
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ ftpeter
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.3.1
data/Gemfile CHANGED
@@ -1,4 +1,10 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+ source 'https://rubygems.org'
2
3
 
3
4
  # Specify your gem's dependencies in ftpeter.gemspec
4
5
  gemspec
6
+
7
+ group :development do
8
+ gem 'guard-rubocop'
9
+ gem 'guard-rspec'
10
+ end
data/Guardfile ADDED
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+ # A sample Guardfile
3
+ # More info at https://github.com/guard/guard#readme
4
+
5
+ ## Uncomment and set this to only include directories you want to watch
6
+ # directories %w(app lib config test spec features) \
7
+ # .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
8
+
9
+ ## Note: if you are using the `directories` clause above and you are not
10
+ ## watching the project directory ('.'), then you will want to move
11
+ ## the Guardfile to a watched dir and symlink it back, e.g.
12
+ #
13
+ # $ mkdir config
14
+ # $ mv Guardfile config/
15
+ # $ ln -s config/Guardfile .
16
+ #
17
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
18
+
19
+ guard :rubocop do
20
+ watch(%r~.+\.rb$~)
21
+ watch(%r~.+\.gemspec$~)
22
+ watch(%r~(Rake|Gem)file$~)
23
+ watch(%r~(?:.+/)?\.rubocop\.yml$~) { |m| File.dirname(m[0]) }
24
+ end
25
+
26
+ # Note: The cmd option is now required due to the increasing number of ways
27
+ # rspec may be run, below are examples of the most common uses.
28
+ # * bundler: 'bundle exec rspec'
29
+ # * bundler binstubs: 'bin/rspec'
30
+ # * spring: 'bin/rspec' (This will use spring if running and you have
31
+ # installed the spring binstubs per the docs)
32
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
33
+ # * 'just' rspec: 'rspec'
34
+
35
+ guard :rspec, cmd: 'rspec' do
36
+ require 'guard/rspec/dsl'
37
+ dsl = Guard::RSpec::Dsl.new(self)
38
+
39
+ # Feel free to open issues for suggestions and improvements
40
+
41
+ # RSpec files
42
+ rspec = dsl.rspec
43
+ watch(rspec.spec_helper) { rspec.spec_dir }
44
+ watch(rspec.spec_support) { rspec.spec_dir }
45
+ watch(rspec.spec_files)
46
+
47
+ # Ruby files
48
+ ruby = dsl.ruby
49
+ dsl.watch_spec_files_for(ruby.lib_files)
50
+ end
data/README.md CHANGED
@@ -57,7 +57,7 @@ https://git.lanpartei.de/kronn/ftpeter
57
57
 
58
58
  ## License
59
59
 
60
- "MIT-alike, not no military usage and no sublicensing"
60
+ "MIT-alike, but no military usage and no sublicensing"
61
61
 
62
62
 
63
63
  Copyright (c) 2015 Matthias Viehweger
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
- task :default => :spec
7
+ task default: :spec
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "ftpeter"
4
+ require 'bundler/setup'
5
+ require 'ftpeter'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "ftpeter"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start
data/exe/ftpeter CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "ftpeter/cli"
4
+ require 'ftpeter/cli'
4
5
 
5
6
  Ftpeter::CLI.new(ARGV).go
data/ftpeter.gemspec CHANGED
@@ -1,24 +1,32 @@
1
- lib = File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+ lib = File.expand_path('../lib', __FILE__)
2
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require "ftpeter/version"
4
+ require 'ftpeter/version'
4
5
 
5
6
  Gem::Specification.new do |spec|
6
- spec.name = "ftpeter"
7
+ spec.name = 'ftpeter'
7
8
  spec.version = Ftpeter::VERSION
8
- spec.authors = ["Matthias Viehweger"]
9
- spec.email = ["kronn@kronn.de"]
9
+ spec.authors = ['Matthias Viehweger']
10
+ spec.email = ['kronn@kronn.de']
10
11
 
11
- spec.summary = %q{Deployments via FTP}
12
- spec.description = %q{Upload or delete files that have changed in git using lftp. lftp supports ftp, ftps, sftp and more.}
13
- spec.homepage = "https://git.lanpartei.de/kronn/ftpeter"
14
- spec.license = "MIT"
12
+ spec.summary = 'Deployments via FTP'
13
+ spec.description = <<-EODESC
14
+ Upload or delete files that have changed in git using lftp.
15
+ lftp supports ftp, ftps, sftp and more.
16
+ EODESC
17
+ spec.homepage = 'https://git.lanpartei.de/kronn/ftpeter'
18
+ spec.license = 'MIT'
15
19
 
16
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
- spec.bindir = "exe"
18
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
20
+ spec.files = `git ls-files -z`
21
+ .split("\x0")
22
+ .reject { |f| f.match(%r~^(test|spec|features)/~) }
23
+ spec.bindir = 'exe'
24
+ spec.executables = spec.files.grep(%r~^exe/~) { |f| File.basename(f) }
25
+ spec.require_paths = ['lib']
20
26
 
21
- spec.add_development_dependency "bundler", "~> 1.10"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec"
27
+ spec.add_development_dependency 'bundler', '~> 1.10'
28
+ spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'rspec'
30
+ spec.add_development_dependency 'fakefs'
31
+ spec.add_development_dependency 'rubocop'
24
32
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ module Ftpeter
3
+ module Backend
4
+ class Git
5
+ attr_reader :changes
6
+
7
+ def initialize(last)
8
+ # build up diff since last version
9
+ files = `git log #{last}... --name-status --oneline`.split("\n")
10
+ deleted = files.grep(/^[RD]/).map { |l| l.gsub(/^[RD]\s+/, '') }.uniq
11
+ changed = files.grep(/^[ACMR]/).map { |l| l.gsub(/^[ACMR]\s+/, '') }.uniq
12
+ added = files.grep(/^[A]/).map { |l| l.gsub(/^[A]\s+/, '') }.uniq
13
+
14
+ @changes = Ftpeter::Changes.new(deleted, changed, added)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Ftpeter
3
+ module Backend
4
+ autoload :Git, 'ftpeter/backend/git'
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ module Ftpeter
3
+ Changes = Struct.new(:deleted, :changed, :added) do
4
+ def newdirs
5
+ @newdirs ||= added
6
+ .map { |fn| Pathname.new(fn).dirname.to_s }
7
+ .uniq
8
+ .reject { |fn| fn == '.' }
9
+ end
10
+ end
11
+ end
data/lib/ftpeter/cli.rb CHANGED
@@ -1,94 +1,65 @@
1
- require "pathname"
1
+ # frozen_string_literal: true
2
+ require 'pathname'
2
3
 
3
4
  module Ftpeter
4
5
  class CLI
5
6
  def initialize(args)
6
- raise ArgumentError, "Please specify a host to deploy to" unless args[0]
7
+ raise ArgumentError, 'Please specify a host to deploy to' unless args[0]
7
8
 
8
9
  @host = args[0]
9
- @dir = args[1] || "/" # the directory to change into
10
- @last = args[2] || "origin/master" # get the last deployed version and current version
10
+ @dir = args[1] || '/' # the directory to change into
11
+ @last = args[2] || 'origin/master' # get the last deployed version
11
12
 
12
13
  configure
13
14
  end
14
15
 
16
+ # TODO: extract code into Connection-class
15
17
  def configure
16
- cleaned_host = if @host =~ %r!//!
17
- require "uri"
18
- URI(@host).host
19
- else
20
- @host
21
- end
18
+ cleaned_host = if @host =~ %r~//~
19
+ require 'uri'
20
+ URI(@host).host
21
+ else
22
+ @host
23
+ end
22
24
 
23
25
  @credentials = begin
24
26
  `grep #{cleaned_host} ~/.netrc`.chomp
25
27
  .split("\n").first
26
28
  .match(/login (?<user>\S+) password (?<pass>\S+)/)
27
- rescue NoMethodError => e
29
+ rescue NoMethodError
28
30
  nil
29
31
  end
30
32
 
31
33
  @commands = begin
32
- Pathname.new("./.ftpeterrc").read.chomp
33
- rescue Errno::ENOENT=> e
34
+ Pathname.new('./.ftpeterrc').read.chomp
35
+ rescue Errno::ENOENT
34
36
  nil
35
37
  end
38
+
39
+ @connection = Ftpeter::Connection.new(
40
+ @host,
41
+ @credentials,
42
+ @dir,
43
+ @commands
44
+ )
36
45
  end
37
46
 
38
47
  def go
39
- # internal vars
40
- lftp_script = []
41
- lftp_fn = Pathname.new("./lftp_script").expand_path
42
-
43
- # build up diff since last version
44
- files = `git log #{@last}... --name-status --oneline`.split("\n")
45
- deleted = files.grep(/^[RD]/).map { |l| l.gsub(/^[RD]\s+/, "") }.uniq
46
- changed = files.grep(/^[ACMR]/).map { |l| l.gsub(/^[ACMR]\s+/, "") }.uniq
47
- added = files.grep(/^[A]/).map { |l| l.gsub(/^[A]\s+/, "") }.uniq
48
- newdirs = added.map { |fn| Pathname.new(fn).dirname.to_s }.uniq.reject { |fn| fn == "." }
49
-
50
- # lftp connection header
51
- lftp_script << "open #{@host}"
52
- lftp_script << "user #{@credentials["user"]} #{@credentials["pass"]}" if @credentials
53
- lftp_script << "cd #{@dir}"
54
-
55
- # lftp file commands
56
- lftp_script << deleted.map do |fn|
57
- "rm #{fn}"
58
- end
59
- lftp_script << newdirs.map do |fn|
60
- "mkdir -p #{fn}"
61
- end
62
- lftp_script << changed.map do |fn|
63
- "put #{fn} -o #{fn}"
64
- end
65
- lftp_script << @commands.split("\n").map do |cmd|
66
- "!#{cmd}"
67
- end if @commands
68
- lftp_script << '!echo ""'
69
- lftp_script << '!echo "Deployment complete"'
70
-
71
- # write script to file
72
- lftp_fn.open("w") do |f|
73
- f << lftp_script.flatten.join("\n")
74
- f << "\n"
75
- end
48
+ changes = get_changes_from(:git)
49
+ upload = transport(changes).via(@connection, :lftp)
76
50
 
77
- puts "="*80
78
- puts lftp_fn.read
79
- puts "="*80
80
- puts
51
+ $stdout.puts '=' * 80, upload.inform, '=' * 80, nil
52
+ upload.persist
81
53
 
82
54
  if okay?
83
- `lftp -f #{lftp_fn}`
84
- lftp_fn.delete
55
+ upload.execute and upload.cleanup
85
56
  else
86
- puts "#{lftp_fn} is left for your editing pleasure"
57
+ $stdout.puts "#{upload.script} is left for your editing pleasure"
87
58
  end
88
59
  end
89
60
 
90
- def confirm(confirmation = "yes")
91
- $stderr.print "[yes, No] > "
61
+ def confirm(confirmation = 'yes')
62
+ $stderr.print '[yes, No] > '
92
63
 
93
64
  if $stdin.gets.chomp != confirmation
94
65
  raise "you did not enter '#{confirmation}', aborting"
@@ -98,12 +69,22 @@ module Ftpeter
98
69
  end
99
70
 
100
71
  def okay?
101
- $stderr.puts "is this script okay?"
72
+ $stdout.puts 'is this script okay?'
102
73
  begin
103
- confirm("yes")
74
+ confirm('yes')
104
75
  rescue RuntimeError
105
76
  false
106
77
  end
107
78
  end
79
+
80
+ def get_changes_from(vcs)
81
+ raise ArgumentError, "There's only git-support for now" unless vcs == :git
82
+
83
+ Ftpeter::Backend::Git.new(@last).changes
84
+ end
85
+
86
+ def transport(changes)
87
+ Ftpeter::Transport.new(changes)
88
+ end
108
89
  end
109
90
  end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ module Ftpeter
3
+ Connection = Struct.new(:host, :credentials, :dir, :commands)
4
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+ require 'pathname'
3
+
4
+ module Ftpeter
5
+ class Transport
6
+ class Lftp
7
+ attr_reader :script
8
+
9
+ def initialize(connection, changes)
10
+ @changes = changes
11
+ @lftp_script = []
12
+ @script = Pathname.new('./lftp_script').expand_path
13
+
14
+ @host = connection.host
15
+ @credentials = connection.credentials
16
+ @dir = connection.dir
17
+ @commands = connection.commands
18
+
19
+ prepare
20
+ end
21
+
22
+ def prepare
23
+ # lftp connection header
24
+ @lftp_script << "open #{@host}"
25
+ if @credentials
26
+ @lftp_script << "user #{@credentials['user']} #{@credentials['pass']}"
27
+ end
28
+ @lftp_script << "cd #{@dir}"
29
+
30
+ # lftp file commands
31
+ @lftp_script << @changes.deleted.map do |fn|
32
+ "rm #{fn}"
33
+ end
34
+ @lftp_script << @changes.newdirs.map do |fn|
35
+ "mkdir -p #{fn}"
36
+ end
37
+ @lftp_script << @changes.added.map do |fn|
38
+ "put #{fn} -o #{fn}"
39
+ end
40
+ @lftp_script << @changes.changed.map do |fn|
41
+ "put #{fn} -o #{fn}"
42
+ end
43
+ @lftp_script << @commands.split("\n").map do |cmd|
44
+ "!#{cmd}"
45
+ end if @commands
46
+ @lftp_script << '!echo ""'
47
+ @lftp_script << '!echo "Deployment complete"'
48
+
49
+ @lftp_script.flatten!.compact!
50
+
51
+ @lftp_script
52
+ end
53
+
54
+ def commands
55
+ @lftp_script
56
+ end
57
+
58
+ def inform
59
+ @lftp_script.join("\n")
60
+ end
61
+
62
+ def persist
63
+ script.open('w') do |f|
64
+ f << @lftp_script.flatten.join("\n")
65
+ f << "\n"
66
+ end
67
+ end
68
+
69
+ def execute
70
+ system("lftp -f #{script}")
71
+ end
72
+
73
+ def cleanup
74
+ script.delete
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ module Ftpeter
3
+ class Transport
4
+ class Unsupported < ArgumentError
5
+ def message
6
+ 'There is only lftp-support for now'
7
+ end
8
+ end
9
+
10
+ autoload :Lftp, 'ftpeter/transport/lftp'
11
+
12
+ def initialize(changes)
13
+ @changes = changes
14
+ end
15
+
16
+ def via(connection, uploader)
17
+ raise Unsupported unless uploader == :lftp
18
+
19
+ Ftpeter::Transport::Lftp.new(connection, @changes)
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Ftpeter
2
- VERSION = "0.1.0"
3
+ VERSION = '0.2.0'
3
4
  end
data/lib/ftpeter.rb CHANGED
@@ -1,9 +1,17 @@
1
- require "ftpeter/version"
2
- require "pathname"
1
+ # frozen_string_literal: true
2
+ # TODO: check if needed here (they shouldn't be)
3
+ require 'pathname'
3
4
 
4
- # TODO extract git-backend to detect changes
5
- # TODO extract lftp-backend to deploy files
6
- # TODO setup help and option-parsing
5
+ # TODO: setup help and option-parsing
7
6
  module Ftpeter
8
- autoload :CLI, "ftpeter/cli"
7
+ autoload :CLI, 'ftpeter/cli'
8
+ autoload :VERSION, 'ftpeter/version'
9
+
10
+ # value classes
11
+ autoload :Changes, 'ftpeter/changes'
12
+ autoload :Connection, 'ftpeter/connection'
13
+
14
+ # collection of plugable components
15
+ autoload :Transport, 'ftpeter/transport'
16
+ autoload :Backend, 'ftpeter/backend'
9
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ftpeter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthias Viehweger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-01 00:00:00.000000000 Z
11
+ date: 2016-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,8 +52,37 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: Upload or delete files that have changed in git using lftp. lftp supports
56
- ftp, ftps, sftp and more.
55
+ - !ruby/object:Gem::Dependency
56
+ name: fakefs
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: |
84
+ Upload or delete files that have changed in git using lftp.
85
+ lftp supports ftp, ftps, sftp and more.
57
86
  email:
58
87
  - kronn@kronn.de
59
88
  executables:
@@ -63,8 +92,13 @@ extra_rdoc_files: []
63
92
  files:
64
93
  - ".gitignore"
65
94
  - ".rspec"
95
+ - ".rubocop.yml"
96
+ - ".rubocop_todo.yml"
97
+ - ".ruby-gemset"
98
+ - ".ruby-version"
66
99
  - ".travis.yml"
67
100
  - Gemfile
101
+ - Guardfile
68
102
  - README.md
69
103
  - Rakefile
70
104
  - bin/console
@@ -72,7 +106,13 @@ files:
72
106
  - exe/ftpeter
73
107
  - ftpeter.gemspec
74
108
  - lib/ftpeter.rb
109
+ - lib/ftpeter/backend.rb
110
+ - lib/ftpeter/backend/git.rb
111
+ - lib/ftpeter/changes.rb
75
112
  - lib/ftpeter/cli.rb
113
+ - lib/ftpeter/connection.rb
114
+ - lib/ftpeter/transport.rb
115
+ - lib/ftpeter/transport/lftp.rb
76
116
  - lib/ftpeter/version.rb
77
117
  homepage: https://git.lanpartei.de/kronn/ftpeter
78
118
  licenses:
@@ -94,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
134
  version: '0'
95
135
  requirements: []
96
136
  rubyforge_project:
97
- rubygems_version: 2.6.4
137
+ rubygems_version: 2.5.1
98
138
  signing_key:
99
139
  specification_version: 4
100
140
  summary: Deployments via FTP