reaver 0.7.1 → 0.10.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
  SHA256:
3
- metadata.gz: 32fb1834d726c5f6883514c899661f2a3ad42ed4dd53c5ab64fc0a97bcafe96e
4
- data.tar.gz: fd73c58c53c159e86cc523960b795b30e3ca91a4333ef5340207bc438d71f6e9
3
+ metadata.gz: 3dfb30ee44d119ba98c2d8f0aa24a12db7d333447aac2acd371a3a0a668c6685
4
+ data.tar.gz: 7ce4e56102a407c06ed8895dc1a9191c1070bcf3705fe4f61c8d6af9dc9a89b2
5
5
  SHA512:
6
- metadata.gz: 54ce812f876370d2579221723c9d005abfd6abb1568ff8617f2272016287a4cc98990e2a55202a8ab4a791d4d1148c7c5b0715e3d8fd3b4e74064687dde84c15
7
- data.tar.gz: 1e247b45ec3a47c90fa161c8e2677ae90dc8bea56b81e615db2a2c3f9c2ca68af82dc706825d412941b5aaabb398d5d06393bfd51c87c7780cadc638ecb2720f
6
+ metadata.gz: 3d51222bcd09ef5f123f14d17219fee0b2e59053b3743bea8efecf303004c8c7523176fd0afec27d5b396f68ac7246cc35bd3daf911941e09de23d61fb0e90c1
7
+ data.tar.gz: 98d6e1025629ac00371ae10c909363439662e80adb4d5d7ed233c34d2b1beb8921ea32868fc2b89cd7b271c21743a0b1e3d186d1c3fb5cdf3face02cc06887fe
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 0.10.0, release 10/2024
2
+ - New variable for collections, all_into_dir, things.dest_dir, keep_name and
3
+ force_download.
4
+ -** Use [Marcel](https://github.com/rails/marcel) to detect file mime.
5
+ - Can decompress archive `zip` or `tar.gz (gzip)` using unzip and tar from `unix`.
6
+ - Cam move files to specific directory.
7
+
1
8
  ## 0.7.0, release 12/24/22
2
9
 
3
10
  * Each collections download things in separate directory.
data/README.md CHANGED
@@ -1,7 +1,12 @@
1
1
  # reaver
2
2
 
3
3
  A tool that allows to download and track the latest version of stuff on the net.
4
- Define your collections in .yml and launch Reaver to retrieve everything.
4
+ Define your collections in .yml and launch Reaver to retrieve everything and
5
+ move things to the right spot.
6
+
7
+ ## Dependencies
8
+
9
+ Reaver need only `unzip` and `tar`.
5
10
 
6
11
  ## Collections
7
12
 
@@ -30,10 +35,24 @@ things:
30
35
  - name: nerdtree.tar.gz
31
36
  url: https://github.com/preservim/nerdtree/archive/refs/heads/master.tar.gz
32
37
  time: 86000
38
+ all_into_dir: ~/.config/pack/myvimpluggins/start
39
+ keep_name: true
33
40
  ```
34
41
 
35
- `time: 86000` (in second) is for search every day ( 60 * 60 * 24 ).
36
- The `name` must contain the path extension for now.
42
+ To see more examples, go
43
+ [here](https://github.com/szorfein/dots/tree/ansible/home/private_dot_config/reaver)
44
+
45
+ A collection can include:
46
+ - `all_into_dir: <dirname>` if all files go in a directory. Directory is created
47
+ if not exist.
48
+ - `keep_name: <boolean>`, if `true`, use the name of the thing for the dest, e.g, for a name `ombre.tar.gz`, the final dest will be `all_into_dir/ombre` or `dest_dir/ombre`.
49
+ - `force_download: <boolean>`, if you make change and want to download now, change to `true`.
50
+ - `things.dest_dir: <dirname>`, if each files go in differents directory, use this.
51
+ - `things.name` the new name after download, may include the file extension.
52
+ - `things.url: <string>`
53
+ - `time: 86000` (in second) is for search every day ( 60 * 60 * 24 ).
54
+
55
+ If `all_into_dir` is defined, `things.dest_dir` is not used.
37
56
 
38
57
  And start reaver simply with:
39
58
 
data/bin/reaver CHANGED
@@ -7,4 +7,4 @@ puts Reaver.banner
7
7
 
8
8
  Reaver.main
9
9
 
10
- puts "\nReaver v" + Reaver::VERSION
10
+ puts "\nReaver v#{Reaver::VERSION}"
@@ -5,6 +5,7 @@ require 'time'
5
5
  require 'digest'
6
6
 
7
7
  module Reaver
8
+ # Loading collection from ~/.config/reaver/<filename.yml> and threat them
8
9
  class Collection
9
10
  attr_reader :tasks
10
11
 
@@ -15,39 +16,59 @@ module Reaver
15
16
 
16
17
  def load_yaml
17
18
  puts ">> Loading #{@file}..."
18
- if RUBY_VERSION >= '3.0'
19
- @tasks = YAML.load_file(@file, permitted_classes: [Time, Symbol])
20
- else
21
- @tasks = YAML.load_file(@file)
22
- end
23
- rescue => error
24
- raise error, "loading YAML fail for #{@file}: #{error.message}"
19
+ @tasks = if RUBY_VERSION >= '3.0'
20
+ YAML.load_file(@file, permitted_classes: [Time, Symbol])
21
+ else
22
+ @tasks = YAML.load_file(@file)
23
+ end
24
+ rescue => e
25
+ raise e, "loading YAML fail for #{@file}: #{e.message}"
26
+ end
27
+
28
+ def save_yaml
29
+ in_yaml = YAML.dump(@tasks)
30
+ File.write(@file, in_yaml)
25
31
  end
26
32
 
27
33
  def launch(metadata)
28
- return unless @tasks
34
+ return unless @tasks || @tasks['things'].length.zero?
29
35
 
30
- if @tasks['things'].length >= 1
31
- @tasks['things'].each do |t|
32
- if File.exist? t['name']
33
- old_hash = Digest::MD5.file t['name']
34
- else
35
- @changed = true
36
- end
36
+ @tasks['things'].each do |task|
37
+ do_thing(task)
38
+ metadata.info['changed'] = @changed
39
+ end
40
+ end
37
41
 
38
- Reaver.download(t['url'], t['name'])
39
- compare_hash(t['name'], old_hash) if old_hash
42
+ protected
40
43
 
41
- metadata.info['changed'] = @changed
42
- end
43
- end
44
+ def do_thing(task)
45
+ hash_exist(task['name'])
46
+ Reaver.download(task['url'], task['name'])
47
+ compare_to_old_hash(task['name']) if @old_hash
48
+ need_to_do_something_with(task) if @changed || !@old_hash
49
+ @tasks['force_download'] = false
50
+ @changed = false
44
51
  end
45
52
 
46
53
  private
47
54
 
48
- def compare_hash(filename, old_hash)
55
+ def hash_exist(file)
56
+ if File.exist? file
57
+ @old_hash = Digest::MD5.file file
58
+ else
59
+ @changed = true
60
+ end
61
+ end
62
+
63
+ def compare_to_old_hash(filename)
49
64
  hash = Digest::MD5.file filename
50
- @changed = true if old_hash.hexdigest != hash.hexdigest
65
+ @changed = true if @old_hash.hexdigest != hash.hexdigest
66
+ end
67
+
68
+ def need_to_do_something_with(file)
69
+ dest = @tasks['all_to_dest_dir'] || file['dest_dir']
70
+ keep_name = @tasks['keep_name'] || false
71
+ Reaver::Walk.new(file['name'], dest, keep_name) if dest
51
72
  end
52
73
  end
53
74
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Reaver
4
- VERSION = '0.7.1'
4
+ VERSION = '0.10.0'
5
5
  end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'marcel'
4
+ require 'fileutils'
5
+
6
+ module Reaver
7
+ # extract, move file if need
8
+ class Walk
9
+ def initialize(filename, dest, keep_name)
10
+ @filename = filename
11
+ @dest = dest
12
+ @keep_name = keep_name || false
13
+ check_extension
14
+ check_name
15
+ x
16
+ end
17
+
18
+ def x
19
+ case @extension
20
+ when %r{^image/jpeg} || %r{^image/png}
21
+ copy_file
22
+ when %r{^application/zip}
23
+ extract_zip
24
+ when %r{^application/gzip}
25
+ extract_gzip
26
+ when %r{^font/ttf}
27
+ copy_file
28
+ else
29
+ puts "Filetype #{@extension} not yet supported, skipping..."
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def check_extension
36
+ File.open @filename do |f|
37
+ @extension = Marcel::MimeType.for f
38
+ end
39
+ end
40
+
41
+ def check_name
42
+ name = @filename.split('.').first
43
+ @final_dest = @keep_name ? "#{@dest}/#{name}" : @dest
44
+ end
45
+
46
+ def copy_file
47
+ puts "Copying file #{@filename} at #{@final_dest}..."
48
+ FileUtils.mkdir_p @final_dest
49
+ FileUtils.cp @filename, "#{@final_dest}/#{@filename}"
50
+ end
51
+
52
+ def extract_zip
53
+ puts "Extracting zip archive #{@filename} at #{@final_dest}..."
54
+ FileUtils.mkdir_p @final_dest
55
+ `unzip -j #{@filename} -d #{@final_dest}`
56
+ end
57
+
58
+ def extract_gzip
59
+ puts "Extracting gzip archive #{@filename} at #{@final_dest}..."
60
+ FileUtils.mkdir_p @final_dest
61
+ `tar -x --strip-components=1 -f #{@filename} --one-top-level=#{@final_dest}`
62
+ end
63
+ end
64
+ end
data/lib/reaver.rb CHANGED
@@ -5,6 +5,7 @@ require_relative 'reaver/banner'
5
5
  require_relative 'reaver/download'
6
6
  require_relative 'reaver/metadata'
7
7
  require_relative 'reaver/collection'
8
+ require_relative 'reaver/walk'
8
9
 
9
10
  require 'whirly'
10
11
  require 'fileutils'
@@ -22,8 +23,8 @@ module Reaver
22
23
 
23
24
  # Configure Whirly
24
25
  Whirly.configure spinner: 'bouncingBar',
25
- color: true,
26
- ambiguous_characters_width: 1
26
+ color: true,
27
+ ambiguous_characters_width: 1
27
28
 
28
29
  def self.main
29
30
  FileUtils.mkdir_p(WORKDIR)
@@ -40,22 +41,27 @@ module Reaver
40
41
  collection = Collection.new(f)
41
42
  collection.load_yaml
42
43
 
43
- if collection.tasks
44
- metadata = MetaData.new(workdir, collection)
45
- metadata.load_yaml
46
- next_download = metadata.info['next']
44
+ #puts collection.tasks
47
45
 
48
- if next_download < Time.new
46
+ next unless collection.tasks
47
+
48
+ metadata = MetaData.new(workdir, collection)
49
+ metadata.load_yaml
50
+ next_download = metadata.info['next']
51
+ force_download = collection.tasks['force_download'] || false
52
+ #puts "should we force #{force_download}"
53
+
54
+ if next_download < Time.new || force_download
49
55
  #puts ' >> Download time for ' + name
50
- FileUtils.chdir(workdir)
51
- #puts " > chdir #{workdir}"
52
- collection.launch(metadata)
53
- else
54
- puts " > Next download > #{next_download}"
55
- end
56
-
57
- metadata.save_yaml
56
+ FileUtils.chdir(workdir)
57
+ #puts " > chdir #{workdir}"
58
+ collection.launch(metadata)
59
+ collection.save_yaml if force_download
60
+ else
61
+ puts " > Next download > #{next_download}"
58
62
  end
63
+
64
+ metadata.save_yaml
59
65
  end
60
66
  end
61
67
  end
data/reaver.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  'changelog_uri' => 'https://github.com/szorfein/reaver/blob/main/CHANGELOG.md',
25
25
  'source_code_uri' => 'https://github.com/szorfein/reaver',
26
26
  'wiki_uri' => 'https://github.com/szorfein/reaver/wiki',
27
- 'funding_uri' => 'https://patreon.com/szorfein',
27
+ 'funding_uri' => 'https://patreon.com/szorfein'
28
28
  }
