nrename 0.2.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.
data/README.md CHANGED
@@ -67,6 +67,8 @@ Options:
67
67
  -X, --execute Do actual work
68
68
  -R, --recursive Process given directories recursively
69
69
  -N, --numbers-only Leave only numbers in file name
70
+ -D, --rename-dirs Rename only directories instead of regular files
71
+ --renumber Renumber files from starting from 1 and on
70
72
  --regexp REGEXP Use REGEXP to match filenames
71
73
  -v, --[no-]verbose Run verbosely
72
74
  -h, --help Display this message
@@ -28,7 +28,7 @@ Feature: Options processing
28
28
  Then the exit status should be 1
29
29
  And the stderr should contain "no_dir is not a valid directory."
30
30
 
31
- Scenario: Passing file instead of directory
31
+ Scenario: Passing regular file instead of directory
32
32
  Given an empty file named "foo"
33
33
  When I run `nrename foo`
34
34
  Then the exit status should be 1
@@ -3,7 +3,7 @@ Feature: Renaming files
3
3
  As a user
4
4
  I want program to rename files correctly
5
5
 
6
- Scenario: Renaming files in specified directory
6
+ Scenario: Renaming regular files in specified directory
7
7
  Given a directory named "dir"
8
8
  And the following empty files inside directory "dir":
9
9
  | 1.txt |
@@ -14,11 +14,28 @@ Feature: Renaming files
14
14
  When I run `nrename -X dir`
15
15
  Then the exit status should be 0
16
16
  And the following files should exist inside directory "dir":
17
- | 001.txt |
18
- | 010.txt |
19
- | 023.txt |
20
- | 101.txt |
21
- | 200.txt |
17
+ | 001.txt |
18
+ | 010.txt |
19
+ | 023.txt |
20
+ | 101.txt |
21
+ | 200.txt |
22
+
23
+ Scenario: Renaming directories in specified directory
24
+ Given a directory named "dir"
25
+ And the following directories inside directory "dir":
26
+ | 1 |
27
+ | 10 |
28
+ | 0023 |
29
+ | 101 |
30
+ | 200 |
31
+ When I run `nrename -DX dir`
32
+ Then the exit status should be 0
33
+ And the following directories should exist inside directory "dir":
34
+ | 001 |
35
+ | 010 |
36
+ | 023 |
37
+ | 101 |
38
+ | 200 |
22
39
 
23
40
  Scenario: Dry-run
24
41
  Given a directory named "dir"
@@ -35,23 +52,23 @@ Feature: Renaming files
35
52
  | 10.txt |
36
53
  | 0023.txt |
37
54
  And the following files should not exist:
38
- | 01.txt |
39
- | 23.txt |
55
+ | 01.txt |
56
+ | 23.txt |
40
57
 
41
58
  Scenario: Renaming files in multiple directories
42
59
  Given a directory named "foo"
43
60
  And a directory named "bar"
44
61
  And the following empty files inside directory "foo":
45
- | 1.txt |
46
- | 010.txt |
62
+ | 1.txt |
63
+ | 010.txt |
47
64
  And the following empty files inside directory "bar":
48
65
  | 33.txt |
49
66
  | 01234.txt |
50
67
  And I run `nrename -X foo bar`
51
68
  Then the exit status should be 0
52
69
  And the following files should exist inside directory "foo":
53
- | 01.txt |
54
- | 10.txt |
70
+ | 01.txt |
71
+ | 10.txt |
55
72
  And the following files should exist inside directory "bar":
56
73
  | 0033.txt |
57
74
  | 1234.txt |
@@ -60,16 +77,16 @@ Feature: Renaming files
60
77
  Given a directory named "foo"
61
78
  And a directory named "bar"
62
79
  And the following empty files inside directory "foo":
63
- | 1.txt |
64
- | 010.txt |
80
+ | 1.txt |
81
+ | 010.txt |
65
82
  And the following empty files inside directory "bar":
66
83
  | 33.txt |
67
84
  | 01234.txt |
68
85
  And I run `nrename -XR .`
69
86
  Then the exit status should be 0
70
87
  And the following files should exist inside directory "foo":
