rack2aws 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72ae29bf646a70f2cc5731fbad6ba8a1c61f2115
4
- data.tar.gz: 9464c44d339a1a1587795efde4b0d2f622aaebd8
3
+ metadata.gz: aea0008457829bc7e98f35545a31e64cc51be0b4
4
+ data.tar.gz: 069002f7d1973c702dcd20446ae8297ad4c57f5b
5
5
  SHA512:
6
- metadata.gz: 621b2fbfd728276c06cf70e45c5b777b84b740c36cc7ea33ab789a3064c56f51b92562bc4a7017a481aed2565cd692544619f5a084bb40ce670284a2d0e2dfaf
7
- data.tar.gz: 903d33fa596f8106bb4d5d2d6a6a1a1d0955135d4918119f078063ffd1450ff2cf68aeae8cb3a6e0d155b556201517d709dff772330e94f12c70957be2edbfe1
6
+ metadata.gz: a1aee03e5fedf609c2f110c51a590ecc2fbdcf23365624fe7625f894a2bad711c43c4f537d65acf24956bff9ea8be39c5048a7f711e6ab0eeee9965db86deac7
7
+ data.tar.gz: 39f110bba678f6e60e48c682009a7dc9ed74604fe81a6428871ea983a6b03fb323636d9b34ace726dbffc27d0e62507463bcfd5af8babef4413779b8d890fecc
@@ -1,32 +1,34 @@
1
1
  require 'fog'
2
2
  require 'commander'
3
3
  require 'rack2aws/config'
4
+ require 'rack2aws/logger'
4
5
  require 'rack2aws/version'
5
6
  require 'rack2aws/processor_count'
6
7
 
7
-
8
8
  module Rack2Aws
9
9
  class FileManager
10
10
  include Rack2Aws::Configuration
11
11
 
12
- attr_reader :per_page, :rackspace, :aws, :rackspace_directory, :aws_directory, :nproc, :verbose_mode, :files, :total
12
+ attr_reader :per_page, :rackspace, :aws,
13
+ :rackspace_directory, :aws_directory, :nproc,
14
+ :verbose_mode, :files, :total, :allow_public
13
15
 
14
16
  def initialize(options={})
15
17
  options = default_options.merge(options)
16
18
  @per_page = options[:per_page]
17
19
  @rackspace = Fog::Storage.new(RackspaceConfig.load())
18
20
  @aws = Fog::Storage.new(AWSConfig.load())
19
-
20
- @rackspace_directory = rackspace.directories.get(options[:rackspace_container])
21
- @aws_directory = aws.directories.get(options[:aws_bucket])
21
+ @rackspace_directory = rackspace.directories.get(options[:container])
22
+ @aws_directory = aws.directories.get(options[:bucket])
22
23
  @nproc = options[:nproc]
24
+ @allow_public = options[:public]
23
25
  @verbose_mode = options[:verbose]
24
26
  @files = []
25
27
  @total = 0
26
28
  end
27
29
 
28
30
  def default_options
29
- { :per_page => 10000 }
31
+ { :per_page => 10000, :public => false, :verbose => false }
30
32
  end
31
33
 
32
34
  def copy
@@ -86,22 +88,26 @@ module Rack2Aws
86
88
  aws_directory.files.create(:key => file.key,
87
89
  :body => file.body,
88
90
  :content_type => file,
89
- :public => false)
91
+ :public => allow_public)
90
92
  end
91
93
 
92
94
  private :copy_files, :copy_file
93
95
  end
94
96
 
95
97
  class CLI
98
+ include Rack2Aws::Logger
96
99
  include Commander::Methods
97
100
  include Rack2Aws::ProcessorCount
98
101
 
99
102
  def run
100
103
  program :name, 'rack2aws'
101
104
  program :version, Rack2Aws::VERSION
102
- program :description, 'Bridge from Rackspace Cloud Files to AWS S3'
105
+ program :description, 'Teleport your files from Rackspace Cloud Files to AWS S3'
103
106
  program :help, 'Author', 'Faissal Elamraoui <amr.faissal@gmail.com>'
