Sha256: 188139df61e68404024d53a788d1896b1fb41b6eb6d4f364e803c03dc1424e62

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

#!/usr/bin/env ruby
#
# dcp: copy files to/from dropbox like scp command
#
# Copyright (C) 2017 by Tada, Tadashi <t@tdtds.jp>
# Distributed under GPL
#
require 'dcp'
require 'optparse'
require 'pit'

module DCP
	class CLI
		def run
			opts, args = parse_options
			dst = args.pop
			begin
				args.each do |src|
					open(src, 'r') do |r|
						open(dst, 'w') do |w|
							w.write(r.read(10_000_000))
						end
					end
				end
			rescue => e
				usage e.message
			end
		end

	private
		def parse_options(argv = ARGV)
			op = OptionParser.new

			self.class.module_eval do
				define_method(:usage) do |msg = nil|
					puts op.to_s
					puts "error: #{msg}" if msg
					exit 1
				end
			end

			opts = {
			}

			op.on('-h', '--help', "print this messages") do
				usage
			end

			op.banner += ' [db:]SRC [SRC...] [db:]DEST'
			begin
				args = op.parse(argv)
			rescue OptionParser::InvalidOption => e
				usage e.message
			end
			usage 'needs src and dest' if args.size < 2

			return opts, args
		end

		def dropbox
			return @dropbox if @dropbox

			auth = ::Pit::get('dcp')
			unless auth[:dropbox_token]
				print "Enter dropbox app key: "
				api_key = $stdin.gets.chomp

				print "Enter dropbox app secret: "
				api_secret = $stdin.gets.chomp

				authenticator = ::DropboxApi::Authenticator.new(api_key, api_secret)
				puts "\nGo to this url and click 'Authorize' to get the token:"
				puts authenticator.authorize_url

				print "Enter the token: "
				code = $stdin.gets.chomp

				auth[:dropbox_token] = authenticator.get_token(code).token
				Pit::set('dcp', data: auth)
			end
			return @dropbox = Dropbox.new(auth[:dropbox_token])
		end

		def dropbox_path?(path)
			path =~ /\A(db|dropbox):/
		end

		def open(file, opts)
			if dropbox_path?(file)
				_, path = file.split(/:/, 2)
				dropbox.open(path, opts){|f| yield f}
			else
				File.open(file, opts){|f| yield f}
			end
		end
	end
end

DCP::CLI.new.run

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dcp-0.1.1 exe/dcp