bbcloud 0.11.2 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (198) hide show
  1. data/.gitignore +3 -2
  2. data/Gemfile +3 -0
  3. data/README +11 -1
  4. data/README.rdoc +11 -1
  5. data/Rakefile +12 -0
  6. data/bbcloud.gemspec +10 -10
  7. data/bin/brightbox-accounts +7 -2
  8. data/bin/brightbox-cloudips +7 -2
  9. data/bin/brightbox-config +7 -2
  10. data/bin/brightbox-images +7 -2
  11. data/bin/brightbox-lbs +7 -2
  12. data/bin/brightbox-servers +7 -2
  13. data/bin/brightbox-types +7 -2
  14. data/bin/brightbox-users +7 -2
  15. data/bin/brightbox-zones +7 -2
  16. data/lib/bbcloud.rb +43 -0
  17. data/lib/bbcloud/accounts.rb +5 -3
  18. data/lib/bbcloud/command_generator.rb +50 -0
  19. data/lib/bbcloud/commands/accounts-list.rb +13 -11
  20. data/lib/bbcloud/commands/accounts-reset-ftp-password.rb +26 -23
  21. data/lib/bbcloud/commands/accounts-show.rb +20 -16
  22. data/lib/bbcloud/commands/cloudips-create.rb +16 -14
  23. data/lib/bbcloud/commands/cloudips-destroy.rb +29 -26
  24. data/lib/bbcloud/commands/cloudips-list.rb +13 -11
  25. data/lib/bbcloud/commands/cloudips-map.rb +48 -46
  26. data/lib/bbcloud/commands/cloudips-show.rb +15 -12
  27. data/lib/bbcloud/commands/cloudips-unmap.rb +28 -25
  28. data/lib/bbcloud/commands/config-client-add.rb +33 -31
  29. data/lib/bbcloud/commands/config-client-default.rb +18 -16
  30. data/lib/bbcloud/commands/config-client-list.rb +19 -16
  31. data/lib/bbcloud/commands/config-client-remove.rb +18 -16
  32. data/lib/bbcloud/commands/images-destroy.rb +18 -16
  33. data/lib/bbcloud/commands/images-list.rb +20 -18
  34. data/lib/bbcloud/commands/images-register.rb +21 -19
  35. data/lib/bbcloud/commands/images-show.rb +17 -15
  36. data/lib/bbcloud/commands/lbs-add-nodes.rb +15 -13
  37. data/lib/bbcloud/commands/lbs-create.rb +65 -63
  38. data/lib/bbcloud/commands/lbs-destroy.rb +13 -11
  39. data/lib/bbcloud/commands/lbs-list.rb +13 -11
  40. data/lib/bbcloud/commands/lbs-remove-nodes.rb +15 -13
  41. data/lib/bbcloud/commands/lbs-show.rb +15 -13
  42. data/lib/bbcloud/commands/lbs-update.rb +59 -57
  43. data/lib/bbcloud/commands/servers-activate-cloud.rb +18 -16
  44. data/lib/bbcloud/commands/servers-create.rb +80 -77
  45. data/lib/bbcloud/commands/servers-destroy.rb +17 -15
  46. data/lib/bbcloud/commands/servers-list.rb +14 -14
  47. data/lib/bbcloud/commands/servers-show.rb +39 -37
  48. data/lib/bbcloud/commands/servers-shutdown.rb +14 -12
  49. data/lib/bbcloud/commands/servers-snapshot.rb +14 -12
  50. data/lib/bbcloud/commands/servers-start.rb +15 -13
  51. data/lib/bbcloud/commands/servers-stop.rb +14 -12
  52. data/lib/bbcloud/commands/types-list.rb +13 -11
  53. data/lib/bbcloud/commands/types-show.rb +18 -16
  54. data/lib/bbcloud/commands/users-list.rb +13 -11
  55. data/lib/bbcloud/commands/users-show.rb +17 -15
  56. data/lib/bbcloud/commands/users-update.rb +27 -25
  57. data/lib/bbcloud/commands/zones-list.rb +13 -11
  58. data/lib/bbcloud/config.rb +125 -111
  59. data/lib/bbcloud/error_parser.rb +34 -0
  60. data/lib/bbcloud/fog_extensions.rb +19 -0
  61. data/lib/bbcloud/gli_global_hooks.rb +56 -0
  62. data/lib/bbcloud/logging.rb +40 -0
  63. data/lib/bbcloud/ruby_core_ext.rb +9 -0
  64. data/lib/bbcloud/servers.rb +7 -2
  65. data/lib/bbcloud/tables.rb +78 -73
  66. data/lib/bbcloud/vendor/gli/.gitignore +10 -0
  67. data/lib/bbcloud/vendor/gli/.rvmrc +1 -0
  68. data/lib/bbcloud/vendor/gli/Gemfile +5 -0
  69. data/lib/bbcloud/vendor/gli/LICENSE.txt +201 -0
  70. data/lib/bbcloud/vendor/gli/README.rdoc +54 -0
  71. data/lib/bbcloud/vendor/gli/Rakefile +84 -0
  72. data/lib/bbcloud/vendor/gli/bin/gli +72 -0
  73. data/lib/bbcloud/vendor/gli/bin/report_on_rake_results +10 -0
  74. data/lib/bbcloud/vendor/gli/bin/test_all_rubies.sh +2 -0
  75. data/lib/bbcloud/vendor/gli/features/gli_executable.feature +88 -0
  76. data/lib/bbcloud/vendor/gli/features/gli_init.feature +122 -0
  77. data/lib/bbcloud/vendor/gli/features/step_definitions/gli_executable_steps.rb +12 -0
  78. data/lib/bbcloud/vendor/gli/features/step_definitions/gli_init_steps.rb +4 -0
  79. data/lib/bbcloud/vendor/gli/features/support/env.rb +21 -0
  80. data/lib/bbcloud/vendor/gli/gli.cheat +80 -0
  81. data/lib/bbcloud/vendor/gli/gli.gemspec +46 -0
  82. data/lib/bbcloud/vendor/gli/gli.rdoc +51 -0
  83. data/lib/bbcloud/vendor/gli/lib/gli.rb +560 -0
  84. data/lib/bbcloud/vendor/gli/lib/gli/command.rb +124 -0
  85. data/lib/bbcloud/vendor/gli/lib/gli/command_line_token.rb +58 -0
  86. data/lib/bbcloud/vendor/gli/lib/gli/copy_options_to_aliases.rb +33 -0
  87. data/lib/bbcloud/vendor/gli/lib/gli/exceptions.rb +45 -0
  88. data/lib/bbcloud/vendor/gli/lib/gli/flag.rb +67 -0
  89. data/lib/bbcloud/vendor/gli/lib/gli/options.rb +19 -0
  90. data/lib/bbcloud/vendor/gli/lib/gli/switch.rb +63 -0
  91. data/lib/bbcloud/vendor/gli/lib/gli/terminal.rb +79 -0
  92. data/lib/bbcloud/vendor/gli/lib/gli_version.rb +3 -0
  93. data/lib/bbcloud/vendor/gli/lib/support/help.rb +180 -0
  94. data/lib/bbcloud/vendor/gli/lib/support/initconfig.rb +34 -0
  95. data/lib/bbcloud/vendor/gli/lib/support/rdoc.rb +119 -0
  96. data/lib/bbcloud/vendor/gli/lib/support/scaffold.rb +284 -0
  97. data/lib/bbcloud/vendor/gli/test/config.yaml +9 -0
  98. data/lib/bbcloud/vendor/gli/test/gli.reek +116 -0
  99. data/lib/bbcloud/vendor/gli/test/roodi.yaml +9 -0
  100. data/lib/bbcloud/vendor/gli/test/tc_command.rb +329 -0
  101. data/lib/bbcloud/vendor/gli/test/tc_flag.rb +67 -0
  102. data/lib/bbcloud/vendor/gli/test/tc_gli.rb +429 -0
  103. data/lib/bbcloud/vendor/gli/test/tc_options.rb +31 -0
  104. data/lib/bbcloud/vendor/gli/test/tc_parsing.rb +279 -0
  105. data/lib/bbcloud/vendor/gli/test/tc_switch.rb +80 -0
  106. data/lib/bbcloud/vendor/gli/test/tc_terminal.rb +91 -0
  107. data/lib/bbcloud/version.rb +1 -1
  108. data/pkg/bbcloud-0.12.0.gem +0 -0
  109. data/spec/fixtures/vcr_cassettes/server_list.yml +117 -0
  110. data/spec/servers_spec.rb +36 -0
  111. data/spec/spec_helper.rb +24 -0
  112. data/spec/support/common_helpers.rb +47 -0
  113. metadata +129 -135
  114. data/lib/bbcloud/cli.rb +0 -160
  115. data/lib/bbcloud/vendor/fog/lib/fog.rb +0 -14
  116. data/lib/bbcloud/vendor/fog/lib/fog/compute.rb +0 -43
  117. data/lib/bbcloud/vendor/fog/lib/fog/compute/brightbox.rb +0 -162
  118. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/account.rb +0 -51
  119. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/cloud_ip.rb +0 -47
  120. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/cloud_ips.rb +0 -34
  121. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/flavor.rb +0 -33
  122. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/flavors.rb +0 -28
  123. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/image.rb +0 -56
  124. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/images.rb +0 -28
  125. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/load_balancer.rb +0 -50
  126. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/load_balancers.rb +0 -28
  127. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/server.rb +0 -108
  128. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/servers.rb +0 -29
  129. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/user.rb +0 -39
  130. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/users.rb +0 -29
  131. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/zone.rb +0 -21
  132. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/zones.rb +0 -29
  133. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/activate_console_server.rb +0 -20
  134. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/add_listeners_load_balancer.rb +0 -20
  135. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/add_nodes_load_balancer.rb +0 -20
  136. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_api_client.rb +0 -19
  137. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_cloud_ip.rb +0 -19
  138. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_image.rb +0 -19
  139. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_load_balancer.rb +0 -19
  140. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_server.rb +0 -19
  141. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_api_client.rb +0 -20
  142. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_cloud_ip.rb +0 -20
  143. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_image.rb +0 -20
  144. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_load_balancer.rb +0 -20
  145. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_server.rb +0 -20
  146. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_account.rb +0 -19
  147. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_api_client.rb +0 -20
  148. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_cloud_ip.rb +0 -20
  149. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_image.rb +0 -20
  150. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_interface.rb +0 -20
  151. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_load_balancer.rb +0 -20
  152. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_server.rb +0 -20
  153. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_server_type.rb +0 -20
  154. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_user.rb +0 -20
  155. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_zone.rb +0 -20
  156. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_api_clients.rb +0 -19
  157. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_cloud_ips.rb +0 -19
  158. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_images.rb +0 -19
  159. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_load_balancers.rb +0 -19
  160. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_server_types.rb +0 -19
  161. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_servers.rb +0 -19
  162. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_users.rb +0 -19
  163. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_zones.rb +0 -19
  164. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/map_cloud_ip.rb +0 -20
  165. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/remove_listeners_load_balancer.rb +0 -20
  166. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/remove_nodes_load_balancer.rb +0 -20
  167. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/reset_ftp_password_account.rb +0 -19
  168. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/resize_server.rb +0 -19
  169. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/shutdown_server.rb +0 -20
  170. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/snapshot_server.rb +0 -20
  171. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/start_server.rb +0 -20
  172. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/stop_server.rb +0 -20
  173. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/unmap_cloud_ip.rb +0 -20
  174. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_account.rb +0 -20
  175. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_api_client.rb +0 -21
  176. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_image.rb +0 -21
  177. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_load_balancer.rb +0 -21
  178. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_server.rb +0 -21
  179. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_user.rb +0 -21
  180. data/lib/bbcloud/vendor/fog/lib/fog/core.rb +0 -32
  181. data/lib/bbcloud/vendor/fog/lib/fog/core/attributes.rb +0 -178
  182. data/lib/bbcloud/vendor/fog/lib/fog/core/collection.rb +0 -127
  183. data/lib/bbcloud/vendor/fog/lib/fog/core/connection.rb +0 -35
  184. data/lib/bbcloud/vendor/fog/lib/fog/core/credentials.rb +0 -92
  185. data/lib/bbcloud/vendor/fog/lib/fog/core/deprecation.rb +0 -23
  186. data/lib/bbcloud/vendor/fog/lib/fog/core/errors.rb +0 -20
  187. data/lib/bbcloud/vendor/fog/lib/fog/core/hmac.rb +0 -48
  188. data/lib/bbcloud/vendor/fog/lib/fog/core/mock.rb +0 -68
  189. data/lib/bbcloud/vendor/fog/lib/fog/core/model.rb +0 -57
  190. data/lib/bbcloud/vendor/fog/lib/fog/core/parser.rb +0 -99
  191. data/lib/bbcloud/vendor/fog/lib/fog/core/provider.rb +0 -18
  192. data/lib/bbcloud/vendor/fog/lib/fog/core/scp.rb +0 -67
  193. data/lib/bbcloud/vendor/fog/lib/fog/core/service.rb +0 -175
  194. data/lib/bbcloud/vendor/fog/lib/fog/core/ssh.rb +0 -120
  195. data/lib/bbcloud/vendor/fog/lib/fog/core/time.rb +0 -27
  196. data/lib/bbcloud/vendor/fog/lib/fog/core/wait_for.rb +0 -17
  197. data/lib/bbcloud/vendor/fog/lib/fog/providers.rb +0 -9
  198. data/lib/bbcloud/vendor/fog/lib/fog/providers/brightbox.rb +0 -9
