class HuginnAgent::CLI::New

Constants

DOT_ENV_QUESTION
MIT_QUESTION
PREFIX_QUESTION

Attributes

gem_name[R]
options[R]
target[R]
thor[R]

Public Class Methods

new(options, gem_name, thor) click to toggle source
# File lib/huginn_agent/cli/new.rb, line 12
def initialize(options, gem_name, thor)
  @options = options
  @thor = thor
  if !gem_name.start_with?('huginn_') &&
     thor.yes?(PREFIX_QUESTION)
    gem_name = "huginn_#{gem_name}"
  end
  @target = Pathname.pwd.join(gem_name)
  @gem_name = target.basename.to_s
end

Public Instance Methods

run() click to toggle source
# File lib/huginn_agent/cli/new.rb, line 23
def run
  thor.say "Creating Huginn agent '#{gem_name}'"

  agent_file_name = gem_name.gsub('huginn_', '')
  namespaced_path = gem_name.tr('-', '/')
  constant_name   = gem_name.split('_')[1..-1].map{|p| p[0..0].upcase + p[1..-1] unless p.empty?}.join
  constant_name   = constant_name.split('-').map{|q| q[0..0].upcase + q[1..-1] }.join('::') if constant_name =~ /-/
  git_user_name   = `git config user.name`.chomp
  git_user_email  = `git config user.email`.chomp

  opts = {
    :gem_name         => gem_name,
    :agent_file_name  => agent_file_name,
    :namespaced_path  => namespaced_path,
    :constant_name    => constant_name,
    :author           => git_user_name.empty? ? "TODO: Write your name" : git_user_name,
    :email            => git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
  }

  templates = {
    "Gemfile.tt" => "Gemfile",
    "gitignore.tt" => ".gitignore",
    "lib/new_agent.rb.tt" => "lib/#{namespaced_path}.rb",
    "lib/new_agent/new_agent.rb.tt" => "lib/#{namespaced_path}/#{agent_file_name}.rb",
    "spec/new_agent_spec.rb.tt" => "spec/#{agent_file_name}_spec.rb",
    "newagent.gemspec.tt" => "#{gem_name}.gemspec",
    "Rakefile.tt" => "Rakefile",
    "README.md.tt" => "README.md",
    "travis.yml.tt" => ".travis.yml"
  }

  if thor.yes?(MIT_QUESTION)
    opts[:mit] = true
    templates.merge!("LICENSE.txt.tt" => "LICENSE.txt")
  end


  templates.each do |src, dst|
    thor.template("newagent/#{src}", target.join(dst), opts)
  end

  thor.say "To run the specs of your agent you need to add a .env which configures the database for Huginn"

  possible_paths = Dir['.env', './huginn/.env', '~/huginn/.env']
  if possible_paths.length > 0
    thor.say 'Found possible preconfigured .env files please choose which one you want to use'
    possible_paths.each_with_index do |path, i|
      thor.say "#{i+1} #{path}"
    end

    if (i = thor.ask(DOT_ENV_QUESTION).to_i) != 0
      path = possible_paths[i-1]
      `cp #{path} #{target}`
      thor.say "Copied '#{path}' to '#{target}'"
    end
  end

  thor.say "Initializing git repo in #{target}"
  Dir.chdir(target) { `git init`; `git add .` }

  thor.say 'Installing dependencies'
  Dir.chdir(target) { HuginnAgent::Helper.open3('bundle install') }
end