insert_after 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f7b32c8d75b05bb77620742256241e80ffa08ae9dd2aab62c77ff89162958aa3
4
+ data.tar.gz: a005eeca4d06274644788acc9ef772ab17fcde223ab177a4c73f4f8c2885a0fc
5
+ SHA512:
6
+ metadata.gz: 22c3845706c9672bc8e1786610de92337c20a03ec9ae9597c10b10f0abf12ce1ff087f45bfc176136453c2c1c8c9b3799d893879ee48900c7bd8b332aa83c0c1
7
+ data.tar.gz: 0bb1f80568534d1bb4715a5838e87f0abc8caaaaadd31fb2a174d881ea7c400386f96000151ee85202e040e08cac3f79322e3a118bf3d9863e4f1dff0b7db66f
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Change Log
2
+
3
+ ## 0.1.0
4
+
5
+ * Initial release.
data/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # `Insert_after` [![Gem Version](https://badge.fury.io/rb/insert_after.svg)](https://badge.fury.io/rb/insert_after)
2
+
3
+ Inserts a line into a file after a line matching a regular expression.
4
+ String comparisons are case-insensitive.
5
+ Works on very large files because it reads the file line by line instead of reading the entire file into memory.
6
+
7
+ Can be used on the command line or in a Ruby program.
8
+
9
+
10
+ ## Command-line Installation
11
+
12
+ Either add this line to your application’s `Gemfile`:
13
+
14
+ ```ruby
15
+ gem 'insert_after'
16
+ ```
17
+
18
+ ## Installation For Use In a Ruby Program
19
+
20
+ Add the following to your application’s `.gemspec`:
21
+
22
+ ```ruby
23
+ spec.add_dependency 'insert_after'
24
+ ```
25
+
26
+ And then execute:
27
+
28
+ ```shell
29
+ $ bundle
30
+ ```
31
+
32
+
33
+ ## Command-line Usage
34
+
35
+ ```shell
36
+ # Inserts 'Inserted 1' after the first line containing 'line' into demo/my_file.txt:
37
+ $ insert_after line 'Inserted 1' demo/my_file.txt
38
+
39
+ # Inserts an empty line after the first line containing 'line 1' into demo/my_file.txt:
40
+ $ insert_after 'line 1' '' demo/my_file.txt
41
+
42
+ # Inserts 'Inserted 2' after the first line starting with 'line 2' into demo/my_file.txt:
43
+ $ insert_after '^line 2' 'Inserted 2' demo/my_file.txt
44
+
45
+ # Inserts 'Inserted 3' after the first line containing an 'e' followed by a '2' into demo/my_file.txt:
46
+ $ insert_after 'e.*2' 'Inserted 3' demo/my_file.txt
47
+ ```
48
+
49
+
50
+ ## Ruby Program Usage
51
+
52
+ The `demo/demo.rb` program is an example of how to use `insert_after` in a Ruby program:
53
+
54
+ ```ruby
55
+ require 'insert_after'
56
+
57
+ insert_after 'line 2', 'New line', 'my_file.txt'
58
+ ```
59
+
60
+
61
+ ## Development
62
+
63
+ After checking out this git repository, install dependencies by typing:
64
+
65
+ ```shell
66
+ $ bin/setup
67
+ ```
68
+
69
+ You should do the above before running Visual Studio Code.
70
+
71
+
72
+ ### Run the Tests
73
+
74
+ ```shell
75
+ $ bundle exec rspec
76
+ ```
77
+
78
+
79
+ ### Interactive Session
80
+
81
+ The following will allow you to experiment:
82
+
83
+ ```shell
84
+ $ bin/console
85
+ ```
86
+
87
+
88
+ ### Local Installation
89
+
90
+ To install this gem onto your local machine, type:
91
+
92
+ ```shell
93
+ $ bundle exec rake install
94
+ ```
95
+
96
+
97
+ ### To Release A New Version
98
+
99
+ To create a git tag for the new version, push git commits and tags,
100
+ and push the new version of the gem to https://rubygems.org, type:
101
+
102
+ ```shell
103
+ $ bundle exec rake release
104
+ ```
105
+
106
+
107
+ ## Contributing
108
+
109
+ Bug reports and pull requests are welcome at https://github.com/mslinn/insert_after.
110
+
111
+
112
+ ## License
113
+
114
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,40 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ desc 'Bump patch version'
11
+ task :patch do
12
+ system 'gem bump --tag'
13
+ end
14
+
15
+ desc 'Bump minor version'
16
+ task :minor do
17
+ system 'gem bump --version minor --tag'
18
+ end
19
+
20
+ desc 'Bump major version'
21
+ task :major do
22
+ system 'gem bump --version major --tag'
23
+ end
24
+
25
+ task publish: [:build] do
26
+ $VERBOSE = nil
27
+ load 'insert_after/version.rb'
28
+ system "gem push pkg/insert_after-#{InsertAfter::VERSION}.gem"
29
+ end
30
+
31
+ desc 'Bump patch version, create git tag, build the gem and release to geminabox (default)'
32
+ task release_patch: %i[test patch publish]
33
+
34
+ desc 'Bump minor version, create git tag, build the gem and release to geminabox'
35
+ task release_minor: %i[test minor publish]
36
+
37
+ desc 'Bump major version, create git tag, build the gem and release to geminabox'
38
+ task release_major: %i[test major publish]
39
+
40
+ task default: :test
data/exe/insert_after ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'insert_after'
4
+
5
+ InsertAfter.cmd
@@ -0,0 +1,37 @@
1
+ require_relative 'lib/insert_after/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ host = 'https://github.com/mslinn/insert_after'
5
+
6
+ spec.authors = ['Mike Slinn']
7
+ spec.bindir = 'exe'
8
+ spec.description = <<~END_DESC
9
+ Inserts a line into a file after a line matching a regular expression.
10
+ String comparisons are case-insensitive.
11
+ Works on very large files because it reads the file line by line instead of reading the entire file into memory.
12
+
13
+ Can be used on the command line or in a Ruby program.
14
+ END_DESC
15
+ spec.email = ['mslinn@mslinn.com']
16
+ spec.executables = ['insert_after']
17
+ spec.files = Dir['LICENSE.*', 'Rakefile', '{exe,lib}/**/*', '*.gemspec', '*.md']
18
+ spec.homepage = 'https://github.com/mslinn/insert_after'
19
+ spec.license = 'MIT'
20
+ spec.metadata = {
21
+ 'allowed_push_host' => 'https://rubygems.org',
22
+ 'bug_tracker_uri' => "#{host}/issues",
23
+ 'changelog_uri' => "#{host}/CHANGELOG.md",
24
+ 'homepage_uri' => spec.homepage,
25
+ 'source_code_uri' => host,
26
+ }
27
+ spec.name = 'insert_after'
28
+ spec.post_install_message = <<~END_MESSAGE
29
+
30
+ Thanks for installing #{spec.name}!
31
+
32
+ END_MESSAGE
33
+ spec.require_paths = ['lib']
34
+ spec.required_ruby_version = '>= 2.6.0'
35
+ spec.summary = 'Inserts a line into a file after a line matching a regular expression.'
36
+ spec.version = InsertAfter::VERSION
37
+ end
@@ -0,0 +1,3 @@
1
+ module InsertAfter
2
+ VERSION = '0.1.0'.freeze unless defined? VERSION
3
+ end
@@ -0,0 +1,67 @@
1
+ require 'fileutils'
2
+ require 'tempfile'
3
+ require_relative 'insert_after/version'
4
+
5
+ module InsertAfter
6
+ def self.help(msg = nil)
7
+ puts "Error: #{msg}\n\n" if msg
8
+ puts <<~END_MSG
9
+ Inserts a line into a file after a line matching a regular expression.
10
+ String comparisons are case-insensitive.
11
+ Works on very large files because it reads the file line by line instead of reading the entire file into memory.
12
+
13
+ Can be used on the command line or in a Ruby program.
14
+
15
+ Command line usage:
16
+ # Inserts 'Inserted 1' after the first line containing 'line' into demo/my_file.txt:
17
+ $ insert_after line 'Inserted 1' demo/my_file.txt
18
+
19
+ # Inserts an empty line after the first line containing 'line 1' into demo/my_file.txt:
20
+ $ insert_after 'line 1' '' demo/my_file.txt
21
+
22
+ # Inserts 'Inserted 2' after the first line starting with 'line 2' into demo/my_file.txt:
23
+ $ insert_after '^line 2' 'Inserted 2' demo/my_file.txt
24
+
25
+ # Inserts 'Inserted 3' after the first line containing an 'e' followed by a '2' into demo/my_file.txt:
26
+ $ insert_after 'e.*2' 'Inserted 3' demo/my_file.txt
27
+
28
+ Ruby usage:
29
+ require 'insert_after'
30
+ InsertAfter.insert_after 'line 2' 'New line' 'demo/my_file.txt'
31
+ END_MSG
32
+ exit 1
33
+ end
34
+
35
+ def self.insert_after(regex, new_line, filename)
36
+ InsertAfter.help "#{filename} does not exist" unless File.exist? filename
37
+
38
+ original_file = File.new(filename)
39
+ temporary_file = Tempfile.new(filename)
40
+ begin
41
+ original_file.each do |line|
42
+ temporary_file << line
43
+ temporary_file << "#{new_line}\n" if line.downcase.match?(/#{regex}/)
44
+ end
45
+ original_file.close
46
+ temporary_file.close
47
+ FileUtils.mv(temporary_file.path, filename)
48
+ ensure
49
+ original_file.close unless original_file.closed?
50
+ temporary_file.close unless temporary_file.closed?
51
+ temporary_file.unlink if File.exist? temporary_file.path
52
+ end
53
+ end
54
+
55
+ def self.cmd(argv = ARGV)
56
+ InsertAfter.help if argv.empty?
57
+ InsertAfter.help 'The new line to insert was not provided' if argv.length == 1
58
+ InsertAfter.help 'No file name was provided' if argv.length == 2
59
+ InsertAfter.help 'Too many arguments' if argv.length > 3
60
+ regex = argv[0].downcase
61
+ new_line = argv[1]
62
+ filename = argv[2]
63
+ InsertAfter.insert_after(regex, new_line, filename)
64
+ end
65
+ end
66
+
67
+ InsertAfter.cmd(ARGV) if __FILE__ == $PROGRAM_NAME
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: insert_after
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mike Slinn
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-11-10 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |
14
+ Inserts a line into a file after a line matching a regular expression.
15
+ String comparisons are case-insensitive.
16
+ Works on very large files because it reads the file line by line instead of reading the entire file into memory.
17
+
18
+ Can be used on the command line or in a Ruby program.
19
+ email:
20
+ - mslinn@mslinn.com
21
+ executables:
22
+ - insert_after
23
+ extensions: []
24
+ extra_rdoc_files: []
25
+ files:
26
+ - CHANGELOG.md
27
+ - README.md
28
+ - Rakefile
29
+ - exe/insert_after
30
+ - insert_after.gemspec
31
+ - lib/insert_after.rb
32
+ - lib/insert_after/version.rb
33
+ homepage: https://github.com/mslinn/insert_after
34
+ licenses:
35
+ - MIT
36
+ metadata:
37
+ allowed_push_host: https://rubygems.org
38
+ bug_tracker_uri: https://github.com/mslinn/insert_after/issues
39
+ changelog_uri: https://github.com/mslinn/insert_after/CHANGELOG.md
40
+ homepage_uri: https://github.com/mslinn/insert_after
41
+ source_code_uri: https://github.com/mslinn/insert_after
42
+ post_install_message: |2+
43
+
44
+ Thanks for installing insert_after!
45
+
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 2.6.0
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubygems_version: 3.3.7
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: Inserts a line into a file after a line matching a regular expression.
64
+ test_files: []
65
+ ...