@@ -0,0 +1,67 @@
1
+ require 'gli.rb'
2
+ require 'test/unit'
3
+
4
+ include GLI
5
+ class TC_testFlag < Test::Unit::TestCase
6
+
7
+ def test_basics_simple
8
+ flag = Flag.new(:f,'Filename','file','~/.blah.rc')
9
+ do_basic_asserts(flag,:f,nil,'Filename','file','~/.blah.rc')
10
+ end
11
+
12
+ def test_basics_kinda_complex
13
+ flag = Flag.new([:f],'Filename','file','~/.blah.rc')
14
+ do_basic_asserts(flag,:f,nil,'Filename','file','~/.blah.rc')
15
+ end
16
+
17
+ def test_basics_complex
18
+ flag = Flag.new([:f,:file,:filename],'Filename','file','~/.blah.rc')
19
+ do_basic_asserts(flag,:f,[:file,:filename],'Filename','file','~/.blah.rc')
20
+ end
21
+
22
+ def do_basic_asserts(flag,name,aliases,desc,arg_name,default)
23
+ assert_equal(name,flag.name)
24
+ assert_equal(aliases,flag.aliases)
25
+ assert_equal(desc,flag.description)
26
+ assert(flag.usage != nil)
27
+ end
28
+
29
+ def test_find_one_flag
30
+ args = %w(foo bar -f crud)
31
+ flag = Flag.new(:f,'Filename')
32
+ args_size = args.length
33
+ val = flag.get_value!(args)
34
+ assert_equal('crud',val)
35
+ assert_equal(args_size - 2,args.size)
36
+ end
37
+
38
+ def test_find_flag_compact
39
+ do_test_find_flag_compact(%w(foo bar --f blah --filename=bleorgh -lfilename crud),'bleorgh',6)
40
+ do_test_find_flag_compact(%w(foo bar --f blah -f bleorgh -lfilename crud),'bleorgh',6)
41
+ end
42
+
43
+ def do_test_find_flag_compact(args,expected,expected_size)
44
+ flag = Flag.new([:f,:filename],'Filename')
45
+ val = flag.get_value!(args)
46
+ assert_equal(expected,val)
47
+ assert_equal(expected_size,args.size)
48
+ end
49
+
50
+ def test_find_flag_not_present
51
+ args = %w(foo bar --f blah -lfilename bleorgh -lfilename crud)
52
+ flag = Flag.new([:f,:filename],'Filename')
53
+ args_size = args.length
54
+ val = flag.get_value!(args)
55
+ assert_equal(nil,val)
56
+ assert_equal(args_size,args.size)
57
+ end
58
+
59
+ def test_bad_command_line
60
+ flag = Flag.new([:f,:filename],'Filename')
61
+ assert_raises(BadCommandLine) { flag.get_value!(%w(foo bar --f blah -f)) }
62
+ assert_raises(BadCommandLine) { flag.get_value!(%w(foo bar --f blah --filename)) }
63
+ assert_raises(BadCommandLine) { flag.get_value!(%w(foo bar --f blah --filename=)) }
64
+ assert_raises(BadCommandLine) { flag.get_value!(%w(foo bar --f blah --filename bleorgh -lfilename crud)) }
65
+ end
66
+
67
+ end
@@ -0,0 +1,429 @@
1
+ # 1.9 adds realpath to resolve symlinks; 1.8 doesn't
2
+ # have this method, so we add it so we get resolved symlinks
3
+ # and compatibility
4
+ unless File.respond_to? :realpath
5
+ class File
6
+ def self.realpath path
7
+ return realpath(File.readlink(path)) if symlink?(path)
8
+ path
9
+ end
10
+ end
11
+ end
12
+
13
+ require 'gli.rb'
14
+ require 'support/initconfig.rb'
15
+ require 'test/unit'
16
+
17
+ include GLI
18
+ class TC_testGLI < Test::Unit::TestCase
19
+
20
+ def setup
21
+ @config_file = File.expand_path(File.dirname(File.realpath(__FILE__)) + '/new_config.yaml')
22
+ @gli_debug = ENV['GLI_DEBUG']
23
+ end
24
+
25
+ def teardown
26
+ File.delete(@config_file) if File.exist?(@config_file)
27
+ ENV['GLI_DEBUG'] = @gli_debug
28
+ end
29
+
30
+ def test_flag_create
31
+ GLI.reset
32
+ do_test_flag_create(GLI)
33
+ do_test_flag_create(Command.new(:f,'Some command'))
34
+ end
35
+
36
+ def test_create_commands_using_strings
37
+ GLI.reset
38
+ GLI.flag ['f','flag']
39
+ GLI.switch ['s','some-switch']
40
+ GLI.command 'command','command-with-dash' do |c|
41
+ end
42
+ assert GLI.commands.include? :command
43
+ assert GLI.flags.include? :f
44
+ assert GLI.switches.include? :s
45
+ assert GLI.commands[:command].aliases.include? :'command-with-dash'
46
+ assert GLI.flags[:f].aliases.include? :flag
47
+ assert GLI.switches[:s].aliases.include? :'some-switch'
48
+ end
49
+
50
+ def test_flag_with_space_barfs
51
+ GLI.reset
52
+ assert_raises(ArgumentError) { GLI.flag ['some flag'] }
53
+ assert_raises(ArgumentError) { GLI.flag ['f','some flag'] }
54
+ assert_raises(ArgumentError) { GLI.switch ['some switch'] }
55
+ assert_raises(ArgumentError) { GLI.switch ['f','some switch'] }
56
+ assert_raises(ArgumentError) { GLI.command ['some command'] }
57
+ assert_raises(ArgumentError) { GLI.command ['f','some command'] }
58
+ end
59
+
60
+ def test_init_from_config
61
+ failure = nil
62
+ GLI.reset
63
+ GLI.config_file(File.expand_path(File.dirname(File.realpath(__FILE__)) + '/config.yaml'))
64
+ GLI.flag :f
65
+ GLI.switch :s
66
+ GLI.flag :g
67
+ called = false
68
+ GLI.command :command do |c|
69
+ c.flag :f
70
+ c.switch :s
71
+ c.flag :g
72
+ c.action do |g,o,a|
73
+ begin
74
+ called = true
75
+ assert_equal "foo",g[:f]
76
+ assert_equal "bar",o[:g]
77
+ assert !g[:g]
78
+ assert !o[:f]
79
+ assert !g[:s]
80
+ assert o[:s]
81
+ rescue Exception => ex
82
+ failure = ex
83
+ end
84
+ end
85
+ end
86
+ GLI.run(['command'])
87
+ assert called
88
+ raise failure if !failure.nil?
89
+ end
90
+
91
+ def test_command_line_overrides_config
92
+ failure = nil
93
+ GLI.reset
94
+ GLI.config_file(File.expand_path(File.dirname(File.realpath(__FILE__)) + '/config.yaml'))
95
+ GLI.flag :f
96
+ GLI.switch :s
97
+ GLI.flag :g
98
+ called = false
99
+ GLI.command :command do |c|
100
+ c.flag :f
101
+ c.switch :s
102
+ c.flag :g
103
+ c.action do |g,o,a|
104
+ begin
105
+ called = true
106
+ assert_equal "baaz",o[:g]
107
+ assert_equal "bar",g[:f]
108
+ assert !g[:g]
109
+ assert !o[:f]
110
+ assert !g[:s]
111
+ assert o[:s]
112
+ rescue Exception => ex
113
+ failure = ex
114
+ end
115
+ end
116
+ end
117
+ GLI.run %w(-f bar command -g baaz)
118
+ assert called
119
+ raise failure if !failure.nil?
120
+ end
121
+
122
+ def test_no_overwrite_config
123
+ config_file = File.expand_path(File.dirname(File.realpath(__FILE__)) + '/config.yaml')
124
+ config_file_contents = read_file_contents(config_file)
125
+ GLI.reset
126
+ GLI.config_file(config_file)
127
+ ex = assert_raises RuntimeError do
128
+ GLI.run(['initconfig'])
129
+ end
130
+ assert_match /--force/,ex.to_s,"Error message didn't mention --force option"
131
+ config_file_contents_after = read_file_contents(config_file)
132
+ assert_equal(config_file_contents,config_file_contents_after)
133
+ end
134
+
135
+ def test_config_file_name
136
+ GLI.reset
137
+ file = GLI.config_file("foo")
138
+ assert_equal(Etc.getpwuid.dir + "/foo",file)
139
+ file = GLI.config_file("/foo")
140
+ assert_equal "/foo",file
141
+ init_command = GLI.commands[:initconfig]
142
+ assert init_command
143
+ end
144
+
145
+ def test_initconfig_command
146
+ GLI.reset
147
+ GLI.config_file(@config_file)
148
+ GLI.flag :f
149
+ GLI.switch :s
150
+ GLI.switch :w
151
+ GLI.flag :bigflag
152
+ GLI.flag :biggestflag
153
+ GLI.command :foo do |c|
154
+ end
155
+ GLI.command :bar do |c|
156
+ end
157
+ GLI.command :blah do |c|
158
+ end
159
+ GLI.on_error do |ex|
160
+ raise ex
161
+ end
162
+ GLI.run(['-f','foo','-s','--bigflag=bleorgh','initconfig'])
163
+
164
+ written_config = File.open(@config_file) { |f| YAML::load(f) }
165
+
166
+ assert_equal 'foo',written_config[:f]
167
+ assert_equal 'bleorgh',written_config[:bigflag]
168
+ assert written_config[:s]
169
+ assert !written_config[:w]
170
+ assert_nil written_config[:biggestflag]
171
+ assert written_config[GLI::InitConfig::COMMANDS_KEY]
172
+ assert written_config[GLI::InitConfig::COMMANDS_KEY][:foo]
173
+ assert written_config[GLI::InitConfig::COMMANDS_KEY][:bar]
174
+ assert written_config[GLI::InitConfig::COMMANDS_KEY][:blah]
175
+
176
+ end
177
+
178
+ def do_test_flag_create(object)
179
+ description = 'this is a description'
180
+ long_desc = 'this is a very long description'
181
+ object.desc description
182
+ object.long_desc long_desc
183
+ object.arg_name 'filename'
184
+ object.default_value '~/.blah.rc'
185
+ object.flag :f
186
+ assert (object.flags[:f] )
187
+ assert_equal(description,object.flags[:f].description)
188
+ assert_equal(long_desc,object.flags[:f].long_description)
189
+ assert(nil != object.flags[:f].usage)
190
+ assert(object.usage != nil) if object.respond_to? :usage;
191
+ end
192
+
193
+ def test_switch_create
194
+ GLI.reset
195
+ do_test_switch_create(GLI)
196
+ do_test_switch_create(Command.new(:f,'Some command'))
197
+ end
198
+
199
+ def do_test_switch_create(object)
200
+ description = 'this is a description'
201
+ long_description = 'this is a very long description'
202
+ object.desc description
203
+ object.long_desc long_description
204
+ object.switch :f
205
+ assert (object.switches[:f] )
206
+ assert_equal(description,object.switches[:f].description)
207
+ assert_equal(long_description,object.switches[:f].long_description)
208
+ assert(object.usage != nil) if object.respond_to? :usage;
209
+ end
210
+
211
+ def test_switch_create_twice
212
+ GLI.reset
213
+ do_test_switch_create_twice(GLI)
214
+ do_test_switch_create_twice(Command.new(:f,'Some command'))
215
+ end
216
+
217
+ def test_all_aliases_in_options
218
+ GLI.reset
219
+ GLI.on_error { |ex| raise ex }
220
+ GLI.flag [:f,:flag,:'big-flag-name']
221
+ GLI.switch [:s,:switch,:'big-switch-name']
222
+ GLI.command [:com,:command] do |c|
223
+ c.flag [:g,:gflag]
224
+ c.switch [:h,:hswitch]
225
+ c.action do |global,options,args|
226
+ assert_equal 'foo',global[:f]
227
+ assert_equal global[:f],global[:flag]
228
+ assert_equal global[:f],global[:'big-flag-name']
229
+
230
+ assert global[:s]
231
+ assert global[:switch]
232
+ assert global[:'big-switch-name']
233
+
234
+ assert_equal 'bar',options[:g]
235
+ assert_equal options[:g],options[:gflag]
236
+
237
+ assert options[:h]
238
+ assert options[:hswitch]
239
+ end
240
+ end
241
+ GLI.run(%w(-f foo -s command -g bar -h some_arg))
242
+ end
243
+
244
+ def test_use_hash_by_default
245
+ GLI.reset
246
+ GLI.switch :g
247
+ GLI.command :command do |c|
248
+ c.switch :f
249
+ c.action do |global,options,args|
250
+ assert_equal Hash,global.class
251
+ assert_equal Hash,options.class
252
+ end
253
+ end
254
+ GLI.run(%w(-g command -f))
255
+ end
256
+
257
+ def test_use_openstruct
258
+ GLI.reset
259
+ GLI.switch :g
260
+ GLI.use_openstruct true
261
+ GLI.command :command do |c|
262
+ c.switch :f
263
+ c.action do |global,options,args|
264
+ assert_equal GLI::Options,global.class
265
+ assert_equal GLI::Options,options.class
266
+ end
267
+ end
268
+ GLI.run(%w(-g command -f))
269
+ end
270
+
271
+ def do_test_switch_create_twice(object)
272
+ description = 'this is a description'
273
+ object.desc description
274
+ object.switch :f
275
+ assert (object.switches[:f] )
276
+ assert_equal(description,object.switches[:f].description)
277
+ object.switch :g
278
+ assert (object.switches[:g])
279
+ assert_equal(nil,object.switches[:g].description)
280
+ assert(object.usage != nil) if object.respond_to? :usage;
281
+ end
282
+
283
+ def test_repeated_option_names
284
+ GLI.reset
285
+ GLI.on_error { |ex| raise ex }
286
+ GLI.flag [:f,:flag]
287
+ assert_raises(ArgumentError) { GLI.switch [:foo,:flag] }
288
+ assert_raises(ArgumentError) { GLI.switch [:f] }
289
+
290
+ GLI.switch [:x,:y]
291
+ assert_raises(ArgumentError) { GLI.flag [:x] }
292
+ assert_raises(ArgumentError) { GLI.flag [:y] }
293
+ end
294
+
295
+ def test_repeated_option_names_on_command
296
+ GLI.reset
297
+ GLI.on_error { |ex| raise ex }
298
+ GLI.command :command do |c|
299
+ c.flag [:f,:flag]
300
+ assert_raises(ArgumentError) { c.switch [:foo,:flag] }
301
+ assert_raises(ArgumentError) { c.switch [:f] }
302
+ assert_raises(ArgumentError) { c.flag [:foo,:flag] }
303
+ assert_raises(ArgumentError) { c.flag [:f] }
304
+ end
305
+ GLI.command :command3 do |c|
306
+ c.switch [:s,:switch]
307
+ assert_raises(ArgumentError) { c.switch [:switch] }
308
+ assert_raises(ArgumentError) { c.switch [:s] }
309
+ assert_raises(ArgumentError) { c.flag [:switch] }
310
+ assert_raises(ArgumentError) { c.flag [:s] }
311
+ end
312
+ end
313
+
314
+ def test_two_flags
315
+ GLI.reset
316
+ GLI.on_error do |ex|
317
+ raise ex
318
+ end
319
+ GLI.command [:foo] do |c|
320
+ c.flag :i
321
+ c.flag :s
322
+ c.action do |g,o,a|
323
+ assert_equal "5", o[:i]
324
+ assert_equal "a", o[:s]
325
+ end
326
+ end
327
+ GLI.run(['foo', '-i','5','-s','a'])
328
+ end
329
+
330
+ def test_two_flags_with_a_default
331
+ GLI.reset
332
+ GLI.on_error do |ex|
333
+ raise ex
334
+ end
335
+ GLI.command [:foo] do |c|
336
+ c.default_value "1"
337
+ c.flag :i
338
+ c.flag :s
339
+ c.action do |g,o,a|
340
+ assert_equal "5", o[:i]
341
+ assert_equal "a", o[:s]
342
+ end
343
+ end
344
+ GLI.run(['foo', '-i','5','-s','a'])
345
+ end
346
+
347
+ def test_two_flags_using_equals_with_a_default
348
+ GLI.reset
349
+ GLI.on_error do |ex|
350
+ raise ex
351
+ end
352
+ GLI.command [:foo] do |c|
353
+ c.default_value "1"
354
+ c.flag :i
355
+ c.flag :s
356
+ c.action do |g,o,a|
357
+ assert_equal "5", o[:i]
358
+ assert_equal "a", o[:s]
359
+ end
360
+ end
361
+ GLI.run(['foo', '-i=5','-s=a'])
362
+ end
363
+
364
+ def test_exits_zero_on_success
365
+ assert_equal 0,GLI.run([])
366
+ end
367
+
368
+ def test_exits_nonzero_on_bad_command_line
369
+ GLI.reset
370
+ GLI.on_error { true }
371
+ assert_equal -1,GLI.run(['asdfasdfasdf'])
372
+ end
373
+
374
+ def test_exists_nonzero_on_raise_from_command
375
+ GLI.reset
376
+ GLI.on_error { true }
377
+ GLI.command(:foo) do |c|
378
+ c.action do |g,o,a|
379
+ raise "Problem"
380
+ end
381
+ end
382
+ assert_equal -2,GLI.run(['foo'])
383
+ end
384
+
385
+ def test_exits_nonzero_with_custom_exception
386
+ GLI.reset
387
+ GLI.on_error { true }
388
+ GLI.command(:foo) do |c|
389
+ c.action do |g,o,a|
390
+ raise CustomExit.new("Problem",45)
391
+ end
392
+ end
393
+ assert_equal 45,GLI.run(['foo'])
394
+ end
395
+
396
+ def test_exits_nonzero_with_exit_method
397
+ GLI.reset
398
+ GLI.on_error { true }
399
+ GLI.command(:foo) do |c|
400
+ c.action do |g,o,a|
401
+ exit_now!("Problem",45)
402
+ end
403
+ end
404
+ assert_equal 45,GLI.run(['foo'])
405
+ end
406
+
407
+ def test_gli_debug_overrides_error_hiding
408
+ ENV['GLI_DEBUG'] = 'true'
409
+
410
+ GLI.reset
411
+ GLI.on_error { true }
412
+ GLI.command(:foo) do |c|
413
+ c.action do |g,o,a|
414
+ exit_now!("Problem",45)
415
+ end
416
+ end
417
+
418
+ assert_raises(CustomExit) { GLI.run(['foo']) }
419
+ end
420
+
421
+ private
422
+
423
+ def read_file_contents(filename)
424
+ contents = ""
425
+ File.open(filename) { |file| file.readlines.each { |line| contents += line }}
426
+ contents
427
+ end
428
+
429
+ end