optitron 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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