nrename 0.2.5 → 0.2.6

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 99a1a68b5cb84496cd6604eb163663bb1db2c30b
4
+ data.tar.gz: ccea83a7063621be76a9850dc4f72cd1fae17f1b
5
+ SHA512:
6
+ metadata.gz: 7b8d2ce878965f61ec9ee7af6d857d06adcdd640bb1baf5a7fb9967c8a80445bb369ce8902d2dc968c213cc3f527ff36c8948f6c75ce1c383e739db8a9495601
7
+ data.tar.gz: 22519ea4b7f2104cbc63042150efd8e7645ed819ec9d468aa484ec5f186961ca9e2f77f10b9a95b37338340a23e67311cc883faa7fe9f76d78bfd22128536bfd
@@ -97,10 +97,9 @@ Feature: Renaming files
97
97
  | bb1.txt |
98
98
  | bb10.txt |
99
99
  | cc0023.txt |
100
- When I cd to "dir"
101
- When I run `nrename -XN .`
100
+ When I run `nrename -XN dir`
102
101
  Then the exit status should be 0
103
- And the following files should exist:
102
+ And the following files should exist inside directory "dir":
104
103
  | 01.txt |
105
104
  | 10.txt |
106
105
  | 23.txt |
@@ -1,7 +1,7 @@
1
1
  require 'aruba/cucumber'
2
2
  require 'fileutils'
3
3
 
4
- ENV['PATH'] = "#{File.expand_path __FILE__, '../../../bin'}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
4
+ ENV['PATH'] = "#{File.expand_path('../../../bin', __FILE__)}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
5
5
 
6
6
  application_root = File.expand_path('../../..', __FILE__)
7
7
 
data/lib/nrename.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  libdir = File.expand_path(File.dirname __FILE__)
2
2
  $:.push libdir unless $:.include? libdir
3
3
 
4
+ require 'nrename/counter'
4
5
  require 'nrename/directory'
5
6
  require 'nrename/numbered_file'
6
7
  require 'nrename/options'
@@ -14,10 +15,11 @@ module Nrename
14
15
  end
15
16
 
16
17
  def self.options
17
- Options.instance
18
+ @options ||= Options.new
18
19
  end
19
20
 
20
21
  def self.parse_options(args)
22
+ @options = Options.new
21
23
  options.parse args
22
24
  end
23
25
  end
@@ -0,0 +1,11 @@
1
+ module Nrename
2
+ class Counter
3
+ def initialize
4
+ @counter = 0
5
+ end
6
+
7
+ def next
8
+ @counter = @counter.next
9
+ end
10
+ end
11
+ end
@@ -9,8 +9,11 @@ module Nrename
9
9
  def_delegator :numbered_files, :empty?
10
10
  def_delegator Nrename, :options
11
11
 
12
+ attr_reader :counter
13
+
12
14
  def initialize(dir)
13
15
  @dir = Pathname.new dir
16
+ @counter = Counter.new
14
17
  end
15
18
 
16
19
  def directories
@@ -28,8 +31,8 @@ module Nrename
28
31
  def numbered_files
29
32
  @numbered_files ||= files.
30
33
  select { |file| file.basename.to_s =~ options.pattern }.
31
- map { |file| NumberedFile.new file }.
32
- sort_by(&:number)
34
+ map { |file| NumberedFile.new file, self }.
35
+ sort_by(&:number_from_path)
33
36
  end
34
37
 
35
38
  def num_field_length
@@ -40,29 +43,14 @@ module Nrename
40
43
  if options.renumber
41
44
  numbered_files.size
42
45
  else
43
- numbered_files.map(&:number).max
44
- end
45
- end
46
-
47
- def renumber
48
- numbered_files.each_with_index do |file, idx|
49
-
50
- # Force 1-based indexing (could use Enumerator#with_index with
51
- # argument, but that would be incompatible with ruby-1.8).
52
- idx += 1
53
-
54
- file.normalize num_field_length, idx
46
+ numbered_files.map(&:number_from_path).max
55
47
  end
56
48
  end
57
49
 
58
- def fix_numbers
50
+ def normalize
59
51
  numbered_files.each do |file|
60
- file.normalize num_field_length
52
+ file.normalize
61
53
  end
62
54
  end
63
-
64
- def normalize
65
- options.renumber ? renumber : fix_numbers
66
- end
67
55
  end
68
56
  end
@@ -4,24 +4,27 @@ require 'forwardable'
4
4
 
5
5
  module Nrename
6
6
  class NumberedFile
7
- attr_reader :path, :number_length, :override_number
7
+ attr_reader :path, :dir
8
8
 
9
9
  extend Forwardable
10
10
 
11
11
  def_delegator Nrename, :options
12
+ def_delegators :dir, :counter, :num_field_length
12
13
 
13
- def initialize(path)
14
+ def initialize(path, dir)
14
15
  @path = path
16
+ @dir = dir
15
17
  end
16
18
 
17
19
  def number
