tty-file 0.8.0 → 0.9.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/lib/tty/file.rb +75 -85
  4. data/lib/tty/file/create_file.rb +5 -5
  5. data/lib/tty/file/differ.rb +5 -4
  6. data/lib/tty/file/digest_file.rb +4 -4
  7. data/lib/tty/file/download_file.rb +5 -5
  8. data/lib/tty/file/version.rb +1 -1
  9. metadata +19 -56
  10. data/Rakefile +0 -10
  11. data/bin/console +0 -14
  12. data/bin/setup +0 -8
  13. data/spec/fixtures/cli_app/%name%_cli.rb +0 -2
  14. data/spec/fixtures/cli_app/commands/subcommand.rb +0 -2
  15. data/spec/fixtures/cli_app/excluded/%name%_cli.rb +0 -2
  16. data/spec/fixtures/templates/%file_name%.rb +0 -1
  17. data/spec/fixtures/templates/unit_test.rb +0 -1
  18. data/spec/spec_helper.rb +0 -94
  19. data/spec/unit/append_to_file_spec.rb +0 -110
  20. data/spec/unit/binary_spec.rb +0 -230
  21. data/spec/unit/checksum_file_spec.rb +0 -48
  22. data/spec/unit/chmod_spec.rb +0 -92
  23. data/spec/unit/copy_directory_spec.rb +0 -120
  24. data/spec/unit/copy_file_spec.rb +0 -172
  25. data/spec/unit/create_directory_spec.rb +0 -93
  26. data/spec/unit/create_file_spec.rb +0 -130
  27. data/spec/unit/diff_spec.rb +0 -107
  28. data/spec/unit/differ/call_spec.rb +0 -101
  29. data/spec/unit/download_file_spec.rb +0 -68
  30. data/spec/unit/escape_glob_path_spec.rb +0 -14
  31. data/spec/unit/inject_into_file_spec.rb +0 -176
  32. data/spec/unit/prepend_to_file_spec.rb +0 -124
  33. data/spec/unit/read_to_char_spec.rb +0 -24
  34. data/spec/unit/remove_file_spec.rb +0 -67
  35. data/spec/unit/replace_in_file_spec.rb +0 -140
  36. data/spec/unit/tail_file_spec.rb +0 -77
  37. data/tasks/console.rake +0 -11
  38. data/tasks/coverage.rake +0 -11
  39. data/tasks/spec.rake +0 -29
  40. data/tty-file.gemspec +0 -33
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe TTY::File, "#read_to_char" do
4
- before do
5
- @saved_verbosity = $VERBOSE
6
- @saved_encoding = Encoding.default_external
7
- $VERBOSE = nil
8
- Encoding.default_external = Encoding::UTF_8
9
- end
10
-
11
- after do
12
- Encoding.default_external = @saved_encoding
13
- $VERBOSE = @saved_verbosity
14
- end
15
-
16
- it "reads file up to valid char", unless: RSpec::Support::OS.windows? do
17
- file = tmp_pathname("binary", "unicode.txt")
18
- bytes = 4096
19
-
20
- content = TTY::File.read_to_char(file, bytes)
21
-
22
- expect(content.bytesize).to eq(bytes + 2)
23
- end
24
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe TTY::File, '#remove_file' do
4
- shared_context "removing a file" do
5
- it "removes a given file", unless: RSpec::Support::OS.windows? do
6
- src_path = path_factory.call('Gemfile')
7
-
8
- TTY::File.remove_file(src_path, verbose: false)
9
-
10
- expect(::File.exist?(src_path)).to be(false)
11
- end
12
-
13
- it "removes a directory" do
14
- src_path = path_factory.call('templates')
15
-
16
- TTY::File.remove_file(src_path, verbose: false)
17
-
18
- expect(::File.exist?(src_path)).to be(false)
19
- end
20
-
21
- it "pretends removing file" do
22
- src_path = path_factory.call('Gemfile')
23
-
24
- TTY::File.remove_file(src_path, noop: true, verbose: false)
25
-
26
- expect(::File.exist?(src_path)).to be(true)
27
- end
28
-
29
- it "removes files in secure mode" do
30
- src_path = path_factory.call('Gemfile')
31
- allow(::FileUtils).to receive(:rm_r)
32
-
33
- TTY::File.remove_file(src_path, verbose: false, secure: false)
34
-
35
- expect(::FileUtils).to have_received(:rm_r).
36
- with(src_path.to_s, force: nil, secure: false)
37
- end
38
-
39
- it "logs status" do
40
- src_path = path_factory.call('Gemfile')
41
-
42
- expect {
43
- TTY::File.remove_file(src_path, noop: true)
44
- }.to output(/\e\[31mremove\e\[0m(.*)Gemfile/).to_stdout_from_any_process
45
- end
46
-
47
- it "logs status without color" do
48
- src_path = path_factory.call('Gemfile')
49
-
50
- expect {
51
- TTY::File.remove_file(src_path, noop: true, color: false)
52
- }.to output(/\s+remove(.*)Gemfile/).to_stdout_from_any_process
53
- end
54
- end
55
-
56
- context "when passed a String instance for the file argument" do
57
- let(:path_factory) { method(:tmp_path) }
58
-
59
- include_context "removing a file"
60
- end
61
-
62
- context "when passed a Pathname instance for the file argument" do
63
- let(:path_factory) { method(:tmp_pathname) }
64
-
65
- include_context "removing a file"
66
- end
67
- end
@@ -1,140 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe TTY::File, '#replace_in_file' do
4
- shared_context "replacing in a file" do
5
- it "replaces file content with a matching string" do
6
- file = path_factory.call('Gemfile')
7
- status = nil
8
- expect {
9
- status = TTY::File.replace_in_file(file, /gem 'rails'/, "gem 'hanami'")
10
- }.to output(/replace/).to_stdout_from_any_process
11
-
12
- expect(status).to eq(true)
13
- expect(File.read(file)).to eq([
14
- "gem 'nokogiri'\n",
15
- "gem 'hanami', '5.0.0'\n",
16
- "gem 'rack', '>=1.0'\n"
17
- ].join)
18
- end
19
-
20
- it "replaces file content with a matching block value" do
21
- file = path_factory.call('Gemfile')
22
- status = nil
23
- expect {
24
- status =TTY::File.replace_in_file(file, /gem 'rails'/, verbose: false) do |match|
25
- match = "gem 'hanami'"
26
- end
27
- }.to_not output(/replace/).to_stdout_from_any_process
28
-
29
- expect(status).to eq(true)
30
- expect(File.read(file)).to eq([
31
- "gem 'nokogiri'\n",
32
- "gem 'hanami', '5.0.0'\n",
33
- "gem 'rack', '>=1.0'\n"
34
- ].join)
35
- end
36
-
37
- it "doesn't match file content" do
38
- file = path_factory.call('Gemfile')
39
- content = ::File.read(file)
40
- status = TTY::File.replace_in_file(file, /unknown/, 'Hello', verbose: false)
41
-
42
- expect(status).to eq(false)
43
- expect(::File.read(file)).to eq(content)
44
- end
45
-
46
- it "silences verbose output" do
47
- content = "gem 'hanami'"
48
- file = path_factory.call('Gemfile')
49
- expect {
50
- TTY::File.replace_in_file(file, /gem 'rails'/, content, verbose: false)
51
- }.to_not output(/replace/).to_stdout_from_any_process
52
- end
53
-
54
- it "fails to replace content when missing correct file path" do
55
- expect {
56
- TTY::File.replace_in_file(path_factory.call('non-existent-path'),
57
- /gem 'rails'/, "gem 'hanami'", verbose: false)
58
- }.to raise_error(ArgumentError, /File path (.)* does not exist/)
59
- end
60
-
61
- it "logs action" do
62
- content = "gem 'hanami'"
63
- file = path_factory.call('Gemfile')
64
-
65
- expect {
66
- TTY::File.replace_in_file(file, /gem 'rails'/, content, noop: true)
67
- }.to output(/\e\[32mreplace\e\[0m(.*)Gemfile/).to_stdout_from_any_process
68
- end
69
-
70
- it "logs action without color" do
71
- content = "gem 'hanami'"
72
- file = path_factory.call('Gemfile')
73
-
74
- expect {
75
- TTY::File.replace_in_file(file, /gem 'rails'/, content,
76
- noop: true, color: false)
77
- }.to output(/\s+replace(.*)Gemfile/).to_stdout_from_any_process
78
- end
79
-
80
- it "allows for noop run" do
81
- content = "gem 'hanami'"
82
- file = path_factory.call('Gemfile')
83
-
84
- TTY::File.replace_in_file(file, /gem 'rails'/, content,
85
- noop: true, verbose: false)
86
-
87
- expect(File.read(file)).to eq([
88
- "gem 'nokogiri'\n",
89
- "gem 'rails', '5.0.0'\n",
90
- "gem 'rack', '>=1.0'\n"
91
- ].join)
92
- end
93
-
94
- it "doesn't replace content when no match found" do
95
- content = "gem 'hanami'"
96
- file = path_factory.call('Gemfile')
97
-
98
- status = TTY::File.gsub_file(file, /gem 'rails'/, content, verbose: false)
99
- expect(status).to eq(true)
100
- expect(File.read(file)).to eq([
101
- "gem 'nokogiri'\n",
102
- "gem 'hanami', '5.0.0'\n",
103
- "gem 'rack', '>=1.0'\n"
104
- ].join)
105
-
106
- status = TTY::File.gsub_file(file, /gem 'rails'/, content, verbose: false)
107
- expect(status).to eq(false)
108
-
109
- expect(File.read(file)).to eq([
110
- "gem 'nokogiri'\n",
111
- "gem 'hanami', '5.0.0'\n",
112
- "gem 'rack', '>=1.0'\n"
113
- ].join)
114
- end
115
-
116
- it "replaces with multibyte content" do
117
- content = "gem 'ようこそ'"
118
- file = path_factory.call('Gemfile')
119
-
120
- TTY::File.gsub_file(file, /gem 'rails'/, content, verbose: false)
121
- expect(File.open(file, 'r:UTF-8', &:read)).to eq([
122
- "gem 'nokogiri'\n",
123
- "#{content}, '5.0.0'\n",
124
- "gem 'rack', '>=1.0'\n"
125
- ].join)
126
- end
127
- end
128
-
129
- context "when passed a String instance for the file argument" do
130
- let(:path_factory) { method(:tmp_path) }
131
-
132
- include_context "replacing in a file"
133
- end
134
-
135
- context "when passed a Pathname instance for the file argument" do
136
- let(:path_factory) { method(:tmp_pathname) }
137
-
138
- include_context "replacing in a file"
139
- end
140
- end
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe TTY::File, '#tail_file' do
4
- shared_context "tailing a file" do
5
- it "tails file for lines with chunks smaller than file size" do
6
- file = path_factory.call('tail/lines')
7
-
8
- lines = TTY::File.tail_file(file, 5, chunk_size: 2**3)
9
-
10
- expect(lines).to eq([
11
- "line12",
12
- "line13",
13
- "line14",
14
- "line15",
15
- "line16"
16
- ])
17
- end
18
-
19
- it "tails file for lines with chunks equal file size" do
20
- file = path_factory.call('tail/lines')
21
-
22
- lines = TTY::File.tail_file(file, 5, chunk_size: file.size)
23
-
24
- expect(lines).to eq([
25
- "line12",
26
- "line13",
27
- "line14",
28
- "line15",
29
- "line16"
30
- ])
31
-
32
- end
33
-
34
- it "tails file for lines with chunks larger than file size" do
35
- file = path_factory.call('tail/lines')
36
-
37
- lines = TTY::File.tail_file(file, 5, chunk_size: 2**9)
38
-
39
- expect(lines).to eq([
40
- "line12",
41
- "line13",
42
- "line14",
43
- "line15",
44
- "line16"
45
- ])
46
- end
47
-
48
- it "tails file and yields lines" do
49
- file = path_factory.call('tail/lines')
50
- lines = []
51
-
52
- TTY::File.tail_file(file, 5, chunk_size: 8) do |line|
53
- lines << line
54
- end
55
-
56
- expect(lines).to eq([
57
- "line12",
58
- "line13",
59
- "line14",
60
- "line15",
61
- "line16"
62
- ])
63
- end
64
- end
65
-
66
- context "when passed a String instance for the file argument" do
67
- let(:path_factory) { method(:tmp_path) }
68
-
69
- include_context "tailing a file"
70
- end
71
-
72
- context "when passed a Pathname instance for the file argument" do
73
- let(:path_factory) { method(:tmp_pathname) }
74
-
75
- include_context "tailing a file"
76
- end
77
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- desc 'Load gem inside irb console'
4
- task :console do
5
- require 'irb'
6
- require 'irb/completion'
7
- require File.join(__FILE__, '../../lib/tty-file')
8
- ARGV.clear
9
- IRB.start
10
- end
11
- task c: %w[ console ]
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- desc 'Measure code coverage'
4
- task :coverage do
5
- begin
6
- original, ENV['COVERAGE'] = ENV['COVERAGE'], 'true'
7
- Rake::Task['spec'].invoke
8
- ensure
9
- ENV['COVERAGE'] = original
10
- end
11
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- begin
4
- require 'rspec/core/rake_task'
5
-
6
- desc 'Run all specs'
7
- RSpec::Core::RakeTask.new(:spec) do |task|
8
- task.pattern = 'spec/{unit,integration}{,/*/**}/*_spec.rb'
9
- end
10
-
11
- namespace :spec do
12
- desc 'Run unit specs'
13
- RSpec::Core::RakeTask.new(:unit) do |task|
14
- task.pattern = 'spec/unit{,/*/**}/*_spec.rb'
15
- end
16
-
17
- desc 'Run integration specs'
18
- RSpec::Core::RakeTask.new(:integration) do |task|
19
- task.pattern = 'spec/integration{,/*/**}/*_spec.rb'
20
- end
21
- end
22
-
23
- rescue LoadError
24
- %w[spec spec:unit spec:integration].each do |name|
25
- task name do
26
- $stderr.puts "In order to run #{name}, do `gem install rspec`"
27
- end
28
- end
29
- end
@@ -1,33 +0,0 @@
1
- lib = File.expand_path('../lib', __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'tty/file/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "tty-file"
7
- spec.version = TTY::File::VERSION
8
- spec.authors = ["Piotr Murach"]
9
- spec.email = ["me@piotrmurach.com"]
10
-
11
- spec.summary = %q{File manipulation utility methods.}
12
- spec.description = %q{File manipulation utility methods.}
13
- spec.homepage = "https://piotrmurach.github.io/tty"
14
- spec.license = "MIT"
15
-
16
- spec.files = Dir['{lib,spec}/**/*.rb']
17
- spec.files += Dir['{bin,tasks}/*', 'tty-file.gemspec']
18
- spec.files += Dir['README.md', 'CHANGELOG.md', 'LICENSE.txt', 'Rakefile']
19
- spec.bindir = "exe"
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
- spec.require_paths = ["lib"]
22
-
23
- spec.required_ruby_version = '>= 2.0.0'
24
-
25
- spec.add_dependency 'pastel', '~> 0.7.2'
26
- spec.add_dependency 'tty-prompt', '~> 0.18'
27
- spec.add_dependency 'diff-lcs', '~> 1.3'
28
-
29
- spec.add_development_dependency 'bundler', '>= 1.5'
30
- spec.add_development_dependency 'rake'
31
- spec.add_development_dependency 'rspec', '~> 3.0'
32
- spec.add_development_dependency 'webmock', '~> 3.4'
33
- end