class SinatraWebsocketTemplate::CLI

Public Class Methods

source_root() click to toggle source
# File lib/sinatra_websocket_template/cli.rb, line 8
def self.source_root
  File.join(__dir__, 'templates')
end

Public Instance Methods

edit_gemspec(file) click to toggle source
# File lib/sinatra_websocket_template/cli.rb, line 56
      def edit_gemspec(file)
        content = File.read(file)
        content.sub!(/^end\n$/, '')
        content.concat(<<-EOS)
  spec.add_development_dependency "foreman"

  spec.add_dependency "faye-websocket"
  spec.add_dependency "puma"
  spec.add_dependency "sinatra"
  spec.add_dependency "haml"

  spec.required_ruby_version = ">= 2.0.0"
end
        EOS
        File.write(file, content)
      end
execute_and_edit_bundle_gem(project_name, options) click to toggle source
# File lib/sinatra_websocket_template/cli.rb, line 42
def execute_and_edit_bundle_gem(project_name, options)
  dir = options[:dir]
  opts = %i(test bin).map do |k|
    "--#{k}=#{options[k]}" if options[k]
  end.join(" ")

  FileUtils.mkdir_p(dir)
  Dir.chdir(dir) { system("bundle gem #{project_name} #{opts}") }
  gemspec = File.join(dir, project_name, "#{project_name}.gemspec")
  edit_gemspec(gemspec)
rescue => e
  abort "Execute 'bundle gem' failed: #{e.message}"
end
new(project_name) click to toggle source
# File lib/sinatra_websocket_template/cli.rb, line 16
def new(project_name)
  target = File.join(options[:dir], project_name)
  opts = {
    module_name: project_name.split('_').map(&:capitalize).join,
    namespaced_path: project_name
  }

  template("project/Procfile.tt", File.join(target, "Procfile"))
  template("project/config.ru.tt", File.join(target, "config.ru"), opts)
  lib_path = File.join(target, "lib")
  template("project/lib/app.rb.tt", File.join(lib_path, "app.rb"), opts)
  template("project/lib/views/index.haml.tt", File.join(lib_path, "views", "index.haml"), opts)
  template("project/lib/public/css/main.css.tt", File.join(lib_path, "public", "css", "main.css"))
  template("project/lib/public/js/application.js.tt", File.join(lib_path, "public", "js", "application.js"))
  template("project/lib/project/backend.rb.tt", File.join(lib_path, project_name, "backend.rb"), opts)

  execute_and_edit_bundle_gem(project_name, options)
end
version() click to toggle source
# File lib/sinatra_websocket_template/cli.rb, line 36
def version
  puts "SinatraWebsocketTemplate version #{SinatraWebsocketTemplate::VERSION}"
end