104
107
 
108
+ # Show welcome message
109
+ show_welcome()
110
+
105
111
  global_option('--verbose', 'Explain what is being done') { $verbose = true }
106
112
 
107
113
  command :port do |cmd|
@@ -111,6 +117,7 @@ module Rack2Aws
111
117
  cmd.option '--container CONTAINER_NAME', String, 'Rackspace Cloud Files container name'
112
118
  cmd.option '--bucket BUCKET_NAME', String, 'AWS S3 bucket name'
113
119
  cmd.option '--nproc NUM_PROC', Integer, 'Number of processes to fork'
120
+ cmd.option '--public', 'Whether files should be uploaded as public'
114
121
  cmd.action do |args, options|
115
122
  if options.container.nil?
116
123
  options.container = ask('Rackspace Cloud Files container: ')
@@ -124,12 +131,20 @@ module Rack2Aws
124
131
  options.nproc = processor_count()
125
132
  end
126
133
 
127
- FileManager.new({
128
- :rackspace_container => options.container,
129
- :aws_bucket => options.bucket,
130
- :nproc => options.nproc,
131
- :verbose => $verbose
132
- }).copy
134
+ if !options.public.nil?
135
+ options.public = if agree(warn("Are you sure you want your files uploaded as public?"))
136
+ true
137
+ else
138
+ nil
139
+ end
140
+ end
141
+
142
+ options.verbose = !options.verbose.nil? ? true : nil
143
+
144
+ # Remove all nil values from options' __hash__ table
145
+ options.__hash__.delete_if{ |k,v| v.nil? }
146
+
147
+ FileManager.new(options.__hash__).copy
133
148
  end
134
149
  end
135
150
  run!
@@ -0,0 +1,23 @@
1
+ class String
2
+ def black; "\e[30m#{self}\e[0m" end
3
+ def red; "\e[31m#{self}\e[0m" end
4
+ def green; "\e[32m#{self}\e[0m" end
5
+ def brown; "\e[33m#{self}\e[0m" end
6
+ def blue; "\e[34m#{self}\e[0m" end
7
+ def magenta; "\e[35m#{self}\e[0m" end
8
+ def cyan; "\e[36m#{self}\e[0m" end
9
+ def gray; "\e[37m#{self}\e[0m" end
10
+ def bg_black; "\e[40m#{self}\e[0m" end
11
+ def bg_red; "\e[41m#{self}\e[0m" end
12
+ def bg_green; "\e[42m#{self}\e[0m" end
13
+ def bg_brown; "\e[43m#{self}\e[0m" end
14
+ def bg_blue; "\e[44m#{self}\e[0m" end
15
+ def bg_magenta; "\e[45m#{self}\e[0m" end
16
+ def bg_cyan; "\e[46m#{self}\e[0m" end
17
+ def bg_gray; "\e[47m#{self}\e[0m" end
18
+ def bold; "\e[1m#{self}\e[22m" end
19
+ def italic; "\e[3m#{self}\e[23m" end
20
+ def underline; "\e[4m#{self}\e[24m" end
21
+ def blink; "\e[5m#{self}\e[25m" end
22
+ def reverse_color; "\e[7m#{self}\e[27m" end
23
+ end
@@ -1,7 +1,6 @@
1
1
  require 'rack2aws/props_reader'
2
2
  require 'rack2aws/errors'
3
3
 
4
-
5
4
  # Class to parse configuration files in the format of "param = value".
6
5
  class KVConfigParser
7
6
  attr_accessor :config_file, :params, :groups
@@ -149,13 +148,13 @@ module Rack2Aws
149
148
 
150
149
  class RackspaceConfig
151
150
  def self.load()
152
- config_path = "#{ENV['HOME']}/.rack/config"
151
+ @config_path ||= "#{ENV['HOME']}/.rack/config"
153
152
 
154
- if !File.exist?(config_path)
153
+ if !File.exist?(@config_path)
155
154
  raise FileNotFoundError, "Rackspace configuration file not found"
156
155
  end