71
- | 01.txt |
72
- | 10.txt |
88
+ | 01.txt |
89
+ | 10.txt |
73
90
  And the following files should exist inside directory "bar":
74
91
  | 0033.txt |
75
92
  | 1234.txt |
@@ -105,3 +122,37 @@ Feature: Renaming files
105
122
  | 003_01.txt |
106
123
  | 003_10.txt |
107
124
  | 003_23.txt |
125
+
126
+ Scenario: Renaming files from scratch
127
+ Given a directory named "dir"
128
+ And the following empty files inside directory "dir":
129
+ | 1.txt |
130
+ | 10.txt |
131
+ | 0023.txt |
132
+ | 101.txt |
133
+ | 200.txt |
134
+ When I run `nrename -X --renumber dir`
135
+ Then the exit status should be 0
136
+ And the following files should exist inside directory "dir":
137
+ | 1.txt |
138
+ | 2.txt |
139
+ | 3.txt |
140
+ | 4.txt |
141
+ | 5.txt |
142
+
143
+ Scenario: Renaming files from scratch in right order
144
+ Given a directory named "dir"
145
+ And the following files with content inside directory "dir":
146
+ | 1.txt | first |
147
+ | 10.txt | second |
148
+ | 0023.txt | third |
149
+ | 101.txt | fourth |
150
+ | 200.txt | fifth |
151
+ When I run `nrename -X --renumber dir`
152
+ Then the exit status should be 0
153
+ And the following files with content should exist inside directory "dir":
154
+ | 1.txt | first |
155
+ | 2.txt | second |
156
+ | 3.txt | third |
157
+ | 4.txt | fourth |
158
+ | 5.txt | fifth |
@@ -3,26 +3,14 @@ require 'fileutils'
3
3
 
4
4
  ENV['PATH'] = "#{File.expand_path __FILE__, '../../../bin'}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
5
5
 
6
- Given(/^the following empty files inside directory "([^"]*)":$/) do |directory, files|
7
- files.raw.each do |file_row|
8
- write_file "#{directory}/#{file_row[0]}", ''
9
- end
10
- end
11
-
12
- Then(/^the stdout should match \/([^\/]*)\/$/) do |expected|
13
- assert_matching_output expected, all_stdout
14
- end
15
-
16
- Then(/^the following files should exist inside directory "([^"]*)":$/) do |directory, files|
17
- files.raw.each do |file_row|
18
- check_file_presence ["#{directory}/#{file_row[0]}"], true
19
- end
20
- end
6
+ application_root = File.expand_path('../../..', __FILE__)
21
7
 
8
+ # Account for slow JVM startup.
22
9
  Before do
23
- @aruba_timeout_seconds = 10 # account for slow JVM startup
10
+ @aruba_timeout_seconds = 10
24
11
  end
25
12
 
13
+ # Remove aruba's temporary directory after each scenario.
26
14
  After do
27
- FileUtils.rm_rf File.expand_path('../../../tmp', __FILE__)
15
+ FileUtils.rm_rf File.expand_path 'tmp', application_root
28
16
  end
@@ -7,20 +7,29 @@ module Nrename
7
7
  extend Forwardable
8
8
 
9
9
  def_delegator :numbered_files, :empty?
10
- def_delegator :Nrename, :options
10
+ def_delegator Nrename, :options
11
11
 
12
12
  def initialize(dir)
13
13
  @dir = Pathname.new dir
14
14
  end
15
15
 
16
+ def directories
17
+ @dir.children.select &:directory?
18
+ end
19
+
20
+ def regular_files
21
+ @dir.children.select &:file?
22
+ end
23
+
16
24
  def files
17
- @dir.children.reject &:directory?
25
+ options.rename_dirs ? directories : regular_files
18
26
  end
19
27
 
20
28
  def numbered_files
21
29
  @numbered_files ||= files.
22
30
  select { |file| file.basename.to_s =~ options.pattern }.
23
- map &(NumberedFile.method :new)
31
+ map { |file| NumberedFile.new file }.
32
+ sort_by(&:number)
24
33
  end
25
34
 
26
35
  def num_field_length
