optitron 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- optitron (0.1.1)
4
+ optitron (0.1.2)
5
5
  callsite (= 0.0.4)
6
6
  ruby2ruby (= 1.2.4)
7
7
  ruby_parser (>= 2.0)
@@ -102,6 +102,13 @@ Will produce the error <tt>Truth is invalid</tt>. Calling with
102
102
 
103
103
  however, will correctly invoke the method.
104
104
 
105
+ These same arg type hints can be provided by ending your arguments in _type. The accepted types are: float, string, int, numeric, array, hash. For example
106
+
107
+ desc "Does something awesome"
108
+ def start(number_int, something_string, opt_boolean)
109
+ # ... does something
110
+ end
111
+
105
112
 
106
113
  === Options
107
114
 
@@ -138,13 +138,16 @@ class Optitron
138
138
  optitron_dsl.root.cmd(cmd_name, cmd_desc) do
139
139
  opts.each { |o| opt *o }
140
140
  args.each do |(arg_name, arg_type, arg_default)|
141
+ possible_arg_type = arg_name.to_s[/_(string|hash|array|numeric|int|float)$/, 1]
142
+ possible_arg_type &&= possible_arg_type.to_sym
143
+ arg_opts = { :default => arg_default && eval(arg_default), :type => arg_types && arg_types.shift || possible_arg_type }
141
144
  case arg_type
142
145
  when :required
143
- arg arg_name.to_s, :default => arg_default && eval(arg_default), :type => arg_types && arg_types.shift
146
+ arg arg_name.to_s, arg_opts
144
147
  when :optional
145
- arg arg_name.to_s, :default => arg_default && eval(arg_default), :required => false, :type => arg_types && arg_types.shift
148
+ arg arg_name.to_s, arg_opts.merge(:required => false)
146
149
  when :greedy
147
- arg arg_name.to_s, :default => arg_default && eval(arg_default), :type => :greedy
150
+ arg arg_name.to_s, arg_opts.merge(:type => :greedy)
148
151
  end
149
152
  end
150
153
  end
@@ -1,7 +1,7 @@
1
1
  class Optitron
2
2
  class Option
3
- attr_reader :inclusion_test
4
- attr_accessor :required, :name, :default, :parameterize, :type, :desc, :has_default
3
+ attr_reader :inclusion_test, :type
4
+ attr_accessor :required, :name, :default, :parameterize, :desc, :has_default
5
5
  alias_method :required?, :required
6
6
  alias_method :has_default?, :has_default
7
7
  alias_method :parameterize?, :parameterize
@@ -21,6 +21,14 @@ class Optitron
21
21
  @inclusion_test = tester
22
22
  end
23
23
 
24
+ def type=(type)
25
+ @type = case type
26
+ when :int then :numeric
27
+ when :float, :numeric, :string, :array, :hash, :boolean, :greedy, nil then type
28
+ else raise("Unknown type #{type.inspect}")
29
+ end
30
+ end
31
+
24
32
  def interpolate_type(default)
25
33
  @type = case default
26
34
  when nil
@@ -78,6 +86,8 @@ class Optitron
78
86
  Integer(val)
79
87
  when :array
80
88
  Array(val)
89
+ when :float
90
+ Float(val)
81
91
  when :hash
82
92
  val.is_a?(Hash) ? val : raise
83
93
  when :greedy, nil, :string
@@ -129,7 +139,7 @@ class Optitron
129
139
  tokens.delete_at(opt_tok_index).lit
130
140
  end
131
141
  response.params_array << [self, value.nil? ? !default : value]
132
- when :numeric, :string
142
+ when :numeric, :string, :float
133
143
  value = if opt_tok.name == name
134
144
  if opt_tok.respond_to?(:value)
135
145
  opt_tok.value
@@ -1,3 +1,3 @@
1
1
  class Optitron
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -17,7 +17,7 @@ class CLIExample < Optitron::CLI
17
17
  opt 'another_opt'
18
18
  arg_types :hash
19
19
  def use_too(one, two = 'three')
20
- puts "one: #{one.inspect} #{two.inspect}"
20
+ puts "one: #{one.to_a.sort.inspect} #{two.inspect}"
21
21
  end