157
156
 
158
- props_reader = PropertiesReader.new(config_path)
157
+ props_reader = PropertiesReader.new(@config_path)
159
158
  return {
160
159
  :provider => 'Rackspace',
161
160
  :rackspace_api_key => props_reader.get("api-key"),
@@ -167,13 +166,13 @@ module Rack2Aws
167
166
 
168
167
  class AWSConfig
169
168
  def self.load()
170
- config_path = "#{ENV['HOME']}/.aws/credentials"
169
+ @config_path ||= "#{ENV['HOME']}/.aws/credentials"
171
170
 
172
- if !File.exist?(config_path)
173
- raise FileNotFoundError, "Rackspace configuration file not found".bold.red
171
+ if !File.exist?(@config_path)
172
+ raise FileNotFoundError, "AWS configuration file not found"
174
173
  end
175
174
 
176
- credentials = KVConfigParser.new(config_path)
175
+ credentials = KVConfigParser.new(@config_path)
177
176
  return {
178
177
  :provider => 'AWS',
179
178
  :region => credentials['default']['region'],
@@ -0,0 +1,24 @@
1
+ require 'artii'
2
+ require 'rack2aws/version'
3
+ require 'rack2aws/colorizer'
4
+
5
+ module Rack2Aws
6
+ module Logger
7
+
8
+ def show_welcome
9
+ welcome_art = Artii::Base.new
10
+ $stdout.puts "##############################################################".bold.blue
11
+ output = welcome_art.asciify("Rack2Aws").bold.blue
12
+ output << "v#{Rack2Aws::VERSION} (>o<)".bold.blue
13
+ $stdout.puts output
14
+ $stdout.puts "#############################################################".bold.blue
15
+ end
16
+
17
+ def warn(msg)
18
+ output = "WARNING: ".bold
19
+ output << msg
20
+ output.brown
21
+ end
22
+
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module Rack2Aws
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,20 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack2aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Faissal Elamraoui
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-17 00:00:00.000000000 Z
11
+ date: 2016-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.4'
20
+ - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 4.4.0
20
23
  type: :runtime
@@ -22,6 +25,9 @@ dependencies:
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.4'
30
+ - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 4.4.0
27
33
  - !ruby/object:Gem::Dependency
@@ -29,6 +35,9 @@ dependencies:
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.37'
40
+ - - ">="
32
41
  - !ruby/object:Gem::Version
33
42
  version: 1.37.0
34
43
  type: :runtime
@@ -36,8 +45,31 @@ dependencies:
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
47
  - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.37'
50
+ - - ">="
39
51
  - !ruby/object:Gem::Version
40
52
  version: 1.37.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: artii
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.1'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.1.1
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.1'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.1.1
41
73
  - !ruby/object:Gem::Dependency
42
74
  name: bundler
43
75
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +98,20 @@ dependencies:
66
98
  - - "~>"
67
99
  - !ruby/object:Gem::Version
68
100
  version: '10.0'
101
+ - !ruby/object:Gem::Dependency
102
+ name: rspec
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '3.4'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '3.4'
69
115
  description:
70
116
  email:
71
117
  - amr.faissal@gmail.com
@@ -76,8 +122,10 @@ extra_rdoc_files: []
76
122
  files:
77
123
  - bin/rack2aws
78
124
  - lib/rack2aws.rb
125
+ - lib/rack2aws/colorizer.rb
79
126
  - lib/rack2aws/config.rb
80
127
  - lib/rack2aws/errors.rb
128
+ - lib/rack2aws/logger.rb
81
129
  - lib/rack2aws/processor_count.rb
82
130
  - lib/rack2aws/props_reader.rb
83
131
  - lib/rack2aws/version.rb
@@ -104,5 +152,5 @@ rubyforge_project:
104
152
  rubygems_version: 2.5.1
105
153
  signing_key:
106
154
  specification_version: 4
107
- summary: Bridge from Rackspace Cloud Files to AWS S3
155
+ summary: Teleport your files from Rackspace Cloud Files to AWS S3
108
156
  test_files: []