@@ -28,13 +37,32 @@ module Nrename
28
37
  end
29
38
 
30
39
  def max_number
31
- numbered_files.map(&:number).max
40
+ if options.renumber
41
+ numbered_files.size
42
+ else
43
+ numbered_files.map(&:number).max
44
+ end
32
45
  end
33
46
 
34
- def normalize
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
55
+ end
56
+ end
57
+
58
+ def fix_numbers
35
59
  numbered_files.each do |file|
36
60
  file.normalize num_field_length
37
61
  end
38
62
  end
63
+
64
+ def normalize
65
+ options.renumber ? renumber : fix_numbers
66
+ end
39
67
  end
40
68
  end
@@ -4,23 +4,28 @@ require 'forwardable'
4
4
 
5
5
  module Nrename
6
6
  class NumberedFile
7
- attr_reader :path, :number_length
7
+ attr_reader :path, :number_length, :override_number
8
8
 
9
9
  extend Forwardable
10
10
 
11
- def_delegator :Nrename, :options
11
+ def_delegator Nrename, :options
12
12
 
13
13
  def initialize(path)
14
14
  @path = path
15
15
  end
16
16
 
17
17
  def number
18
- path.basename.to_s[options.pattern, 1].to_i
18
+ override_number || path.basename.to_s[options.pattern, 1].to_i
19
19
  end
20
20
 
21
- def normalize(length)
21
+ def normalize(length, override_number = nil)
22
22
  @number_length = length
23
- new_name = normalized_path
23
+ @override_number = override_number
24
+
25
+ rename_to normalized_path
26
+ end
27
+
28
+ def rename_to(new_name)
24
29
  return if path == new_name
25
30
 
26
31
  FileUtils.mv path, new_name, {
@@ -2,6 +2,7 @@ require 'forwardable'
2
2
  require 'optparse'
3
3
  require 'ostruct'
4
4
  require 'set'
5
+ require 'shellwords'
5
6
  require 'singleton'
6
7
 
7
8
  module Nrename
@@ -15,6 +16,8 @@ module Nrename
15
16
  :execute => false,
16
17
  :pattern => /(\d+)/,
17
18
  :recursive => false,
19
+ :rename_dirs => false,
20
+ :renumber => false,
18
21
  :verbose => true
19
22
  }
20
23
  end
@@ -26,6 +29,10 @@ module Nrename
26
29
  @options ||= OpenStruct.new default_options
27
30
  end
28
31
 
32
+ def reset
33
+ @options = nil
34
+ end
35
+
29
36
  def parser
30
37
  OptionParser.new do |opts|
31
38
  opts.banner = "Usage: #{Nrename.executable_name} [OPTINS] DIR..."
@@ -47,6 +54,16 @@ module Nrename
47
54
  options.numbers_only = n
48
55
  end
49
56
 
57
+ opts.on '-D', '--rename-dirs',
58
+ 'Rename only directories instead of regular files' do |d|
59
+ options.rename_dirs = d
60
+ end
61
+
62
+ opts.on '--renumber',
63
+ 'Renumber files from starting from 1 and on' do |renum|
64
+ options.renumber = renum
65
+ end
66
+
50
67
  opts.on '--regexp REGEXP', Regexp,
51
68
  'Use REGEXP to match filenames' do |regexp|
52
69
  options.pattern = regexp
@@ -69,8 +86,6 @@ module Nrename
69
86
  end
70
87
 
71
88
  def parse(args)
72
- @options = nil
73
-
74
89
  # Display help if called through 'nrename' executable and without arguments:
75
90
  if args.empty? && Nrename.executable_name == 'nrename'
76
91
  args << '--help'
@@ -104,7 +119,7 @@ module Nrename
104
119
 
105
120
  if options.recursive
106
121
  dirs.dup.each do |dir|
107
- Dir.glob(File.join dir, '**/') do |subdir|
122
+ Dir.glob(File.join dir.shellescape, '**/') do |subdir|
108
123
  dirs << subdir.chomp('/')
109
124
  end
110
125
  end
@@ -1,3 +1,3 @@
1
1
  module Nrename
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -8,15 +8,71 @@ describe Nrename::Directory do
8
8
  end
