reenrb 0.3.2 → 0.4.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: 6c68c858766fec42e13e8d8d70ea0c60fa1a0e56c445aa148645931ed95ab1bb
4
- data.tar.gz: df29a4fdad7a40025640bfb85826e1a38487423656cd59cb0e72fd897a28128c
3
+ metadata.gz: 7e28aaaf5fa1575c823af2027760cad2904c1d7e248ec79362dbd9c7f3762153
4
+ data.tar.gz: a300132794589824a89c9d17e75fd277537603b7ce7064a9ac341ba49ef423c7
5
5
  SHA512:
6
- metadata.gz: 0bd3acf09e88085731e698a952d20d8368a6b1eebfaadab2ac0128dff60b1f66c6ba635c30a4ef96b00b7d15b1aeac8d0c7e91f147971be38d0c26448138edab
7
- data.tar.gz: ab1fdc1f3dab04893568aa4223cf05e6e99731e0517f241f61bcd1ccd74bd22fb40185d7b775b1175e09354a279e1a218d22a0d4afa3c96a7680c40ffbbba6b2
6
+ metadata.gz: c6aa3d99aa7b58e4c0c22fd109d33b9f5a57348fff6df8aff9874d97ea03125566a97b486b344fe6dcb9ad29d816b47f42c1603adfdad2cbd210a5fd1d183873
7
+ data.tar.gz: eae4c53636ff0f0146bbc79358b6044214a4e303f65f98aedc80fcd59cf1c37eb9d32ef71fd058936acff7e80a7e87bf525346a980aab55af296ffa05fd8e328
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Reen-rb is a utility written in Ruby (requires Ruby installed on your machine) that mass renames/deletes files by allowing the user to modify a list. It includes a command line executable called `reen` that opens the user's default editor to permit interactive changes, or can be used programatically by modifying the list of file names using a code block.
4
4
 