29
29
 
30
30
  s.files = Dir.glob('{lib,bin}/**/*', File::FNM_DOTMATCH).reject do |f|
@@ -38,10 +38,11 @@ Gem::Specification.new do |s|
38
38
  s.executables << 'reaver'
39
39
  s.extra_rdoc_files = %w[README.md]
40
40
 
41
- s.cert_chain = %w[certs/szorfein.pem]
42
- s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
41
+ # s.cert_chain = %w[certs/szorfein.pem]
42
+ # s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
43
43
 
44
44
  s.required_ruby_version = '>=2.6'
45
- s.add_dependency 'whirly', '~> 0.3'
45
+ s.add_dependency 'marcel'
46
46
  s.add_dependency 'paint', '~> 2.3'
47
+ s.add_dependency 'whirly', '~> 0.3'
47
48
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reaver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - szorfein
@@ -12,46 +12,46 @@ cert_chain:
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEhTCCAu2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDDAhzem9y
14
14
  ZmVpbjEaMBgGCgmSJomT8ixkARkWCnByb3Rvbm1haWwxEzARBgoJkiaJk/IsZAEZ
15
- FgNjb20wHhcNMjIwOTA4MDYyNjE5WhcNMjMwOTA4MDYyNjE5WjBEMREwDwYDVQQD
15
+ FgNjb20wHhcNMjMxMDIzMTcyMTA4WhcNMjQxMDIyMTcyMTA4WjBEMREwDwYDVQQD
16
16
  DAhzem9yZmVpbjEaMBgGCgmSJomT8ixkARkWCnByb3Rvbm1haWwxEzARBgoJkiaJ
