avm-tools 0.37.0 → 0.37.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e112c35554da958b5bcee6263e3ad3d6c2cd93cf70ab56eba9fb9bb689199cb8
4
- data.tar.gz: 877e71a8bb6c19ab1285a88e54feba27e59bdbbc05c574c6e183c6d9d8625159
3
+ metadata.gz: 265ec590d53bde1eff714c1789cb317e4fe855cce54bf12535f60ab4b508b811
4
+ data.tar.gz: 2ac59d6b0c89adb5e091ebe88a65062ccd0ded1c2cb98e5046296701b8cb3604
5
5
  SHA512:
6
- metadata.gz: 05d3e02a29bf1e45049f22dfd194e6d33d71d25967616544496d77d1b72f95753aac1e4b7365689fcf644d92fef4df0b08b7d0762f43fef97c48829f23548021
7
- data.tar.gz: 4ab2a54b3b9d0c94925d47759ca7b05bd40ed8db9219aa36e2e57f3ff1b68aca330e3ebf7a82fb2a0024158d2693daa9f8f1cc2111bc9f56bf207a637ad34e84
6
+ metadata.gz: 38828cff9cfdc2d3aed17d93f81cc2254bb4f3bae27bd35320f1e5e4d4a7d38d6b24d0a95251aedb35fb7c2d9178ba705b7eb402306a66d2827f310e9e8a3d7e
7
+ data.tar.gz: 1e557150968a16d21a5002d30febe4f6812deac5b8f87f8faf84b07b6790ce71608353fa6ffe7d3727536bf4b1b4572914166eb6066f07b27c82c2d875a1f79b
@@ -9,6 +9,10 @@ module Avm
9
9
  ::EacRubyUtils::Envs.local
10
10
  end
11
11
 
12
+ def file
13
+ @file ||= env.executable('file', '--version')
14
+ end
15
+
12
16
  def git
13
17
  @git ||= env.executable('git', '--version')
14
18
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/files/info'
3
4
  require 'ostruct'
4
5
 
5
6
  module Avm
@@ -9,7 +10,7 @@ module Avm
9
10
  class Base
10
11
  def apply(files)
11
12
  old_content = Hash[files.map { |f| [f, File.read(f)] }]
12
- internal_apply(files)
13
+ ::Avm::Files::Formatter::Utf8Assert.assert_files(files) { internal_apply(files) }
13
14
  files.map { |f| build_file_result(f, old_content[f]) }
14
15
  end
15
16
 
@@ -49,8 +50,10 @@ module Avm
49
50
  end
50
51
 
51
52
  def match_by_type?(file)
52
- file_type = ::EacRubyUtils::Envs.local.command('file', '-b', file).execute!
53
- valid_types.find { |t| file_type.include?(t) }
53
+ info = ::Avm::Files::Info.new(file)
54
+ return unless info.content_type.type == 'text'
55
+
56
+ valid_types.include?(info.content_type.subtype)
54
57
  end
55
58
  end
56
59
  end
@@ -7,10 +7,10 @@ module Avm
7
7
  class Formatter
8
8
  module Formats
9
9
  class GenericPlain < ::Avm::Files::Formatter::Formats::PerFileBase
10
- VALID_EXTENSIONS = %w[.bat .css.coffee .java .js .json .php .rb .scss .sql .tex .url .yml
10
+ VALID_EXTENSIONS = %w[.bat .css.coffee .java .js .json .rb .scss .sql .tex .url .yml
11
11
  .yaml].freeze
12
12
 
13
- VALID_TYPES = ['Bourne-Again shell script', 'ASCII text', 'UTF-8 Unicode text'].freeze
13
+ VALID_TYPES = %w[plain x-shellscript].freeze
14
14
 
15
15
  def internal_apply(files)
16
16
  files.each { |file| file_apply(file) }
@@ -9,7 +9,7 @@ module Avm
9
9
  module Formats
10
10
  class Php < ::Avm::Files::Formatter::Formats::PerFileBase
11
11
  VALID_EXTENSIONS = %w[.php].freeze
12
- VALID_TYPES = ['PHP script'].freeze
12
+ VALID_TYPES = ['x-php'].freeze
13
13
 
14
14
  def file_apply(file)
15
15
  ::Avm::Executables.php_cs_fixer.command.append(['fix', file]).system!
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Files
5
+ class Formatter
6
+ class Utf8Assert
7
+ UTF8_CHARSET = 'utf-8'
8
+ UTF8_CHARSETS = [UTF8_CHARSET, 'us-ascii'].freeze
9
+
10
+ class << self
11
+ def assert_files(files)
12
+ asserters = files.map { |file| new(file) }
13
+ begin
14
+ asserters.each(&:assert)
15
+ yield
16
+ ensure
17
+ asserters.each(&:revert)
18
+ end
19
+ end
20
+ end
21
+
22
+ enable_simple_cache
23
+ common_constructor :path
24
+
25
+ def assert
26
+ return if original_utf8?
27
+
28
+ convert_self(original_charset, UTF8_CHARSET)
29
+ end
30
+
31
+ def revert
32
+ return if original_utf8?
33
+
34
+ convert_self(UTF8_CHARSET, original_charset)
35
+ end
36
+
37
+ private
38
+
39
+ def original_info_uncached
40
+ ::Avm::Files::Info.new(path)
41
+ end
42
+
43
+ def original_charset_uncached
44
+ return original_info.content_type.charset if original_info.content_type.charset.present?
45
+
46
+ raise 'No charset found'
47
+ rescue StandardError => e
48
+ raise "Unable to determine the charset of #{path} (#{e.message})"
49
+ end
50
+
51
+ def original_utf8?
52
+ UTF8_CHARSETS.include?(original_charset)
53
+ end
54
+
55
+ def convert_file(from_path, from_charset, to_path, to_charset)
56
+ File.open(from_path, "r:#{from_charset}") do |input|
57
+ File.open(to_path, "w:#{to_charset}") do |output|
58
+ output.write(input.read)
59
+ end
60
+ end
61
+ end
62
+
63
+ def convert_self(from_charset, to_charset)
64
+ temp = ::Tempfile.new
65
+ temp.close
66
+ convert_file(path, from_charset, temp.path, to_charset)
67
+ ::FileUtils.mv(temp.path, path)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/executables'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'content-type'
6
+
7
+ module Avm
8
+ module Files
9
+ class Info
10
+ enable_simple_cache
11
+ common_constructor :path
12
+
13
+ private
14
+
15
+ def content_type_uncached
16
+ ::ContentType.parse(
17
+ ::Avm::Executables.file.command.append(['-ib', path]).execute!.strip
18
+ )
19
+ end
20
+ end
21
+ end
22
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.37.0'
5
+ VERSION = '0.37.1'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.37.0
4
+ version: 0.37.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esquilo Azul Company
@@ -44,6 +44,20 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 1.3.3
47
+ - !ruby/object:Gem::Dependency
48
+ name: content-type
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 0.0.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.0.1
47
61
  - !ruby/object:Gem::Dependency
48
62
  name: eac_launcher
49
63
  requirement: !ruby/object:Gem::Requirement
@@ -201,6 +215,8 @@ files:
201
215
  - lib/avm/files/formatter/formats/generic_plain.rb
202
216
  - lib/avm/files/formatter/formats/per_file_base.rb
203
217
  - lib/avm/files/formatter/formats/php.rb
218
+ - lib/avm/files/formatter/utf8_assert.rb
219
+ - lib/avm/files/info.rb
204
220
  - lib/avm/files/rotate.rb
205
221
  - lib/avm/fs_cache.rb
206
222
  - lib/avm/git.rb