avm-files 0.3.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd887408e51980ca8bf5ec1c26b79d49036f3d43eb6f5bd52a7054d973a6d57a
4
- data.tar.gz: 0e838cf7cd2b77930b6232d759f6aa2f596d2588c9d3a4f4f9202b443923239e
3
+ metadata.gz: d5d5cb06e33cdfb8e9c6b35d9349dfdfebd3751af5fa4ee2c7809769c97e4941
4
+ data.tar.gz: fcfc92226e4436f50623e2e29d40f21ddb7fdb9c4d7a5bfb401e9b73f58f7bb1
5
5
  SHA512:
6
- metadata.gz: 2aab78001bb900be430fbf7e04e2d5b522de2bae6da1b844c844c9a4159735b80f168015089a8360bc373b543e3737a47aac7afc6c99dc500a4ce507b568bc2d
7
- data.tar.gz: 7cf5a0c53983e7010f72342f55d153b9c89aaf351c516b148912cdeda7f17349bbfcb531aa8799745b958a0252892f5606b36f5d199b51d9dc04960f5fdec9d7
6
+ metadata.gz: da6fb0ff60feff999ccabc04353c5db56aa76412508c583a4d0f48f54b1522305cc849c1d17c4cebf7bdf4013ceb8caf2b2066b29329e2f9563f5c8bbf9c244b
7
+ data.tar.gz: e6c8d78575769d1e4b0fa4115b74d54875bbc8b89d24086fe55b47648482b2767679a49d7e316f45c49ab3187fade40a6d2f1b8fe5d93fefacc0d6ef0b6bfd16
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/registry'
3
4
  require 'eac_ruby_utils/core_ext'
4
5
  require 'eac_fs/traversable'
5
6
 
@@ -16,8 +17,6 @@ module Avm
16
17
  options.assert_valid_keys(self.class.lists.option.values)
17
18
  end
18
19
 
19
- FORMATS = %w[ruby php html python xml javascript json generic_plain].freeze
20
-
21
20
  def run
22
21
  clear
23
22
  search_files
@@ -59,9 +58,11 @@ module Avm
59
58
  end
60
59
 
61
60
  def formats_uncached
62
- FORMATS.map do |identifier|
63
- "avm/files/formatter/formats/#{identifier}".camelize.constantize.new
64
- end
61
+ formats_from_registry
62
+ end
63
+
64
+ def formats_from_registry
65
+ ::Avm::Registry.file_formats.available.reverse.map(&:new)
65
66
  end
66
67
 
67
68
  def search_files
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+ require 'avm/files/text_replacer'
5
+ require 'avm/files/runner_with/filesystem_traverser'
6
+
7
+ module Avm
8
+ module Files
9
+ module RunnerWith
10
+ module FileReplacer
11
+ common_concern do
12
+ include ::Avm::Files::RunnerWith::FilesystemTraverser
13
+ include TopMethods
14
+ end
15
+
16
+ module TopMethods
17
+ def text_replacer
18
+ ::Avm::Files::TextReplacer.new
19
+ end
20
+
21
+ def replace_file?(_file)
22
+ true
23
+ end
24
+
25
+ def traverser_check_file(file)
26
+ return unless replace_file?(file)
27
+
28
+ infov 'Changed', file if text_replacer.file_apply(file)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/runner'
4
+ require 'eac_fs/traversable'
5
+ require 'eac_ruby_utils/core_ext'
6
+ require 'eac_ruby_utils/settings_provider'
7
+
8
+ module Avm
9
+ module Files
10
+ module RunnerWith
11
+ module FilesystemTraverser
12
+ DEFAULT_DEFAULT_TRAVERSER_RECURSIVE = false
13
+
14
+ common_concern do
15
+ include ::EacCli::Runner
16
+ include ::EacFs::Traversable
17
+ enable_settings_provider
18
+ include TopMethods
19
+ runner_definition do
20
+ bool_opt '-R', '--recursive', 'Recursive.'
21
+ bool_opt '--no-recursive', 'No recursive.'
22
+ pos_arg :paths, optional: true, repeat: true
23
+ end
24
+ end
25
+
26
+ module TopMethods
27
+ def on_none_path_informed
28
+ infom 'Warning: none path informed'
29
+ end
30
+
31
+ def paths
32
+ parsed.paths.map(&:to_pathname)
33
+ end
34
+
35
+ def run_filesystem_traverser
36
+ if parsed.paths.any?
37
+ parsed.paths.each { |path| traverser_check_path(path) }
38
+ else
39
+ on_none_path_informed
40
+ end
41
+ end
42
+
43
+ def traverser_recursive
44
+ return false if parsed.no_recursive?
45
+ return true if parsed.recursive?
46
+
47
+ setting_value(:default_traverser_recursive, required: false)
48
+ .if_not_nil(DEFAULT_DEFAULT_TRAVERSER_RECURSIVE)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -4,10 +4,8 @@ require 'eac_ruby_utils/core_ext'
4
4
 
