def init
      require 'fileutils'
      require 'tmpdir'

      unless git_present?
        msg =  'You need to install the git command line tool to initialize a new project. '
        msg << "For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git"
        say msg, :red
        exit 1
      end

      repo_path, repo_branch = if shortname?(options[:template])
                                 require 'open-uri'
                                 require 'json'

                                 api = 'https://directory.middlemanapp.com/api'
                                 uri = ::URI.parse("#{api}/#{options[:template]}.json")

                                 begin
                                   data = ::JSON.parse(uri.read)
                                   is_local_dir = false
                                   data['links']['github'].split('#')
                                 rescue ::OpenURI::HTTPError
                                   say "Template `#{options[:template]}` not found in Middleman Directory."
                                   say 'Did you mean to use a full `user/repo` path?'
                                   exit 1
                                 end
                               else
                                 repo_name, repo_branch = options[:template].split('#')
                                 repo_path, is_local_dir = repository_path(repo_name)
                                 [repo_path, repo_branch]
                               end

      begin
        dir = is_local_dir ? repo_path : clone_repository(repo_path, repo_branch)

        inside(target) do
          thorfile = File.join(dir, 'Thorfile')

          if File.exist?(thorfile)
            ::Thor::Util.load_thorfile(thorfile)

            invoke 'middleman:generator'
          else
            source_paths << dir
            directory dir, '.', exclude_pattern: /\.git\/|\.gitignore$/
          end

          bundle_args = options[:'bundle-path'] ? " --path=#{options[:'bundle-path']}" : ''
          run("bundle install#{bundle_args}") unless ENV['TEST'] || options[:'skip-bundle']
        end
      ensure
        FileUtils.remove_entry(dir) if !is_local_dir && File.directory?(dir)
      end
    end
def init
      require 'fileutils'
      require 'tmpdir'

      unless git_present?
        msg =  'You need to install the git command line tool to initialize a new project. '
        msg << "For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git"
        say msg, :red
        exit 1
      end

      repo_path, repo_branch = if shortname?(options[:template])
                                 require 'open-uri'
                                 require 'json'

                                 api = 'https://directory.middlemanapp.com/api'
                                 uri = ::URI.parse("#{api}/#{options[:template]}.json")

                                 begin
                                   data = ::JSON.parse(uri.read)
                                   is_local_dir = false
                                   data['links']['github'].split('#')
                                 rescue ::OpenURI::HTTPError
                                   say "Template `#{options[:template]}` not found in Middleman Directory."
                                   say 'Did you mean to use a full `user/repo` path?'
                                   exit 1
                                 end
                               else
                                 repo_name, repo_branch = options[:template].split('#')
                                 repo_path, is_local_dir = repository_path(repo_name)
                                 [repo_path, repo_branch]
                               end

      begin
        dir = is_local_dir ? repo_path : clone_repository(repo_path, repo_branch)

        inside(target) do
          thorfile = File.join(dir, 'Thorfile')

          if File.exist?(thorfile)
            ::Thor::Util.load_thorfile(thorfile)

            invoke 'middleman:generator'
          else
            source_paths << dir
            directory dir, '.', exclude_pattern: /\.git\/|\.gitignore$/
          end

          bundle_args = options[:'bundle-path'] ? " --path=#{options[:'bundle-path']}" : ''
          run("bundle install#{bundle_args}") unless ENV['TEST'] || options[:'skip-bundle']
        end
      ensure
        FileUtils.remove_entry(dir) if !is_local_dir && File.directory?(dir)
      end
    end
The init task