diff --git a/lib/listen/record.rb b/lib/listen/record.rb index 7cdb5662..03566886 100644 --- a/lib/listen/record.rb +++ b/lib/listen/record.rb @@ -46,16 +46,18 @@ def file_data(rel_path) end def dir_entries(rel_path) - subtree = if ['', '.'].include?(rel_path.to_s) + rel_path_s = rel_path.to_s + subtree = if ['', '.'].include?(rel_path_s) @tree else - @tree[rel_path.to_s] ||= _auto_hash - @tree[rel_path.to_s] + @tree[rel_path_s] ||= _auto_hash end - subtree.transform_values do |values| - # only get data for file entries - values.key?(:mtime) ? values : {} + subtree.each_with_object({}) do |(key, values), result| + # only return data for file entries + if values.respond_to?(:has_key?) + result[key] = values.has_key?(:mtime) ? values : {} + end end end diff --git a/spec/lib/listen/record_spec.rb b/spec/lib/listen/record_spec.rb index 919ad0d5..b33362b2 100644 --- a/spec/lib/listen/record_spec.rb +++ b/spec/lib/listen/record_spec.rb @@ -66,7 +66,7 @@ def record_tree(record) end context 'with subdir path' do - it 'sets path by spliting dirname and basename' do + it 'sets path by splitting dirname and basename' do record.update_file('path/file.rb', mtime: 1.1) expect(record_tree(record)['path']).to eq('file.rb' => { mtime: 1.1 }) end @@ -257,6 +257,14 @@ def record_tree(record) end it { should be_empty } end + + context 'with path renamed to file' do + before do + record.add_dir('path/subdir') + record.update_file('path', mtime: 1.1) + end + it { should be_empty } + end end end