5
5
  module Avm
6
6
  module Files
7
- class Formatter
8
- module Formats
9
- require_sub __FILE__
10
- end
7
+ module RunnerWith
8
+ require_sub __FILE__
11
9
  end
12
10
  end
13
11
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Files
7
+ class TextReplacer
8
+ class Gsub
9
+ common_constructor :from, :to do
10
+ self.from = from
11
+ self.to = to
12
+ end
13
+
14
+ def apply(input)
15
+ input.gsub(from, to)
16
+ end
17
+
18
+ def to_s
19
+ "\"#{from}\" => \"#{to}\""
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Files
7
+ class TextReplacer
8
+ require_sub __FILE__
9
+ enable_immutable
10
+
11
+ immutable_accessor :replacement, type: :array
12
+
13
+ def apply(input)
14
+ replacements.inject(input) { |a, e| e.apply(a) }
15
+ end
16
+
17
+ def file_apply(file)
18
+ file = file.to_pathname
19
+ input = file.read
20
+ output = apply(file.read)
21
+ return false if output == input
22
+
23
+ file.write(output)
24
+ true
25
+ end
26
+
27
+ def gsub(from, to)
28
+ replacement(::Avm::Files::TextReplacer::Gsub.new(from, to))
29
+ end
30
+ end
31
+ end
32
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Files
5
- VERSION = '0.3.2'
5
+ VERSION = '0.5.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-files
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Put here the authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-06 00:00:00.000000000 Z
11
+ date: 2022-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avm
@@ -16,56 +16,82 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.6'
19
+ version: '0.51'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.6'
26
+ version: '0.51'
27
+ - !ruby/object:Gem::Dependency
28
+ name: eac_cli
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.28'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.28'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: eac_fs
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '0.5'
47
+ version: '0.12'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.12.3
34
51
  type: :runtime
35
52
  prerelease: false
36
53
  version_requirements: !ruby/object:Gem::Requirement
37
54
  requirements:
38
55
  - - "~>"
39
56
  - !ruby/object:Gem::Version
40
- version: '0.5'
57
+ version: '0.12'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.12.3
41
61
  - !ruby/object:Gem::Dependency
42
62
  name: eac_ruby_utils
43
63
  requirement: !ruby/object:Gem::Requirement
44
64
  requirements:
45
65
  - - "~>"
46
66
  - !ruby/object:Gem::Version
47
- version: '0.76'
67
+ version: '0.105'
48
68
  type: :runtime
49
69
  prerelease: false
50
70
  version_requirements: !ruby/object:Gem::Requirement
51
71
  requirements:
52
72
  - - "~>"
53
73
  - !ruby/object:Gem::Version
54
- version: '0.76'
74
+ version: '0.105'
55
75
  - !ruby/object:Gem::Dependency
56
76
  name: eac_templates
57
77
  requirement: !ruby/object:Gem::Requirement
58
78
  requirements:
59
79
  - - "~>"
60
80
  - !ruby/object:Gem::Version
61
- version: '0.2'
81
+ version: '0.3'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 0.3.2
62
85
  type: :runtime
63
86
  prerelease: false
64
87
  version_requirements: !ruby/object:Gem::Requirement
65
88
  requirements:
66
89
  - - "~>"
67
90
  - !ruby/object:Gem::Version
68
- version: '0.2'
91
+ version: '0.3'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 0.3.2
69
95
  - !ruby/object:Gem::Dependency
70
96
  name: eac_ruby_gem_support
71
97
  requirement: !ruby/object:Gem::Requirement
@@ -96,17 +122,12 @@ files:
96
122
  - lib/avm/files/appender.rb
