bombay 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
  SHA256:
3
- metadata.gz: a7ae8397473ea1785d327c58f45bfd862f63a90940c1ad4de3c5b4efcf9fd86f
4
- data.tar.gz: 482d01646e9e341d54e99600a893ab23bff68b6e1b60b8acc80163139b23303e
3
+ metadata.gz: f5dab1ffb202a5f13e7b80ef01279739f30c27ce1196182678cf0b462da3817a
4
+ data.tar.gz: e2edca01c328e65ad217dce1b146f74b06c1be38ec4a89eb5dd02a4f1720c3db
5
5
  SHA512:
6
- metadata.gz: c7e4f03d73d1982f1540a924745c4c32a33b539a8b95222b501a16ccc86af6295cf675c8a12063b07565d40efa3e8abbd077c3cb56b6fd392ce33fcc2174ef90
7
- data.tar.gz: 48b9e570acb8fdfeef930b4da57e647c6d856183a48a83ee065922295619e2d3acf80f3f3e9b08c5e31a64ee3d3eb821d4c472b4505f69a0f765400bd29b23fb
6
+ metadata.gz: e44c38362c6aeac3e4299cf31e9f6363ee1b4aaeb9e05b8f3d1b2887986e15a6e7f4578a2235300d0f4d0c43cbc6c55bc24033f52064b628d253288441c77138
7
+ data.tar.gz: b8c6675cd4e6913bd6b542d8817cce600c50d912834d94df95d942fa59eeaa79cf016f757d7aac1e43b93f17825ad16a0119e42ad05d537151c77edbdac9b00b
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Aziz Ben Ali
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # bombay
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/bombay.svg)](https://badge.fury.io/rb/bombay)
4
+
5
+ `bombay` sorts the files in your working directory by filetype, and
6
+ sends them to their appropriate `$XDG_*_DIR`.
7
+
8
+ ## Installation
9
+
10
+ ```
11
+ gem install bombay
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ Imagine you had this mess in your `~/Downloads`:
17
+
18
+ ```bash
19
+ $ ls -al ~/Downloads
20
+ .
21
+ ..
22
+ badger-sock.pdf
23
+ parallel-muffin.png
24
+ virtual-monkey.webp
25
+ student-steak.svg
26
+ kind-vulture.epub
27
+ funny-dialect.mp4
28
+ summer-dance.gif
29
+ [redacted]
30
+ ```
31
+
32
+ Let's tell `bombay` to clean it up:
33
+
34
+ ```bash
35
+ ~ $ cd Downloads
36
+
37
+ ~/Downloads $ bombay
38
+
39
+ ~ $ ls ~/Pictures
40
+ parallel-muffin.png student-steak.svg virtual-monkey.webp
41
+
42
+ ~ $ ls ~/Documents
43
+ badger-sock.pdf kind-vulture.epub
44
+
45
+ ~ $ ls ~/Videos
46
+ summer-dance.gif funny-dialect.mp4
47
+ ```
48
+
49
+ ## Platform support
50
+
51
+ `bombay` was initially built for Linux with support for XDG user
52
+ directories, but has been extended to support macOS, although that remains to
53
+ be tested. The program will not run on any other platforms.
54
+
55
+ ## Copying
56
+
57
+ This software is licensed under the MIT license.
data/bin/bombay CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "bombay"
4
-
5
5
  include Bombay
6
6
 
7
7
  # Parse and process user directories
data/bombay.gemspec CHANGED
@@ -5,8 +5,8 @@ require_relative "lib/bombay/version"
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "bombay"
7
7
  spec.version = Bombay::VERSION
8
- spec.authors = ["grtcdr"]
9
- spec.email = ["ba.tahaaziz@gmail.com"]
8
+ spec.author = "grtcdr"
9
+ spec.email = "ba.tahaaziz@gmail.com"
10
10
 
11
11
  spec.summary = "Organize your $(pwd)."
12
12
  spec.homepage = "https://rubygems.org/gems/bombay"
@@ -16,12 +16,14 @@ Gem::Specification.new do |spec|
16
16
  spec.metadata["homepage_uri"] = spec.homepage
17
17
  spec.metadata["source_code_uri"] = "https://github.com/grtcdr/bombay"
18
18
 
19
+ spec.add_runtime_dependency 'os', '~> 0.9.6'
20
+
19
21
  spec.files = Dir.chdir(__dir__) do
20
22
  `git ls-files -z`.split("\x0").reject do |f|
21
23
  (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
22
24
  end
23
25
  end
24
-
26
+
25
27
  spec.bindir = "bin"
26
28
  spec.executables = ["bombay"]
27
29
  spec.require_paths = ["lib"]
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Provides some helpful methods for strings
4
+ class String
5
+ # Unquotes a string.
6
+ def unquote
7
+ tr('"', "")
8
+ end
9
+
10
+ # Expands $HOME.
11
+ def expand
12
+ gsub("$HOME", Dir.home)
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bombay
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/bombay.rb CHANGED
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "bombay/version"
4
+ require_relative "bombay/string"
5
+
4
6
  require "fileutils"
7
+ require "os"
5
8
 
6
9
  # This module exposes the methods used to organize your $(pwd).
7
10
  module Bombay
@@ -19,7 +22,6 @@ module Bombay
19
22
  src_dir = FileUtils.pwd
20
23
 
21
24
  return if src_dir == dest_dir
22
-
23
25
  return if files.empty?
24
26
 
25
27
  FileUtils.mkdir(dest_dir) unless File.directory?(dest_dir)
@@ -36,26 +38,45 @@ class Directories
36
38
  ENV["XDG_CONFIG_HOME"] || File.join(Dir.home, ".config")
37
39
  end
38
40
 
39
- def user_dirs
41
+ def xdg_directory_type(dir)
42
+ dir.delete_prefix("XDG_").delete_suffix("_DIR")
43
+ end
44
+
45
+ def user_dirs_file
40
46
  File.join(config_directory, "user-dirs.dirs")
41
47
  end
42
48
 
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]
49
+ def xdg_directories
50
+ dirs = {}
51
+ File.open(user_dirs_file).each do |line|
52
+ entry = line.split("=")
53
+ key = xdg_directory_type(entry.first)
54
+ value = entry.last.unquote.expand.strip
55
+ dirs.store(key, value)
56
+ end
57
+ dirs
58
+ end
59
+
60
+ def macos_directories
61
+ dirs = {}
62
+ dirs.store("DOCUMENTS", File.join(Dir.home, "Documents"))
63
+ dirs.store("PICTURES", File.join(Dir.home, "Pictures"))
64
+ dirs.store("VIDEOS", File.join(Dir.home, "Movies"))
65
+ dirs
48
66
  end
49
67
 
50
68
  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
69
+ dirs = if OS.linux?
70
+ xdg_directories
71
+ elsif OS.macos?
72
+ macos_directories
73
+ else
74
+ abort("Unsupported platform.")
75
+ end
76
+
77
+ @documents = dirs["DOCUMENTS"]
78
+ @pictures = dirs["PICTURES"]
79
+ @videos = dirs["VIDEOS"]
59
80
  end
60
81
  end
61
82
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bombay
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
  - grtcdr
@@ -9,10 +9,23 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2022-05-21 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: os
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.6
13
27
  description:
14
- email:
15
- - ba.tahaaziz@gmail.com
28
+ email: ba.tahaaziz@gmail.com
16
29
  executables:
17
30
  - bombay
18
31
  extensions: []
@@ -21,10 +34,13 @@ files:
21
34
  - ".rubocop.yml"
22
35
  - Gemfile
23
36
  - Gemfile.lock
37
+ - LICENSE
38
+ - README.md
24
39
  - Rakefile
25
40
  - bin/bombay
26
41
  - bombay.gemspec
27
42
  - lib/bombay.rb
43
+ - lib/bombay/string.rb
28
44
  - lib/bombay/version.rb
29
45
  - sig/bombay.rbs
30
46
  homepage: https://rubygems.org/gems/bombay