extension_fixer 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 400ee500244e52dd6227bd1328b6e4cf5b56dcda
4
+ data.tar.gz: 05bb290415e754ab6f9534a3f5e2efb90487bc47
5
+ SHA512:
6
+ metadata.gz: 5e5866ba9b1a9f5e1ff94eb14d61c55aa8bc8ece6af1c17b533c4414141a118fd700856f8f6c251ad70346088341289aec015315dc72d6cf65f0f8a2e3546d0d
7
+ data.tar.gz: ca10980ed8916c567cfe3bb2244fd37b2701380a93a9c8c54040c4ff10180580edfb5bddf956145a89eb349928dadd8e32769ba0af35fe72d1fcf9c05dd2294b
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'extension_fixer'
4
+ ExtensionFixer.new.check
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'extension_fixer'
4
+ ExtensionFixer.new.fix
@@ -0,0 +1,73 @@
1
+ require 'rake'
2
+ require 'pathname'
3
+ require 'mime/types'
4
+
5
+ # A ruby gem to fix file extensions
6
+ class ExtensionFixer
7
+ def check
8
+ # Check all files for the correct extension type
9
+ walk_args do |file, right_ext|
10
+ p "#{file} should have a #{right_ext} extension."
11
+ end
12
+ end
13
+
14
+ def fix
15
+ # Change all files to the correct extension types
16
+ walk_args do |file, right_extension|
17
+ p "$ mv #{file.gsub(File.extname(file), '{\0,.' + right_extension + '}')}"
18
+ File.rename file, file.ext(right_extension)
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ # Extracts the MIME::Type of a file using unix `file` command.
25
+ # Then reverses the mime/type to a list of possible extensions
26
+ def extension_by_file(file)
27
+ command = ['file', '--brief', '--mime-type', file]
28
+ mimetype = IO.popen(command, in: :close, err: :close).read.chomp
29
+ unless MIME::Types[mimetype].is_a? Array
30
+ p "File #{file} doesn't have any setted mime/type."
31
+ return []
32
+ end
33
+ MIME::Types[mimetype]
34
+ end
35
+
36
+ # Check if the file has one of the possible extensions from mime/type
37
+ def correct_extension?(file)
38
+ extension = File.extname(file).delete('.')
39
+ extension_by_file(file).any? do |possible_extensions|
40
+ possible_extensions.extensions.include? extension
41
+ end
42
+ end
43
+
44
+ # Calls `scan` for every argument
45
+ def walk_args(&block)
46
+ ARGV.each do |path_or_file|
47
+ scan(path_or_file, &block)
48
+ end
49
+ end
50
+
51
+ # Scans each file and calls `walk_directory` when presented with a directory.
52
+ def scan(path, &block)
53
+ if File.file?(path) && !correct_extension?(path)
54
+ correct_extension = extension_by_file(path).first
55
+ if correct_extension.nil?
56
+ p "Skipping #{path}, unknown mimetype"
57
+ else
58
+ yield path, correct_extension.preferred_extension
59
+ end
60
+ elsif File.directory?(path)
61
+ walk_directory(path, &block)
62
+ end
63
+ end
64
+
65
+ # For each file call `scan`
66
+ def walk_directory(path, &block)
67
+ Dir.foreach(path) do |file|
68
+ filename = File.join(path, file)
69
+ next if ['.', '..'].include?(file)
70
+ scan(filename, &block)
71
+ end
72
+ end
73
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: extension_fixer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - John Gabriel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 12.0.0
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 12.0.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 12.0.0
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 12.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rmagick
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 2.12.0
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 2.12.0
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 2.12.0
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 2.12.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: test-unit
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 3.2.5
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 3.2.5
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 3.2.5
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 3.2.5
73
+ description: A ruby gem to fix files extensions based on file headers
74
+ email: joaumg@gmail.com
75
+ executables:
76
+ - extension_check
77
+ - extension_fixer
78
+ extensions: []
79
+ extra_rdoc_files: []
80
+ files:
81
+ - bin/extension_check
82
+ - bin/extension_fixer
83
+ - lib/extension_fixer.rb
84
+ homepage: https://github.com/joaumg/extension_fixer
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.6.12
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: A file extension fixer
108
+ test_files: []