22
22
 
23
23
  desc "Use this three"
@@ -58,6 +58,13 @@ class NoHelpExample < Optitron::CLI
58
58
  end
59
59
  end
60
60
 
61
+ class CLIExampleWithArgHinting < Optitron::CLI
62
+ desc "Use this too"
63
+ def use_too(one_string, two_int)
64
+ puts "using this too #{one_string.inspect} #{two_int.inspect}"
65
+ end
66
+ end
67
+
61
68
 
62
69
  describe "Optitron::Parser defaults" do
63
70
  it "should generate the correct help" do
@@ -70,7 +77,7 @@ describe "Optitron::Parser defaults" do
70
77
  end
71
78
 
72
79
  it "should dispatch with the type hinting" do
73
- capture(:stdout) { CLIExample.dispatch(%w(use_too one:two three:four))}.should == "one: {\"three\"=>\"four\", \"one\"=>\"two\"} \"three\"\n"
80
+ capture(:stdout) { CLIExample.dispatch(%w(use_too one:two three:four))}.should == 'one: [["one", "two"], ["three", "four"]] "three"' + "\n"
74
81
  end
75
82
 
76
83
  it "should generate the correct help" do
@@ -85,4 +92,8 @@ describe "Optitron::Parser defaults" do
85
92
  it "should be able to suppress help" do
86
93
  capture(:stdout) { NoHelpExample.dispatch(%w(--help)) }.should == "Unknown command\nHelp is unrecognized\n"
87
94
  end
95
+
96
+ it "should get type hinting from arg names" do
97
+ capture(:stdout) { CLIExampleWithArgHinting.dispatch(%w(use_too asd 123)) }.should == "using this too \"asd\" 123\n"
98
+ end
88
99
  end
@@ -51,6 +51,70 @@ describe "Optitron::Parser types" do
51
51
  end
52
52
  end
53
53
 
54
+ context "float" do
55
+ context "on args" do
56
+ before(:each) {
57
+ @parser = Optitron.new {
58
+ cmd "kill" do
59
+ arg 'volumne', :type => :float
60
+ end
61
+ }
62
+ }
63
+
64
+ it "should parse 'kill 123'" do
65
+ response = @parser.parse(%w(kill 123))
66
+ response.command.should == 'kill'
67
+ response.args.first.should == 123
68
+ response.valid?.should be_true
69
+ end
70
+
71
+ it "should parse 'kill 123.345'" do
72
+ response = @parser.parse(%w(kill 123.345))
73
+ response.command.should == 'kill'
74
+ response.args.first.should == 123.345
75
+ response.valid?.should be_true
76
+ end
77
+
78
+ it "shouldn't parse 'kill asd'" do
79
+ response = @parser.parse(%w(kill asd))
80
+ response.command.should == 'kill'
81
+ response.args.first.should == 'asd'
82
+ response.valid?.should be_false
83
+ end
84
+ end
85
+
86
+ context "on opts" do
87
+ before(:each) do
88
+ @parser = Optitron.new do
89
+ cmd "kill" do
90
+ opt 'pid', :type => :float
91
+ end
92
+ end
93
+ end
94
+
95
+ it "should parse 'kill --pid=123'" do
96
+ response = @parser.parse(%w(kill --pid=123))
97
+ response.command.should == 'kill'
98
+ response.params['pid'].should == 123
99
+ response.valid?.should be_true
100
+ end
101
+
102
+ it "should parse 'kill --pid=123.345'" do
103
+ response = @parser.parse(%w(kill --pid=123.345))
104
+ response.command.should == 'kill'
105
+ response.params['pid'].should == 123.345
106
+ response.valid?.should be_true
107
+ end
108
+
109
+ it "shouldn't parse 'kill --pid=asd'" do
110
+ response = @parser.parse(%w(kill --pid=asd))
111
+ response.command.should == 'kill'
112
+ response.params['pid'].should == 'asd'
113
+ response.valid?.should be_false
114
+ end
115
+ end
116
+ end
117
+
54
118
  context "array" do
55
119
  context "on opt" do
56
120
  before(:each) {
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optitron
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joshua Hull
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-22 00:00:00 -07:00
18
+ date: 2010-08-23 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency