storazzo 0.4.2 → 0.4.10

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
  SHA256:
3
- metadata.gz: 6a489f7c8e545a123a224850369894e939e8bc541ca2b00ce4f2306493144ec2
4
- data.tar.gz: 35f76e4a92849cb0547910ac8f240b38dda4cecaf70ceec0b6d665d6d5d3ce5f
3
+ metadata.gz: 5daaa9b1dd1c5fdb4add46ef4a555e11fc687af712abcdca960dda63f53a9a68
4
+ data.tar.gz: 94e3cf858663fbda25ea5c5b88a48a5a739dda68f03d1cd0ae9bc5e6b8931416
5
5
  SHA512:
6
- metadata.gz: 3d69dbf50b340e06833ba28cf4219ee6aca33b5466e442377597c825ae0c2adaef2d8be3b4330adee8dde52d693e84f3f69c5208df767e988268f45359e36f27
7
- data.tar.gz: ef9ce00d9af13c84aa2db03996ea383af7494007a2bdd94f799d4720d2cc2aae63106e7bbf74db555c6574180f3948305712d115f757f07a196d96958da74ef5
6
+ metadata.gz: 78a52266ddbebde9fde082ba83d99c78dc1d13449c9f43e7616df1dba87f71e0ce2985c5027872b394ae4bbff1627bc9338e1539d1c18c8d39289c433d4bd058
7
+ data.tar.gz: bfbf724e1726508fbc714ec1f068771f8f279bb475666137ae43771e26ccb3b4f6a87dd73a383e4404490987a1f756804e6956daed2209fa28d514dc148caa30
data/Gemfile CHANGED
@@ -1,7 +1,9 @@
1
- # useless now
2
-
1
+ source "https://rubygems.org"
3
2
 
4
3
  # to troubleshoot/debug things
5
4
  #gem 'rubocop'
6
5
  gem 'rake'
7
- gem 'pry'
6
+ #gem 'pry'
7
+ gem 'pry', :group => :development
8
+ #gem 'require_all' # yup I'm lazy: https://stackoverflow.com/questions/735073/best-way-to-require-all-files-from-a-directory-in-ruby
9
+ #gem 'after_do' # To allow AFTER calling instance to do LOAD() automagically. Naah I can do without :)
data/Makefile CHANGED
@@ -51,4 +51,23 @@ watch-test:
51
51
  watch -c make test
52
52
 
53
53
  test-gcs-bucket:
54
- ruby -I test test/test_gcs_bucket.rb
54
+ #echo "Warning this uses the INCLUDED gem not the latest one in development'
55
+ #ruby -I test test/media/test_gcs_bucket.rb
56
+ rake test TEST=test/media/test_gcs_bucket.rb
57
+
58
+ test-local-folder:
59
+ echo "Warning this uses the INCLUDED gem not the latest one in development'
60
+ ruby -I test test/media/test_local_folder.rb
61
+ # https://medium.com/@tegon/quick-guide-to-minitest-arguments-745bf9fe4b3
62
+ test-media-subfolder:
63
+ rake test TEST="test/media/*.rb"
64
+ test-verbose:
65
+ rake test:verbose --verbose
66
+ test-single-file-continuously:
67
+ \watch -n 5 --color rake test TEST="test/media/test_local_folder.rb"
68
+
69
+ test-binary-with-local-gem:
70
+ ruby -Ilib bin/hello-storazzo
71
+ test-binary-with-system-gem:
72
+ bin/hello-storazzo
73
+
data/README.md CHANGED
@@ -9,6 +9,29 @@
9
9
 
