reenrb 0.1.0 → 0.2.1
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 +4 -4
- data/.rubocop.yml +10 -0
- data/Gemfile.lock +2 -1
- data/README.md +3 -1
- data/bin/reen +2 -2
- data/lib/change.rb +29 -21
- data/lib/changes.rb +25 -2
- data/lib/reenrb/version.rb +1 -1
- data/lib/reenrb.rb +12 -5
- data/reenrb.gemspec +4 -5
- metadata +21 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef0b76de4c05fb0949d2b65b6b7f79d3265fb1474e109de5186a788b1c32602c
|
4
|
+
data.tar.gz: 5c4a47408deed235d05236615380fdc35a099f4049d7fce833e3a06af48c2d96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fe1b3c16fb10bdaa39c095acef4611822c2c07934081dfc1d223f2103d3cf07a3d819b50b5a1351cec1538d0fb24e03fd77d58eeef2bb212405a1c624b2f602
|
7
|
+
data.tar.gz: 88bd9ad15855e04911bd87b2d620843a254c31c0b84a4919c18cdaa314b8bd8c6953280450e8cefbbc32af1489e4c5034322bff26c4a63cdc2a9c57810b04348
|
data/.rubocop.yml
CHANGED
@@ -2,6 +2,16 @@ AllCops:
|
|
2
2
|
TargetRubyVersion: 3.0
|
3
3
|
NewCops: enable
|
4
4
|
|
5
|
+
Metrics/BlockLength:
|
6
|
+
Enabled: true
|
7
|
+
Exclude:
|
8
|
+
- reenrb.gemspec
|
9
|
+
|
10
|
+
Style/HashSyntax:
|
11
|
+
Enabled: true
|
12
|
+
Exclude:
|
13
|
+
- Rakefile
|
14
|
+
|
5
15
|
Style/StringLiterals:
|
6
16
|
Enabled: true
|
7
17
|
EnforcedStyle: double_quotes
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -43,7 +43,7 @@ Use programmatically using the `reenrb` gem. In the example below, we specify th
|
|
43
43
|
require 'reenrb'
|
44
44
|
|
45
45
|
glob = Dir.glob("*")
|
46
|
-
reen = Reenrb::Reen.new(
|
46
|
+
reen = Reenrb::Reen.new(editor: nil)
|
47
47
|
|
48
48
|
reen.execute(glob) do |tmpfile_path|
|
49
49
|
lines = File.read(tmpfile_path).split("\n")
|
@@ -55,6 +55,8 @@ reen.execute(glob) do |tmpfile_path|
|
|
55
55
|
end
|
56
56
|
```
|
57
57
|
|
58
|
+
You may also pass a block with an editor specified, in which case the block is run after the editor has finished.
|
59
|
+
|
58
60
|
## Development
|
59
61
|
|
60
62
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/bin/reen
CHANGED
@@ -12,11 +12,11 @@ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
|
12
12
|
require "reenrb"
|
13
13
|
|
14
14
|
file_list = ARGV || Dir.glob("*")
|
15
|
-
editor = ENV["VISUAL"] || ENV["EDITOR"]
|
15
|
+
editor = ENV["VISUAL"] || ENV["EDITOR"] # rubocop:disable Style/FetchEnvVar
|
16
16
|
exit_with_error(EDITOR_MSG) if editor.empty?
|
17
17
|
|
18
18
|
results = Reenrb::Reen.new(editor: editor).execute(file_list)
|
19
19
|
|
20
|
-
changes =
|
20
|
+
changes = results.change_requested
|
21
21
|
|
22
22
|
puts changes.summarize
|
data/lib/change.rb
CHANGED
@@ -40,22 +40,6 @@ module Reenrb
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def request_directory?
|
44
|
-
Dir.exist? @original
|
45
|
-
end
|
46
|
-
|
47
|
-
def request_delete?
|
48
|
-
@change == CHANGE::DELETE
|
49
|
-
end
|
50
|
-
|
51
|
-
def request_empty_directory?
|
52
|
-
Dir.empty? @original
|
53
|
-
end
|
54
|
-
|
55
|
-
def request_full_directory?
|
56
|
-
request_directory? && !request_empty_directory?
|
57
|
-
end
|
58
|
-
|
59
43
|
def consider
|
60
44
|
if request_full_directory? && request_delete?
|
61
45
|
@status = STATUS::REJECTED
|
@@ -65,12 +49,8 @@ module Reenrb
|
|
65
49
|
end
|
66
50
|
end
|
67
51
|
|
68
|
-
def executed_or_rejected
|
69
|
-
%i[executed rejected].include? @status
|
70
|
-
end
|
71
|
-
|
72
52
|
def execute
|
73
|
-
return(self) if executed_or_rejected
|
53
|
+
return(self) if executed_or_rejected?
|
74
54
|
|
75
55
|
case @change
|
76
56
|
when :rename
|
@@ -83,6 +63,34 @@ module Reenrb
|
|
83
63
|
self
|
84
64
|
end
|
85
65
|
|
66
|
+
# Inspection
|
67
|
+
|
68
|
+
def request_directory?
|
69
|
+
Dir.exist? @original
|
70
|
+
end
|
71
|
+
|
72
|
+
def request_delete?
|
73
|
+
@change == CHANGE::DELETE
|
74
|
+
end
|
75
|
+
|
76
|
+
def request_empty_directory?
|
77
|
+
Dir.empty? @original
|
78
|
+
end
|
79
|
+
|
80
|
+
def executed?
|
81
|
+
@status == STATUS::EXECUTED
|
82
|
+
end
|
83
|
+
|
84
|
+
def request_full_directory?
|
85
|
+
request_directory? && !request_empty_directory?
|
86
|
+
end
|
87
|
+
|
88
|
+
def executed_or_rejected?
|
89
|
+
%i[executed rejected].include? @status
|
90
|
+
end
|
91
|
+
|
92
|
+
# Decoration
|
93
|
+
|
86
94
|
def to_s
|
87
95
|
file_desc =
|
88
96
|
case @change
|
data/lib/changes.rb
CHANGED
@@ -9,10 +9,13 @@ module Reenrb
|
|
9
9
|
@list = changes_list
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
|
12
|
+
def execute!
|
13
|
+
@list.map(&:execute)
|
14
|
+
self
|
14
15
|
end
|
15
16
|
|
17
|
+
# Inspection
|
18
|
+
|
16
19
|
def rename_requested
|
17
20
|
Changes.new(@list.select { |c| c.change == :rename })
|
18
21
|
end
|
@@ -37,10 +40,30 @@ module Reenrb
|
|
37
40
|
Changes.new(@list.select { |c| c.status == :executed })
|
38
41
|
end
|
39
42
|
|
43
|
+
def count
|
44
|
+
@list.size
|
45
|
+
end
|
46
|
+
|
47
|
+
# Decoration
|
48
|
+
|
40
49
|
def summarize
|
41
50
|
return "Nothing changed" if @list.empty?
|
42
51
|
|
43
52
|
@list.map(&:to_s).join("\n")
|
44
53
|
end
|
54
|
+
|
55
|
+
# Predicates
|
56
|
+
|
57
|
+
def no_changes_requested?
|
58
|
+
list.map(&:change).all? :none
|
59
|
+
end
|
60
|
+
|
61
|
+
def changes_requested?
|
62
|
+
!no_changes_requested?
|
63
|
+
end
|
64
|
+
|
65
|
+
def all_executed?
|
66
|
+
@list.all?(&:executed?)
|
67
|
+
end
|
45
68
|
end
|
46
69
|
end
|
data/lib/reenrb/version.rb
CHANGED
data/lib/reenrb.rb
CHANGED
@@ -9,8 +9,9 @@ module Reenrb
|
|
9
9
|
class Error < StandardError; end
|
10
10
|
|
11
11
|
# Renames pattern of files with given editor
|
12
|
-
#
|
12
|
+
# Examples:
|
13
13
|
# Reenrb::Reen.new(editor: "code -w").call("spec/fixtures/example/*")
|
14
|
+
# Reenrb::Reen.new(editor: nil).call("spec/fixtures/example/*") { ... }
|
14
15
|
class Reen
|
15
16
|
DEL_ERROR = "Do not delete any file/folder names"
|
16
17
|
|
@@ -21,20 +22,26 @@ module Reenrb
|
|
21
22
|
@options = options
|
22
23
|
end
|
23
24
|
|
24
|
-
def request(original_list, &block)
|
25
|
-
# original_list = Dir.glob(pattern)
|
25
|
+
def request(original_list, &block) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
26
26
|
changed_list = ChangesFile.new(original_list).allow_changes do |file|
|
27
|
-
|
27
|
+
file.blocking_edit(@editor) if @editor
|
28
|
+
|
29
|
+
if block
|
30
|
+
lines = File.read(file.path).split("\n")
|
31
|
+
new_lines = block.call(lines) || lines
|
32
|
+
File.write(file.path, new_lines.join("\n"))
|
33
|
+
end
|
28
34
|
end
|
29
35
|
|
30
36
|
raise(Error, DEL_ERROR) if changed_list.size != original_list.size
|
31
37
|
|
32
38
|
@changes = compare_lists(original_list, changed_list)
|
39
|
+
.then { |change_array| Changes.new(change_array) }
|
33
40
|
end
|
34
41
|
|
35
42
|
def execute(original_list, &block)
|
36
43
|
@changes ||= request(original_list, &block)
|
37
|
-
@changes = @changes.
|
44
|
+
@changes = @changes.execute!
|
38
45
|
end
|
39
46
|
|
40
47
|
private
|
data/reenrb.gemspec
CHANGED
@@ -12,16 +12,15 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = "Renames or deletes a pattern of files using your favorite editor"
|
13
13
|
spec.homepage = "https://github.com/soumyaray/reenrb"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = ">=
|
15
|
+
spec.required_ruby_version = ">= 3.0"
|
16
16
|
|
17
17
|
# spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
|
18
18
|
|
19
19
|
spec.metadata["homepage_uri"] = spec.homepage
|
20
20
|
spec.metadata["source_code_uri"] = spec.homepage
|
21
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
21
22
|
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
22
23
|
|
23
|
-
# Specify which files should be added to the gem when it is released.
|
24
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
24
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
25
|
`git ls-files -z`.split("\x0").reject do |f|
|
27
26
|
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
@@ -31,12 +30,12 @@ Gem::Specification.new do |spec|
|
|
31
30
|
spec.executables << "reen"
|
32
31
|
spec.require_paths = ["lib"]
|
33
32
|
|
34
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
35
|
-
spec.add_development_dependency "rubyzip", "~> 2.3"
|
36
33
|
spec.add_development_dependency "minitest", "~> 5.0"
|
37
34
|
spec.add_development_dependency "minitest-rg", "~> 5.0"
|
35
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
38
36
|
spec.add_development_dependency "rerun", "~> 0.13"
|
39
37
|
spec.add_development_dependency "rubocop", "~> 1.21"
|
38
|
+
spec.add_development_dependency "rubyzip", "~> 2.3"
|
40
39
|
|
41
40
|
# For more information and examples about making a new gem, check out our
|
42
41
|
# guide at: https://bundler.io/guides/creating_gem.html
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reenrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soumya Ray
|
@@ -11,89 +11,89 @@ cert_chain: []
|
|
11
11
|
date: 2022-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: minitest
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: minitest-rg
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '5.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '5.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '13.0'
|
48
48
|
type: :development
|
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: '
|
54
|
+
version: '13.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rerun
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '0.13'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0.13'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rubocop
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '1.21'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '1.21'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rubyzip
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '2.3'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '2.3'
|
97
97
|
description: Renames or deletes a pattern of files using your favorite editor
|
98
98
|
email:
|
99
99
|
- soumya.ray@gmail.com
|
@@ -123,6 +123,7 @@ licenses:
|
|
123
123
|
metadata:
|
124
124
|
homepage_uri: https://github.com/soumyaray/reenrb
|
125
125
|
source_code_uri: https://github.com/soumyaray/reenrb
|
126
|
+
rubygems_mfa_required: 'true'
|
126
127
|
post_install_message:
|
127
128
|
rdoc_options: []
|
128
129
|
require_paths:
|
@@ -131,7 +132,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
132
|
requirements:
|
132
133
|
- - ">="
|
133
134
|
- !ruby/object:Gem::Version
|
134
|
-
version: '
|
135
|
+
version: '3.0'
|
135
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
137
|
requirements:
|
137
138
|
- - ">="
|