clive 0.5.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,53 +1,9 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "clive"
8
- gem.summary = %Q{Imagine if optparse and gli had a son called clive.}
9
- gem.description = %Q{Clive is a DSL for creating a command line interface. It is for people who, like me, love OptionParser's syntax and love GLI's commands.}
10
- gem.email = "m@hawx.me"
11
- gem.homepage = "http://github.com/hawx/clive"
12
- gem.authors = ["Joshua Hawxwell"]
13
- gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
- gem.add_development_dependency "yard", ">= 0"
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- Jeweler::GemcutterTasks.new
18
- rescue LoadError
19
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
- end
21
-
22
4
  require 'rake/testtask'
23
5
  Rake::TestTask.new(:test) do |test|
24
6
  test.libs << 'lib' << 'test'
25
7
  test.pattern = 'test/**/test_*.rb'
26
8
  test.verbose = true
27
9
  end
28
-
29
- begin
30
- require 'rcov/rcovtask'
31
- Rcov::RcovTask.new do |test|
32
- test.libs << 'test'
33
- test.pattern = 'test/**/test_*.rb'
34
- test.verbose = true
35
- end
36
- rescue LoadError
37
- task :rcov do
38
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
- end
40
- end
41
-
42
- task :test => :check_dependencies
43
-
44
- task :default => :test
45
-
46
- begin
47
- require 'yard'
48
- YARD::Rake::YardocTask.new
49
- rescue LoadError
50
- task :yardoc do
51
- abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
52
- end
53
- end
@@ -1,14 +1,5 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
-
3
- require 'clive/exceptions'
4
- require 'clive/tokens'
5
- require 'clive/ext'
6
-
7
- require 'clive/option'
8
- require 'clive/command'
9
- require 'clive/switch'
10
- require 'clive/flag'
11
- require 'clive/bool'
1
+ require 'clive/parser'
2
+ require 'clive/output'
12
3
 
13
4
  # Clive is a simple dsl for creating command line interfaces
14
5
  #
@@ -235,7 +235,6 @@ class Clive
235
235
  @options << Bool.new(*args, true, &block)
236
236
  @options << Bool.new(*args, false, &block)
237
237
  end
238
- alias_method :boolean, :bool
239
238
 
240
239
  # @group Help
241
240
 