9
9
 
10
10
  describe '#files' do
11
- it 'returns all files inside directory' do
11
+ let(:files) { %w[foo bar baz] }
12
+ let(:dirs) { %w[quux corge grault garply] }
13
+
14
+ before :each do
15
+ inside test_dir do
16
+ touch files
17
+ mkdir dirs
18
+ end
19
+ end
20
+
21
+ it 'returns regular files when option "rename_dirs" is false' do
22
+ Nrename.options.stub :rename_dirs => false
23
+
24
+ dir = Nrename::Directory.new test_dir
25
+ dir_files = dir.files.map { |file| file.basename.to_s }
26
+
27
+ expect(dir_files).to match_array files
28
+ end
29
+
30
+ it 'returns directories when option "rename_dirs" is true' do
31
+ Nrename.options.stub :rename_dirs => true
32
+
33
+ dir = Nrename::Directory.new test_dir
34
+ dir_files = dir.files.map { |file| file.basename.to_s }
35
+
36
+ expect(dir_files).to match_array dirs
37
+ end
38
+ end
39
+
40
+ describe '#directories' do
41
+ it 'returns list of directories in given directory' do
42
+ dirs = %w[1 2 3 4 foo bar baz quux]
43
+
44
+ inside test_dir do
45
+ mkdir dirs
46
+ end
47
+
48
+ dir = Nrename::Directory.new test_dir
49
+ expect(dir).to have(dirs.length).directories
50
+ end
51
+
52
+ it 'ignores regular files' do
12
53
  files = %w[1.rb 2.rb 3.rb foo.rb bar baz.java]
54
+ dirs = %w[1 2 03 40 55]
13
55
 
14
56
  inside test_dir do
15
57
  touch files
58
+ mkdir dirs
16
59
  end
17
60
 
18
61
  dir = Nrename::Directory.new test_dir
19
- expect(dir).to have(files.length).files
62
+ expect(dir).to have(dirs.length).directories
63
+ end
64
+ end
65
+
66
+ describe '#regular_files' do
67
+ it 'returns all regualr files in given directory' do
68
+ files = %w[1.rb 2.rb 3.rb foo.rb bar baz.java]
69
+
70
+ inside test_dir do
71
+ touch files
72
+ end
73
+
74
+ dir = Nrename::Directory.new test_dir
75
+ expect(dir).to have(files.length).regular_files
20
76
  end
21
77
 
22
78
  it 'ignores directories' do
@@ -29,7 +85,7 @@ describe Nrename::Directory do
29
85
  end
30
86
 
31
87
  dir = Nrename::Directory.new test_dir
32
- expect(dir).to have(files.length).files
88
+ expect(dir).to have(files.length).regular_files
33
89
  end
34
90
  end
35
91
 
@@ -45,7 +101,7 @@ describe Nrename::Directory do
45
101
  expect(dir).to have(files.length).numbered_files
46
102
  end
47
103
 
48
- it 'returns empty array when there is no num. files in dir' do
104
+ it 'returns empty collection when there is no numbered files in dir' do
49
105
  mkdir test_dir
50
106
  dir = Nrename::Directory.new test_dir
51
107
  expect(dir).to have(:no).numbered_files
@@ -63,19 +119,6 @@ describe Nrename::Directory do
63
119
  dir = Nrename::Directory.new test_dir
64
120
  expect(dir).to have(numbered_files.length).numbered_files
65
121
  end
66
-
67
- it 'does not care about directories' do
68
- files = %w[1.rb 2.rb 3.rb]
69
- dirs = %w[1 2 03 40 55]
70
-
71
- inside test_dir do
72
- touch files
73
- mkdir dirs
74
- end
75
-
76
- dir = Nrename::Directory.new test_dir
77
- expect(dir).to have(files.length).numbered_files
78
- end
79
122
  end
80
123
 
81
124
  describe '#field_length' do
@@ -132,6 +175,7 @@ describe Nrename::Directory do
132
175
  dir.normalize
133
176
 
134
177
  expected = %w[01 02 03 04 05 06 10 11]
