class Farmstead::Project

creates a Farmstead Project

Attributes

config[RW]
database[RW]
deploy_method[RW]
name[RW]

Public Class Methods

deploy() click to toggle source
# File lib/farmstead/project.rb, line 20
def self.deploy
  # Dir.chdir @name
  self.read_yml_into_env
  File.chmod(0755, "exec.sh")
  system ("bash exec.sh")
end
read_yml_into_env() click to toggle source

Takes the project.yml file and generates an .env file for docker

# File lib/farmstead/project.rb, line 34
def self.read_yml_into_env
  cnf = YAML::load(File.open('project.yml'))
  File.open('.env', 'w') do |file|
    cnf.each do |key, value|
      if value.kind_of?(Array)
        value.each do |element|
          element.each do |ykey, yvalue|
            if yvalue.kind_of?(Array)
              element.each do |zkey, zvalue|
                zvalue = zvalue.join(' ') if zvalue.kind_of?(Array)
                file.puts "#{zkey}=#{zvalue}"
              end
            else
              file.puts "#{ykey}=#{yvalue}"
            end
          end
        end
      else
        file.puts "#{key}=#{value}"
      end
    end
  end
end

Public Instance Methods

copy_to_directory(str, file_name) click to toggle source

Copies an ERB Template as a file to the destination directory

# File lib/farmstead/project.rb, line 124
def copy_to_directory(str, file_name)
  open(file_name, "a") do |f|
    f.puts str
  end
end
create() click to toggle source
# File lib/farmstead/project.rb, line 15
def create
  create_directory
  generate_files
end
create_directory() click to toggle source

Creates OR RE-Creates the Project Directory

# File lib/farmstead/project.rb, line 28
def create_directory
  remove_dir(@name) if Dir.exist?(@name)
  Dir.mkdir(@name)
end
create_recursive(path) click to toggle source

Recursive Create

# File lib/farmstead/project.rb, line 100
def create_recursive(path)
  recursive = path.split("/")
  directory = ""
  recursive.each do |sub_directory|
    directory += sub_directory + "/"
    Dir.mkdir("#{directory}") unless (File.directory? directory)
  end
end
generate_files() click to toggle source

Generate from templates in scaffold

# File lib/farmstead/project.rb, line 59
def generate_files
  ip = local_ip
  version = Farmstead::VERSION
  scaffold_path = "#{File.dirname __FILE__}/scaffold"
  scaffold = Dir.glob("#{scaffold_path}/**/*.erb", File::FNM_DOTMATCH)
  scaffold.each do |file|
    basename = File.basename(file)
    folderstruct = file.match("#{scaffold_path}/(.*)")[1]
    if basename != folderstruct
      foldername = File.dirname(folderstruct)
      create_recursive("#{@name}/#{foldername}")
    end
    projectpath = "#{@name}/#{folderstruct}".chomp(".erb")
    template = File.read(file)
    results = ERB.new(template).result(binding)
    copy_to_directory(results, projectpath)
  end
end
interface_from_arch() click to toggle source
# File lib/farmstead/project.rb, line 87
def interface_from_arch
  return "Ethernet" if OS.windows?
  return "en0" if OS.mac?
  return "eth0" if OS.linux?
end
local_ip() click to toggle source
# File lib/farmstead/project.rb, line 78
def local_ip
  addr_infos = Socket.getifaddrs
  addr_infos.each do |addr_info|
    if addr_info.addr && addr_info.addr.ipv4? && addr_info.name == interface_from_arch
      return addr_info.addr.ip_address
    end
  end
end
public_ip() click to toggle source
# File lib/farmstead/project.rb, line 93
def public_ip
  response = Net::HTTP.get(URI("http://v4.ifconfig.co/json"))
  json = eval(response)
  json[:ip]
end
remove_dir(path) click to toggle source

Recursive Remove

# File lib/farmstead/project.rb, line 110
def remove_dir(path)
  if File.directory?(path)
    Dir.foreach(path) do |file|
      if ((file.to_s != ".") && (file.to_s != ".."))
        remove_dir("#{path}/#{file}")
      end
    end
    Dir.delete(path)
  else
    File.delete(path)
  end
end