18
- override_number || path.basename.to_s[options.pattern, 1].to_i
20
+ @number ||= options.renumber ? counter.next : number_from_path
19
21
  end
20
22
 
21
- def normalize(length, override_number = nil)
22
- @number_length = length
23
- @override_number = override_number
23
+ def number_from_path
24
+ path.basename.to_s[options.pattern, 1].to_i
25
+ end
24
26
 
27
+ def normalize
25
28
  rename_to normalized_path
26
29
  end
27
30
 
@@ -50,7 +53,7 @@ module Nrename
50
53
  end
51
54
 
52
55
  def adjusted_number
53
- number.to_s.rjust number_length, '0'
56
+ number.to_s.rjust num_field_length, '0'
54
57
  end
55
58
  end
56
59
  end
@@ -3,28 +3,28 @@ require 'optparse'
3
3
  require 'ostruct'
4
4
  require 'set'
5
5
  require 'shellwords'
6
- require 'singleton'
7
6
 
8
7
  module Nrename
9
8
  class Options
10
- include Singleton
9
+ extend Forwardable
10
+
11
+ def initialize
12
+ self.class.def_delegators :options, *default_options.keys
13
+ end
11
14
 
12
15
  def default_options
13
16
  {
14
- :numbers_only => false,
15
- :dirs => Set.new,
16
- :execute => false,
17
- :pattern => /(\d+)/,
18
- :recursive => false,
19
- :rename_dirs => false,
20
- :renumber => false,
21
- :verbose => true
17
+ :numbers_only => false,
18
+ :dirs => Set.new,
19
+ :execute => false,
20
+ :pattern => /(\d+)/,
21
+ :recursive => false,
22
+ :rename_dirs => false,
23
+ :renumber => false,
24
+ :verbose => true
22
25
  }
23
26
  end
24
27
 
25
- extend Forwardable
26
- def_delegators :options, *instance.default_options.keys
27
-
28
28
  def options
29
29
  @options ||= OpenStruct.new default_options
30
30
  end
data/lib/nrename/utils.rb CHANGED
@@ -1,20 +1,28 @@
1
1
  require 'pathname'
2
- require 'set'
3
2
 
4
3
  module Nrename
5
4
  module Utils
6
5
  def all_subdirs_of(dir)
7
- dir = Pathname.new dir
8
-
9
- children = Set.new
6
+ children = []
10
7
 
11
- dir.children.select(&:directory?).map(&:to_s).each do |child|
12
- children.add child
13
- children.merge all_subdirs_of child
8
+ each_subdir(dir) do |subdir|
9
+ children << subdir
10
+ children.concat all_subdirs_of subdir
14
11
  end
15
12
 
16
- Array children
13
+ children
17
14
  end
18
15
  module_function :all_subdirs_of
16
+
17
+ def each_subdir(dir, &block)
18
+ dir = Pathname.new dir
19
+
20
+ subdirs = dir.children.select &:directory?
21
+
22
+ subdirs.each do |subdir|
23
+ block.call subdir.to_s
24
+ end
25
+ end
26
+ module_function :each_subdir
19
27
  end
20
28
  end
@@ -1,3 +1,3 @@
1
1
  module Nrename
2
- VERSION = '0.2.5'
2
+ VERSION = '0.2.6'
3
3
  end
@@ -2,7 +2,9 @@ require 'spec_helper'
2
2
 
3
3
  describe Nrename::NumberedFile do
4
4
  def numbered_file(path)
5
- Nrename::NumberedFile.new Pathname.new path
5
+ file = Pathname.new path
6
+ dir = Nrename::Directory.new file.dirname
7
+ Nrename::NumberedFile.new file, dir
6
8
  end
7
9
 
8
10
  describe '#number' do
@@ -38,7 +40,7 @@ describe Nrename::NumberedFile do
38
40
  it 'normalizes file name' do
39
41
  file = numbered_file 'abc_34.rb'
40
42
 
41
- file.stub :number_length => 3
43
+ file.stub :num_field_length => 3
42
44
  expect(file.normalized_path.to_s).to be == '034.rb'
43
45
  end
44
46
  end
@@ -51,17 +53,17 @@ describe Nrename::NumberedFile do
51
53
  it 'normalizes file name' do
52
54
  file = numbered_file 'abc_34.rb'
53
55
 
54
- file.stub :number_length => 5
56
+ file.stub :num_field_length => 5
55
57
  expect(file.normalized_path.to_s).to be == 'abc_00034.rb'
56
58
  end
57
59
  end
58
60
  end
59
61
 
60
62
  describe '#adjusted_number' do
61
- it 'returns number, adjusted accordingly to #number_length' do
63
+ it 'returns number, adjusted accordingly to #num_field_length' do
62
64
  file = numbered_file 'foo123bar'
63
65
 
64
- file.stub :number_length => 4
66
+ file.stub :num_field_length => 4
65
67
  expect(file.adjusted_number).to be == '0123'
66
68
  end
67
69
  end
