nrename 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
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: