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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5350da1a685dccdcd5298a94beed380476f381a8e75ebb8a02b655bca0185bd7
4
- data.tar.gz: d9fac2a8bbce0dc7ff8c6d71a1e100ac2decdee5bc0036878ff74056653af7a3
3
+ metadata.gz: ef0b76de4c05fb0949d2b65b6b7f79d3265fb1474e109de5186a788b1c32602c
4
+ data.tar.gz: 5c4a47408deed235d05236615380fdc35a099f4049d7fce833e3a06af48c2d96
5
5
  SHA512:
6
- metadata.gz: 5f5b124d9f7552d06380ed3f1c8eea08e1c707a9f8d5ef1feb80373ce5c24ec71ee2b2b4f661a7f4a2cb22fc780270a2163e9fb523b334b1bab30dfa518fc4c6
7
- data.tar.gz: e3508d642009b303cd23692403d41ab8de61f0e8a805aeeade650dcb3954cdbd851c74a41b0c008dca3a40e3b31419308cda371e99f9d3fc433650813292a0a0
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- reenrb (0.1.0)
4
+ reenrb (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -45,6 +45,7 @@ GEM
45
45
 
46
46
  PLATFORMS
47
47
  arm64-darwin-21
48
+ x86_64-linux
48
49
 
49
50
  DEPENDENCIES
50
51
  minitest (~> 5.0)
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(options: { mock_editor: true })
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 = Reenrb::Changes.new(results).change_requested
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 none
13
- Changes.new(@list.select { |c| c.change == :none })
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Reenrb
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.1"
5
5
  end
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
- # Example:
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
- @options[:mock_editor] ? yield(file.path) : file.blocking_edit(@editor)
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.map(&:execute)
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 = ">= 2.7"
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.0
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: rake
14
+ name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '13.0'
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: '13.0'
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rubyzip
28
+ name: minitest-rg
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.3'
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: '2.3'
40
+ version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
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: '5.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest-rg
56
+ name: rerun
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '5.0'
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: '5.0'
68
+ version: '0.13'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rerun
70
+ name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.13'
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: '0.13'
82
+ version: '1.21'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rubocop
84
+ name: rubyzip
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.21'
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: '1.21'
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: '2.7'
135
+ version: '3.0'
135
136
  required_rubygems_version: !ruby/object:Gem::Requirement
136
137
  requirements:
137
138
  - - ">="