97
123
  - lib/avm/files/deploy.rb
98
124
  - lib/avm/files/formatter.rb
99
- - lib/avm/files/formatter/formats.rb
100
- - lib/avm/files/formatter/formats/base.rb
101
- - lib/avm/files/formatter/formats/generic_plain.rb
102
- - lib/avm/files/formatter/formats/html.rb
103
- - lib/avm/files/formatter/formats/javascript.rb
104
- - lib/avm/files/formatter/formats/json.rb
105
- - lib/avm/files/formatter/formats/php.rb
106
- - lib/avm/files/formatter/formats/python.rb
107
- - lib/avm/files/formatter/formats/ruby.rb
108
- - lib/avm/files/formatter/formats/xml.rb
109
125
  - lib/avm/files/formatter/utf8_assert.rb
126
+ - lib/avm/files/runner_with.rb
127
+ - lib/avm/files/runner_with/file_replacer.rb
128
+ - lib/avm/files/runner_with/filesystem_traverser.rb
129
+ - lib/avm/files/text_replacer.rb
130
+ - lib/avm/files/text_replacer/gsub.rb
110
131
  - lib/avm/files/version.rb
111
132
  homepage:
112
133
  licenses: []
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_fs/file_info'
4
- require 'ostruct'
5
-
6
- module Avm
7
- module Files
8
- class Formatter
9
- module Formats
10
- class Base
11
- def apply(files)
12
- old_content = Hash[files.map { |f| [f, File.read(f)] }]
13
- ::Avm::Files::Formatter::Utf8Assert.assert_files(files) { internal_apply(files) }
14
- files.map { |f| build_file_result(f, old_content[f]) }
15
- end
16
-
17
- def name
18
- self.class.name.demodulize
19
- end
20
-
21
- def match?(file)
22
- match_by_filename?(file) || match_by_type?(file)
23
- end
24
-
25
- def valid_basenames
26
- constant_or_array('VALID_BASENAMES')
27
- end
28
-
29
- def valid_types
30
- constant_or_array('VALID_TYPES')
31
- end
32
-
33
- private
34
-
35
- def constant_or_array(name)
36
- return [] unless self.class.const_defined?(name)
37
-
38
- self.class.const_get(name)
39
- end
40
-
41
- def build_file_result(file, old_content)
42
- ::OpenStruct.new(file: file, format: self.class,
43
- changed: (old_content != File.read(file)))
44
- end
45
-
46
- def match_by_filename?(file)
47
- valid_basenames.any? do |valid_basename|
48
- file.basename.fnmatch?(valid_basename)
49
- end
50
- end
51
-
52
- def match_by_type?(file)
53
- info = ::EacFs::FileInfo.new(file)
54
- return unless info.content_type.type == 'text'
55
-
56
- valid_types.include?(info.content_type.subtype)
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/files/formatter/formats/base'
4
-
5
- module Avm
6
- module Files
7
- class Formatter
8
- module Formats
9
- class GenericPlain < ::Avm::Files::Formatter::Formats::Base
10
- VALID_BASENAMES = %w[*.asm *.bat *.css.coffee *.java *.js *.rb *.s *.scss *.sql *.tex
11
- *.url *.yml *.yaml].freeze
12
-
13
- VALID_TYPES = %w[plain x-shellscript].freeze
14
-
15
- def internal_apply(files)
16
- files.each { |file| file_apply(file) }
17
- end
18
-
19
- def file_apply(file)
20
- file.write(string_apply(file.read))
21
- end
22
-
23
- def string_apply(string)
24
- b = ''
25
- string.each_line do |line|
26
- b += "#{line.rstrip}\n"
27
- end
28
- "#{b.strip}\n".gsub(/\t/, ' ')
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/files/formatter/formats/generic_plain'
4
- require 'htmlbeautifier'
5
-
6
- module Avm
7
- module Files
8
- class Formatter
9
- module Formats
10
- class Html < ::Avm::Files::Formatter::Formats::GenericPlain
11
- VALID_BASENAMES = %w[*.html *.html.erb].freeze
12
- VALID_TYPES = ['html'].freeze
13
-
14
- def file_apply(path)
15
- input = ::File.read(path)
16
- temppath = tempfile_path
17
- ::File.open(temppath, 'w') do |output|
18
- beautify path, input, output
19
- end
20
- ::FileUtils.mv(temppath, path)
21
- super(path)
22
- end
23
-
24
- private
25
-
26
- def beautify(name, input, output)
27
- output.puts ::HtmlBeautifier.beautify(input, htmlbeautify_options)
28
- rescue StandardError => e
29
- raise "Error parsing #{name}: #{e}"
30
- end
31
-
32
- def htmlbeautify_options
33
- @htmlbeautify_options ||= { indent: ' ' }
34
- end
35
-
36
- def tempfile_path
37
- tempfile = ::Tempfile.new
38
- tempfile.close
39
- tempfile.path
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/executables'
4
- require 'avm/files/formatter/formats/generic_plain'
5
-
6
- module Avm
7
- module Files
8
- class Formatter
9
- module Formats
10
- class Javascript < ::Avm::Files::Formatter::Formats::GenericPlain
11
- VALID_BASENAMES = %w[*.js].freeze
12
- VALID_TYPES = [].freeze
13
-
14
- def internal_apply(files)
15
- ::Avm::Executables.js_beautify.command.append(
16
- ['--indent-size=2', '--end-with-newline', '--replace', *files]
17
- ).system!
18
- super(files)
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/files/formatter/formats/generic_plain'
4
-
5
- module Avm
6
- module Files
7
- class Formatter
8
- module Formats
9
- class Json < ::Avm::Files::Formatter::Formats::GenericPlain
10
- VALID_BASENAMES = %w[*.json].freeze
11
- VALID_TYPES = [].freeze
12
-
13
- def file_apply(file)
14
- ::File.write(file, ::JSON.pretty_generate(::JSON.parse(::File.read(file))))
15
- end
16
-
17
- def json_file?(file)
18
- ::JSON.parse(::File.read(file))
19
- true
20
- rescue JSON::ParserError
21
- false
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/executables'
4
- require 'avm/files/formatter/formats/generic_plain'
5
-
6
- module Avm
7
- module Files
8
- class Formatter
9
- module Formats
10
- class Php < ::Avm::Files::Formatter::Formats::GenericPlain
11
- VALID_BASENAMES = %w[*.php].freeze
12
- VALID_TYPES = ['x-php'].freeze
13
-
14
- def file_apply(file)
15
- ::Avm::Executables.php_cs_fixer.command.append(['fix', file]).system!
16
- super(file)
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/executables'
4
- require 'avm/files/formatter/formats/generic_plain'
5
-
6
- module Avm
7
- module Files
8
- class Formatter
9
- module Formats
10
- class Python < ::Avm::Files::Formatter::Formats::GenericPlain
11
- VALID_BASENAMES = %w[*.py].freeze
12
- VALID_TYPES = ['x-python'].freeze
13
-
14
- def internal_apply(files)
15
- ::Avm::Executables.yapf.command.append(['--in-place', *files]).system!
16
- super(files)
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/files/formatter/formats/generic_plain'
4
- require 'avm/eac_ruby_base1/rubocop'
5
-
6
- module Avm
7
- module Files
8
- class Formatter
9
- module Formats
10
- class Ruby < ::Avm::Files::Formatter::Formats::GenericPlain
11
- VALID_BASENAMES = %w[*.gemspec *.rake *.rb Gemfile Rakefile].freeze
12
- VALID_TYPES = ['x-ruby'].freeze
13
-
14
- def internal_apply(files)
15
- ::Avm::EacRubyBase1::Rubocop.new('.', ['-a', '--ignore-parent-exclusion'] + files).run
16
- super(files)
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/executables'
4
- require 'avm/files/formatter/formats/generic_plain'
5
-
6
- module Avm
7
- module Files
8
- class Formatter
9
- module Formats
10
- class Xml < ::Avm::Files::Formatter::Formats::GenericPlain
11
- VALID_BASENAMES = %w[*.xml].freeze
12
- VALID_TYPES = ['xml'].freeze
13
-
14
- def internal_apply(files)
15
- format_command(files).system!
16
- super(files)
17
- end
18
-
19
- def format_command(files)
20
- ::Avm::Executables.tidy.command.append(
21
- %w[-xml -modify --indent auto --indent-spaces 2 --wrap 100] + files
22
- )
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end