178
+
135
179
  renamed_files = Dir.entries(test_dir).
136
180
  reject &(File.method :directory?)
137
181
 
@@ -20,6 +20,13 @@ describe Nrename::NumberedFile do
20
20
  file = numbered_file '0001.txt'
21
21
  expect(file.number).to be == 1
22
22
  end
23
+
24
+ it 'handles different regular expressions' do
25
+ Nrename.options.stub :pattern => /^foo_0001_(\d+)\.txt$/
26
+
27
+ file = numbered_file 'foo_0001_0452.txt'
28
+ expect(file.number).to be == 452
29
+ end
23
30
  end
24
31
 
25
32
  describe '#normalized_path' do
@@ -31,11 +38,8 @@ describe Nrename::NumberedFile do
31
38
  it 'normalizes file name' do
32
39
  file = numbered_file 'abc_34.rb'
33
40
 
34
- file.stub :number_length => 4
35
- expect(file.normalized_path.to_s).to be == '0034.rb'
36
-
37
- file.stub :number_length => 5
38
- expect(file.normalized_path.to_s).to be == '00034.rb'
41
+ file.stub :number_length => 3
42
+ expect(file.normalized_path.to_s).to be == '034.rb'
39
43
  end
40
44
  end
41
45
 
@@ -47,9 +51,6 @@ describe Nrename::NumberedFile do
47
51
  it 'normalizes file name' do
48
52
  file = numbered_file 'abc_34.rb'
49
53
 
50
- file.stub :number_length => 4
51
- expect(file.normalized_path.to_s).to be == 'abc_0034.rb'
52
-
53
54
  file.stub :number_length => 5
54
55
  expect(file.normalized_path.to_s).to be == 'abc_00034.rb'
55
56
  end
@@ -62,9 +63,6 @@ describe Nrename::NumberedFile do
62
63
 
63
64
  file.stub :number_length => 4
64
65
  expect(file.adjusted_number).to be == '0123'
65
-
66
- file.stub :number_length => 6
67
- expect(file.adjusted_number).to be == '000123'
68
66
  end
69
67
  end
70
68
  end
@@ -1,31 +1,115 @@
1
1
  require 'spec_helper'
2
+ require 'forwardable'
2
3
 
3
4
  describe Nrename::Options do
5
+ extend Forwardable
6
+
7
+ def_delegator Nrename, :parse_options
8
+
9
+ after :each do
10
+ Nrename.options.reset # do not leak state
11
+ end
12
+
13
+ let(:defaults) { parse_options([]) }
14
+
4
15
  describe 'verbosity' do
5
- it 'is on by default (when no arguments provided)' do
6
- expect(Nrename.parse_options([]).verbose).to be_true
16
+ it 'is on by default' do
17
+ expect(defaults.verbose).to be_true
18
+ end
19
+
20
+ it 'is on when "-v" switch is provided' do
21
+ expect(parse_options(%w[-v]).verbose).to be_true
22
+ end
23
+
24
+ it 'is on when "--verbose" switch is provided' do
25
+ expect(parse_options(%w[--verbose]).verbose).to be_true
7
26
  end
8
27
 
9
- it 'is off when or "--no-verbose" switch is provided' do
10
- expect(Nrename.parse_options(%w[--no-verbose]).verbose).to be_false
28
+ it 'is off when "--no-verbose" switch is provided' do
29
+ expect(parse_options(%w[--no-verbose]).verbose).to be_false
11
30
  end
12
31
  end
13
32
 
14
33
  describe 'recursive processing' do
15
34
  it 'is off by default' do
16
- expect(Nrename.parse_options([]).recursive).to be_false
35
+ expect(defaults.recursive).to be_false
17
36
  end
18
37
 
