reenrb 0.1.0 → 0.2.1

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: 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
  - - ">="