@@ -0,0 +1,56 @@
1
+ # This should control the character output to the command line.
2
+ # It will allow you to set different colours, using:
3
+ #
4
+ # "I'm red".red
5
+ # "I'm red and bold".red.bold
6
+ #
7
+ #
8
+
9
+ class Clive
10
+ module Output
11
+
12
+ end
13
+ end
14
+
15
+ # Monkey patches for colour
16
+ class String
17
+
18
+ # @example
19
+ #
20
+ # require 'clive/output'
21
+ #
22
+ # puts "bold".bold
23
+ # puts "underline".underline
24
+ # puts "blink".blink
25
+ # puts "green".green
26
+ # puts "red".red
27
+ # puts "magenta".magenta
28
+ # puts "yellow".yellow
29
+ # puts "blue".blue
30
+ # puts "grey".grey
31
+ #
32
+ # puts "combo".blue.bold.underline.blink
33
+ #
34
+ def colour(code)
35
+ "#{code}#{self}\e[0m"
36
+ end
37
+
38
+ {
39
+ "bold" => "1",
40
+ "underline" => "4",
41
+ "blink" => "5",
42
+ "white" => "37",
43
+ "green" => "32",
44
+ "red" => "31",
45
+ "magenta" => "35",
46
+ "yellow" => "33",
47
+ "blue" => "34",
48
+ "grey" => "90"
49
+ }.each do |name, code|
50
+ define_method(name) do
51
+ colour("\e[#{code}m")
52
+ end
53
+ end
54
+
55
+ end
56
+
@@ -0,0 +1,65 @@
1
+ require 'clive/exceptions'
2
+ require 'clive/tokens'
3
+ require 'clive/ext'
4
+
5
+ require 'clive/option'
6
+ require 'clive/command'
7
+ require 'clive/switch'
8
+ require 'clive/flag'
9
+ require 'clive/bool'
10
+
11
+ class Clive
12
+
13
+ # A module wrapping the command line parsing of clive. In the future this
14
+ # will be the only way of using clive.
15
+ #
16
+ # @example
17
+ #
18
+ # require 'clive/parser'
19
+ #
20
+ # class CLI
21
+ # include Clive::Parser
22
+ #
23
+ # @@opts ||= {}
24
+ # def self.opts
25
+ # @@opts
26
+ # end
27
+ #
28
+ # switch :v, :verbose, "Run verbosely" do
29
+ # opts[:verbose] = true
30
+ # end
31
+ # end
32
+ #
33
+ # CLI.parse ARGV
34
+ # p CLI.opts
35
+ #
36
+ module Parser
37
+
38
+ def self.included(klass)
39
+ @@klass = klass
40
+ @@klass.extend(self)
41
+ @@base = Clive::Command.new(true)
42
+ end
43
+
44
+ def parse(argv)
45
+ @@base.run(argv)
46
+ end
47
+
48
+ def flag(*args, &block)
49
+ @@base.flag(*args, &block)
50
+ end
51
+
52
+ def switch(*args, &block)
53
+ @@base.switch(*args, &block)
54
+ end
55
+
56
+ def command(*args, &block)
57
+ @@base.command(*args, &block)
58
+ end
59
+
60
+ def bool(*args, &block)
61
+ @@base.bool(*args, &block)
62
+ end
63
+
64
+ end
65
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 5
8
- - 0
9
- version: 0.5.0
7
+ - 6
8
+ - 1
9
+ version: 0.6.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joshua Hawxwell
@@ -14,77 +14,40 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-16 00:00:00 +00:00
17
+ date: 2010-12-20 00:00:00 +00:00
18
18
  default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: thoughtbot-shoulda
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
31
- type: :development
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
34
- name: yard
35
- prerelease: false
36
- requirement: &id002 !ruby/object:Gem::Requirement
37
- none: false
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
- version: "0"
44
- type: :development
45
- version_requirements: *id002
46
- description: Clive is a DSL for creating a command line interface. It is for people who, like me, love OptionParser's syntax and love GLI's commands.
19
+ dependencies: []
20
+
21
+ description: " Clive is a DSL for creating a command line interface. It is for people \n who, like me, love OptionParser's syntax and love GLI's commands.\n"
47
22
  email: m@hawx.me
48
23
  executables: []
49
24
 
50
25
  extensions: []
51
26
 
52
- extra_rdoc_files:
53
- - LICENSE
54
- - README.md
27
+ extra_rdoc_files: []
28
+
55
29
  files:
56
- - .document
57
- - .gitignore
58
- - LICENSE
59
30
  - README.md
60
31
  - Rakefile
61
- - VERSION
62
- - clive.gemspec
63
- - lib/clive.rb
32
+ - LICENSE
64
33
  - lib/clive/bool.rb
65
34
  - lib/clive/command.rb
66
35
  - lib/clive/exceptions.rb
67
36
  - lib/clive/ext.rb
68
37
  - lib/clive/flag.rb
69
38
  - lib/clive/option.rb
39
+ - lib/clive/output.rb
40
+ - lib/clive/parser.rb
70
41
  - lib/clive/switch.rb
71
42
  - lib/clive/tokens.rb
72
- - test/bin_test
73
- - test/helper.rb
74
- - test/test_boolean.rb
75
- - test/test_clive.rb
76
- - test/test_command.rb
77
- - test/test_exceptions.rb
78
- - test/test_flag.rb
79
- - test/test_switch.rb
80
- - test/test_token.rb
81
- has_rdoc: true
43
+ - lib/clive.rb
44
+ has_rdoc: false
82
45
  homepage: http://github.com/hawx/clive
83
46
  licenses: []
84
47
 
85
48
  post_install_message:
86
- rdoc_options:
87
- - --charset=UTF-8
49
+ rdoc_options: []
50
+
88
51
  require_paths:
89
52
  - lib
90
53
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -110,12 +73,5 @@ rubygems_version: 1.3.7
110
73
  signing_key:
111
74
  specification_version: 3
112
75
  summary: Imagine if optparse and gli had a son called clive.
