Skip to content

Commit

Permalink
Merge pull request #5 from at-grandpa/ref/refactoring
Browse files Browse the repository at this point in the history
Ref/refactoring
  • Loading branch information
at-grandpa authored Apr 7, 2017
2 parents e54adfb + f1a249c commit ce3307f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 39 deletions.
20 changes: 0 additions & 20 deletions src/clim/command.cr
Original file line number Diff line number Diff line change
Expand Up @@ -107,25 +107,5 @@ class Clim
def find_sub_cmds_by(name)
sub_cmds.select(&.name.==(name))
end

macro define_add_opt(type, &proc)
def add_opt(short, long, default : {{type}}, required, desc, value : {{type}}, set_default_flag = false)
opt = Option({{type}}).new(short, long, default, required, desc, value)
opt.set_default_flag = {% if type.id == Bool.id %} true {% else %} set_default_flag {% end %}
@parser.on(opt.short, opt.long, opt.desc) {{proc.id}}
@opts.add(opt)
end

def add_opt(short, default : {{type}}, required, desc, value : {{type}}, set_default_flag = false)
opt = Option({{type}}).new(short, "", default, required, desc, value)
opt.set_default_flag = {% if type.id == Bool.id %} true {% else %} set_default_flag {% end %}
@parser.on(opt.short, opt.desc) {{proc.id}}
@opts.add(opt)
end
end

define_add_opt(type: String) { |arg| opt.set_string(arg) }
define_add_opt(type: Bool) { |arg| opt.set_bool(arg) }
define_add_opt(type: Array(String)) { |arg| opt.add_to_array(arg) }
end
end
37 changes: 18 additions & 19 deletions src/clim/dsl.cr
Original file line number Diff line number Diff line change
Expand Up @@ -32,29 +32,28 @@ class Clim
@@defining.usage = usage
end

macro difine_opts(type, base_default)
macro difine_opts(type, base_default, &proc)
{% method_name = type.stringify.split("(").first.downcase.id %}

def {{method_name}}(short, long, default : {{type}} | Nil = nil, required = false, desc = "Option description.")
if default.nil?
@@defining.add_opt(short, long, {{base_default}}, required, desc, {{base_default}}, set_default_flag: false)
else
@@defining.add_opt(short, long, default, required, desc, default, set_default_flag: true)
end
end

def {{method_name}}(short, default : {{type}} | Nil = nil, required = false, desc = "Option description.")
if default.nil?
@@defining.add_opt(short, {{base_default}}, required, desc, {{base_default}}, set_default_flag: false)
else
@@defining.add_opt(short, default, required, desc, default, set_default_flag: true)
{% for long_arg in ["long,", ""] %}
def {{method_name}}(short, {{long_arg.id}} default : {{type}} | Nil = nil, required = false, desc = "Option description.")
opt = Option({{type}}).new(
short: short,
long: {% if long_arg.empty? %} "", {% else %} {{long_arg.id}} {% end %}
default: default.nil? ? {{base_default}} : default,
required: required,
desc: desc,
value: default.nil? ? {{base_default}} : default,
set_default_flag: {% if type.id == Bool.id %} true {% else %} !default.nil? {% end %}
)
@@defining.parser.on(opt.short, {% unless long_arg.empty? %} opt.long, {% end %} opt.desc) {{proc.id}}
@@defining.opts.add(opt)
end
end
{% end %}
end

difine_opts(type: String, base_default: "")
difine_opts(type: Bool, base_default: false)
difine_opts(type: Array(String), base_default: [] of String)
difine_opts(type: String, base_default: "") { |arg| opt.set_string(arg) }
difine_opts(type: Bool, base_default: false) { |arg| opt.set_bool(arg) }
difine_opts(type: Array(String), base_default: [] of String) { |arg| opt.add_to_array(arg) }

def run(&block : RunProc)
@@defining.run_proc = block
Expand Down

0 comments on commit ce3307f

Please sign in to comment.