17
- k/IsZAEZFgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDEJNhl
18
- Gd0JNHLXysR7GvbCKD+y1prQbmS333GpoFgPR2chEGv8Y7l0We2UFXCZ59CVOs1v
19
- KBVQhhNvxWAHWhfe/8stb1JFBxZpnCi7S0BGpqeblaGBXVlhBOzbZ6d1NrOwMfDS
20
- 6EzdX4WAOH55HnAz29T5KREUdbONVLU7HJNIIFVZvf6ethOv84pnkWbdWjV0RB3A
21
- ERYste5QHGx1YQOYGTuJMlu8113kqTbB8wpEw6X00aJwmXcJvnKXkhN5mxd06yss
22
- EE96lOk16raTWCh7DeYR3/ilVet3DpLlCvpFNtMIuko1HFa3HTW+57003VxD8Ozk
23
- VGQKn823D+ReujKh+jgxbl8Q+r652C9Wl1N+C5CSma4mDtNGKr0XmEOEQycpSx0z
24
- Z9J6/27wS8s6SJ0rLxueFQ6gb2oPEQb8jKJuNEuXWLmO3Idrwlv9Z7ymhnksjyqM
25
- fAw+NMGEOCITNphXmssazlLX+bnxcbpr7rbTHa1xBmmHoUVudAnxAG43PrMCAwEA
26
- AaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRzxda94CPF
27
- Ll9UQ5l55l65RCZuEzAiBgNVHREEGzAZgRdzem9yZmVpbkBwcm90b25tYWlsLmNv
17
+ k/IsZAEZFgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCqe1yx
18
+ EG2oM25jeHp08A8zkaDNmbI3MujjrRM/WPEYZX2dVwOxkIS20hQVuxcAsBBA4W/W
19
+ kuPbqRkvLboaGaxLrllkSEJw9HA/GesTdXLyCFYmNzSFqGh5BafNSkxoiDhTavxp
20
+ xvYzAkYR/3CzSOWSxJk73wIg+F7w/nWJPTt2tgJE9hgR8uuFY+EzPOlFZhkFTdCV
21
+ 88sBGuZPMjq7ASQVBE3UA+Y1xJeXE3/FhIhYvLnjevkkDLSLFmox0ZQf6nx6abuL
22
+ KTOGRA1bfLfkW5HMh5X5JwViliwG3RWhqAukJUgHTUk+oKtejlzSDqupwOenKZf0
23
+ xI2/BnS8zOsS6Te08iLxqZfI/lsG8wcPduekSetRI4VIOZ5QoRK54PiQjrOBhbnD
24
+ OQBB/XF1C80imZtRtdUqh6bK9WeWI4RYZ2/KwXL1AScEbXkBkkOECWoVrD18WgRm
25
+ siuX6RkNIelhtb0En7f3bizgPqlO0qPQV+wPi9TSBxdVG12C0OmjCQYMQD0CAwEA
26
+ AaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBTlKnQ3qMUF
27
+ zydvZaKwdP+dnj2uajAiBgNVHREEGzAZgRdzem9yZmVpbkBwcm90b25tYWlsLmNv
28
28
  bTAiBgNVHRIEGzAZgRdzem9yZmVpbkBwcm90b25tYWlsLmNvbTANBgkqhkiG9w0B
