Class: Lynx::Extension::Autolink

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

Constant Summary collapse

REGISTRY_CLASS_NAME =
'LynxGeneratedExtensionRegistry'

Class Method Summary collapse

Class Method Details

.generate_registry(output_dir, extensions) ⇒ Object



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

def generate_registry(output_dir, extensions)
  FileUtils.mkdir_p(output_dir)
  components = extensions.flat_map { |extension| scan_components(extension.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, 'LynxExtensionRegistry.podspec'), podspec_source)
  components
end

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



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/lynx/extension/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-extension', start_dir)
  extensions = scan(start_dir)
  extensions.each do |extension|
    pod_name = pod_name_from_podspec(extension.podspec_path)
    podfile.pod pod_name, :path => File.dirname(extension.podspec_path)
  end
  generate_registry(output_dir, extensions)
  podfile.pod 'LynxExtensionRegistry', :path => output_dir
  extensions
end

.scan(start_dir) ⇒ Object



30
31
32
33
34
# File 'lib/lynx/extension/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/extension/autolink.rb', line 46

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