class Disclose

Constants

VERSION

Public Class Methods

new(node_path, project_path) click to toggle source
# File lib/disclose.rb, line 22
def initialize(node_path, project_path)
  @node_path = node_path
  @project_path = project_path
  @working_dir = Dir.mktmpdir
  parse_binaries!
end
usage() click to toggle source
# File lib/disclose.rb, line 12
  def self.usage
    %Q{
disclose v#{VERSION}

Usage: disclose [node_path] [project_path]
  e.g. disclose /usr/local/bin/node /usr/local/lib/node_modules/coffee-script

    }.strip
  end

Public Instance Methods

c!() click to toggle source
# File lib/disclose.rb, line 61
def c!
  chdir(@working_dir) do
    @binaries.each do |key,value|
      FileUtils.cp('tar.h', "#{key}.c")
      File.open("#{key}.c", "a") do |f|
        C.src(f, value, @md5, File.basename(@node_path))
      end

      exe("gcc #{ENV['DISCLOSE_COMPILER_ARG']} #{key}.c -o #{key} -lpthread")

      puts "======= Success ======="
      puts File.join(@working_dir, key)
      puts "======================="
    end
  end
end
header!() click to toggle source
# File lib/disclose.rb, line 54
def header!
  chdir(@working_dir) do
    exe("xxd -i tar.tar.gz > tar.h")
    @md5 = Digest::MD5.file('tar.h').to_s
  end
end
parse_binaries!() click to toggle source
# File lib/disclose.rb, line 29
def parse_binaries!
  @package_path = File.join(@project_path, 'package.json')
  raise Error, "No package.json exist at #{@package_path}." unless File.exist?(@package_path)
  @package_json = JSON.parse File.read @package_path
  @binaries = @package_json['bin']
  if @binaries
    STDERR.puts "Detected binaries: #{@binaries}"
  else
    raise Error, "No Binaries detected inside #{@package_path}."
  end
end
run!() click to toggle source
# File lib/disclose.rb, line 41
def run!
  tar!
  header!
  c!
end
tar!() click to toggle source
# File lib/disclose.rb, line 47
def tar!
  chdir(@working_dir) do
    exe("tar hcf tar.tar -C \"#{@project_path}\" . -C \"#{File.dirname @node_path}\" \"#{File.basename @node_path}\"")
    exe("gzip tar.tar")
  end
end

Private Instance Methods

chdir(path) { || ... } click to toggle source
# File lib/disclose.rb, line 86
def chdir(path)
  STDERR.puts "$ cd #{path}"
  Dir.chdir(path) { yield }
  STDERR.puts "$ cd #{Dir.pwd}"
end
exe(cmd) click to toggle source
# File lib/disclose.rb, line 80
def exe(cmd)
  STDERR.puts "$ #{cmd}"
  STDERR.print `#{cmd}`
  raise Error, "#{cmd} failed!" unless $?.success?
end