29
- AQsFAAOCAYEAPhavFyzIP60Zw7y40zJhzQpMK2IWtdw9HrRJq313Ea4UT1Kgv7F9
30
- lCFtQzI5XMzooYiLMoPz7xBMXaUz+DDFOOcgGSinVrFbfPA4rOGEkBjnlwC39lBc
31
- AiyXFzCV7Wqn4VhtqQQyvmoNYL4Q666K+nL8/nsXZWsXtRQ119LeAvrI2A+xmYAb
32
- FPE5bD3Jx1JCoJdVN1DmE4YYdM8mVmb0XjCK9Tp1M01EDKDvAX7f3B+X6A5D7uBq
33
- 63X6Kx09VkntVOrifd3W4TwjDlyAMpB+50OIi3ErPnH2R4i09qnCiZmcVWATBVKw
34
- e2QSloIAUZJwEFkrRqWPNVi8sr+BcMeuKpXaOwpbkP+xq/W2EKlUQKhPXMXS4jvC
35
- MuTi+RjpSNKZxzBrOlK2eMIpiFrugF7nzKcM9EGnWRWUb899drCcD4VJhjPtgpn+
36
- aEJeKq4/BlIwMlXPe+W5C8zp2i8hgG1/OYbwbGE1p2iRi1NIK7G/HyRqQjOqJxzE
37
- LLknX69FN7/G
29
+ AQsFAAOCAYEAFjnBWWfaMeA8hP0Q76WmBCFckGN5I42X5RQkVYRRXIaeXIS1td/t
30
+ O1v1iQLo6ABfASMi6We7T16+ita68xwNOmSkMNHHXBr/fdGbHExxFSX7BXNRbwla
31
+ SS6Vy0bXKMDJbXcvkrmIolpYhEFm1218FCRCT6ogM1oWAJAfhfF9pMeRxrxjQYFn
32
+ ko8XgjIHxb83miOILgdq/lgJ4gfD7PsGfJtLCLiCKCcxIb4TtmKAzRwCDVpb6wqM
33
+ 5xJZffAmHI7v8lVer53sPzm3INPu5xFZyfZ/SXYXPKKwln0efH63K5vuXYwEN7NI
34
+ SBSRTN03Hb65t86m6/r084SrNnLntQjCSqApzFBt1QwJ5cmiVilODN4V7y2hZpyK
35
+ hSk3b2VOotDPiWIm1p/IPXQDfm5x67Z5fJQPAlBTsse4jKyVyW1lZLmERSBuRZ2O
36
+ urXgRIzALxd/xazPCnoLSXPzfJSI6Y77S1EBvhPd9RaSO8IyH9RhPDP9mnTvW2Kl
37
+ NAUnoL+txK5a
38
38
  -----END CERTIFICATE-----
39
- date: 2022-12-28 00:00:00.000000000 Z
39
+ date: 2024-10-06 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
- name: whirly
42
+ name: marcel
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0.3'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0.3'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: paint
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: whirly
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.3'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.3'
69
83
  description: |2
70
84
  A tool that allows to download and track the latest version of stuff on the net.
71
85
  Define your collections in .yml and launch Reaver to retrieve everything.
@@ -86,6 +100,7 @@ files:
86
100
  - lib/reaver/download.rb
87
101
  - lib/reaver/metadata.rb
88
102
  - lib/reaver/version.rb
103
+ - lib/reaver/walk.rb
89
104
  - reaver.gemspec
90
105
  homepage: https://github.com/szorfein/reaver
91
106
  licenses:
@@ -111,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
126
  - !ruby/object:Gem::Version
112
127
  version: '0'
113
128
  requirements: []
114
- rubygems_version: 3.3.23
129
+ rubygems_version: 3.3.25
115
130
  signing_key:
116
131
  specification_version: 4
117
132
  summary: A tool to downloads and track updates of things on the Net.
metadata.gz.sig CHANGED
Binary file