line_ender 0.0.2 → 0.0.3
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 +5 -5
- data/lib/le +47 -61
- data/lib/line_ender.rb +114 -106
- data/lib/test_line_ender.rb +45 -24
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
SHA512:
|
3
|
-
data.tar.gz: 9186cd233ab899bfb47b425f4039fda71d7d840692e20bdc355ee0bc878c0ab3b945f5905a10bfbf0b1d74974b0b8d917e1c5ee7e37955f978e6a2ac89aff24e
|
4
|
-
metadata.gz: 3394b3cdaa70f8a5d7542251a514d45ff1f04338c5f58a99dffe920c9cf97d4e0856ca7dd35dc81be9b8eb541ef07f128e3d8330a1133a967bb921b7cd69d724
|
5
2
|
SHA1:
|
6
|
-
data.tar.gz:
|
7
|
-
metadata.gz:
|
3
|
+
data.tar.gz: 0a8805fe53c0e3b98af8ffb911b9486b5d21033d
|
4
|
+
metadata.gz: ff506642f441d4fd8a53aff88a65bbdc806b1d4c
|
5
|
+
SHA512:
|
6
|
+
data.tar.gz: a6a6147ba4e9f07754e98f80200980c862165335a2989e10354271c2c29e3c951aac85620ad1e374ed6a5278271373c79d7e9ce130d2e0455824337969189a08
|
7
|
+
metadata.gz: 222a545605d345cb95c07e6a92417996374f7a1972c5b2e3389f27675c8d138a1bce7fcbf5a210f935aebdac0d33bd1cd149ee826a90293bc054c027bac7d987
|
data/lib/le
CHANGED
@@ -1,78 +1,64 @@
|
|
1
|
-
|
2
|
-
# == Synopsis
|
3
|
-
# le: This is program that replaces line endings of a file. It either does an inplace update or will write to another file with (-o) switch.
|
4
|
-
# The default line ending is Unix (-u), but other line endings are Windows (-w) or Mac (-m).
|
5
|
-
#
|
6
|
-
# == Note
|
7
|
-
# The -u, -m, and -w flags are mutually exclusive. (Can only choose one).
|
8
|
-
#
|
9
|
-
# == Usage
|
10
|
-
# le [OPTION] ... INPUTFILE
|
11
|
-
#
|
12
|
-
# -h, --help: show help
|
13
|
-
#
|
14
|
-
# -w, --windows: gives the file line endings of carriage return + line feed (\r\n)
|
15
|
-
#
|
16
|
-
# -u, --unix: gives the file line endings of line feed (\n) (default)
|
17
|
-
#
|
18
|
-
# -m, --mac: gives the file line endings of carriage return (\r)
|
19
|
-
#
|
20
|
-
# -o, --out: will write the output to a file with this name
|
21
|
-
#
|
22
|
-
# INPUTFILE: The file you want to modify the line endings for.
|
23
|
-
|
1
|
+
#! /usr/bin/env ruby
|
24
2
|
require 'rubygems'
|
25
|
-
require '
|
26
|
-
require 'rdoc/usage'
|
3
|
+
require 'trollop'
|
27
4
|
require 'line_ender'
|
28
5
|
|
29
6
|
include LineEnder
|
30
7
|
|
31
|
-
opts =
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
case opt
|
44
|
-
when '--windows'
|
45
|
-
RDoc::usage if ending
|
46
|
-
ending = LineEnder::Ending::Windows
|
47
|
-
when '--unix'
|
48
|
-
RDoc::usage if ending
|
49
|
-
ending = LineEnder::Ending::Unix
|
50
|
-
when '--mac'
|
51
|
-
RDoc::usage if ending
|
52
|
-
ending = LineEnder::Ending::Mac
|
53
|
-
when '--help'
|
54
|
-
RDoc::usage
|
55
|
-
when '--out'
|
56
|
-
outfile = arg
|
57
|
-
end
|
8
|
+
opts = Trollop::options do
|
9
|
+
banner <<-EOS
|
10
|
+
Synopsis: le is a line ender script to be used from the command prompt if you put it in your path
|
11
|
+
Usage: le [flags] [-o outfile] inputfile
|
12
|
+
Note: don't have to set --no-unix flag if looking for different endings ... will override.
|
13
|
+
Flags:
|
14
|
+
EOS
|
15
|
+
opt :windows, "Windows ending", :default => false
|
16
|
+
opt :unix, "Unix ending", :default => true
|
17
|
+
opt :mac, "Mac ending", :default => false
|
18
|
+
opt :debug, "Debug mode", :default => false
|
19
|
+
opt :output, "Output to another file", :type => :string
|
58
20
|
end
|
59
21
|
|
60
|
-
|
22
|
+
p opts if opts[:debug]
|
23
|
+
|
24
|
+
outfile = opts[:output]
|
25
|
+
ending = nil
|
26
|
+
ending = opts[:windows] ? LineEnder::Ending::Windows : ending
|
27
|
+
ending = opts[:mac] ? LineEnder::Ending::Mac : ending
|
28
|
+
ending = opts[:unix] ? LineEnder::Ending::Unix : ending if ending.nil?
|
61
29
|
|
62
30
|
if ARGV.length != 1
|
63
|
-
puts "
|
64
|
-
|
65
|
-
|
31
|
+
puts "Missing or too many INPUTFILE argument(s)."
|
32
|
+
puts "example: le -m -o fixed.txt somefile.txt"
|
33
|
+
puts "Try the -h flag for help on flags"
|
66
34
|
exit 0
|
67
35
|
end
|
68
36
|
|
69
|
-
infile = ARGV
|
37
|
+
infile = ARGV[0]
|
70
38
|
|
71
|
-
if
|
72
|
-
|
73
|
-
|
74
|
-
|
39
|
+
if opts[:debug]
|
40
|
+
puts "outfile: #{outfile}, #{outfile.inspect}"
|
41
|
+
puts "infile: #{infile}, #{infile.inspect}"
|
42
|
+
puts "ending: #{ending.inspect}"
|
75
43
|
end
|
76
44
|
|
45
|
+
ending_string = ""
|
46
|
+
case ending
|
47
|
+
when LineEnder::Ending::Windows
|
48
|
+
ending_string = "windows"
|
49
|
+
when LineEnder::Ending::Unix
|
50
|
+
ending_string = "unix"
|
51
|
+
when LineEnder::Ending::Mac
|
52
|
+
ending_string = "mac"
|
53
|
+
else
|
54
|
+
ending_string = "unix"
|
55
|
+
end
|
77
56
|
|
57
|
+
if outfile
|
58
|
+
output_to_file( infile, ending, outfile )
|
59
|
+
puts "Succesfully created #{outfile}, with #{ending_string}-style line endings!"
|
60
|
+
else
|
61
|
+
output_to_file( infile, ending )
|
62
|
+
puts "Successfully updated #{infile}, with #{ending_string}-style line endings!"
|
63
|
+
end
|
78
64
|
|
data/lib/line_ender.rb
CHANGED
@@ -3,112 +3,120 @@ require 'rubygems'
|
|
3
3
|
|
4
4
|
module LineEnder
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
6
|
+
module Ending
|
7
|
+
Mac = "\r"
|
8
|
+
Windows = "\r\n"
|
9
|
+
Unix = "\n"
|
10
|
+
|
11
|
+
def self.valid?(value)
|
12
|
+
value == Ending::Mac || value == Ending::Windows || value == Ending::Unix
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.included(cls)
|
20
|
+
include Ending
|
21
|
+
end
|
22
|
+
|
23
|
+
def output_to_file(input_filepath, ending, output_filename='')
|
24
|
+
raise RuntimeError, "Something is wrong with the input input filepath!" unless valid_filepath?(input_filepath)
|
25
|
+
raise RuntimeError, "Something is wrong with the 'Ending' parameter passed in!" unless valid_ending?(ending)
|
26
|
+
output_filepath = get_output_filepath(input_filepath, output_filename)
|
27
|
+
debug_print "output filepath = #{output_filepath}"
|
28
|
+
|
29
|
+
#this will only happen for an inplace file update
|
30
|
+
if (output_filepath == input_filepath)
|
31
|
+
raise RuntimeError, "File is not writeable!" unless File.writable?(output_filepath)
|
32
|
+
end
|
33
|
+
|
34
|
+
file_as_string = file_to_string(input_filepath)
|
35
|
+
fixed_file_string = change_line_endings(file_as_string, ending)
|
36
|
+
string_to_file(fixed_file_string, output_filepath)
|
37
|
+
return true
|
38
|
+
end
|
39
|
+
|
40
|
+
def output_to_string(input_filepath, ending)
|
41
|
+
raise RuntimeError, "Something is wrong with the input filepath!" unless valid_filepath?(input_filepath)
|
42
|
+
raise RuntimeError, "Something is wrong with the 'Ending' parameter passed in!" unless valid_ending?(ending)
|
43
|
+
|
44
|
+
file_as_string = file_to_string(input_filepath)
|
45
|
+
change_line_endings(file_as_string, ending)
|
46
|
+
end
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
def debug_print(message)
|
51
|
+
puts message if $DEBUG
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_output_filepath(input_filepath, output_filename)
|
55
|
+
input_path = File.expand_path(input_filepath).split(::File::Separator)
|
56
|
+
input_filename = input_path.last
|
57
|
+
debug_print "in get_output_filepath ... input_path = #{input_path}"
|
58
|
+
debug_print "in get_output_filepath ... input_filename = #{input_filename}"
|
59
|
+
output_filepath = ''
|
60
|
+
#do we have a value in output_file?
|
61
|
+
#if we don't ... assume writing to same file
|
62
|
+
#if we do ...
|
63
|
+
#is output_filename a path?
|
64
|
+
#if it is ... return that
|
65
|
+
#if it is not ... take input_path and join this filename
|
66
|
+
if output_filename.empty?
|
67
|
+
output_filepath = input_filepath
|
68
|
+
else
|
69
|
+
output_path = output_filename.split(::File::Separator)
|
70
|
+
output_filename = output_path.last
|
71
|
+
if output_path.first == output_filename
|
72
|
+
if input_filename == output_filename
|
73
|
+
output_filepath = input_filepath
|
74
|
+
else
|
75
|
+
input_path.pop
|
76
|
+
output_filepath = File.join(input_path,output_filename)
|
77
|
+
debug_print "in get_output_filepath ... output_filepath = #{output_filepath}"
|
78
|
+
end
|
79
|
+
else
|
80
|
+
#the output_filename is a path ... lets expand it
|
81
|
+
output_path = File.expand_path(output_filename).split(::File::Separator)
|
82
|
+
output_filepath = File.join(output_path)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
output_filepath
|
86
|
+
end
|
87
|
+
|
88
|
+
def string_to_file(fixed_file_string, output_filepath)
|
89
|
+
File.delete(output_filepath) if File.exists?(output_filepath)
|
90
|
+
File.open(output_filepath, "wb"){|out_file| out_file.write(fixed_file_string)}
|
91
|
+
end
|
92
|
+
|
93
|
+
def change_line_endings(file_as_string, ending)
|
94
|
+
fixed_file_string = ''
|
95
|
+
fixed_file_string = file_as_string.gsub(/(\n)|(\r\n?)/, "\n") if ending == Ending::Unix
|
96
|
+
fixed_file_string = file_as_string.gsub(/(\n)|(\r\n?)/, "\r") if ending == Ending::Mac
|
97
|
+
fixed_file_string = file_as_string.gsub(/(\n)|(\r\n?)/, "\r\n") if ending == Ending::Windows
|
98
|
+
fixed_file_string
|
99
|
+
end
|
100
|
+
|
101
|
+
def file_to_string(filepath)
|
102
|
+
file = File.open(filepath, "rb")
|
103
|
+
file_string = file.read
|
104
|
+
file.close
|
105
|
+
file_string
|
106
|
+
end
|
107
|
+
|
108
|
+
def valid_ending?(ending)
|
109
|
+
raise RuntimeError, "Ending parameter is required!" unless ending
|
110
|
+
raise RuntimeError, "Ending parameter must be of type Ending" unless Ending.valid?(ending)
|
111
|
+
return true
|
112
|
+
end
|
113
|
+
|
114
|
+
def valid_filepath?(filepath)
|
115
|
+
raise RuntimeError, "Filepath parameter is required!" unless filepath
|
116
|
+
raise RuntimeError, "File with that filepath is not found!" unless File.exists?(filepath)
|
117
|
+
raise RuntimeError, "File is not readable!" unless File.readable?(filepath)
|
118
|
+
return true
|
119
|
+
end
|
112
120
|
|
113
121
|
|
114
122
|
end
|
data/lib/test_line_ender.rb
CHANGED
@@ -11,7 +11,6 @@ class TestLineEnder < Test:: Unit::TestCase
|
|
11
11
|
|
12
12
|
def setup
|
13
13
|
puts 'setup'
|
14
|
-
@debug = true
|
15
14
|
@tle = TLE.new
|
16
15
|
@file1 = "file1.txt"
|
17
16
|
@file2 = "file2.txt"
|
@@ -25,44 +24,66 @@ class TestLineEnder < Test:: Unit::TestCase
|
|
25
24
|
end
|
26
25
|
|
27
26
|
def test_mac_to_unix_written_to_new_file
|
28
|
-
puts "in test: #{__method__} ..."
|
29
|
-
start_value = "a\
|
30
|
-
|
31
|
-
|
27
|
+
puts "---> in test: #{__method__} ..."
|
28
|
+
start_value = ["a", "b", "c"].join("\r")
|
29
|
+
expected_value = ["a", "b", "c"].join("\n")
|
30
|
+
|
31
|
+
helper_print_start_values(start_value, expected_value)
|
32
|
+
output_string = helper_for_file_test(start_value, expected_value , LineEnder::Ending::Unix, true)
|
33
|
+
helper_print_output_value(output_string)
|
34
|
+
|
32
35
|
assert(File.exists?(@file2), "#{__method__} ... has not written to new file")
|
33
|
-
assert(
|
36
|
+
assert(output_string == expected_value, "#{__method__} ... output string is not a match to expected value") if File.exists?(@file2)
|
34
37
|
end
|
35
38
|
|
36
39
|
def test_mac_to_windows_write_to_same_file
|
37
|
-
puts "in test: #{__method__} ..."
|
38
|
-
start_value = "a\
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
puts "---> in test: #{__method__} ..."
|
41
|
+
start_value = ["a", "b", "c"].join("\r")
|
42
|
+
expected_value = ["a", "b", "c"].join("\r\n")
|
43
|
+
|
44
|
+
helper_print_start_values(start_value, expected_value)
|
45
|
+
output_string = helper_for_file_test(start_value, expected_value , LineEnder::Ending::Windows)
|
46
|
+
helper_print_output_value(output_string)
|
47
|
+
|
48
|
+
assert(output_string == expected_value, "#{__method__} ... output string is not a match to expected value")
|
42
49
|
end
|
43
50
|
|
44
51
|
def test_mac_to_windows_string_dump
|
45
|
-
puts "in test: #{__method__} ..."
|
46
|
-
start_value = "a\
|
47
|
-
|
52
|
+
puts "---> in test: #{__method__} ..."
|
53
|
+
start_value = ["a", "b", "c"].join("\r")
|
54
|
+
expected_value = ["a", "b", "c"].join("\r\n")
|
55
|
+
|
56
|
+
helper_print_start_values(start_value, expected_value)
|
48
57
|
helper_write_file(@file1, start_value)
|
49
|
-
helper_for_hexdump("start", @file1)
|
50
|
-
|
51
|
-
|
58
|
+
helper_for_hexdump("start", @file1)
|
59
|
+
output_string= @tle.output_to_string(@file1, LineEnder::Ending::Windows)
|
60
|
+
helper_print_output_value(output_string)
|
61
|
+
|
62
|
+
assert(output_string == expected_value, "#{__method__} ... output string is not a match to expected value")
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
def helper_print_start_values(start_value, expected_value)
|
67
|
+
puts("start value ... getting pushed into file1.txt: #{start_value.inspect}")
|
68
|
+
puts("expected value: #{expected_value.inspect}")
|
69
|
+
end
|
70
|
+
|
71
|
+
def helper_print_output_value(output_value)
|
72
|
+
puts("output value (as string): #{output_value.inspect}")
|
52
73
|
end
|
53
74
|
|
54
|
-
def helper_for_file_test(start_value,
|
75
|
+
def helper_for_file_test(start_value, expected_value, ending_to_use, new_output_file = false)
|
55
76
|
helper_write_file(@file1, start_value)
|
56
|
-
helper_for_hexdump("start", @file1)
|
77
|
+
helper_for_hexdump("start", @file1)
|
57
78
|
if new_output_file
|
58
79
|
@tle.output_to_file( @file1, ending_to_use, @file2 )
|
59
|
-
|
80
|
+
output_file = @file2
|
60
81
|
else
|
61
82
|
@tle.output_to_file( @file1, ending_to_use)
|
62
|
-
|
83
|
+
output_file = @file1
|
63
84
|
end
|
64
|
-
helper_for_hexdump("
|
65
|
-
helper_read_file(
|
85
|
+
helper_for_hexdump("output", output_file) if File.exists?(output_file)
|
86
|
+
helper_read_file(output_file) if File.exists?(output_file)
|
66
87
|
end
|
67
88
|
|
68
89
|
def helper_write_file(file_name, value)
|
@@ -78,7 +99,7 @@ class TestLineEnder < Test:: Unit::TestCase
|
|
78
99
|
file = File.open(file_name, "rb")
|
79
100
|
file.binmode
|
80
101
|
file_string = file.read
|
81
|
-
puts "contents of file #{file_name} as a string ... #{file_string.inspect}"
|
102
|
+
#puts "contents of file #{file_name} as a string ... #{file_string.inspect}"
|
82
103
|
end
|
83
104
|
file_string
|
84
105
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: line_ender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rich Krueger
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2014-06-28 00:00:00 Z
|
13
13
|
dependencies: []
|
14
14
|
|
15
15
|
description: A little mixin to change the line endings of files. Supports Mac, Unix, and Windows line ending conversions.
|
@@ -44,8 +44,8 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
44
44
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- *id001
|
47
|
-
requirements:
|
48
|
-
|
47
|
+
requirements:
|
48
|
+
- trollop, v2.0
|
49
49
|
rubyforge_project:
|
50
50
|
rubygems_version: 2.0.7
|
51
51
|
signing_key:
|