Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions shard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,8 @@ authors:
- Sam Eaton <sam@devmunchies.com>

license: ISC

dependencies:
cli:
github: mosop/cli
branch: master
86 changes: 2 additions & 84 deletions src/sentry_cli.cr
Original file line number Diff line number Diff line change
@@ -1,85 +1,3 @@
require "option_parser"
require "./sentry"
require "./sentry_command"

process_name = "[process_name]"
build_command = "crystal build ./src/[process_name].cr"
build_args = [] of String
run_command = "./[process_name]"
run_args = [] of String
files = ["./src/**/*.cr", "./src/**/*.ecr"]
files_cleared = false
show_help = false
should_build = true

OptionParser.parse! do |parser|
parser.banner = "Usage: ./sentry [options]"
parser.on(
"-n NAME",
"--name=NAME",
"Sets the name of the app process (current name: #{process_name})") { |name| process_name = name }
parser.on(
"-b COMMAND",
"--build=COMMAND",
"Overrides the default build command") { |command| build_command = command }
parser.on(
"--build-args=ARGS",
"Specifies arguments for the build command") do |args|
args_arr = args.strip.split(" ")
build_args = args_arr if args_arr.size > 0
end
parser.on(
"--no-build",
"Skips the build step") { should_build = false }
parser.on(
"-r COMMAND",
"--run=COMMAND",
"Overrides the default run command") { |command| run_command = command }
parser.on(
"--run-args=ARGS",
"Specifies arguments for the run command") do |args|
args_arr = args.strip.split(" ")
run_args = args_arr if args_arr.size > 0
end
parser.on(
"-w FILE",
"--watch=FILE",
"Overrides default files and appends to list of watched files") do |file|
unless files_cleared
files.clear
files_cleared = true
end
files << file
end
parser.on(
"-i",
"--info",
"Shows the values for build/run commands, build/run args, and watched files") do
puts "
name: #{process_name}
build: #{build_command}
build args: #{build_args}
run: #{run_command}
run args: #{run_args}
files: #{files}
"
end
parser.on(
"-h",
"--help",
"Show this help") do
puts parser
exit 0
end
end

process_runner = Sentry::ProcessRunner.new(
process_name: process_name,
build_command: build_command,
run_command: run_command,
build_args: build_args,
run_args: run_args,
should_build: should_build,
files: files
)

process_runner.run
Sentry::SentryCommand.run ARGV
103 changes: 103 additions & 0 deletions src/sentry_command.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
require "yaml"
require "cli"

require "./sentry"

module Sentry

class SentryCommand < Cli::Command
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe it is a Crystal standard to capitalize acronyms (e.g. CLI, HTTP, JSON)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, but I don't know if @mosop will change the name now :/


command_name "sentry"

SHARD_YML = "shard.yml"
DEFAULT_NAME = "[process_name]"

class Options

def self.defaults
name = Options.get_name
{
name: name,
process_name: "./#{name}",
build: "crystal build ./src/#{name}.cr",
watch: ["./src/**/*.cr", "./src/**/*.ecr"]
}
end

def self.get_name
if File.exists?(SHARD_YML) &&
(yaml = YAML.parse(File.read SHARD_YML)) &&
(name = yaml["name"]?)
name.as_s
else
DEFAULT_NAME
end
end

string %w(-n --name), desc: "Sets the name of the app process",
default: Options.defaults[:name]

string %w(-b --build), desc: "Overrides the default build command",
default: Options.defaults[:build]

string "--build-args", desc: "Specifies arguments for the build command"

bool "--no-build", desc: "Skips the build step", default: false

string %w(-r --run), desc: "Overrides the default run command",
default: Options.defaults[:process_name]

string "--run-args", desc: "Specifies arguments for the run command"

array %w(-w --watch),
desc: "Overrides default files and appends to list of watched files",
default: Options.defaults[:watch]

bool %w(-i --info),
desc: "Shows the values for build/run commands, build/run args, and watched files",
default: false

help

end

def run

if options.info?
puts "
name: #{options.name?}
build: #{options.build?}
build args: #{options.build_args?}
run: #{options.run?}
run args: #{options.run_args?}
files: #{options.watch?}
"
exit! code: 0
end

build_args = if ba = options.build_args?
ba.split " "
else
[] of String
end
run_args = if ra = options.run_args?
ra.split " "
else
[] of String
end

process_runner = Sentry::ProcessRunner.new(
process_name: options.name,
build_command: options.build,
run_command: options.run,
build_args: build_args,
run_args: run_args,
should_build: !options.no_build?,
files: options.watch
)

process_runner.run

end
end
end