bombay 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6995fb52e822ad155c50c7929a7739b5ec7d33634adf40406f922d2a7c5986a2
4
+ data.tar.gz: d580dba8b3d38f32c47e7fec855292203d91cc2a15f2f18d2a25e3210f47530f
5
+ SHA512:
6
+ metadata.gz: bdcaa147d64877122dae7fb9b16260a6c54c5cc83ee65f31a8ff0acc66dbed17007c11aa2e6a54be94a44480362c89491aa1a8630a6b79ba2c59d99609d98210
7
+ data.tar.gz: 7703560c17159d3a2230f01f5f7afed389f528843e68450240b7a977045512fc2787bb58648e7824196c72f17d064cc54f3329a745992a3c858f8dabf2860c25
data/.rubocop.yml ADDED
@@ -0,0 +1,13 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.6
3
+
4
+ Style/StringLiterals:
5
+ Enabled: true
6
+ EnforcedStyle: double_quotes
7
+
8
+ Style/StringLiteralsInInterpolation:
9
+ Enabled: true
10
+ EnforcedStyle: double_quotes
11
+
12
+ Layout/LineLength:
13
+ Max: 120
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in bombay.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
9
+
10
+ gem "rubocop", "~> 1.21"
data/Gemfile.lock ADDED
@@ -0,0 +1,40 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ bombay (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ast (2.4.2)
10
+ parallel (1.22.1)
11
+ parser (3.1.2.0)
12
+ ast (~> 2.4.1)
13
+ rainbow (3.1.1)
14
+ rake (13.0.6)
15
+ regexp_parser (2.4.0)
16
+ rexml (3.2.5)
17
+ rubocop (1.29.1)
18
+ parallel (~> 1.10)
19
+ parser (>= 3.1.0.0)
20
+ rainbow (>= 2.2.2, < 4.0)
21
+ regexp_parser (>= 1.8, < 3.0)
22
+ rexml (>= 3.2.5, < 4.0)
23
+ rubocop-ast (>= 1.17.0, < 2.0)
24
+ ruby-progressbar (~> 1.7)
25
+ unicode-display_width (>= 1.4.0, < 3.0)
26
+ rubocop-ast (1.18.0)
27
+ parser (>= 3.1.1.0)
28
+ ruby-progressbar (1.11.0)
29
+ unicode-display_width (2.1.0)
30
+
31
+ PLATFORMS
32
+ x86_64-linux
33
+
34
+ DEPENDENCIES
35
+ bombay!
36
+ rake (~> 13.0)
37
+ rubocop (~> 1.21)
38
+
39
+ BUNDLED WITH
40
+ 2.3.14
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # bombay
2
+
3
+ `bombay` sorts the files in your working directory by filetype, and
4
+ sends them to their appropriate `$XDG_*_DIR`.
5
+
6
+ ## Usage
7
+
8
+ Imagine you had this mess in your `~/Downloads`:
9
+
10
+ ```bash
11
+ $ ls -al ~/Downloads
12
+ .
13
+ ..
14
+ badger-sock.pdf
15
+ parallel-muffin.png
16
+ virtual-monkey.webp
17
+ student-steak.svg
18
+ kind-vulture.epub
19
+ funny-dialect.mp4
20
+ summer-dance.gif
21
+ [redacted]
22
+ ```
23
+
24
+ Let's tell `bombay` to clean it up:
25
+
26
+ ```bash
27
+ ~ $ cd Downloads
28
+
29
+ ~/Downloads $ bombay
30
+
31
+ ~ $ ls ~/Pictures
32
+ parallel-muffin.png student-steak.svg virtual-monkey.webp
33
+
34
+ ~ $ ls ~/Documents
35
+ badger-sock.pdf kind-vulture.epub
36
+
37
+ ~ $ ls ~/Videos
38
+ summer-dance.gif funny-dialect.mp4
39
+ ```
40
+
41
+ `bombay` will parse your `$XDG_CONFIG_HOME/user-dirs.dirs` to locate
42
+ the directories inside of which the files will be organized. Because
43
+ of this, it is limited to *Linux* for the moment.
44
+
45
+ ## Installation
46
+
47
+ ```
48
+ gem install bombay
49
+ ```
50
+
51
+ ## Copying
52
+
53
+ This software is licensed under the MIT license.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rubocop/rake_task"
5
+
6
+ RuboCop::RakeTask.new
7
+
8
+ task default: :rubocop
data/bombay.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/bombay/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "bombay"
7
+ spec.version = Bombay::VERSION
8
+ spec.authors = ["grtcdr"]
9
+ spec.email = ["ba.tahaaziz@gmail.com"]
10
+
11
+ spec.summary = "Organize your $(pwd)"
12
+ spec.homepage = "https://github.com/grtcdr/bombay"
13
+ spec.license = "MIT"
14
+ spec.required_ruby_version = ">= 2.6.0"
15
+
16
+ spec.metadata["homepage_uri"] = spec.homepage
17
+ spec.metadata["source_code_uri"] = spec.homepage
18
+
19
+ # Specify which files should be added to the gem when it is released.
20
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
+ spec.files = Dir.chdir(__dir__) do
22
+ `git ls-files -z`.split("\x0").reject do |f|
23
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
24
+ end
25
+ end
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bombay
4
+ VERSION = "0.1.0"
5
+ end
data/lib/bombay.rb ADDED
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "bombay/version"
4
+ require "fileutils"
5
+
6
+ # This module exposes the methods used to organize your $(pwd).
7
+ module Bombay
8
+ class Error < StandardError; end
9
+
10
+ def pwd_files
11
+ Dir.entries(FileUtils.pwd)
12
+ end
13
+
14
+ def filter_files(regexp)
15
+ pwd_files.keep_if { |ext| ext.match(regexp) }
16
+ end
17
+
18
+ def stack(files, dest_dir)
19
+ src_dir = FileUtils.pwd
20
+
21
+ return if src_dir == dest_dir
22
+
23
+ return if files.empty?
24
+
25
+ FileUtils.mkdir(dest_dir) unless File.directory?(dest_dir)
26
+
27
+ files.each { |f| FileUtils.mv(f, dest_dir) }
28
+ end
29
+ end
30
+
31
+ # Retrieves the values found inside $XDG_CONFIG_HOME/user-dirs.dirs.
32
+ class Directories
33
+ attr_reader :pictures, :videos, :documents
34
+
35
+ def config_directory
36
+ ENV["XDG_CONFIG_HOME"] || File.join(Dir.home, ".config")
37
+ end
38
+
39
+ def user_dirs
40
+ File.join(config_directory, "user-dirs.dirs")
41
+ end
42
+
43
+ def parse_entry(line)
44
+ entry = line.split("=")
45
+ key = entry.first
46
+ value = entry.last.tr('"', "").gsub("$HOME", Dir.home).strip
47
+ [key, value]
48
+ end
49
+
50
+ def initialize
51
+ File.open(user_dirs).each do |line|
52
+ xdg_dir = parse_entry(line)
53
+ case xdg_dir.first
54
+ when "XDG_DOCUMENTS_DIR" then @documents = xdg_dir.last
55
+ when "XDG_PICTURES_DIR" then @pictures = xdg_dir.last
56
+ when "XDG_VIDEOS_DIR" then @videos = xdg_dir.last
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ # Defines the regular expressions used by bombay to
63
+ # determine which folder a particular file belongs to.
64
+ class Filetypes
65
+ attr_reader :pictures, :videos, :documents
66
+
67
+ def initialize
68
+ @pictures = /\.(ico|svg|png|jpe?g|webp|avif)$/
69
+ @videos = /\.(gif|mp4|weba|mpeg)$/
70
+ @documents = /\.(pdf|epub|xml|txt|x?html|pptx?|docx?|rtf|md|org)$/
71
+ end
72
+ end
data/sig/bombay.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module Bombay
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bombay
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - grtcdr
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-05-21 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ - ba.tahaaziz@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".rubocop.yml"
21
+ - Gemfile
22
+ - Gemfile.lock
23
+ - README.md
24
+ - Rakefile
25
+ - bombay.gemspec
26
+ - lib/bombay.rb
27
+ - lib/bombay/version.rb
28
+ - sig/bombay.rbs
29
+ homepage: https://github.com/grtcdr/bombay
30
+ licenses:
31
+ - MIT
32
+ metadata:
33
+ homepage_uri: https://github.com/grtcdr/bombay
34
+ source_code_uri: https://github.com/grtcdr/bombay
35
+ post_install_message:
36
+ rdoc_options: []
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 2.6.0
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ requirements: []
50
+ rubygems_version: 3.3.8
51
+ signing_key:
52
+ specification_version: 4
53
+ summary: Organize your $(pwd)
54
+ test_files: []