113
- test_files:
114
- - test/helper.rb
115
- - test/test_boolean.rb
116
- - test/test_clive.rb
117
- - test/test_command.rb
118
- - test/test_exceptions.rb
119
- - test/test_flag.rb
120
- - test/test_switch.rb
121
- - test/test_token.rb
76
+ test_files: []
77
+
data/.document DELETED
@@ -1,2 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
data/.gitignore DELETED
@@ -1,25 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
22
- .yardoc
23
- doc
24
- research
25
- cov
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.5.0
@@ -1,78 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{clive}
8
- s.version = "0.5.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Joshua Hawxwell"]
12
- s.date = %q{2010-11-16}
13
- s.description = %q{Clive is a DSL for creating a command line interface. It is for people who, like me, love OptionParser's syntax and love GLI's commands.}
14
- s.email = %q{m@hawx.me}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.md"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.md",
24
- "Rakefile",
25
- "VERSION",
26
- "clive.gemspec",
27
- "lib/clive.rb",
28
- "lib/clive/bool.rb",
29
- "lib/clive/command.rb",
30
- "lib/clive/exceptions.rb",
31
- "lib/clive/ext.rb",
32
- "lib/clive/flag.rb",
33
- "lib/clive/option.rb",
34
- "lib/clive/switch.rb",
35
- "lib/clive/tokens.rb",
36
- "test/bin_test",
37
- "test/helper.rb",
38
- "test/test_boolean.rb",
39
- "test/test_clive.rb",
40
- "test/test_command.rb",
41
- "test/test_exceptions.rb",
42
- "test/test_flag.rb",
43
- "test/test_switch.rb",
44
- "test/test_token.rb"
45
- ]
46
- s.homepage = %q{http://github.com/hawx/clive}
47
- s.rdoc_options = ["--charset=UTF-8"]
48
- s.require_paths = ["lib"]
49
- s.rubygems_version = %q{1.3.7}
50
- s.summary = %q{Imagine if optparse and gli had a son called clive.}
51
- s.test_files = [
52
- "test/helper.rb",
53
- "test/test_boolean.rb",
54
- "test/test_clive.rb",
55
- "test/test_command.rb",
56
- "test/test_exceptions.rb",
57
- "test/test_flag.rb",
58
- "test/test_switch.rb",
59
- "test/test_token.rb"
60
- ]
61
-
62
- if s.respond_to? :specification_version then
63
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
64
- s.specification_version = 3
65
-
66
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
67
- s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
68
- s.add_development_dependency(%q<yard>, [">= 0"])
69
- else
70
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
71
- s.add_dependency(%q<yard>, [">= 0"])
72
- end
73
- else
74
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
75
- s.add_dependency(%q<yard>, [">= 0"])
76
- end
77
- end
78
-
@@ -1,59 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'clive'
4
-
5
- options = {}
6
- c = Clive.new do
7
-
8
- switch :v, :verbose, "Run verbosely" do
9
- options[:verbose] = true
10
- end
11
-
12
- flag :t, :type, "TYPE", "Change type to TYPE" do |i|
13
- options[:type] = i
14
- end
15
-
16
- flag(:long_only, "A flag with only a long") {}
17
-
18
- flag :p, :print, "[TEXT]", "Print TEXT, defaults to 'hey'" do |i|
19
- i ||= 'hey'
20
- p i
21
- end
22
-
23
- flag(:z, :apple, "More applez") {}
24
-
25
- command :add, "Add something" do
26
-
27
- header "Usage: bin_test add [options]\n" +
28
- "Use add to add things to add, which in turn can be added."
29
-
30
- switch :f, :full, "Use full" do
31
- options[:full] = true
32
- end
33
-
34
- # Use with app-name add -e
35
- switch :e, :empty, "Use empty" do
36
- options[:full] = false
37
- end
38
-
39
- footer "If the header was a little confusing, don't worry the footer thought so too."
40
-
41
- end
42
-
43
- command :remove, :delete, "Get rid of something" do
44
- switch :f, :force, "Force" do
45
- p "deleting! now"
46
- end
47
- end
48
-
49
-
50
- option_missing do |name|
51
- puts "hi, #{name}"
52
- end
53
-
54
- end
55
-
56
- p ARGV
57
- p c.parse(ARGV)
58
- p options
59
-
@@ -1,14 +0,0 @@
1
- require 'duvet'
2
- Duvet.start :filter => 'clive/lib'
3
-
4
- require 'test/unit'
5
- require 'shoulda'
6
- require 'rr'
7
-
8
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
- $LOAD_PATH.unshift(File.dirname(__FILE__))
10
- require File.join(File.dirname(__FILE__), '..', 'lib', 'clive')
11
-
12
- class Test::Unit::TestCase
13
- include RR::Adapters::TestUnit
14
- end
@@ -1,55 +0,0 @@
1
- require 'helper'
2
-
3
- class TestBoolean < Test::Unit::TestCase
4
-
5
- context "A new boolean switch" do
6
-
7
- setup do
8
- @c = Clive.new do
9
- bool(:v, :verbose, "Run verbosely") {|i| puts(i)}
10
- end
11
- end
12
-
13
- should "create two switches" do
14
- assert_equal 2, @c.bools.length
15
- end
16
-
17
- should "raise error when no long name given" do
18
- assert_raise Clive::MissingLongName do
19
- Clive::Bool.new(:v, "Run verbosely") {}
20
- end
21
- end
22
-
23
- context "the true switch" do
24
- should "have a short name" do
25
- assert_contains @c.bools["verbose"].names, "v"
26
- end
27
-
28
- should "pass true to the block" do
29
- mock($stdout).puts(true)
30
- @c.parse(["--verbose"])
31
- end
32
-
33
- should "create summary" do
34
- assert_equal "-v, --[no-]verbose Run verbosely", @c.bools["verbose"].summary(0, 0)
35
- end
36
- end
37
-
38
- context "the false switch" do
39
- should "not have short name" do
40
- assert_does_not_contain @c.bools["no-verbose"].names, "v"
41
- end
42
-
43
- should "pass false to the block" do
44
- mock($stdout).puts(false)
45
- @c.parse(["--no-verbose"])
46
- end
47
-
48
- should "not create summary" do
49
- assert_equal nil, @c.bools["no-verbose"].summary
50
- end
51
- end
52
-
53
- end
54
-
55
- end
@@ -1,276 +0,0 @@
1
- require 'helper'
2
-
3
- class TestClive < Test::Unit::TestCase
4
-
5
- should "create flag" do
6
- c = Clive.new do
7
- flag(:v) {}
8
- end
9
- assert_equal 1, c.flags.length
10
- assert_instance_of Clive::Flag, c.flags[0]
11
- end
12
-
13
- should "create switch" do
14
- c = Clive.new do
15
- switch(:v) {}
16
- end
17
- assert_equal 2, c.switches.length # plus help
18
- assert_instance_of Clive::Switch, c.switches[0]
19
- end
20
-
21
- should "create command" do
22
- c = Clive.new do
23
- command(:add) {}
24
- end
25
- assert_equal 1, c.commands.length
26
- assert_instance_of Clive::Command, c.commands[0]
27
- end
28
-
29
- should "create boolean" do
30
- c = Clive.new do
31
- boolean(:verbose) {}
32
- end
33
- assert_equal 2, c.bools.length
34
- assert_instance_of Clive::Bool, c.bools[0]
35
- end
36
-
37
- context "When parsing input" do
38
-
39
- should "recognise flags with equals" do
40
- opts = {}
41
- c = Clive.new do
42
- flag(:type) {|i| opts[:type] = i}
43
- end
44
- c.parse(["--type=big"])
45
- r = {:type => 'big'}
46
- assert_equal r, opts
47
- end
48
-
49
- should "recognise flags without equals" do
50
- opts = {}
51
- c = Clive.new do
52
- flag(:type) {|i| opts[:type] = i}
53
- end
54
- c.parse(["--type", "big"])
55
- r = {:type => 'big'}
56
- assert_equal r, opts
57
- end
58
-
59
- should "recongise short flags" do
60
- opts = {}
61
- c = Clive.new do
62
- flag(:t) {|i| opts[:type] = i}
63
- end
64
- c.parse(["-t", "big"])
65
- r = {:type => 'big'}
66
- assert_equal r, opts
67
- end
68
-
69
- should "recognise multiple flags" do
70
- opts = {}
71
- c = Clive.new do
72
- flag(:type) {|i| opts[:type] = i}
73
- flag(:lang) {|i| opts[:lang] = i}
74
- flag(:e) {|i| opts[:e] = i}
75
- end
76
- c.parse(["--type=big", "--lang", "eng", "-e", "true"])
77
- r = {:type => 'big', :lang => 'eng', :e => 'true'}
78
- assert_equal r, opts
79
- end
80
-
81
-
82
- should "recognise switches" do
83
- opts = {}
84
- c = Clive.new do
85
- switch(:v, :verbose) {opts[:verbose] = true}
86
- end
87
- c.parse(["--verbose"])
88
- r = {:verbose => true}
89
- assert_equal r, opts
90
- end
91
-
92
- should "recognise short switches" do
93
- opts = {}
94
- c = Clive.new do
95
- switch(:v, :verbose) {opts[:verbose] = true}
96
- end
97
- c.parse(["-v"])
98
- r = {:verbose => true}
99
- assert_equal r, opts
100
- end
101
-
102
- should "recognise multiple switches" do
103
- opts = {}
104
- c = Clive.new do
105
- switch(:v, :verbose) {opts[:verbose] = true}
106
- switch(:r, :recursive) {opts[:recursive] = true}
107
- end
108
- c.parse(["--verbose", "-r"])
109
- r = {:verbose => true, :recursive => true}
110
- assert_equal r, opts
111
- end
112
-
113
- should "recognise multiple combined short switches" do
114
- opts = {}
115
- c = Clive.new do
116
- switch(:v, :verbose) {opts[:verbose] = true}
117
- switch(:r, :recursive) {opts[:recursive] = true}
118
- end
119
- c.parse(["-vr"])
120
- r = {:verbose => true, :recursive => true}
121
- assert_equal r, opts
122
- end
123
-
124
-
125
- should "recognise commands" do
126
- opts = {}
127
- c = Clive.new do
128
- command(:add) {opts[:add] = true}
129
- end
130
- c.parse(["add"])
131
- r = {:add => true}
132
- assert_equal r, opts
133
- end
134
-
135
- should "recognise flags and switches within commands" do
136
- opts = {}
137
- c = Clive.new do
138
- command(:add) {
139
- opts[:add] = true
140
-
141
- switch(:v, :verbose) {opts[:verbose] = true}
142
- flag(:type) {|i| opts[:type] = i}
143
- }
144
- end
145
- c.parse(["add", "--verbose", "--type=big"])
146
- r = {:add => true, :verbose => true, :type => "big"}
147
- assert_equal r, opts
148
- end
149
-
150
- should "recognise an argument" do
151
- c = Clive.new do
152
- bool(:v, :verbose, "Run verbosely") {}
153
- end
154
- args = c.parse ["argument"]
155
- assert_equal ["argument"], args
156
- end
157
-
158
- should "recognise a quoted argument" do
159
- c = Clive.new {}
160
- args = c.parse ['a quoted argument']
161
- assert_equal ["a quoted argument"], args
162
- end
163
-
164
- should "recognise multiple arguments" do
165
- c = Clive.new do
166
- bool(:v, :verbose, "Run verbosely") {}
167
- end
168
- args = c.parse ["argument", "and", "another"]
169
- assert_equal ["argument", "and", "another"], args
170
- end
171
-
172
- should "parse a mixture properly" do
173
- opts = {}
174
- c = Clive.new do
175
- switch(:v) {opts[:v] = true}
176
- flag(:h) {opts[:h] = true}
177
- command(:add) {
178
- switch(:full) {opts[:full] = true}
179
- }
180
- end
181
- c.parse(["-v", "add", "--full"])
182
- r = {:v => true, :full => true}
183
- assert_equal r, opts
184
- end
185
-
186
-
187
- should "return unused arguments" do
188
- opts = {}
189
- c = Clive.new do
190
- switch(:v) {opts[:v] = true}
191
- flag(:h) {opts[:h] = true}
192
- command(:add) {
193
- switch(:full) {opts[:full] = true}
194
- }
195
- end
196
- result = c.parse(["-v", "add", "--full", "truearg"])
197
- assert_equal ["truearg"], result
198
- end
199
-
200
- should "return multiple unused arguments" do
201
- opts = {}
202
- c = Clive.new do
203
- switch(:v) {opts[:v] = true}
204
- flag(:h) {opts[:h] = true}
205
- command(:add) {
206
- switch(:full) {opts[:full] = true}
207
- }
208
- end
209
- result = c.parse(["-v", "onearg", "twoarg", "/usr/bin/env"])
210
- assert_equal ["onearg", "twoarg", "/usr/bin/env"], result
211
- end
212
-
213
- end
214
-
215
-
216
- context "When parsing ridiculous edge tests" do
217
-
218
- should "parse this crazy guy" do
219
- opts = {}
220
- c = Clive.new do
221
- switch(:v) {opts[:v] = true}
222
- flag(:h) {opts[:h] = true}
223
-
224
- command(:add) {
225
- opts[:add] = {}
226
- switch(:full) {opts[:add][:full] = true}
227
- flag(:breed) {|i| opts[:add][:breed] = i}
228
-
229
- command(:init) {
230
- opts[:add][:init] = {}
231
- switch(:base) {opts[:add][:init][:base] = true}
232
- flag(:name) {|i| opts[:add][:init][:name] = i}
233
- }
234
- }
235
- end
236
- c.parse(["-v", "add", "--full", "init", "--base", "--name=Works"])
237
- r = {:v => true, :add => {:full => true, :init => {:base => true, :name => 'Works'}} }
238
- assert_equal r, opts
239
- end
240
-
241
- should "parse the one in the readme" do
242
- opts = {}
243
- c = Clive.new do
244
- bool(:v, :verbose, "Run verbosely") {|i| opts[:verbose] = i}
245
-
246
- command(:add, "Add a new project") do
247
- opts[:add] = {}
248
-
249
- switch(:force, "Force overwrite") {opts[:add][:force] = true}
250
- flag(:framework, "Add framework") do |i|
251
- opts[:add][:framework] ||= []
252
- opts[:add][:framework] << i
253
- end
254
-
255
- command(:init, "Initialize the project after creating") do
256
- switch(:m, :minimum, "Use minimum settings") {opts[:add][:min] = true}
257
- flag(:w, :width) {|i| opts[:add][:width] = i.to_i}
258
- end
259
-
260
- end
261
-
262
- switch(:version, "Show version") do
263
- puts "1.0.0"
264
- exit
265
- end
266
- end
267
- argv = %w(-v add --framework=blueprint init -m -w 200 ~/Desktop/new_thing ~/Desktop/another_thing)
268
- args = c.parse(argv)
269
-
270
- opts_r = {:add => {:min => true, :width => 200, :framework => ["blueprint"]}, :verbose => true}
271
- assert_equal opts_r, opts
272
- assert_equal ["~/Desktop/new_thing", "~/Desktop/another_thing"], args
273
- end
274
-
275
- end
276
- end
@@ -1,44 +0,0 @@
1
- require 'helper'
2
-
3
- class TestCommand < Test::Unit::TestCase
4
-
5
- context "A new command" do
6
-
7
- setup do
8
- @c = Clive.new do
9
- command(:add, "Add something") {puts "called!"}
10
- end
11
- end
12
-
13
- context "with multiple names" do
14
- setup do
15
- @c = Clive.new do
16
- command(:add, :init, :new, "Add something") {puts "called!"}
17
- end
18
- end
19
-
20
- should "be called with first name" do
21
- mock($stdout).puts("called!")
22
- @c.parse ["add"]
23
- end
24
-
25
- should "be called with second name" do
26
- mock($stdout).puts("called!")
27
- @c.parse ["init"]
28
- end
29
-
30
- should "be called with third name" do
31
- mock($stdout).puts("called!")
32
- @c.parse ["new"]
33
- end
34
- end
35
-
36
-
37
- should "only execute it's block when called" do
38
- mock($stdout).puts("called!")
39
- @c.parse(["a"])
40
- @c.parse(["add"])
41
- end
42
-
43
- end
44
- end
@@ -1,28 +0,0 @@
1
- require 'helper'
2
-
3
- class TestClive < Test::Unit::TestCase
4
-
5
- context "When given bad input" do
6
-
7
- should "warn of missing arguments" do
8
- c = Clive.new do
9
- flag(:hello) {}
10
- end
11
- assert_raise Clive::MissingArgument do
12
- c.parse(["--hello"])
13
- end
14
- end
15
-
16
- should "warn of invalid options" do
17
- c = Clive.new do
18
- switch(:hello) {}
19
- end
20
- assert_raise Clive::InvalidOption do
21
- c.parse(["--what"])
22
- end
23
- end
24
-
25
-
26
- end
27
-
28
- end
@@ -1,160 +0,0 @@
1
- require 'helper'
2
-
3
- class TestFlag < Test::Unit::TestCase
4
-
5
- context "A new flag" do
6
-
7
- setup do
8
- @c = Clive.new do
9
- flag(:t, :type, "TEXT", "Change type to TYPE") {|i| puts(i)}
10
- end
11
- end
12
-
13
- should "pass an argument to block" do
14
- mock($stdout).puts("text")
15
- @c.parse(["--type", "text"])
16
- end
17
-
18
- should "have a arguments" do
19
- r = {:name => "TEXT", :optional => false, :type => String}
20
- assert_equal r, @c.flags["t"].args[0]
21
- end
22
-
23
- should "not be optional" do
24
- assert_equal false, @c.flags["t"].args[0][:optional]
25
- end
26
- end
27
-
28
- context "A new flag with default" do
29
-
30
- setup do
31
- @c = Clive.new do
32
- flag(:t, :type, "[TEXT]", "Change type to TYPE") do |i|
33
- i ||= 'dog'
34
- $stdout.puts(i)
35
- end
36
- end
37
- end
38
-
39
- should "have an arg name" do
40
- r = {:name => "TEXT", :optional => true, :type => String}
41
- assert_equal r, @c.flags["t"].args[0]
42
- end
43
-
44
- should "be optional" do
45
- assert_equal true, @c.flags["t"].args[0][:optional]
46
- end
47
-
48
- should "pass an argument to block" do
49
- mock($stdout).puts("text")
50
- @c.parse(["--type", "text"])
51
- end
52
-
53
- should "pass nil to the block if no argument" do
54
- mock($stdout).puts("dog")
55
- @c.parse(["--type"])
56
- end
57
- end
58
-
59
- context "A new flag with multiple arguments" do
60
-
61
- setup do
62
- @c = Clive.new do
63
- flag(:s, :send, "FROM TO", "Send the message from FROM to TO") do |from, to|
64
- puts from
65
- puts to
66
- end
67
- end
68
- end
69
-
70
- should "pass two arguments to the block" do
71
- mock($stdout).puts("John")
72
- mock($stdout).puts("Dave")
73
- @c.parse(["--send", "John", "Dave"])
74
- end
75
-
76
- should "have a useful summary" do
77
- s = "-s, --send FROM TO Send the message from FROM to TO"
78
- assert_equal s, @c.flags['s'].summary(0, 0)
79
- end
80
-
81
- should "work for more than two arguments" do
82
- mock($stdout).puts("from: Josh, to: John, via: Hong Kong, because: It's far away")
83
- c = Clive.new do
84
- flag(:s, :send, "FROM TO VIA BECAUSE", "Send the message...etc") do |f, t, v, b|
85
- puts "from: #{f}, to: #{t}, via: #{v}, because: #{b}"
86
- end
87
- end
88
- c.parse ['-s', 'Josh', 'John', "Hong Kong", "It's far away"]
89
- end
90
-
91
- context "and optional arguments" do
92
- setup do
93
- @c = Clive.new do
94
- flag(:s, :send, "FROM [VIA] TO [BECAUSE]", "Send the message...etc") do |f, v, t, b|
95
- s = "from: #{f}"
96
- s << ", via: #{v}" if v
97
- s << ", to: #{t}"
98
- s << ", because: #{b}" if b
99
- puts s
100
- end
101
- end
102
- end
103
-
104
- should "correctly parse argument string" do
105
- r = [
106
- {:name => "FROM", :optional => false, :type => String},
107
- {:name => "VIA", :optional => true, :type => String},
108
- {:name => "TO", :optional => false, :type => String},
109
- {:name => "BECAUSE", :optional => true, :type => String}
110
- ]
111
- assert_equal r, @c.flags[:s].args
112
- end
113
-
114
- should "give all arguments when found in input" do
115
- mock($stdout).puts("from: Josh, via: Hong Kong, to: John, because: It's far away")
116
- @c.parse ["-s", "Josh", "Hong Kong", "John", "It's far away"]
117
- end
118
-
119
- should "try to give only needed arguments if some missing" do
120
- mock($stdout).puts("from: Josh, to: John")
121
- @c.parse ["-s", "Josh", "John"]
122
- end
123
-
124
- should "fill optional arguments starting from left" do
125
- mock($stdout).puts("from: Josh, via: Hong Kong, to: John")
126
- @c.parse ["-s", "Josh", "Hong Kong", "John"]
127
- end
128
-
129
- end
130
- end
131
-
132
- context "A new flag with a list of acceptable arguments" do
133
-
134
- setup do
135
- @c = Clive.new do
136
- flag(:t, :type, ["large", "medium", "small"], "Choose the type to use") {}
137
- end
138
- end
139
-
140
- should "raise error when correct argument not found" do
141
- assert_raise Clive::InvalidArgument do
142
- @c.parse(["--type", "apple"])
143
- end
144
- end
145
-
146
- should "not raise error when correct argument given" do
147
- @c.parse(["--type", "large"])
148
- end
149
-
150
- should "make list arguments" do
151
- r = ["large", "medium", "small"]
152
- assert_equal r, @c.flags['t'].args
153
- end
154
-
155
- should "have a useful summary" do
156
- s = "-t, --type {large, medium, small} Choose the type to use"
157
- assert_equal s, @c.flags['t'].summary(0, 0)
158
- end
159
- end
160
- end
@@ -1,18 +0,0 @@
1
- require 'helper'
2
-
3
- class TestSwitch < Test::Unit::TestCase
4
-
5
- context "A new switch" do
6
-
7
- setup do
8
- @c = Clive.new do
9
- switch(:d, :debug, "Use debug mode") {}
10
- end
11
- end
12
-
13
- should "create summary" do
14
- assert_equal "-d, --debug Use debug mode", @c.switches["d"].summary(0, 0)
15
- end
16
-
17
- end
18
- end
@@ -1,68 +0,0 @@
1
- require 'helper'
2
-
3
- class TestToken < Test::Unit::TestCase
4
-
5
- context "When converting" do
6
- setup do
7
- @array = ["add", "-al", "--verbose"]
8
- @array_split = ["add", "-a", "-l", "--verbose"]
9
- @tokens = [[:word, "add"], [:short, "a"], [:short, "l"], [:long, "verbose"]]
10
- end
11
-
12
- should "convert an array to tokens" do
13
- assert_equal @tokens, Clive::Tokens.to_tokens(@array)
14
- end
15
-
16
- should "convert tokens to an array" do
17
- assert_equal @array_split, Clive::Tokens.to_array(@tokens)
18
- end
19
- end
20
-
21
- context "A new tokens instance" do
22
-
23
- setup do
24
- @array = ["add", "-al", "--verbose"]
25
- @array_split = ["add", "-a", "-l", "--verbose"]
26
- @tokens = [[:word, "add"], [:short, "a"], [:short, "l"], [:long, "verbose"]]
27
- end
28
-
29
- should "be created from an array" do
30
- t = Clive::Tokens.new(@tokens)
31
- assert_equal @tokens, t.tokens
32
- assert_equal @array_split, t.array
33
- end
34
-
35
- should "be created from tokens" do
36
- t = Clive::Tokens.new(@array)
37
- assert_equal @tokens, t.tokens
38
- assert_equal @array_split, t.array
39
- end
40
-
41
- should "tell whether an array is a token" do
42
- t = Clive::Tokens.new
43
- assert_equal false, t.token?(["a", "normal", "array"])
44
- assert_equal true, t.token?([:word, "help"])
45
- end
46
-
47
- should "turn token to string" do
48
- t = Clive::Tokens.new
49
- assert_equal "-v", t.token_to_string([:short, "v"])
50
- assert_equal "--verbose", t.token_to_string([:long, "verbose"])
51
- assert_equal "word", t.token_to_string([:word, "word"])
52
- end
53
-
54
- should "add new string values" do
55
- t = Clive::Tokens.new
56
- t << "add" << "-al" << "--verbose"
57
- assert_equal @tokens, t.tokens
58
- end
59
-
60
- should "add new token values" do
61
- t = Clive::Tokens.new
62
- t << [:word, "add"] << [:short, "a"] << [:short, "l"] << [:long, "verbose"]
63
- assert_equal @array_split, t.array
64
- end
65
-
66
- end
67
-
68
- end