10
10
  (Latest version is hosted in https://rubygems.org/gems/storazzo)
11
11
 
12
+ # Tests
13
+
14
+ I still struggle to enforce the include of LOCAL unchecked code rather than latest required system gem (cmon Ruby!)
15
+ but I found loads of interesting ways to test my code by googling and StoackOverflowing:
16
+
17
+ * `rake test TEST="test/sum_test.rb"`
18
+ * test-gcs-bucket: `ruby -I test test/test_gcs_bucket.rb` (meh - see below)
19
+ * test-media-subfolder: `rake test TEST="test/media/*.rb"`
20
+
21
+ Single test in single file:
22
+
23
+ * `rake test TEST="test/sum_test.rb" TESTOPTS="--name=test_returns_two"` (sample)
24
+ * `rake test TEST="test/media/test_local_folder.rb" TESTOPTS="--name=test_1_first_directory_parsing_actually_works"`
25
+ * `ruby -I test test/test_local_folder.rb -n test_first_directory_parsing_actually_works` (note this includes `storazzo` latest gem
26
+ and doesnt benefit from LATEST code so its NOT good for testing: use RAKE for that).
27
+
28
+ **Testing binary files** is hard: by default they 'require storazzo' and use the GEM INSTALLed version which is a few versions away, usually.
29
+ So while developing you might want to include the lib/ folder, like this:
30
+
31
+ * Use local gem (super latest) for checking latest code: `ruby -Ilib bin/hello-storazzo`
32
+ * This will use the gem installed a few days ago, likely so wont do you any good to test latest code: `bin/hello-storazzo`
33
+
34
+ Now to toggle verbosity I believe I need to go into Rakefile (bummer)
12
35
  # Thanks
13
36
 
14
37
  Inspiration from:
data/Rakefile CHANGED
@@ -3,15 +3,42 @@
3
3
  # from hola: https://guides.rubygems.org/make-your-own-gem/#adding-an-executable
4
4
  require "rake/testtask"
5
5
 
6
- Rake::TestTask.new do |t|
6
+ desc "Run Unit tests"
7
+ Rake::TestTask.new(:test) do |t|
7
8
  t.libs << "test"
9
+ t.libs << "test/media"
10
+ # note this is only useful for this: https://chriskottom.com/articles/command-line-flags-for-minitest-in-the-raw/
8
11
  t.verbose = false
9
12
  t.warning = false
13
+ #puts "[RiccardoOnly]: t.pattern: #{t.pattern}"
14
+ t.pattern = 'test/**/test_*.rb'
10
15
  end
11
16
 
12
- desc "Run tests"
17
+ desc "By default, Run Unit tests"
13
18
  task default: :test
14
19
 
20
+ # Adding test/media directory to rake test.
21
+ desc "Test tests/media/* code sobenem"
22
+ namespace :test do
23
+ desc "Test Verbosely by default since I'm too stupid to toggle via ENV var dammit"
24
+ Rake::TestTask.new(:verbose) do |t|
25
+ t.libs << "test"
26
+ t.libs << "test/media"
27
+ t.verbose = true
28
+ t.warning = true
29
+ t.pattern = 'test/**/test_*.rb'
30
+ $DEBUG = true
31
+ end
32
+ end
33
+ # namespace :verbose_test do
34
+ # desc "Test tests/media/* code"
35
+ # Rake::TestTask.new do |t|
36
+ # t.libs << "test/media"
37
+ # # Rails::TestTask.new(media: 'test:prepare') do |t|
38
+ # t.pattern = 'test/**/test_*.rb'
39
+ # end
40
+ # end
41
+ #Rake::Task['test:run'].enhance ["test:media"]
15
42
 
16
43
  # begin
17
44
  # require 'bundler/setup'
@@ -29,4 +56,7 @@ task default: :test
29
56
  # RuboCop::RakeTask.new do |task|
30
57
  # task.requires << 'rubocop-performance'
31
58
  # task.requires << 'rubocop-rspec'
32
- # end
59
+ # end
60
+
61
+
62
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.4.10
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'storazzo'
4
+
5
+ Storazzo::Main.say_hi(ARGV[0])
6
+
data/bin/ricdisk-magic CHANGED
@@ -168,7 +168,6 @@ end
168
168
  def main(filename)
169
169
  deb "I'm called by #{white filename}"
170
170
  deb "HISTORY: #{gray HISTORY}"
171
- #deb "To remove this shit, just set $DEBUG=false :)"
172
171
  init # Enable this to have command line parsing capabilities!
173
172
  puts white("$DEBUG is #{$DEBUG }. Tu turn on, call me with -d") unless $DEBUG
174
173
  #warn "[warn] template v#{$TEMPLATE_VER }: proviamo il warn che magari depreca il DEB"
data/bin/stats-with-md5 CHANGED
@@ -110,43 +110,10 @@ def compute_stats_and_md5(file)
110
110
  begin
111
111
  stats = File.stat(file)
112
112
  ret[:stats_object] = stats # TODO deprecate
113
- deb("Stats methods: #{stats.methods.sort.join(', ')}")
114
- #deb(stats.ftype)
115
- #puts(stats.methods)
116
- deb(stats.ctime)
113
+ #deb("Stats methods: #{stats.methods.sort.join(', ')}")
114
+ #deb(stats.ctime)
117
115
  #puts(stats.birthtime rescue (stats.ctime))
118
-
119
- # On Mac:
120
- #<File::Stat
121
- # dev=0x100000f,
122
- # ino=1247768,
123
- # mode=0100644 (file rw-r--r--),
124
- # nlink=1,
125
- # uid=164825 (ricc),
126
- # gid=89939 (primarygroup),
127
- # rdev=0x0 (0, 0),
128
- # size=564,
129
- # blksize=4096,
130
- # blocks=8,
131
- # atime=2022-03-05 22:36:48.373362127 +0100 (1646516208),
132
- # mtime=2022-03-05 22:36:48.176789949 +0100 (1646516208),
133
- # ctime=2022-03-05 22:36:48.176789949 +0100 (1646516208)>
134
-
135
- # On LInux:
136
- #<File::Stat
137
- # dev=0xfe01,
138
- # ino=6293055,
139
- # mode=0100644 (file rw-r--r--),
140
- # nlink=1,
141
- # uid=164825 (ricc),
142
- # gid=89939 (primarygroup),
143
- # rdev=0x0 (0, 0),
144
- # size=7,
145
- # blksize=4096,
146
- # blocks=8,
147
- # atime=2022-06-27 08:49:38.586706861 +0200 (1656312578),
148
- # mtime=2022-03-23 14:28:45 +0100 (1648042125),
149
- # ctime=2022-05-30 10:12:10.381629305 +0200 (1653898330)>
116
+ # On Mac/Linux: see test/dumps/***.yaml
150
117
  ret[:size] = stats.size
151
118
  ret[:mode] = stats.mode
152
119
  # datetimes
@@ -175,7 +142,7 @@ def compute_stats_and_md5(file)
175
142
  ret
176
143
  end
177
144
 
178
- $print_stats_and_md5_version = "1.1a_220624_F" # files
145
+ $print_stats_and_md5_version = "1.1b_220805_F" # files
179
146
  $print_stats_and_md5_counter = 0
180
147
  $print_stats_and_md5_for_gcs_version = "1.1alpha_220628_G" #GCS bucket
181
148
 
@@ -235,7 +202,6 @@ def print_stats_and_md5_for_gcs(mybucket_with_subdir, opts={})
235
202
  puts "print_stats_and_md5_for_gcs(): Generic Error: #{$!}"
236
203
  exit 1
237
204
  end
238
-
239
205
  autowrite_to_dir_or_gcs(:gcs, mybucket_with_subdir) if opts_autowrite
240
206
  end
241
207
 
@@ -364,16 +330,22 @@ def autowrite_to_dir_or_gcs(fs_type, path, opts={})
364
330
  return :ok
365
331
  end
366
332
 
367
- def print_stats_and_md5_for_directory(directory_to_explore_recursively, opts={})
368
- puts "# [print_stats_and_md5_for_directory] DIR to explore (make sure you glob also): #{directory_to_explore_recursively }"
369
- puts "# DEB Options: #{opts}"
370
-
333
+ def print_stats_and_md5_for_directory_from_cli(directory_to_explore_recursively, opts={})
334
+ puts "# [print_stats_and_md5_for_directory_from_cli] v#{$print_stats_and_md5_version}] DIR to explore (make sure you glob also): #{directory_to_explore_recursively }"
371
335
  opts_autowrite = opts.fetch :autowrite, false
336
+ opts_verbose = opts.fetch( :verbose, $opts[:verbose])
337
+ opts_debug = opts.fetch :debug, $opts[:debug]
338
+ opts_color = opts.fetch :color, $opts[:color]
339
+ if opts_debug
340
+ puts "# DEB Options1 opts (FUNC) BAD: s #{opts}" # probably useless since this is invoked by CLI and has ful fledged options.
341
+ puts "# DEB Options2 $opts (ARGV) GOOD: #{$opts}" # This is what we ewant in this CLI. TODO(ricc): if you move this function to be used as function invert the priority...
342
+ puts("# DEB version=#{$print_stats_and_md5_version} host=#{Socket.gethostname}(#{`uname`.chomp}) created_on=#{Time.now}") # if ARGV.size > 0
343
+ end
372
344
 
373
345
  Dir.glob("#{(directory_to_explore_recursively)}/**/*") do |globbed_filename|
374
346
  # Do work on files & directories ending in .rb
375
347
  #puts "[deb] #{globbed_filename}"
376
- print_stats_and_md5(globbed_filename, :color => $opts[:color], :verbose => $opts[:verbose], :autowrite => $opts[:autowrite])
348
+ print_stats_and_md5(globbed_filename, :color => opts_color, :verbose => opts_verbose, :autowrite => opts_autowrite)
377
349
  end
378
350
 
379
351
  autowrite_to_dir_or_gcs(:dir, directory_to_explore_recursively) if opts_autowrite
@@ -399,13 +371,13 @@ def real_program
399
371
  if smells_like_gcs?(directory_to_explore_recursively)
400
372
  print_stats_and_md5_for_gcs(directory_to_explore_recursively, common_opts)
401
373
  else # normal file..
402
- print_stats_and_md5_for_directory(directory_to_explore_recursively, common_opts)
374
+ print_stats_and_md5_for_directory_from_cli(directory_to_explore_recursively, common_opts)
403
375
  end
404
376
  elsif ARGV.size > 1
405
377
  deb "2. I expect a lot of single files or directories:"
406
378
  for arg in ARGV
407
379
  if File.directory?(arg)
408
- print_stats_and_md5_for_directory(arg, common_opts )
380
+ print_stats_and_md5_for_directory_from_cli(arg, common_opts )
409
381
  else
410
382
  print_stats_and_md5(arg, common_opts)
411
383
  end
@@ -415,7 +387,9 @@ def real_program
415
387
  exit 41
416
388
  end
417
389
  tf = Time.now
418
- puts "# [#{File.basename $0}] Time taken for processing #{stats_and_md5_number_of_files_processed} files: #{tf-t0}"
390
+ #rounding to 3 decimals
391
+ approx_delta = (tf-t0).round(3)
392
+ puts "# [#{File.basename $0}] Time taken for processing #{stats_and_md5_number_of_files_processed} files: #{approx_delta} seconds"
419
393
  end
420
394
 
421
395
  def main(filename)
@@ -1,10 +1,34 @@
1
1
  # Ric common stuff! :)
2
2
  #
3
- #
4
3
  # Usage:
5
- # include Storazzo::Common
4
+ # include Storazzo::Common (def to def)
5
+ # or
6
+ # extend Storazzo::Common (def to def self.XX)
6
7
  #
8
+ =begin
9
+ Emoji to copy:
10
+ 👍 👎 👌 ✌ 👋 🤝 👏 🤘 🤟 🤙 🤏 🙌 🙏 🖖 🤞 ✋ 🤚 🖐 🖑 🤲 👐 👊 🤛 🤜 🖕
11
+ 👈 👉 👆 👇
12
+ ☺ ☻ 😃 😄 😅 😆 😊 😎 😇 😈 😏 🤣 🤩 🤪 🥳 😁 😀 😂 🤠 🤡 🤑 🤓 🤖 kiss
13
+ 😗 😚 😘 😙 flirting
14
+ 😉 🤗 😍 🥰 🤤 😋 😛 😜 😝 neutral
15
+ 😶 🙃 😐 😑 🤔 🤨 🧐 hush
16
+ 🤭 🤫 😯 🤐 😌 😖 😕 😳 😔 🤥 🥴 shocked
17
+ 😮 😲 🤯 tired
18
+ 😩 😫 🥱 😪 😴 😵 sad
19
+ ☹ 😦 😞 😥 😟 cry
20
+ 😢 😭 sick
21
+ 🤢 🤮 😷 🤒 🤕 🥵 🥶 fear
22
+ 🥺 😬 😓 😰 😨 😱 angry
23
+ 😒 😠 😡 😤 😣 😧 🤬 😸 😹 😺 😻 😼 😽 😾 😿 🙀 🙈 🙉 🙊
24
+ [see Animal Emoji 🐰] gesture
25
+ 🤦 🤷 🙅 🙆 🙋 🙌 🙍 🙎 🙇 🙏 activity
26
+ 👯 💃 🕺 🤳 💇 💈 💆 🧖 🧘 🧍 🧎 👰 🤰 🤱 faces
27
+ 👶 🧒 👦 👧 👩 👨 🧑 🧔 🧓 👴 👵 👤 👥 👪 👫 👬 👭 👱 👳 👲 🧕 👸 🤴 🎅 🤶 disabled
28
+ 🧏 🦻 🦮 🦯 🦺 🦼 🦽 🦾 🦿 🤵 👮 👷 💁 💂 🕴 🕵 🦸 🦹 🧙 🧚 🧜 🧝 🧞 🧛 🧟 👼 👿 👻 👹 👺 👽 👾 🛸 💀 ☠ 🕱 🧠 🦴 👁 👀 👂 👃 👄 🗢 👅 🦷 🦵 🦶 💭 🗬 🗭 💬 🗨 🗩 🗪 🗫 🗰 🗱 🗮 🗯 🗣 🗤 🗥 🗦 🗧 💦 💧 💢 💫 💤 💨 💥 💪 🗲 🔥 💡 💩 💯 🔟 🔰 🕲
29
+ =end
7
30
  require_relative 'colors'
31
+ require 'pry'
8
32
 
9
33
  module Storazzo::Common
10
34
 
@@ -12,16 +36,49 @@ module Storazzo::Common
12
36
 
13
37
 
14
38
  def deb(s)
15
- puts "[DEB] #{yellow(s)}" if $DEBUG
39
+ puts "[DEB👀] #{yellow(s)}" if _debug_true # $DEBUG
40
+ end
41
+ # this has a yield
42
+ def if_deb?()
43
+ if _debug_true # $DEBUG
44
+ deb "== yield START =="
45
+ yield
46
+ deb "== yield END =="
47
+ end
16
48
  end
17
49
  def warn(s)
18
- puts "[WRN] #{azure(s)}"
50
+ puts "[W⚠️RN] #{azure(s)}"
19
51
  end
20
52
  def err(str)
21
- puts "[ERR] #{red(s)}"
53
+ puts "[ERR👎] #{red(s)}" # ⛔
22
54
  end
23
55
  def bug(s)
24
56
  puts "[🐛] #{gray s}"
25
57
  end
58
+ def pverbose(is_verbose, str)
59
+ #puts "[V📚RB💀S📚] #{gray str}"
60
+ puts "[🦋🐛🐝🐞🐜🕷🕸🦂🦗🦟] #{gray str}" # insects: http://xahlee.info/comp/unicode_insects.html
61
+ end
62
+ def ppp(complex_object_to_colorize)
63
+ # TODO i need to learn to return without printing..
64
+ Pry::ColorPrinter.pp(complex_object_to_colorize)
65
+ end
66
+
67
+ def fatal(s)
68
+ raise "[F💀TAL] #{red s}"
69
+ end
70
+
71
+ def mac?
72
+ `uname`.chomp == 'Darwin'
73
+ end
74
+ def linux?
75
+ `uname`.chomp == 'Linux'
76
+ end
77
+
78
+ private
79
+ def _debug_true
80
+ $DEBUG or ENV["DEBUG"] == 'true'
81
+ end
26
82
 
83
+ # puts "[DEBUG ENABLED!]" if _debug_true
27
84
  end
data/lib/storazzo/main.rb CHANGED
@@ -20,11 +20,16 @@ module Storazzo
20
20
 
21
21
  # version 1.2
22
22
  def self.say_hi(message=nil)
23
- str = "Hello from Storazzo v#{white Storazzo::version rescue "Error: #{$!}"}!"
24
- str += " Message: '#{yellow message.to_s}'" if message
23
+ str = get_hi(message)
25
24
  puts str
26
25
  str
27
26
  end
27
+ # salutation
28
+ def self.get_hi(message=nil)
29
+ str = "Hello from Storazzo v#{white Storazzo::version rescue "Error: #{$!}"}!"
30
+ str += " Message: '#{yellow message.to_s}'" if message
31
+ str
32
+ end
28
33
 
29
34
  def self.all_mounts(opts={})
30
35
  opts_verbose = opts.fetch :verbose, true
@@ -1,23 +1,35 @@
1
1
  module Storazzo::Media
2
2
  class Storazzo::Media::AbstractRicDisk
3
+ #include Storazzo::Common
4
+ extend Storazzo::Common
3
5
 
4
- #@@default_stats_filename = Storazzo::RicDiskStatsFile.default_name
6
+ #DefaultStatsFilename = Storazzo::RicDiskStatsFile.default_name
5
7
 
6
8
  # looks like there's not Abstract Class in Ruby, but also SO says he best
7
9
  # way to do this is this:
8
10
 
9
11
  # attr_accessor :name, :description, :ricdisk_file, :local_mountpoint, :wr, :path, :ricdisk_file_empty, :size, :active_dirs
10
-
12
+ attr_accessor :description
11
13
  ########################
12
14
  # Abstract methods START
13
15
  ########################
14
16
  def initialize(local_mount)
15
- puts "[DEB] [AbstractRicDisk.init()] Some child of AbstractRicDisk (#{self}) called me! Yummie." # disable when you dont need me anymore..
16
- validate
17
+ deb "[AbstractRicDisk.init()] Some child of AbstractRicDisk (#{self}) called me! Yummie." # disable when you dont need me anymore..
18
+ @description ||= "Not provided"
19
+ #validate
17
20
  end
18
21
  def self.list_all
19
22
  raise "[AbstractRicDiskc::self.list_all] You should override this, says StackOverflow and Riccardo"
20
23
  end
24
+ def self.list_all_with_type
25
+ raise "[AbstractRicDiskc::self.list_all_with_type] You should override this, says StackOverflow and Riccardo"
26
+ end
27
+ def self.super_duper_list_all_with_type
28
+ deb "Would be cool to be able to enumerate them all.."
29
+ GcsBucket.list_all_with_type +
30
+ MountPoint.list_all_with_type +
31
+ LocalFolder.list_all_with_type
32
+ end
21
33
  def parse(opts={})
22
34
  raise "[AbstractRicDiskc::parse] You should override this, says StackOverflow and Riccardo"
23
35
  end
@@ -50,7 +62,7 @@ module Storazzo::Media
50
62
  # if not writeable, I will:
51
63
  # 1. create a dir based on its unique format.
52
64
  # 2. create a file of same look and feel (alternative - used a DASH)
53
- return "{get_local_folder}/#{unique_id}::#{self.default_stats_filename}"
65
+ return "TODO FIXME {get_local_folder}/#{unique_id}::#{self.default_stats_filename}"
54
66
  #"{get_local_folder}"/#{unique_id}/#{Storazzo::RicDiskStatsFile.default_name}"
55
67
  end
56
68
  end
@@ -63,10 +75,30 @@ module Storazzo::Media
63
75
  "MD5::v1::#{hash}"
64
76
  end
65
77
 
78
+ def to_s(verbose=false)
79
+ return to_verbose_s() if verbose
80
+ readable_class = self.class.to_s.split('::').last # Storazzo::Media::LocalFolder => LocalFolder
81
+ my_keys = self.instance_variables # wow!
82
+ "S:M:#{readable_class}(path=#{path}, r/w=#{wr}, keys=#{my_keys})"
83
+ end
84
+
85
+ def to_verbose_s
86
+ h = {}
87
+ h[:class] = self.class
88
+ h[:unique_id] = self.unique_id
89
+ h[:inspect] = self.inspect
90
+ h[:to_s] = self.to_s
91
+ h[:local_mountpoint] = local_mountpoint
92
+ h[:writeable] = self.writeable?
93
+ h[:stats_file_smart_fullpath] = stats_file_smart_fullpath
94
+ return h
95
+ end
96
+
66
97
  # # Todo check on instances these 3 methods exist
67
98
  def self.abstract_class_mandatory_methods
68
99
  %W{
69
100
  self.list_all
101
+ self.list_all_with_type
70
102
  local_mountpoint
71
103
  parse
72
104
  writeable?
@@ -76,7 +108,9 @@ module Storazzo::Media
76
108
  # Putting here since its same code for MountPoint or generic folder.
77
109
  def parse_block_storage_folder(opts={})
78
110
  #Storazzo::RicDiskUgly.calculate_stats_files(get_local_mountpoint)
79
- Storazzo::RicDisk.calculate_stats_files(get_local_mountpoint, opts)
111
+ rd = Storazzo::RicDisk.new(self)
112
+ #Storazzo::RicDisk
113
+ rd.compute_stats_files(opts)
80
114
  #return "42"
81
115
  end
82
116
 
@@ -92,15 +126,29 @@ module Storazzo::Media
92
126
  "#{local_mountpoint}/#{my_stats_filename}"
93
127
  end
94
128
 
95
- def validate
96
- puts "DEB We're trying to see if your object is valid, across 3 possible sub-classes."
129
+ def validate(opts={})
130
+ verbose = opts.fetch(:verbose, true)
131
+ puts "[VERBOSE] validate(): We're trying to see if your object is valid, across 3 possible sub-classes." if verbose
97
132
  #1. check for
98
133
  raise "Unknown local mount " unless local_mount.is_a?(String)
99
134
  #2. check thaty writeable? is true or false
100
135
  my_writeable = wr
101
136
  raise "Writeable is not boolean" unless (my_writeable.is_a? TrueClass or my_writeable.is_a? FalseClass )
102
137
  end
138
+
139
+ # TODO use a proper Factory pattern.
140
+ def self.DirFactory(path)
141
+ raise "I need a path/directory string: #{path}" unless path.is_a?(String)
142
+
143
+ deb "TODO: if coincides with MountPoint, instance THAT"
144
+ # if path in Storazzo::Media::MountPoint.list_all_mount_points
145
+ # then return ...
146
+ if path =~ /^gs:\/\//
147
+ deb "Smells like GCS"
148
+ return GcsBucket.new(path)
149
+ end
150
+ deb "Smells like LocalFolder :)"
151
+ return LocalFolder.new(path)
152
+ end
103
153
  end
104
- #puts "DEB lib/storazzo/media/abstract_ric_disk Media::ARD inside module"
105
154
  end
106
- #puts "DEB lib/storazzo/media/abstract_ric_disk Media::ARD outside module"
@@ -2,6 +2,20 @@ module Storazzo::Media
2
2
 
3
3
  class Storazzo::RicDisk::GcsBucket
4
4
 
5
+ extend Storazzo::Common
6
+
7
+ attr_accessor :project_id
8
+
9
+ def initialize(local_mount, project_id=nil)
10
+ deb "[Storazzo::Media::GcsBucket] initialize"
11
+
12
+ @local_mountpoint = File.expand_path(local_mount)
13
+ @description = "MountPoint in '#{local_mount}' pointing at TODO with mount options = TODO"
14
+ @project_id = project_id
15
+ raise "Sorry local mount doesnt exist!" unless File.exist?(@local_mountpoint)
16
+ @wr = writeable? # File.writable?(stats_filename_default_fullpath) # .writeable? stats_file_smart_fullpath
17
+ super(local_mount) rescue "SUPER_ERROR(#{local_mount}): #{$!}"
18
+ end
5
19
 
6
20
  def self.list_all(config=nil)
7
21
  # get lisrts from Config singletone
@@ -13,8 +27,29 @@ module Storazzo::Media
13
27
  #puts "TODO see config: #{config}"
14
28
  #[42, 43]
15
29
  #deb config.get_local_folders
30
+ # TODO
31
+ pverbose true, "TODO(ricc): also add gsutil ls. For that please use the new 'list_all_with_type' (Id refactor it but Im afraid of leaving bad code dangling so before a proper refactor lets implement both side by side"
16
32
  config.get_bucket_paths
17
33
  end
34
+ def self.list_all_with_type(config=nil)
35
+ config ||= Storazzo::RicDiskConfig.instance
36
+ config.load # in case I need to load it for the first time
37
+ deb "TODO(ricc): also add gsutil ls"
38
+ # getFromConfig
39
+ deb "I'm now returning a 'complex' array to tell the caller what kind of element they're getting, eg: GCS from Config Yaml, vs GCS from gsutil ls "
40
+ list_from_config_with_type = config.get_bucket_paths.map{|path| [:config_gcs_bucket, path] }
41
+ if (config.project_id)
42
+ # so I concatenate Apples with Bananas with names
43
+ return list_from_config_with_type + list_available_buckets(config.project_id).map{|path| [:gsutil_ls_gcs_bucket, path] }
44
+ end
45
+ return list_from_config_with_type
46
+ end
47
+
48
+ def self.list_available_buckets(project_id, opts={})
49
+ list_of_buckets = `gsutil ls --project '#{project_id}'`.chomp.split("\n")
50
+ deb "list_of_buckets: #{list_of_buckets}"
51
+ list_of_buckets
52
+ end
18
53
 
19
54
 
20
55
  end
@@ -3,28 +3,26 @@
3
3
 
4
4
  module Storazzo::Media
5
5
  class Storazzo::Media::LocalFolder < Storazzo::Media::AbstractRicDisk
6
+ #extend Storazzo::Common
7
+ include Storazzo::Common
6
8
 
7
9
  attr_accessor :local_mountpoint, :wr
8
10
 
9
11
  def initialize(local_mount)
10
- puts "[Storazzo::Media::LocalFolder] initialize"
12
+ deb "[Storazzo::Media::LocalFolder] initialize"
11
13
 
12
14
  @local_mountpoint = File.expand_path(local_mount)
15
+ @description = "Local Folder originally in '#{local_mount}'"
13
16
  raise "Sorry local mount doesnt exist!" unless File.exist?(@local_mountpoint)
14
- @wr = File.writable?(stats_filename_default_fullpath) # .writeable? stats_file_smart_fullpath
15
-
17
+ @wr = writeable? # File.writable?(stats_filename_default_fullpath) # .writeable? stats_file_smart_fullpath
16
18
  #super.initialize(local_mount) rescue "SUPER_ERROR: #{$!}"
17
- super(local_mount) rescue "SUPER_ERROR: #{$!}"
19
+ super(local_mount) rescue "SUPER_ERROR(#{local_mount}): #{$!}"
18
20
  end
19
21
 
20
- def self.list_all
21
- # get lisrts from Config singletone
22
- #puts " self.list_all: loading config "
23
- config = Storazzo::RicDiskConfig.instance # # ).get_config
24
- #puts config['Config']['AdditionalMountDirs']
25
- #puts "TODO see config: #{config}"
26
- #[42, 43]
27
- #deb config.get_local_folders
22
+ def self.list_all(config=nil)
23
+ # get lists from Config singleton
24
+ config ||= Storazzo::RicDiskConfig.instance # # ).get_config
25
+ config.load
28
26
  config.get_local_folders
29
27
  end
30
28
 
@@ -1,4 +1,15 @@
1
1
  # TODO
2
+ module Storazzo::Media
3
+ class Storazzo::Media::MountPoint < Storazzo::Media::AbstractRicDisk
4
+ #puts "[REMOVEME] Storazzo::Media::MountPoint being read. REMOVEME when you see this :)"
5
+
6
+
7
+ def self.list_local_mount_points()
8
+ deb "Maybe its abuot time you refactor that method here :)"
9
+ RicDisk.interesting_mount_points()
10
+ end
11
+ end
12
+ end
2
13
 
3
14
  # def writeable?
4
15
  #File.writable?(@local_mountpoint)