Class: Lynx::Library::Autolink

Inherits:
Object
  • Object
show all
Defined in:
lib/lynx/library/autolink.rb

Constant Summary collapse

REGISTRY_CLASS_NAME =
'LynxGeneratedLibraryRegistry'

Class Method Summary collapse

Class Method Details

.generate_registry(output_dir, libraries) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/lynx/library/autolink.rb', line 36

def generate_registry(output_dir, libraries)
  FileUtils.mkdir_p(output_dir)
  components = libraries.flat_map { |library| scan_components(library.source_dir) }
  File.write(File.join(output_dir, "#{REGISTRY_CLASS_NAME}.h"), header_source)
  File.write(File.join(output_dir, "#{REGISTRY_CLASS_NAME}.m"),
             implementation_source(components))
  File.write(File.join(output_dir, 'LynxLibraryRegistry.podspec'), podspec_source)
  components
end

.install!(podfile, options = {}) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/lynx/library/autolink.rb', line 17

def install!(podfile, options = {})
  start_dir = File.expand_path(options[:root] || Dir.pwd)
  output_dir = File.expand_path(options[:output_dir] || 'generated/lynx-library', start_dir)
  libraries = scan(start_dir)
  libraries.each do |library|
    pod_name = pod_name_from_podspec(library.podspec_path)
    podfile.pod pod_name, :path => File.dirname(library.podspec_path)
  end
  generate_registry(output_dir, libraries)
  podfile.pod 'LynxLibraryRegistry', :path => output_dir
  libraries
end

.scan(start_dir) ⇒ Object



30
31
32
33
34
# File 'lib/lynx/library/autolink.rb', line 30

def scan(start_dir)
  node_modules_dirs(start_dir).flat_map do |node_modules|
    manifest_files(node_modules).map { |manifest| parse_manifest(manifest) }.compact
  end.sort_by(&:npm_name)
end

.scan_components(source_dir) ⇒ Object



46
47
48
# File 'lib/lynx/library/autolink.rb', line 46

def scan_components(source_dir)
  source_files(source_dir).flat_map { |file| scan_source_file(file) }
end