yaml-vfs 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7520f51e2e72b65619517d88bfcca217e8b7a22b8cff8f1aa54fb78fc44be93e
4
+ data.tar.gz: 7175cd3d9718aa7d38a67785cf056d9f61bd205b1ddbf08089479b1ba07a0e3d
5
+ SHA512:
6
+ metadata.gz: 5b17d619dbbe74947b0040ac4afacbf27b207e785a9cacbcda365cf83ff0b243080955d2a51ac45dc295b296820389d4a8dd78ef195bb6b93d93c70a9c0a8341
7
+ data.tar.gz: 1ec49fd3ee822039e2fb3ad489cd9afd7cf9a0986f1ef161c3ec0c7f522c25a66626f057522728f65e60103f0adde0aa83844aac9021609c0b80daad03e61b48
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2021 Cat1237
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # yaml-vfs
2
+
3
+ [![License MIT](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://raw.githubusercontent.com/wangson1237/SYCSSColor/master/LICENSE) 
4
+
5
+ A gem which can gen VFS YAML file.
6
+
7
+ `vfs yamlwriter` lets you create clang opt "-ivfsoverlay" ymal file, map virtual path to real path.
8
+
9
+ - ✅ It can gen VFS YAML.
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'yaml-vfs'
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ ```shell
22
+ # bundle install
23
+ $ bundle install
24
+ ```
25
+
26
+ Or install it yourself as:
27
+
28
+ ```shell
29
+ # gem install
30
+ $ gem install yaml-vfs
31
+ ```
32
+
33
+ ## Usage
34
+
35
+ The command should be executed when your want VFS YAML file.
36
+
37
+ ```shell
38
+ # write the VFS YAML file to --output-path=<path>
39
+ $ vfs yamlwriter --framework-path=<path> --real-headers-dir=<path> --real-modules-dir=<path> --output-path=<path>
40
+
41
+ # write the VFS YAML file to .
42
+ $ vfs yamlwriter --framework-path=<path> --real-headers-dir=<path> --real-modules-dir=<path>
43
+ ```
44
+
45
+ ### Option && Flags
46
+
47
+ `Usage:`
48
+
49
+ - `vfs yamlwriter --framework-path --real-headers-dir --real-modules-dir [--output-path]`
50
+
51
+ `Options:`
52
+
53
+ - `--framework-path=<path>`: framework path
54
+ - `--real-headers-dir=<path>`: real header path
55
+ - `--real-modules-dir=<path>`: real modules path
56
+ - `--output-path=<path>`: vfs yaml file output path
57
+
58
+ ## Command Line Tool
59
+
60
+ Installing the 'yaml-vfs' gem will also install two command-line tool `vfs` which you can use to generate VFS YAML file.
61
+
62
+ For more information consult `vfs --help` or `vfs yamlwriter --help`.
63
+
64
+ ## Contributing
65
+
66
+ Bug reports and pull requests are welcome on GitHub at [yaml-vfs](https://github.com/Cat1237/yaml-vfs). This project is intended to be a safe, welcoming space for collaboration.
67
+
68
+ ## License
69
+
70
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
71
+
72
+ ## Code of Conduct
73
+
74
+ Everyone interacting in the yaml-vfs project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/cocoapods-hmap/blob/master/CODE_OF_CONDUCT.md).
data/bin/vfs ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ if $PROGRAM_NAME == __FILE__
5
+ ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', __dir__)
6
+ require 'bundler/setup'
7
+ end
8
+
9
+ require 'yaml_vfs'
10
+ VFS::Command.run(ARGV)
11
+
12
+
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VFS
4
+ class Command
5
+ # vfs yaml file gen cmd
6
+ class YAMLWriter < Command
7
+ # summary
8
+ self.summary = 'Virtual the framework and modules dir, and map to real path'
9
+
10
+ self.description = <<-DESC
11
+ Gen VFS Yaml file. To map framework virtual path to real path.
12
+ DESC
13
+
14
+ self.arguments = [
15
+ # framework_p, r_header, r_m
16
+ CLAide::Argument.new('--framework-path', true),
17
+ CLAide::Argument.new('--real-headers-dir', true),
18
+ CLAide::Argument.new('--real-modules-dir', true),
19
+ CLAide::Argument.new('--output-path', false)
20
+ ]
21
+
22
+ def initialize(argv)
23
+ super
24
+ framework_path = argv.option('framework-path')
25
+ @framework_path = Pathname(framework_path) unless framework_path.nil?
26
+ real_headers_dir = argv.option('real-headers-dir')
27
+ @real_header_dir = Pathname(real_headers_dir) unless real_headers_dir.nil?
28
+ real_modules_dir = argv.option('real-modules-dir')
29
+ @real_modules_dir = Pathname(real_modules_dir) unless real_modules_dir.nil?
30
+ output_path = argv.option('output-path')
31
+ @output_path = output_path.nil? ? Pathname('.') : Pathname(output_path)
32
+ end
33
+
34
+ def validate!
35
+ super
36
+ help! 'must set framework_path' if @framework_path.nil?
37
+ help! 'must set real_headers_dir' if @real_header_dir.nil?
38
+ help! 'must set real_modules_dir' if @real_modules_dir.nil?
39
+ end
40
+
41
+ # help
42
+ def self.options
43
+ [
44
+ ['--framework-path=<path>', 'framework path'],
45
+ ['--real-headers-dir=<path>', 'real header path'],
46
+ ['--real-modules-dir=<path>', 'real modules path'],
47
+ ['--output-path=<path>', 'vfs yaml file output path']
48
+ ].concat(super)
49
+ end
50
+
51
+ def run
52
+ require 'yaml_vfs'
53
+
54
+ VFS::FileCollector.new_from_real_headers_dir(@framework_path, @real_header_dir, @real_modules_dir).write_mapping(@output_path)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The primary namespace for VFS.
4
+ module VFS
5
+ require 'colored2'
6
+ require 'claide'
7
+ # The primary Command for VFS.
8
+ class Command < CLAide::Command
9
+ require 'yaml-vfs/command/yaml_vfs_writer'
10
+
11
+ self.abstract_command = false
12
+ self.command = 'vfs'
13
+ self.version = VERSION
14
+ self.description = 'VFS lets you create clang "-ivfsoverlay" ymal file, map virtual path to real path.'
15
+ self.plugin_prefixes = %w[claide yaml_vfs_writer]
16
+
17
+ def initialize(argv)
18
+ super
19
+ return if ansi_output?
20
+
21
+ Colored2.disable!
22
+ String.send(:define_method, :colorize) { |string, _| string }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+ require 'yaml-vfs/yaml_vfs'
5
+
6
+ module VFS
7
+ # vfs gen
8
+ class FileCollector
9
+ HEADER_FILES_EXTENSIONS = %w[.h .hh .hpp .ipp .tpp .hxx .def .inl .inc].freeze
10
+
11
+ attr_reader :framework_path, :real_modules_dir, :real_headers
12
+
13
+ def self.new_from_real_headers_dir(framework_path, real_header_dir, real_modules_dir)
14
+ raise ArgumentError, 'real_header_dir must set and exist' if real_header_dir.nil? || !real_header_dir.exist?
15
+
16
+ files = Pathname.glob(real_header_dir.join('**').join('*')).select do |file|
17
+ HEADER_FILES_EXTENSIONS.include?(file.extname)
18
+ end
19
+ new(framework_path, real_modules_dir, files)
20
+ end
21
+
22
+ def initialize(framework_path, real_modules_dir, real_headers)
23
+ @seen = Set.new
24
+ @vfs_writer = YAMLVFSWriter.new
25
+ @real_headers = real_headers
26
+ @framework_path = framework_path
27
+ @real_modules_dir = real_modules_dir
28
+ end
29
+
30
+ def write_mapping(name)
31
+ raise ArgumentError, 'framework_path must set' if @framework_path.nil?
32
+ raise ArgumentError, 'real_headers or real_header_dir one of them must set' if @real_headers.empty?
33
+
34
+ add_write_file
35
+ @vfs_writer.case_sensitive = false
36
+ path = name.expand_path
37
+ path = path.join('all-product-headers.yaml') if path.directory?
38
+ stream = @vfs_writer.write
39
+ File.open(path, 'w') { |f| f.write(stream) }
40
+ end
41
+
42
+ private
43
+
44
+ def add_write_file
45
+ wirte_f = lambda { |dir, files|
46
+ paths = @framework_path.join(dir)
47
+ files.each do |file|
48
+ path = paths.join(file.basename)
49
+ @vfs_writer.add_file_mapping(path, file)
50
+ end
51
+ }
52
+ wirte_f.call('Headers', @real_headers) unless @real_headers.empty?
53
+ wirte_f.call('Modules', real_modules_dir.glob('*.modulemap')) unless @real_modules_dir.nil?
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: false
2
+
3
+ module VFS
4
+ # A collection of utility functions used throughout vfs.
5
+ module Utils
6
+ def self.traversal_component?(component)
7
+ component.each_filename.include?('.') || component.each_filename.include?('..')
8
+ end
9
+ end
10
+ end
11
+
12
+ String.class_eval do
13
+ def indent(count, char = ' ')
14
+ gsub(/([^\n]*)(\n|$)/) do
15
+ last_iteration = ($1 == '' && $2 == '')
16
+ line = ''
17
+ line << (char * count) unless last_iteration
18
+ line << $1
19
+ line << $2
20
+ line
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VFS
4
+ VERSION = '0.0.1'
5
+ end
@@ -0,0 +1,200 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+ require 'json'
5
+
6
+ module VFS
7
+ # A general purpose pseudo-structure.
8
+ # @abstract
9
+ class YAMLVFSEntry
10
+ attr_reader :v_path, :r_path
11
+
12
+ def directory?
13
+ @directory
14
+ end
15
+
16
+ def initialize(v_path, r_path, directory: false)
17
+ @v_path = v_path
18
+ @r_path = r_path
19
+ @directory = directory
20
+ end
21
+ end
22
+
23
+ # YAMLVFSWriter class.
24
+ # @see https://llvm.org/doxygen/classllvm_1_1vfs_1_1YAMLVFSWriter.html
25
+ # @abstract
26
+ class YAMLVFSWriter
27
+ attr_reader :mappings, :overlay_relative, :overlay_dir, :dir_stack
28
+ attr_accessor :case_sensitive, :use_external_names
29
+
30
+ def overlay_dir=(overlay_dir)
31
+ @overlay_relative = true
32
+ @overlay_dir = overlay_dir
33
+ end
34
+
35
+ def initialize
36
+ @mappings = []
37
+ end
38
+
39
+ def add_entry(virtual_path, real_path, is_directory)
40
+ raise ArgumentError, 'virtual path not absolute' unless virtual_path.absolute?
41
+ raise ArgumentError, 'real path not absolute' unless real_path.absolute?
42
+ raise ArgumentError, 'path traversal is not supported' if Utils.traversal_component?(virtual_path)
43
+
44
+ mappings << YAMLVFSEntry.new(virtual_path, real_path, directory: is_directory)
45
+ end
46
+
47
+ def add_file_mapping(virtual_path, real_path)
48
+ add_entry(virtual_path, real_path, false)
49
+ end
50
+
51
+ def add_directory_mapping(virtual_path, real_path)
52
+ add_entry(virtual_path, real_path, true)
53
+ end
54
+
55
+ def write
56
+ @mappings.sort_by! { |p| p.v_path.to_s }
57
+ JSONWriter.new.write(@mappings, @use_external_names, @case_sensitive, @overlay_relative, @overlay_dir)
58
+ end
59
+ end
60
+
61
+ # JSONWriter class.
62
+ # @see https://llvm.org/doxygen/VirtualFileSystem_8cpp_source.html
63
+ # @abstract
64
+ class JSONWriter
65
+ attr_reader :dir_stack
66
+
67
+ def write(entries, use_external_names, case_sensitive, overlay_relative, overlay_dir)
68
+ use_overlay_relative = write_yaml_header(use_external_names, case_sensitive, overlay_relative, overlay_dir)
69
+ unless entries.empty?
70
+ current_dir_empty = write_root_entry(entries, use_overlay_relative, overlay_dir)
71
+ entries.drop(1).reduce(current_dir_empty) do |empty, entry|
72
+ dir = entry.directory? ? entry.v_path : entry.v_path.dirname
73
+ start_directory_or_return(dir, empty, use_overlay_relative, overlay_dir, entry)
74
+ end
75
+ end
76
+ write_yaml_footer(entries)
77
+ end
78
+
79
+ def initialize
80
+ @dir_stack = []
81
+ end
82
+
83
+ private
84
+
85
+ def dir_indent
86
+ @dir_stack.length * 4
87
+ end
88
+
89
+ def file_indent
90
+ (@dir_stack.length + 1) * 4
91
+ end
92
+
93
+ def contained_in?(parent, path)
94
+ path.ascend { |p| break true if parent == p } || false
95
+ end
96
+
97
+ def contained_part(parent, path)
98
+ raise ArgumentError if parent.nil?
99
+ raise ArgumentError unless contained_in?(parent, path)
100
+
101
+ path.relative_path_from(parent)
102
+ end
103
+
104
+ def start_directory(path)
105
+ name = @dir_stack.empty? ? path : contained_part(@dir_stack.last, path)
106
+ @dir_stack << path
107
+ indent = dir_indent
108
+ @stream += "{\n".indent(indent)
109
+ @stream += "'type': 'directory',\n".indent(indent + 2)
110
+ @stream += "'name': \"#{name}\",\n".indent(indent + 2)
111
+ @stream += "'contents': [\n".indent(indent + 2)
112
+ end
113
+
114
+ def end_directory
115
+ indent = dir_indent
116
+ @stream += "]\n".indent(indent + 2)
117
+ @stream += '}'.indent(indent)
118
+ @dir_stack.pop
119
+ end
120
+
121
+ def write_entry(v_path, r_path)
122
+ indent = file_indent
123
+ @stream += "{\n".indent(indent)
124
+ @stream += "'type': 'file',\n".indent(indent + 2)
125
+ @stream += "'name': \"#{v_path}\",\n".indent(indent + 2)
126
+ @stream += "'external-contents': \"#{r_path}\"\n".indent(indent + 2)
127
+ @stream += '}'.indent(file_indent)
128
+ end
129
+
130
+ def overlay_dir_sub_rpath(use, overlay_dir, rpath)
131
+ if use
132
+ raise ArgumentError, 'Overlay dir must be contained in RPath' unless rpath.fnmatch?("#{overlay_dir}*")
133
+
134
+ rpath = rpath.relative_path_from(overlay_dir).expand_path
135
+ end
136
+ rpath
137
+ end
138
+
139
+ def write_yaml_header(use_external_names, case_sensitive, overlay_relative, _overlay_dir)
140
+ @stream = "{\n 'version': 0,\n"
141
+ @stream += " 'case-sensitive': '#{case_sensitive}',\n" unless case_sensitive.nil?
142
+ @stream += " 'use-external-names': '#{use_external_names}',\n" unless use_external_names.nil?
143
+ use_overlay_relative = !overlay_relative.nil?
144
+ @stream += " 'overlay_relative': '#{overlay_relative}',\n" if use_overlay_relative
145
+ @stream += " 'roots': [\n"
146
+ use_overlay_relative
147
+ end
148
+
149
+ def write_yaml_footer(entries)
150
+ unless entries.empty?
151
+ until @dir_stack.empty?
152
+ @stream += "\n"
153
+ end_directory
154
+ end
155
+ @stream += "\n"
156
+ end
157
+ @stream += " ]\n}\n"
158
+ @stream
159
+ end
160
+
161
+ def write_root_entry(entries, use_overlay_relative, overlay_dir)
162
+ return true if entries.empty?
163
+
164
+ f_entry = entries.first
165
+ start_directory(f_entry.directory? ? f_entry.v_path : f_entry.v_path.dirname)
166
+ current_dir_empty = f_entry.directory?
167
+ use_overlay_relative_and_write_entry(use_overlay_relative, overlay_dir, current_dir_empty, f_entry)
168
+ end
169
+
170
+ def until_end_directory(dir)
171
+ dir_popped_from_stack = false
172
+ until @dir_stack.empty? || contained_in?(@dir_stack.last, dir)
173
+ @stream += "\n"
174
+ end_directory
175
+ dir_popped_from_stack = true
176
+ end
177
+ dir_popped_from_stack
178
+ end
179
+
180
+ def use_overlay_relative_and_write_entry(use_overlay_relative, overlay_dir, current_dir_empty, entry)
181
+ rpath = overlay_dir_sub_rpath(use_overlay_relative, overlay_dir, entry.r_path)
182
+ unless entry.directory?
183
+ write_entry(entry.v_path.basename, rpath)
184
+ current_dir_empty = false
185
+ end
186
+ current_dir_empty
187
+ end
188
+
189
+ def start_directory_or_return(dir, current_dir_empty, use_overlay_relative, overlay_dir, entry)
190
+ if dir == @dir_stack.last
191
+ @stream += ",\n" unless current_dir_empty
192
+ else
193
+ @stream += ",\n" if until_end_directory(dir) || !current_dir_empty
194
+ start_directory(dir)
195
+ current_dir_empty = true
196
+ end
197
+ use_overlay_relative_and_write_entry(use_overlay_relative, overlay_dir, current_dir_empty, entry)
198
+ end
199
+ end
200
+ end
data/lib/yaml_vfs.rb ADDED
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The primary namespace for yaml-vfs.
4
+ module VFS
5
+ require 'pathname'
6
+ require 'claide'
7
+
8
+ class PlainInformative < StandardError
9
+ include CLAide::InformativeError
10
+ end
11
+
12
+ # Informative
13
+ class Informative < PlainInformative
14
+ def message
15
+ super !~ /\[!\]/ ? "[!] #{super}\n".red : super
16
+ end
17
+ end
18
+
19
+ require_relative 'yaml-vfs/version'
20
+ require_relative 'yaml-vfs/utils'
21
+
22
+
23
+ autoload :FileCollector, 'yaml-vfs/file_collector'
24
+ autoload :Command, 'yaml-vfs/command'
25
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yaml-vfs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Cat1237
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: coveralls
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: claide
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 1.0.2
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: '2.0'
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 1.0.2
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: colored2
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.1'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '3.1'
103
+ description: header_reader lets your read Xcode header map file. header-writer lets
104
+ your analyze the project pod dependencies and gen header map file for all pods.
105
+ email:
106
+ - wangson1237@outlook.com
107
+ executables:
108
+ - vfs
109
+ extensions: []
110
+ extra_rdoc_files: []
111
+ files:
112
+ - LICENSE
113
+ - README.md
114
+ - bin/vfs
115
+ - lib/yaml-vfs/command.rb
116
+ - lib/yaml-vfs/command/yaml_vfs_writer.rb
117
+ - lib/yaml-vfs/file_collector.rb
118
+ - lib/yaml-vfs/utils.rb
119
+ - lib/yaml-vfs/version.rb
120
+ - lib/yaml-vfs/yaml_vfs.rb
121
+ - lib/yaml_vfs.rb
122
+ homepage: https://github.com/Cat1237/yaml-vfs
123
+ licenses:
124
+ - MIT
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '2.5'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubygems_version: 3.1.6
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Read or write header map file.
145
+ test_files: []