@@ -6,12 +6,12 @@ describe Nrename::Options do
6
6
 
7
7
  def_delegator Nrename, :parse_options
8
8
 
9
+ let(:defaults) { parse_options([]) }
10
+
9
11
  after :each do
10
12
  Nrename.options.reset # do not leak state
11
13
  end
12
14
 
13
- let(:defaults) { parse_options([]) }
14
-
15
15
  describe 'verbosity' do
16
16
  it 'is on by default' do
17
17
  expect(defaults.verbose).to be_true
@@ -108,16 +108,16 @@ describe Nrename::Options do
108
108
  end
109
109
 
110
110
  describe 'directory arguments' do
111
- let(:test_dir) { File.expand_path 'test ][ directory' }
112
- let(:subdirs) { ['aa', 'bb', 'cc', 'foo bar [baz] (quux)'] }
111
+ let(:test_dir) { File.expand_path 'test [directory]' }
112
+ let(:subdirs) { ['aa', 'bb', 'cc', 'foo bar [baz]'] }
113
113
 
114
- before :all do
114
+ before :each do
115
115
  inside test_dir do
116
116
  mkdir subdirs
117
117
  end
118
118
  end
119
119
 
120
- after :all do
120
+ after :each do
121
121
  rm_rf test_dir
122
122
  end
123
123
 
@@ -34,11 +34,7 @@ describe Nrename::Utils do
34
34
 
35
35
  it 'captures deeply nested directories' do
36
36
  inside test_dir do
37
- inside 'deeper' do
38
- inside 'even_deeper' do
39
- mkdir 'deepest'
40
- end
41
- end
37
+ mkdir_p 'deeper/even_deeper/deepest'
42
38
  end
43
39
 
44
40
  all_subdirs = [
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,5 @@
1
- require 'rspec'
2
1
  require 'fileutils'
3
-
4
- require File.expand_path '../../lib/nrename', __FILE__
2
+ require 'nrename'
5
3
 
6
4
  module Support
7
5
  def inside(dir, &block)
@@ -14,6 +12,8 @@ RSpec.configure do |config|
14
12
  config.include FileUtils
15
13
  config.include Support
16
14
 
15
+ config.order = 'random'
16
+
17
17
  config.expect_with :rspec do |c|
18
18
  c.syntax = :expect
19
19
  end
metadata CHANGED
@@ -1,96 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nrename
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
5
- prerelease:
4
+ version: 0.2.6
6
5
  platform: ruby
7
6
  authors:
8
7
  - Victor Deryagin
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-09-07 00:00:00.000000000 Z
11
+ date: 2013-04-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: aruba
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: 0.4.11
19
+ version: 0.5.1
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: 0.4.11
26
+ version: 0.5.1
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: guard-rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
37
- version: 1.2.1
33
+ version: 2.5.4
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
- version: 1.2.1
40
+ version: 2.5.4
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: 0.9.2
47
+ version: 10.0.3
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: 0.9.2
54
+ version: 10.0.3
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rb-inotify
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
69
- version: 0.8.8
61
+ version: 0.9.0
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
77
- version: 0.8.8
78
- - !ruby/object:Gem::Dependency
79
- name: rspec
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: 2.11.0
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: 2.11.0
68
+ version: 0.9.0
94
69
  description: Nrename lets you rename set of numbered files so that they can be sorted
95
70
  correctly in any shell or file manager.
96
71
  email:
@@ -107,6 +82,7 @@ files:
107
82
  - features/renaming_files.feature
108
83
  - features/support/env.rb
109
84
  - lib/nrename.rb
85
+ - lib/nrename/counter.rb
110
86
  - lib/nrename/directory.rb
111
87
  - lib/nrename/numbered_file.rb
112
88
  - lib/nrename/options.rb
@@ -121,29 +97,26 @@ files:
121
97
  homepage: https://github.com/vderyagin/nrename
122
98
  licenses:
123
99
  - MIT
100
+ metadata: {}
124
101
  post_install_message:
125
102
  rdoc_options: []
126
103
  require_paths:
127
104
  - lib
128
105
  required_ruby_version: !ruby/object:Gem::Requirement
129
- none: false
130
106
  requirements:
131
- - - ! '>='
107
+ - - '>='
132
108
  - !ruby/object:Gem::Version
133
109
  version: '0'
134
- segments:
135
- - 0
136
- hash: -2006144639180283266
137
110
  required_rubygems_version: !ruby/object:Gem::Requirement
138
- none: false
139
111
  requirements:
140
- - - ! '>='
112
+ - - '>='
141
113
  - !ruby/object:Gem::Version
142
114
  version: 1.3.6
143
115
  requirements: []
144
116
  rubyforge_project: nrename
145
- rubygems_version: 1.8.24
117
+ rubygems_version: 2.0.3
146
118
  signing_key:
147
- specification_version: 3
119
+ specification_version: 4
148
120
  summary: Command-line utility for renaming numbered files.
149
121
  test_files: []
122
+ has_rdoc: