modname 0.2.4 → 1.0.0

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: ba0fa2d1f63b3777585a4202c0560d15b47c0c345b5c614015baed843d78f099
4
- data.tar.gz: eb9bbbc814a25107ff88e4dae35ba29a1faebf9701c2af3d70a07a350d2e5eb1
3
+ metadata.gz: a75ac155dd3255d8cebd50ec9e01e629a9f64aa0b17090e482db22978baf8832
4
+ data.tar.gz: 29414f4677355f27ddda53fbfd857241adf1550c28709c955da4e2165b71d1c6
5
5
  SHA512:
6
- metadata.gz: 909a24c120475377a6b323d56b4cf0ab1cb1a8b0d6b41a81eb1b241c8a13cbcf76bbbdaf028101456216d674dc2417e61a478113055838a6438cb646927f4ac1
7
- data.tar.gz: b6686c14fad14cbd7025d39ef985e8ed6dfcb06f0bed43079ca0a01c53724498a4c124a39a592ea0f4906c2ab581779383bf0099c3184142c0d2fb3f4403294e
6
+ metadata.gz: 2ea30c66c31f07b5b5f928cb49c0fd8cbddd6d765042b7b3f1cdd7c08e746d0085f7dd916e32488424b3c9a594a46a9c7ccd1fe769d663b0217b49b60216e6f6
7
+ data.tar.gz: 39b3a3d68f4462308713223c71b6fc7a7b307f333f452e1b1c4cf7e9509698e075c7ab2023dd6adcc25581e87dbecceb1dde56cf62b7022b29f1c5abbdb2eed8
@@ -14,9 +14,12 @@ module Modder
14
14
  match, trans = Modder.parse args
15
15
 
16
16
  Modder.files(@options[:recurse]).each do |file|
17
- new = file.sub Regexp.new(match), trans
17
+ new = Modder.rename_base(file) do |base|
18
+ result = base.sub Regexp.new(match), trans
19
+ result.empty? ? base : result # no changes
20
+ end
18
21
 
19
- next if new == file || new == '' # no changes
22
+ next if new.nil?
20
23
 
21
24
  @transfer[file] = new
22
25
  end
@@ -36,9 +39,9 @@ module Modder
36
39
 
37
40
  else # move match extension to targeted
38
41
  Modder.files(@options[:recurse]).each do |file|
39
- new = file.sub(/#{match}$/, trans)
42
+ new = Modder.rename_base(file) { |base| base.sub(/#{match}$/, trans) }
40
43
 
41
- next if new == file # no changes
44
+ next if new.nil?
42
45
 
43
46
  @transfer[file] = new
44
47
  end
@@ -80,6 +83,18 @@ class << Modder
80
83
  end
81
84
  end
82
85
 
86
+ # apply a transformation to a file's basename only, preserving its directory.
87
+ # the block receives the basename and returns a new basename; returning it
88
+ # unchanged means no rename should happen, in which case nil is returned
89
+ def rename_base(file)
90
+ dir, base = File.split(file)
91
+ new_base = yield base
92
+
93
+ return nil if new_base == base
94
+
95
+ dir == '.' ? new_base : File.join(dir, new_base)
96
+ end
97
+
83
98
  # show the status of current files
84
99
  def status(transfer)
85
100
  if transfer.empty?
@@ -127,10 +142,14 @@ class << Modder
127
142
  transfer = {}
128
143
  allexts = ext.empty?
129
144
  Modder.files(recurse).each do |file|
130
- ext = file.split('.').last if allexts
145
+ new = Modder.rename_base(file) do |base|
146
+ cur_ext = allexts ? base.split('.').last : ext
147
+ next base if cur_ext == base # no extension to change
148
+
149
+ base.sub(/#{cur_ext}$/i, cur_ext.downcase)
150
+ end
131
151
 
132
- new = file.sub(/#{ext}$/i, ext.downcase)
133
- next if new == file || ext == file # no changes or extension
152
+ next if new.nil?
134
153
 
135
154
  transfer[file] = new
136
155
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Modname
4
- VERSION = '0.2.4'
4
+ VERSION = '1.0.0'
5
5
  end
data/lib/modname.rb CHANGED
@@ -3,9 +3,9 @@
3
3
  # parse modname's command line args
4
4
 
5
5
  require 'colored'
6
- require 'modname/banner'
7
- require 'modname/modder'
8
- require 'modname/version'
6
+ require_relative 'modname/banner'
7
+ require_relative 'modname/modder'
8
+ require_relative 'modname/version'
9
9
 
10
10
  # Modname is a versatile file naming tool for renaming groups of files
11
11
  module Modname
@@ -13,10 +13,7 @@ module Modname
13
13
  class << self
14
14
  def run(args) = Driver.new.run(args)
15
15
  end
16
- end
17
16
 
18
- # Modname module containing the CLI driver
19
- module Modname
20
17
  # Driver class handles command-line argument parsing and execution
21
18
  class Driver
22
19
  include Modder
data/readme.md CHANGED
@@ -70,16 +70,15 @@ try running `gem install bundler`. Once that is done:
70
70
  Now, we should be able to build the gem locally. This will build the local
71
71
  modname gem and link it in your path, so you can playing around with `modname`.
72
72
 
73
- rake build
73
+ just build
74
74
 
75
- This uses `rspec` and `rake` to run a suite of unit tests. To run the suite:
75
+ This uses `rspec` and `just` to run a suite of unit tests. To run the suite:
76
76
 
77
- rake
77
+ just spec
78
78
 
79
79
 
80
80
  ## todos
81
81
 
82
- - only try to rename filenames, not folders on recursive calls
83
82
  - figure out whats up with the extension globbing
84
83
  - apply optionally to directories as well
85
84
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modname
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Warner
@@ -23,20 +23,6 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '1.2'
26
- - !ruby/object:Gem::Dependency
27
- name: rake
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: '0'
33
- type: :development
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '0'
40
26
  - !ruby/object:Gem::Dependency
41
27
  name: rspec
42
28
  requirement: !ruby/object:Gem::Requirement
@@ -110,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
96
  - !ruby/object:Gem::Version
111
97
  version: '0'
112
98
  requirements: []
113
- rubygems_version: 3.7.2
99
+ rubygems_version: 4.0.10
114
100
  specification_version: 4
115
101
  summary: a versatile file naming tool.
116
102
  test_files: []