5
+ [![Reen usage introduction](https://img.youtube.com/vi/yJfDRfJr3os/0.jpg)](https://www.youtube.com/watch?v=yJfDRfJr3os)
6
+
5
7
  ## Installation
6
8
 
7
9
  To install the command line utility, use:
@@ -38,9 +40,55 @@ Examples:
38
40
  reen *.md --editor vi # reen all markdown files using vi
39
41
  reen --editor 'code -w' # reen all markdown files using vscode
40
42
 
43
+ ### Specifying changes through the editor
44
+
45
+ Upon running Reen on file list, your editor will open with a list of file/folder names. For example:
46
+
47
+ ```
48
+ LICENSE.txt
49
+ README.md
50
+ SETUP.txt
51
+ bin
52
+ bin/help
53
+ bin/myexec
54
+ tests
55
+ tests/fixtures
56
+ tests/fixtures/a.json
57
+ tests/fixtures/b.json
58
+ tests/fixtures/c.json
59
+ tests/helper.code
60
+ tests/tests.code
61
+ ```
62
+
63
+ Specify changes to each file you wish changed modifying it in your editor:
64
+
65
+ - Change the file/folder name to rename it (the rename could cause a move if you change its path; restrictions will be reported)
66
+ - Prepend using `-` to delete a file or empty folder
67
+ - Prepend using `--` to force delete a file or non-empty folder (recursively)
68
+
69
+ For example, if we wanted to change the above list of files/folders in the editor to (a) rename `LICENSE.txt` to `LICENSE.md`, (b) delete `SETUP.txt`, and (c) recursively delete the `bin/` folder, then we would change the filenames to look like:
70
+
71
+ ```
72
+ LICENSE.md
73
+ README.md
74
+ -SETUP.txt
75
+ --bin
76
+ bin/help
77
+ bin/myexec
78
+ tests
79
+ tests/fixtures
80
+ tests/fixtures/a.json
81
+ tests/fixtures/b.json
82
+ tests/fixtures/c.json
83
+ tests/helper.code
84
+ tests/tests.code
85
+ ```
86
+
87
+ Upon saving and exiting the editor, Reen will execute all the changes.
88
+
41
89
  ### Ruby application
42
90
 
43
- Use programmatically using the `reenrb` gem. In the example below, we specify that we do not want to use an actual editor to modify the list, but rather alter the list file using a block.
91
+ Use Reen programmatically using the `reenrb` gem. In the example below, we specify that we do not want to use an actual editor to modify the list, but rather alter the list file using a block.
44
92
 
45
93
  ```ruby
46
94
  require 'reenrb'
@@ -3,7 +3,7 @@
3
3
  module Reenrb
4
4
  module Actions
5
5
  # Deletes a file
6
- class FileDelete
6
+ class Delete
7
7
  def initialize(old_name, new_name)
8
8
  @old_name = old_name
9
9
  @new_name = new_name
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Reenrb
4
+ module Actions
5
+ # Deletes a file
6
+ class ForceDelete
7
+ def initialize(old_name, new_name)
8
+ @old_name = old_name
9
+ @new_name = new_name
10
+ end
11
+
12
+ def call
13
+ FileUtils.rm_rf(@old_name)
14
+ nil
15
+ rescue Errno::ENOENT
16
+ "Could not force delete"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,7 +3,7 @@
3
3
  module Reenrb
4
4
  module Actions
5
5
  # Renames files
6
- class FileRename
6
+ class Rename
7
7
  def initialize(old_name, new_name)
8
8
  @old_name = old_name
9
9
  @new_name = new_name
data/lib/reenrb/change.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "actions/delete"
4
- require_relative "actions/file_rename"
4
+ require_relative "actions/force_delete"
5
+ require_relative "actions/rename"
5
6
  require_relative "actions/nothing"
6
7
 
7
8
  module Reenrb
@@ -19,44 +20,71 @@ module Reenrb
19
20
  module CHANGE
20
21
  NONE = :none
21
22
  DELETE = :delete
23
+ FORCE_DELETE = :force_delete
22
24
  RENAME = :rename
23
25
  end
24
26
 
27
+ module OBJECT
28
+ FILE = :file
29
+ FOLDER = :folder
30
+ end
31
+
25
32
  ACTION_HANDLER = {
26
33
  CHANGE::NONE => Actions::DoNothing,
27
- CHANGE::DELETE => Actions::FileDelete,
28
- CHANGE::RENAME => Actions::FileRename
34
+ CHANGE::DELETE => Actions::Delete,
35
+ CHANGE::FORCE_DELETE => Actions::ForceDelete,
36
+ CHANGE::RENAME => Actions::Rename
29
37
  }.freeze
30
38
 
31
39
  CHANGES_DESC = {
32
40
  CHANGE::NONE => "Nothing",
33
41
  CHANGE::DELETE => "Deleting",
42
+ CHANGE::FORCE_DELETE => "Force deleting",
34
43
  CHANGE::RENAME => "Renaming"
35
44
  }.freeze
36
45
 
37
46
  def initialize(original, requested)
38
47
  @original = original
39
- @requested = requested
40
- @change = compare
41
- consider
48
+ extract_request(requested)
49
+ decide_object
50
+ decide_change
51
+ decide_status_reason
42
52
  end
43
53
 
44
- def compare
45
- if original == requested
46
- CHANGE::NONE
47
- elsif requested.start_with? "-"
48
- CHANGE::DELETE
49
- else
50
- CHANGE::RENAME
51
- end
54
+ def extract_request(str)
55
+ op_chars = "[-]"
56
+ obj_chars = "."
57
+ requested = str.match(/^(?<op>#{op_chars}*)(?<name>#{obj_chars}*)/)
58
+
59
+ @operator = requested[:op]
60
+ @requested = requested[:name].strip
61
+ end
62
+
63
+ def decide_change
64
+ @change =
65
+ if @operator == "--"
66
+ CHANGE::FORCE_DELETE
67
+ elsif @operator == "-"
68
+ CHANGE::DELETE
69
+ elsif @original != @requested
70
+ CHANGE::RENAME
71
+ else
72
+ CHANGE::NONE
73
+ end
52
74
  end
53
75
 
54
- def consider
76
+ def decide_object
77
+ @object = OBJECT::FILE if request_file?
78
+ @object = OBJECT::FOLDER if request_dir?
79
+ end
80
+
81
+ def decide_status_reason
55
82
  if request_full_dir? && request_delete?
56
83
  @status = STATUS::REJECTED
57
84
  @reason = "Directories with files cannot be changed"
58
85
  else
59
86
  @status = STATUS::ACCEPTED
87
+ @reason = ""
60
88
  end
61
89
  end
62
90
 
@@ -64,7 +92,7 @@ module Reenrb
64
92
  return(self) if not_accepted?
65
93
 
66
94
  @status = STATUS::EXECUTED
67
- error = ACTION_HANDLER[@change].new(original, requested).call
95
+ error = ACTION_HANDLER[@change].new(@original, @requested).call
68
96
 
69
97
  if error
70
98
  @status = STATUS::FAILED
@@ -78,6 +106,8 @@ module Reenrb
78
106
 
79
107
  def request_dir? = Dir.exist?(@original)
80
108
 
109
+ def request_file? = File.file?(@original)
110
+
81
111
  def request_nothing? = @change == CHANGE::NONE
82
112
 
83
113
  def request_rename? = @change == CHANGE::RENAME
@@ -36,7 +36,7 @@ module Reenrb
36
36
  end
37
37
 
38
38
  def await_editor(editor)
39
- `#{editor} #{@list_file.path}`
39
+ system("#{editor} #{@list_file.path}")
40
40
  end
41
41
  end
42
42
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Reenrb
4
- VERSION = "0.3.2"
4
+ VERSION = "0.4.0"
5
5
  end
data/reenrb.gemspec CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency "rerun", "~> 0.13"
37
37
  spec.add_development_dependency "rubocop", "~> 1.21"
38
38
  spec.add_development_dependency "rubyzip", "~> 2.3"
39
+ spec.add_development_dependency "simplecov"
39
40
 
40
41
  # For more information and examples about making a new gem, check out our
41
42
  # guide at: https://bundler.io/guides/creating_gem.html
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reenrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soumya Ray
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-11 00:00:00.000000000 Z
11
+ date: 2022-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '2.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  description: Renames or deletes a pattern of files using your favorite editor
98
112
  email:
99
113
  - soumya.ray@gmail.com
@@ -111,8 +125,9 @@ files:
111
125
  - bin/reen
112
126
  - lib/reenrb.rb
113
127
  - lib/reenrb/actions/delete.rb
114
- - lib/reenrb/actions/file_rename.rb
128
+ - lib/reenrb/actions/force_delete.rb
115
129
  - lib/reenrb/actions/nothing.rb
130
+ - lib/reenrb/actions/rename.rb
116
131
  - lib/reenrb/change.rb
117
132
  - lib/reenrb/changes.rb
118
133
  - lib/reenrb/changes_file.rb