caty 0.0.1
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.
- data/HISTORY.markdown +7 -0
- data/LICENSE.txt +22 -0
- data/README.markdown +92 -0
- data/Rakefile +33 -0
- data/VERSION +1 -0
- data/caty.gemspec +73 -0
- data/lib/caty.rb +341 -0
- data/lib/caty/converters.rb +101 -0
- data/lib/caty/errors.rb +17 -0
- data/lib/caty/global_option.rb +40 -0
- data/lib/caty/has_description.rb +26 -0
- data/lib/caty/help_system.rb +107 -0
- data/lib/caty/helpers.rb +19 -0
- data/lib/caty/indirection.rb +26 -0
- data/lib/caty/option.rb +100 -0
- data/lib/caty/option_array.rb +30 -0
- data/lib/caty/option_constructor.rb +89 -0
- data/lib/caty/task.rb +74 -0
- data/lib/caty/task_hash.rb +75 -0
- data/test/kitty.rb +87 -0
- data/test/test_caty.rb +100 -0
- data/test/test_option.rb +81 -0
- data/test/test_option_array.rb +25 -0
- data/test/test_structure.rb +72 -0
- data/test/test_task.rb +28 -0
- metadata +94 -0
data/test/test_option.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bacon'
|
3
|
+
require 'facon'
|
4
|
+
require 'caty'
|
5
|
+
|
6
|
+
describe 'An Option' do
|
7
|
+
|
8
|
+
it 'should return a default value' do
|
9
|
+
args = %w{bar be cue sauce}
|
10
|
+
|
11
|
+
%w{boolean string integer}.each do |type|
|
12
|
+
o = Caty::Option.new('beer', type.to_sym)
|
13
|
+
o.grep!(args).should.be.nil
|
14
|
+
args.length.should.be.equal 4
|
15
|
+
end
|
16
|
+
|
17
|
+
[true, 'coke', 42].each do |default|
|
18
|
+
o = Caty::Option.new('beer', default)
|
19
|
+
o.grep!(args).should.be.equal default
|
20
|
+
args.length.should.be.equal 4
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should complain on bad default value type' do
|
25
|
+
lambda {
|
26
|
+
Caty::Option.new('beer', Object.new)
|
27
|
+
}.should.raise ArgumentError
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should grep boolean values' do
|
31
|
+
%w{-beer=true -beer -beer=1}.each do |option|
|
32
|
+
args = [option]
|
33
|
+
o = Caty::Option.new('beer', :boolean)
|
34
|
+
o.grep!(args).should.be.true
|
35
|
+
args.should.be.empty
|
36
|
+
end
|
37
|
+
|
38
|
+
%w{-beer=false -beer=0}.each do |option|
|
39
|
+
args = [option]
|
40
|
+
o = Caty::Option.new('beer', :boolean)
|
41
|
+
o.grep!(args).should.be.false
|
42
|
+
args.should.be.empty
|
43
|
+
end
|
44
|
+
|
45
|
+
lambda {
|
46
|
+
o = Caty::Option.new('beer', :boolean)
|
47
|
+
o.grep!(%w{-beer=shallow})
|
48
|
+
}.should.raise Caty::OptionArgumentError
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should grep string values' do
|
52
|
+
args = %w{-beer=fine}
|
53
|
+
o = Caty::Option.new('beer', :string)
|
54
|
+
o.grep!(args).should.be.equal 'fine'
|
55
|
+
args.should.be.empty
|
56
|
+
|
57
|
+
lambda {
|
58
|
+
o = Caty::Option.new('beer', :string)
|
59
|
+
o.grep!(%w{-beer})
|
60
|
+
}.should.raise Caty::OptionArgumentError
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should grep integer values' do
|
64
|
+
args = %w{-beer=42}
|
65
|
+
o = Caty::Option.new('beer', :integer)
|
66
|
+
o.grep!(args).should.be.equal 42
|
67
|
+
args.should.be.empty
|
68
|
+
|
69
|
+
args = %w{-beer=-23}
|
70
|
+
o = Caty::Option.new('beer', :integer)
|
71
|
+
o.grep!(args).should.be.equal -23
|
72
|
+
args.should.be.empty
|
73
|
+
|
74
|
+
lambda {
|
75
|
+
o = Caty::Option.new('beer', :integer)
|
76
|
+
o.grep!(%w{-beer})
|
77
|
+
}.should.raise Caty::OptionArgumentError
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bacon'
|
3
|
+
require 'facon'
|
4
|
+
require 'caty'
|
5
|
+
|
6
|
+
describe 'An OptionArray' do
|
7
|
+
|
8
|
+
it 'should grep' do
|
9
|
+
a = Caty::OptionArray.new
|
10
|
+
mock1 = mock('beer', :name => 'beer')
|
11
|
+
mock2 = mock('rootbeer', :name => 'rootbeer')
|
12
|
+
|
13
|
+
mock1.should.receive(:grep!).with([]).and_return(42)
|
14
|
+
mock2.should.receive(:grep!).with([]).and_return(23)
|
15
|
+
|
16
|
+
a << mock1
|
17
|
+
a << mock2
|
18
|
+
|
19
|
+
opts = a.grep!([])
|
20
|
+
opts.beer.should.equal 42
|
21
|
+
opts.rootbeer.should.equal 23
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'bacon'
|
2
|
+
require 'caty'
|
3
|
+
|
4
|
+
class TestCaty < Caty
|
5
|
+
|
6
|
+
global_options do
|
7
|
+
boolean 'booleanoption', false
|
8
|
+
string 'stringoption', 'uiae'
|
9
|
+
integer 'integeroption', 42
|
10
|
+
end
|
11
|
+
|
12
|
+
default :task1
|
13
|
+
|
14
|
+
def task1
|
15
|
+
end
|
16
|
+
|
17
|
+
map 'mappedtask' => :task2
|
18
|
+
task_options 'stringoption' => :string,
|
19
|
+
'integeroption' => :integer,
|
20
|
+
'booleanoption' => :boolean
|
21
|
+
def task2
|
22
|
+
end
|
23
|
+
|
24
|
+
class << self
|
25
|
+
attr_accessor :tasks, :global_options, :default
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'Caty' do
|
31
|
+
|
32
|
+
it 'should have tasks and mappings' do
|
33
|
+
tasks = TestCaty.tasks
|
34
|
+
tasks.length.should.be.equal 3
|
35
|
+
|
36
|
+
tasks[:task1].should.not.be.nil
|
37
|
+
tasks[:task1].name.should.be.equal :task1
|
38
|
+
|
39
|
+
tasks[:task2].should.not.be.nil
|
40
|
+
tasks[:task2].name.should.be.equal :task2
|
41
|
+
|
42
|
+
tasks[:mappedtask].should.not.be.nil
|
43
|
+
tasks[:mappedtask].target.should.be.equal :task2
|
44
|
+
|
45
|
+
TestCaty.default.should.be.equal :task1
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should have global options' do
|
49
|
+
gopts = TestCaty.global_options
|
50
|
+
gopts.length.should.be.equal 3
|
51
|
+
gopts.sort_by(&:name)
|
52
|
+
|
53
|
+
gopts[0].name.should.be.equal 'booleanoption'
|
54
|
+
gopts[1].name.should.be.equal 'stringoption'
|
55
|
+
gopts[2].name.should.be.equal 'integeroption'
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should have task options' do
|
59
|
+
opts = TestCaty.tasks[:task2].instance_variable_get(:@options)
|
60
|
+
opts.should.not.be.nil
|
61
|
+
opts.length.should.be.equal 3
|
62
|
+
opts.sort! do |a,b|
|
63
|
+
a.name.to_s <=> b.name.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
opts[0].name.should.be.equal :booleanoption
|
67
|
+
opts[1].name.should.be.equal :integeroption
|
68
|
+
opts[2].name.should.be.equal :stringoption
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
data/test/test_task.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bacon'
|
3
|
+
require 'facon'
|
4
|
+
require 'caty'
|
5
|
+
|
6
|
+
describe 'A Task' do
|
7
|
+
|
8
|
+
it 'should call its associated method and pass the arguments' do
|
9
|
+
context = mock('context')
|
10
|
+
meth = mock('method')
|
11
|
+
meth.should.receive(:call).with('beer')
|
12
|
+
meth.should.receive(:bind).with(context).and_return(meth)
|
13
|
+
|
14
|
+
t = Caty::Task.new('brew_beer', meth, mock('options', :grep! => nil))
|
15
|
+
t.parse!(%w{beer})
|
16
|
+
t.execute(context)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should let its options grep' do
|
20
|
+
options = mock('options')
|
21
|
+
options.should.receive(:grep!).with(%w{beer}).and_return(options)
|
22
|
+
|
23
|
+
t = Caty::Task.new('brew_beer', nil, options)
|
24
|
+
t.parse!(%w{beer}).should.equal options
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: caty
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fabian Streitel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-09-08 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: ohash
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: Caty is a command line parser that maps arguments to instance methods
|
26
|
+
email: karottenreibe@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- LICENSE.txt
|
33
|
+
- README.markdown
|
34
|
+
files:
|
35
|
+
- HISTORY.markdown
|
36
|
+
- LICENSE.txt
|
37
|
+
- README.markdown
|
38
|
+
- Rakefile
|
39
|
+
- VERSION
|
40
|
+
- caty.gemspec
|
41
|
+
- lib/caty.rb
|
42
|
+
- lib/caty/converters.rb
|
43
|
+
- lib/caty/errors.rb
|
44
|
+
- lib/caty/global_option.rb
|
45
|
+
- lib/caty/has_description.rb
|
46
|
+
- lib/caty/help_system.rb
|
47
|
+
- lib/caty/helpers.rb
|
48
|
+
- lib/caty/indirection.rb
|
49
|
+
- lib/caty/option.rb
|
50
|
+
- lib/caty/option_array.rb
|
51
|
+
- lib/caty/option_constructor.rb
|
52
|
+
- lib/caty/task.rb
|
53
|
+
- lib/caty/task_hash.rb
|
54
|
+
- test/kitty.rb
|
55
|
+
- test/test_caty.rb
|
56
|
+
- test/test_option.rb
|
57
|
+
- test/test_option_array.rb
|
58
|
+
- test/test_structure.rb
|
59
|
+
- test/test_task.rb
|
60
|
+
has_rdoc: true
|
61
|
+
homepage: http://github.com/karottenreibe/caty
|
62
|
+
licenses: []
|
63
|
+
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options:
|
66
|
+
- --charset=UTF-8
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
version:
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project: k-gems
|
84
|
+
rubygems_version: 1.3.4
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: Caty is a command line parser that maps arguments to instance methods
|
88
|
+
test_files:
|
89
|
+
- test/kitty.rb
|
90
|
+
- test/test_caty.rb
|
91
|
+
- test/test_option.rb
|
92
|
+
- test/test_option_array.rb
|
93
|
+
- test/test_structure.rb
|
94
|
+
- test/test_task.rb
|