19
- it 'is on when "-R" of "--recursive" is provided' do
20
- %w[-R --recursive].each do |option|
21
- expect(Nrename.parse_options([option]).recursive).to be_true
22
- end
38
+ it 'is on when "-R" switch is provided' do
39
+ expect(parse_options(%w[-R]).recursive).to be_true
40
+ end
41
+
42
+ it 'is on when "--recursive" switch is provided' do
43
+ expect(parse_options(%w[--recursive]).recursive).to be_true
44
+ end
45
+ end
46
+
47
+ describe 'perform actual renaming' do
48
+ it 'is off by default' do
49
+ expect(defaults.execute).to be_false
50
+ end
51
+
52
+ it 'is on when "-X" switch is provided' do
53
+ expect(parse_options(%w[-X]).execute).to be_true
54
+ end
55
+
56
+ it 'is on when "--execute" switch is provided' do
57
+ expect(parse_options(%w[--execute]).execute).to be_true
58
+ end
59
+ end
60
+
61
+ describe 'regular expression' do
62
+ it 'has a default value' do
63
+ expect(defaults.pattern).to be == /(\d+)/
64
+ end
65
+
66
+ it 'can be provided with "--regexp" switch' do
67
+ regexp = parse_options(%w[--regexp _(\d+)_]).pattern
68
+ expect(regexp).to be == /_(\d+)_/
69
+ end
70
+ end
71
+
72
+ describe 'leaving numbers only' do
73
+ it 'is off by default' do
74
+ expect(defaults.numbers_only).to be_false
75
+ end
76
+
77
+ it 'is on when "-N" switch is provided' do
78
+ expect(parse_options(%w[-N]).numbers_only).to be_true
79
+ end
80
+
81
+ it 'is on when "--numbers-only" switch is provided' do
82
+ expect(parse_options(%w[--numbers-only]).numbers_only).to be_true
83
+ end
84
+ end
85
+
86
+ describe 'renaming of directories' do
87
+ it 'is off by default' do
88
+ expect(defaults.rename_dirs).to be_false
89
+ end
90
+
91
+ it 'is on when "-D" switch is provided' do
92
+ expect(parse_options(%w[-D]).rename_dirs).to be_true
93
+ end
94
+
95
+ it 'is on when "--rename-dirs" switch is provided' do
96
+ expect(parse_options(%w[--rename-dirs]).rename_dirs).to be_true
97
+ end
98
+ end
99
+
100
+ describe 'renumbering files from scratch' do
101
+ it 'is off by default' do
102
+ expect(defaults.renumber).to be_false
103
+ end
104
+
105
+ it 'is on when "--renumber" switch is provided' do
106
+ expect(parse_options(%w[--renumber]).renumber).to be_true
23
107
  end
24
108
  end
25
109
 
26
110
  describe 'directory arguments' do
27
- let(:test_dir) { File.expand_path 'test_dir' }
28
- let(:subdirs) { %w[aa bb cc] }
111
+ let(:test_dir) { File.expand_path 'test ][ directory' }
112
+ let(:subdirs) { ['aa', 'bb', 'cc' 'foo bar [baz] (quux)'] }
29
113
 
30
114
  before :all do
31
115
  inside test_dir do
@@ -41,16 +125,16 @@ describe Nrename::Options do
41
125
  subdirs.each do |subdir|
42
126
  subdir_path = File.expand_path subdir, test_dir
43
127
  arg = File.join test_dir, subdir
44
- expect(Nrename.parse_options([arg]).dirs).to include subdir_path
128
+ expect(parse_options([arg]).dirs).to include subdir_path
45
129
  end
46
130
  end
47
131
 
48
132
  it 'empty if no arguments provided' do
49
- expect(Nrename.parse_options([]).dirs).to be_empty
133
+ expect(defaults.dirs).to be_empty
50
134
  end
51
135
 
52
136
  it 'recursively captures all subdirs when -R option provided' do
53
- dirs = Nrename.parse_options(['-R', test_dir]).dirs
137
+ dirs = parse_options(['-R', test_dir]).dirs
54
138
 
55
139
  expect(dirs).to include test_dir
56
140
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nrename
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-24 00:00:00.000000000 Z
12
+ date: 2012-09-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aruba
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.9.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: rb-inotify
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.8.8
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.8.8
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rspec
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
131
  version: '0'
116
132
  segments:
117
133
  - 0
118
- hash: 597873344998439750
134
+ hash: 3302606396241923876
119
135
  required_rubygems_version: !ruby/object:Gem::Requirement
120
136
  none: false
121
137
  requirements: