rudy 0.4.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/CHANGES.txt +54 -30
  2. data/README.rdoc +100 -12
  3. data/Rakefile +103 -8
  4. data/Rudyfile +119 -0
  5. data/bin/ird +175 -0
  6. data/bin/rudy +259 -156
  7. data/bin/rudy-ec2 +228 -95
  8. data/bin/rudy-s3 +76 -0
  9. data/bin/rudy-sdb +67 -0
  10. data/lib/annoy.rb +270 -0
  11. data/lib/console.rb +30 -9
  12. data/lib/escape.rb +305 -0
  13. data/lib/rudy.rb +151 -182
  14. data/lib/rudy/aws.rb +56 -49
  15. data/lib/rudy/aws/ec2.rb +47 -292
  16. data/lib/rudy/aws/ec2/address.rb +157 -0
  17. data/lib/rudy/aws/ec2/group.rb +301 -0
  18. data/lib/rudy/aws/ec2/image.rb +168 -0
  19. data/lib/rudy/aws/ec2/instance.rb +434 -0
  20. data/lib/rudy/aws/ec2/keypair.rb +104 -0
  21. data/lib/rudy/aws/ec2/snapshot.rb +98 -0
  22. data/lib/rudy/aws/ec2/volume.rb +230 -0
  23. data/lib/rudy/aws/ec2/zone.rb +77 -0
  24. data/lib/rudy/aws/s3.rb +54 -0
  25. data/lib/rudy/aws/sdb.rb +298 -0
  26. data/lib/rudy/aws/sdb/error.rb +46 -0
  27. data/lib/rudy/{metadata/backup.rb → backup.rb} +26 -51
  28. data/lib/rudy/cli.rb +157 -0
  29. data/lib/rudy/cli/aws/ec2/addresses.rb +105 -0
  30. data/lib/rudy/cli/aws/ec2/candy.rb +208 -0
  31. data/lib/rudy/cli/aws/ec2/groups.rb +121 -0
  32. data/lib/rudy/cli/aws/ec2/images.rb +196 -0
  33. data/lib/rudy/cli/aws/ec2/instances.rb +194 -0
  34. data/lib/rudy/cli/aws/ec2/keypairs.rb +53 -0
  35. data/lib/rudy/cli/aws/ec2/snapshots.rb +49 -0
  36. data/lib/rudy/cli/aws/ec2/volumes.rb +104 -0
  37. data/lib/rudy/cli/aws/ec2/zones.rb +22 -0
  38. data/lib/rudy/cli/aws/s3/buckets.rb +50 -0
  39. data/lib/rudy/cli/aws/s3/store.rb +22 -0
  40. data/lib/rudy/cli/aws/sdb/domains.rb +41 -0
  41. data/lib/rudy/cli/candy.rb +8 -0
  42. data/lib/rudy/{command → cli}/config.rb +34 -24
  43. data/lib/rudy/cli/disks.rb +35 -0
  44. data/lib/rudy/cli/machines.rb +94 -0
  45. data/lib/rudy/cli/routines.rb +57 -0
  46. data/lib/rudy/config.rb +77 -72
  47. data/lib/rudy/config/objects.rb +29 -0
  48. data/lib/rudy/disks.rb +248 -0
  49. data/lib/rudy/global.rb +121 -0
  50. data/lib/rudy/huxtable.rb +340 -0
  51. data/lib/rudy/machines.rb +245 -0
  52. data/lib/rudy/metadata.rb +123 -13
  53. data/lib/rudy/routines.rb +47 -0
  54. data/lib/rudy/routines/helpers/diskhelper.rb +101 -0
  55. data/lib/rudy/routines/helpers/scripthelper.rb +91 -0
  56. data/lib/rudy/routines/release.rb +34 -0
  57. data/lib/rudy/routines/shutdown.rb +57 -0
  58. data/lib/rudy/routines/startup.rb +58 -0
  59. data/lib/rudy/scm/svn.rb +1 -1
  60. data/lib/rudy/utils.rb +322 -4
  61. data/lib/storable.rb +26 -17
  62. data/lib/sysinfo.rb +274 -0
  63. data/lib/tryouts.rb +6 -13
  64. data/rudy.gemspec +128 -42
  65. data/support/randomize-root-password +45 -0
  66. data/support/rudy-ec2-startup +9 -9
  67. data/support/update-ec2-ami-tools +20 -0
  68. data/test/05_config/00_setup_test.rb +20 -0
  69. data/test/05_config/30_machines_test.rb +69 -0
  70. data/test/20_sdb/00_setup_test.rb +16 -0
  71. data/test/20_sdb/10_domains_test.rb +115 -0
  72. data/test/25_ec2/00_setup_test.rb +29 -0
  73. data/test/25_ec2/10_keypairs_test.rb +41 -0
  74. data/test/25_ec2/20_groups_test.rb +131 -0
  75. data/test/25_ec2/30_addresses_test.rb +38 -0
  76. data/test/25_ec2/40_volumes_test.rb +49 -0
  77. data/test/25_ec2/50_snapshots_test.rb +74 -0
  78. data/test/26_ec2_instances/00_setup_test.rb +28 -0
  79. data/test/26_ec2_instances/10_instances_test.rb +83 -0
  80. data/test/26_ec2_instances/50_images_test.rb +13 -0
  81. data/test/30_sdb_metadata/00_setup_test.rb +21 -0
  82. data/test/30_sdb_metadata/10_disks_test.rb +109 -0
  83. data/test/30_sdb_metadata/20_backups_test.rb +102 -0
  84. data/test/coverage.txt +51 -0
  85. data/test/helper.rb +36 -0
  86. data/vendor/highline-1.5.1/CHANGELOG +222 -0
  87. data/vendor/highline-1.5.1/INSTALL +35 -0
  88. data/vendor/highline-1.5.1/LICENSE +7 -0
  89. data/vendor/highline-1.5.1/README +63 -0
  90. data/vendor/highline-1.5.1/Rakefile +82 -0
  91. data/vendor/highline-1.5.1/TODO +6 -0
  92. data/vendor/highline-1.5.1/examples/ansi_colors.rb +38 -0
  93. data/vendor/highline-1.5.1/examples/asking_for_arrays.rb +18 -0
  94. data/vendor/highline-1.5.1/examples/basic_usage.rb +75 -0
  95. data/vendor/highline-1.5.1/examples/color_scheme.rb +32 -0
  96. data/vendor/highline-1.5.1/examples/limit.rb +12 -0
  97. data/vendor/highline-1.5.1/examples/menus.rb +65 -0
  98. data/vendor/highline-1.5.1/examples/overwrite.rb +19 -0
  99. data/vendor/highline-1.5.1/examples/page_and_wrap.rb +322 -0
  100. data/vendor/highline-1.5.1/examples/password.rb +7 -0
  101. data/vendor/highline-1.5.1/examples/trapping_eof.rb +22 -0
  102. data/vendor/highline-1.5.1/examples/using_readline.rb +17 -0
  103. data/vendor/highline-1.5.1/lib/highline.rb +758 -0
  104. data/vendor/highline-1.5.1/lib/highline/color_scheme.rb +120 -0
  105. data/vendor/highline-1.5.1/lib/highline/compatibility.rb +17 -0
  106. data/vendor/highline-1.5.1/lib/highline/import.rb +43 -0
  107. data/vendor/highline-1.5.1/lib/highline/menu.rb +395 -0
  108. data/vendor/highline-1.5.1/lib/highline/question.rb +463 -0
  109. data/vendor/highline-1.5.1/lib/highline/system_extensions.rb +193 -0
  110. data/vendor/highline-1.5.1/setup.rb +1360 -0
  111. data/vendor/highline-1.5.1/test/tc_color_scheme.rb +56 -0
  112. data/vendor/highline-1.5.1/test/tc_highline.rb +823 -0
  113. data/vendor/highline-1.5.1/test/tc_import.rb +54 -0
  114. data/vendor/highline-1.5.1/test/tc_menu.rb +429 -0
  115. data/vendor/highline-1.5.1/test/ts_all.rb +15 -0
  116. metadata +141 -38
  117. data/lib/aws_sdb.rb +0 -3
  118. data/lib/aws_sdb/error.rb +0 -42
  119. data/lib/aws_sdb/service.rb +0 -215
  120. data/lib/rudy/aws/simpledb.rb +0 -53
  121. data/lib/rudy/command/addresses.rb +0 -46
  122. data/lib/rudy/command/backups.rb +0 -175
  123. data/lib/rudy/command/base.rb +0 -841
  124. data/lib/rudy/command/deploy.rb +0 -12
  125. data/lib/rudy/command/disks.rb +0 -213
  126. data/lib/rudy/command/environment.rb +0 -73
  127. data/lib/rudy/command/groups.rb +0 -61
  128. data/lib/rudy/command/images.rb +0 -91
  129. data/lib/rudy/command/instances.rb +0 -85
  130. data/lib/rudy/command/machines.rb +0 -161
  131. data/lib/rudy/command/metadata.rb +0 -41
  132. data/lib/rudy/command/release.rb +0 -174
  133. data/lib/rudy/command/volumes.rb +0 -66
  134. data/lib/rudy/metadata/disk.rb +0 -138
  135. data/tryouts/console_tryout.rb +0 -91
@@ -0,0 +1,15 @@
1
+ #!/usr/local/bin/ruby -w
2
+
3
+ # ts_all.rb
4
+ #
5
+ # Created by James Edward Gray II on 2005-04-26.
6
+ # Copyright 2005 Gray Productions. All rights reserved.
7
+ #
8
+ # This is Free Software. See LICENSE and COPYING for details.
9
+
10
+ require "test/unit"
11
+
12
+ require "tc_highline"
13
+ require "tc_import"
14
+ require "tc_menu"
15
+ require "tc_color_scheme"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rudy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-12 00:00:00 -04:00
12
+ date: 2009-04-19 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: "0"
23
+ version: 0.5.5
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: caesars
@@ -30,20 +30,20 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: "0"
33
+ version: 0.5.4
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
- name: net-ssh
36
+ name: rye
37
37
  type: :runtime
38
38
  version_requirement:
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: "0"
43
+ version: 0.5.1
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: net-scp
46
+ name: echoe
47
47
  type: :runtime
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
@@ -53,17 +53,37 @@ dependencies:
53
53
  version: "0"
54
54
  version:
55
55
  - !ruby/object:Gem::Dependency
56
- name: net-ssh-gateway
56
+ name: amazon-ec2
57
57
  type: :runtime
58
58
  version_requirement:
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: "0"
63
+ version: 0.3.8
64
64
  version:
65
65
  - !ruby/object:Gem::Dependency
66
- name: net-ssh-multi
66
+ name: net-ssh
67
+ type: :runtime
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 2.0.9
74
+ version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: net-scp
77
+ type: :runtime
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 1.0.2
84
+ version:
85
+ - !ruby/object:Gem::Dependency
86
+ name: net-ssh-gateway
67
87
  type: :runtime
68
88
  version_requirement:
69
89
  version_requirements: !ruby/object:Gem::Requirement
@@ -73,7 +93,7 @@ dependencies:
73
93
  version: "0"
74
94
  version:
75
95
  - !ruby/object:Gem::Dependency
76
- name: highline
96
+ name: net-ssh-multi
77
97
  type: :runtime
78
98
  version_requirement:
79
99
  version_requirements: !ruby/object:Gem::Requirement
@@ -82,65 +102,148 @@ dependencies:
82
102
  - !ruby/object:Gem::Version
83
103
  version: "0"
84
104
  version:
85
- description: Your friend in staging and deploying with EC2.
105
+ description: "Rudy: Not your grandparent's deployment tool."
86
106
  email: delano@solutious.com
87
107
  executables:
108
+ - ird
88
109
  - rudy
110
+ - rudy-ec2
111
+ - rudy-sdb
112
+ - rudy-s3
89
113
  extensions: []
90
114
 
91
115
  extra_rdoc_files:
92
116
  - README.rdoc
117
+ - Rudyfile
93
118
  - LICENSE.txt
119
+ - CHANGES.txt
94
120
  files:
95
121
  - CHANGES.txt
96
122
  - LICENSE.txt
97
123
  - README.rdoc
98
124
  - Rakefile
125
+ - Rudyfile
126
+ - bin/ird
99
127
  - bin/rudy
100
128
  - bin/rudy-ec2
101
- - lib/aws_sdb.rb
102
- - lib/aws_sdb/error.rb
103
- - lib/aws_sdb/service.rb
129
+ - bin/rudy-s3
130
+ - bin/rudy-sdb
131
+ - lib/annoy.rb
104
132
  - lib/console.rb
133
+ - lib/escape.rb
105
134
  - lib/rudy.rb
106
135
  - lib/rudy/aws.rb
107
136
  - lib/rudy/aws/ec2.rb
137
+ - lib/rudy/aws/ec2/address.rb
138
+ - lib/rudy/aws/ec2/group.rb
139
+ - lib/rudy/aws/ec2/image.rb
140
+ - lib/rudy/aws/ec2/instance.rb
141
+ - lib/rudy/aws/ec2/keypair.rb
142
+ - lib/rudy/aws/ec2/snapshot.rb
143
+ - lib/rudy/aws/ec2/volume.rb
144
+ - lib/rudy/aws/ec2/zone.rb
108
145
  - lib/rudy/aws/s3.rb
109
- - lib/rudy/aws/simpledb.rb
110
- - lib/rudy/command/addresses.rb
111
- - lib/rudy/command/backups.rb
112
- - lib/rudy/command/base.rb
113
- - lib/rudy/command/config.rb
114
- - lib/rudy/command/deploy.rb
115
- - lib/rudy/command/disks.rb
116
- - lib/rudy/command/environment.rb
117
- - lib/rudy/command/groups.rb
118
- - lib/rudy/command/images.rb
119
- - lib/rudy/command/instances.rb
120
- - lib/rudy/command/machines.rb
121
- - lib/rudy/command/metadata.rb
122
- - lib/rudy/command/release.rb
123
- - lib/rudy/command/volumes.rb
146
+ - lib/rudy/aws/sdb.rb
147
+ - lib/rudy/aws/sdb/error.rb
148
+ - lib/rudy/backup.rb
149
+ - lib/rudy/cli.rb
150
+ - lib/rudy/cli/aws/ec2/addresses.rb
151
+ - lib/rudy/cli/aws/ec2/candy.rb
152
+ - lib/rudy/cli/aws/ec2/groups.rb
153
+ - lib/rudy/cli/aws/ec2/images.rb
154
+ - lib/rudy/cli/aws/ec2/instances.rb
155
+ - lib/rudy/cli/aws/ec2/keypairs.rb
156
+ - lib/rudy/cli/aws/ec2/snapshots.rb
157
+ - lib/rudy/cli/aws/ec2/volumes.rb
158
+ - lib/rudy/cli/aws/ec2/zones.rb
159
+ - lib/rudy/cli/aws/s3/buckets.rb
160
+ - lib/rudy/cli/aws/s3/store.rb
161
+ - lib/rudy/cli/aws/sdb/domains.rb
162
+ - lib/rudy/cli/candy.rb
163
+ - lib/rudy/cli/config.rb
164
+ - lib/rudy/cli/disks.rb
165
+ - lib/rudy/cli/machines.rb
166
+ - lib/rudy/cli/routines.rb
124
167
  - lib/rudy/config.rb
168
+ - lib/rudy/config/objects.rb
169
+ - lib/rudy/disks.rb
170
+ - lib/rudy/global.rb
171
+ - lib/rudy/huxtable.rb
172
+ - lib/rudy/machines.rb
125
173
  - lib/rudy/metadata.rb
126
- - lib/rudy/metadata/backup.rb
127
- - lib/rudy/metadata/disk.rb
174
+ - lib/rudy/routines.rb
175
+ - lib/rudy/routines/helpers/diskhelper.rb
176
+ - lib/rudy/routines/helpers/scripthelper.rb
177
+ - lib/rudy/routines/release.rb
178
+ - lib/rudy/routines/shutdown.rb
179
+ - lib/rudy/routines/startup.rb
128
180
  - lib/rudy/scm/svn.rb
129
181
  - lib/rudy/utils.rb
130
182
  - lib/storable.rb
183
+ - lib/sysinfo.rb
131
184
  - lib/tryouts.rb
132
185
  - rudy.gemspec
133
186
  - support/mailtest
187
+ - support/randomize-root-password
134
188
  - support/rudy-ec2-startup
135
- - tryouts/console_tryout.rb
189
+ - support/update-ec2-ami-tools
190
+ - test/05_config/00_setup_test.rb
191
+ - test/05_config/30_machines_test.rb
192
+ - test/20_sdb/00_setup_test.rb
193
+ - test/20_sdb/10_domains_test.rb
194
+ - test/25_ec2/00_setup_test.rb
195
+ - test/25_ec2/10_keypairs_test.rb
196
+ - test/25_ec2/20_groups_test.rb
197
+ - test/25_ec2/30_addresses_test.rb
198
+ - test/25_ec2/40_volumes_test.rb
199
+ - test/25_ec2/50_snapshots_test.rb
200
+ - test/26_ec2_instances/00_setup_test.rb
201
+ - test/26_ec2_instances/10_instances_test.rb
202
+ - test/26_ec2_instances/50_images_test.rb
203
+ - test/30_sdb_metadata/00_setup_test.rb
204
+ - test/30_sdb_metadata/10_disks_test.rb
205
+ - test/30_sdb_metadata/20_backups_test.rb
206
+ - test/coverage.txt
207
+ - test/helper.rb
208
+ - vendor/highline-1.5.1/CHANGELOG
209
+ - vendor/highline-1.5.1/INSTALL
210
+ - vendor/highline-1.5.1/LICENSE
211
+ - vendor/highline-1.5.1/README
212
+ - vendor/highline-1.5.1/Rakefile
213
+ - vendor/highline-1.5.1/TODO
214
+ - vendor/highline-1.5.1/examples/ansi_colors.rb
215
+ - vendor/highline-1.5.1/examples/asking_for_arrays.rb
216
+ - vendor/highline-1.5.1/examples/basic_usage.rb
217
+ - vendor/highline-1.5.1/examples/color_scheme.rb
218
+ - vendor/highline-1.5.1/examples/limit.rb
219
+ - vendor/highline-1.5.1/examples/menus.rb
220
+ - vendor/highline-1.5.1/examples/overwrite.rb
221
+ - vendor/highline-1.5.1/examples/page_and_wrap.rb
222
+ - vendor/highline-1.5.1/examples/password.rb
223
+ - vendor/highline-1.5.1/examples/trapping_eof.rb
224
+ - vendor/highline-1.5.1/examples/using_readline.rb
225
+ - vendor/highline-1.5.1/lib/highline.rb
226
+ - vendor/highline-1.5.1/lib/highline/color_scheme.rb
227
+ - vendor/highline-1.5.1/lib/highline/compatibility.rb
228
+ - vendor/highline-1.5.1/lib/highline/import.rb
229
+ - vendor/highline-1.5.1/lib/highline/menu.rb
230
+ - vendor/highline-1.5.1/lib/highline/question.rb
231
+ - vendor/highline-1.5.1/lib/highline/system_extensions.rb
232
+ - vendor/highline-1.5.1/setup.rb
233
+ - vendor/highline-1.5.1/test/tc_color_scheme.rb
234
+ - vendor/highline-1.5.1/test/tc_highline.rb
235
+ - vendor/highline-1.5.1/test/tc_import.rb
236
+ - vendor/highline-1.5.1/test/tc_menu.rb
237
+ - vendor/highline-1.5.1/test/ts_all.rb
136
238
  has_rdoc: true
137
239
  homepage: http://github.com/solutious/rudy
240
+ licenses: []
241
+
138
242
  post_install_message:
139
243
  rdoc_options:
140
244
  - --line-numbers
141
- - --inline-source
142
245
  - --title
143
- - "Rudy: Your friend in staging and deploying with EC2."
246
+ - "Rudy: Not your grandparent's deployment tool."
144
247
  - --main
145
248
  - README.rdoc
146
249
  require_paths:
@@ -160,9 +263,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
263
  requirements: []
161
264
 
162
265
  rubyforge_project: rudy
163
- rubygems_version: 1.2.0
266
+ rubygems_version: 1.3.2
164
267
  signing_key:
165
- specification_version: 2
166
- summary: Your friend in staging and deploying with EC2.
268
+ specification_version: 3
269
+ summary: "Rudy: Not your grandparent's deployment tool."
167
270
  test_files: []
168
271
 
@@ -1,3 +0,0 @@
1
- require 'aws_sdb/error'
2
- require 'aws_sdb/service'
3
-
@@ -1,42 +0,0 @@
1
- module AwsSdb
2
-
3
- class Error < RuntimeError ; end
4
-
5
- class RequestError < Error
6
- attr_reader :request_id
7
-
8
- def initialize(message, request_id=nil)
9
- super(message)
10
- @request_id = request_id
11
- end
12
- end
13
-
14
- class InvalidDomainNameError < RequestError ; end
15
- class InvalidParameterValueError < RequestError ; end
16
- class InvalidNextTokenError < RequestError ; end
17
- class InvalidNumberPredicatesError < RequestError ; end
18
- class InvalidNumberValueTestsError < RequestError ; end
19
- class InvalidQueryExpressionError < RequestError ; end
20
- class MissingParameterError < RequestError ; end
21
- class NoSuchDomainError < RequestError ; end
22
- class NumberDomainsExceededError < RequestError ; end
23
- class NumberDomainAttributesExceededError < RequestError ; end
24
- class NumberDomainBytesExceededError < RequestError ; end
25
- class NumberItemAttributesExceededError < RequestError ; end
26
- class RequestTimeoutError < RequestError ; end
27
-
28
- class FeatureDeprecatedError < RequestError ; end
29
-
30
- class ConnectionError < Error
31
- attr_reader :response
32
-
33
- def initialize(response)
34
- super(
35
- "#{response.code} \
36
- #{response.message if response.respond_to?(:message)}"
37
- )
38
- @response = response
39
- end
40
- end
41
-
42
- end
@@ -1,215 +0,0 @@
1
- require 'logger'
2
- require 'time'
3
- require 'cgi'
4
- require 'uri'
5
- require 'net/http'
6
- require 'base64'
7
- require 'openssl'
8
- require 'rexml/document'
9
- require 'rexml/xpath'
10
-
11
- module AwsSdb
12
-
13
- class Service
14
- def initialize(options={})
15
- @access_key_id = options[:access_key_id] || ENV['AMAZON_ACCESS_KEY_ID']
16
- @secret_access_key = options[:secret_access_key] || ENV['AMAZON_SECRET_ACCESS_KEY']
17
- @base_url = options[:url] || 'http://sdb.amazonaws.com'
18
- @logger = options[:logger] || Logger.new("aws_sdb.log")
19
- end
20
-
21
- def list_domains(max = nil, token = nil)
22
- params = { 'Action' => 'ListDomains' }
23
- params['NextToken'] =
24
- token unless token.nil? || token.empty?
25
- params['MaxNumberOfDomains'] =
26
- max.to_s unless max.nil? || max.to_i == 0
27
- doc = call(:get, params)
28
- results = []
29
- REXML::XPath.each(doc, '//DomainName/text()') do |domain|
30
- results << domain.to_s
31
- end
32
- return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
33
- end
34
-
35
- def create_domain(domain)
36
- call(:post, { 'Action' => 'CreateDomain', 'DomainName'=> domain.to_s })
37
- nil
38
- end
39
-
40
- def delete_domain(domain)
41
- call(
42
- :delete,
43
- { 'Action' => 'DeleteDomain', 'DomainName' => domain.to_s }
44
- )
45
- nil
46
- end
47
- # <QueryWithAttributesResult><Item><Name>in-c2ffrw</Name><Attribute><Name>code</Name><Value>in-c2ffrw</Value></Attribute><Attribute><Name>date_created</Name><Value>2008-10-31</Value></Attribute></Item><Item>
48
- def query_with_attributes(domain, query, max = nil, token = nil)
49
- params = {
50
- 'Action' => 'QueryWithAttributes',
51
- 'QueryExpression' => query,
52
- 'DomainName' => domain.to_s
53
- }
54
- params['NextToken'] =
55
- token unless token.nil? || token.empty?
56
- params['MaxNumberOfItems'] =
57
- max.to_s unless max.nil? || max.to_i == 0
58
-
59
- doc = call(:get, params)
60
- results = []
61
- REXML::XPath.each(doc, "//Item") do |item|
62
- name = REXML::XPath.first(item, './Name/text()').to_s
63
-
64
-
65
- attributes = {'Name' => name}
66
- REXML::XPath.each(item, "./Attribute") do |attr|
67
- key = REXML::XPath.first(attr, './Name/text()').to_s
68
- value = REXML::XPath.first(attr, './Value/text()').to_s
69
- ( attributes[key] ||= [] ) << value
70
- end
71
- results << attributes
72
- end
73
- return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
74
- end
75
-
76
- # <QueryResult><ItemName>in-c2ffrw</ItemName><ItemName>in-72yagt</ItemName><ItemName>in-52j8gj</ItemName>
77
- def query(domain, query, max = nil, token = nil)
78
- params = {
79
- 'Action' => 'Query',
80
- 'QueryExpression' => query,
81
- 'DomainName' => domain.to_s
82
- }
83
- params['NextToken'] =
84
- token unless token.nil? || token.empty?
85
- params['MaxNumberOfItems'] =
86
- max.to_s unless max.nil? || max.to_i == 0
87
-
88
-
89
- doc = call(:get, params)
90
- results = []
91
- REXML::XPath.each(doc, '//ItemName/text()') do |item|
92
- results << item.to_s
93
- end
94
- return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
95
-
96
- end
97
-
98
- def put_attributes(domain, item, attributes, replace = true)
99
- params = {
100
- 'Action' => 'PutAttributes',
101
- 'DomainName' => domain.to_s,
102
- 'ItemName' => item.to_s
103
- }
104
- count = 0
105
- attributes.each do | key, values |
106
- ([]<<values).flatten.each do |value|
107
- params["Attribute.#{count}.Name"] = key.to_s
108
- params["Attribute.#{count}.Value"] = value.to_s
109
- params["Attribute.#{count}.Replace"] = replace
110
- count += 1
111
- end
112
- end
113
- call(:put, params)
114
- nil
115
- end
116
-
117
- def get_attributes(domain, item)
118
- doc = call(
119
- :get,
120
- {
121
- 'Action' => 'GetAttributes',
122
- 'DomainName' => domain.to_s,
123
- 'ItemName' => item.to_s
124
- }
125
- )
126
- attributes = {}
127
- REXML::XPath.each(doc, "//Attribute") do |attr|
128
- key = REXML::XPath.first(attr, './Name/text()').to_s
129
- value = REXML::XPath.first(attr, './Value/text()').to_s
130
- ( attributes[key] ||= [] ) << value
131
- end
132
- attributes
133
- end
134
-
135
- def delete_attributes(domain, item)
136
- call(
137
- :delete,
138
- {
139
- 'Action' => 'DeleteAttributes',
140
- 'DomainName' => domain.to_s,
141
- 'ItemName' => item.to_s
142
- }
143
- )
144
- nil
145
- end
146
-
147
- def select(select, token = nil)
148
- params = {
149
- 'Action' => 'Select',
150
- 'SelectExpression' => select,
151
- }
152
- params['NextToken'] =
153
- token unless token.nil? || token.empty?
154
-
155
- doc = call(:get, params)
156
- results = []
157
- REXML::XPath.each(doc, "//Item") do |item|
158
- name = REXML::XPath.first(item, './Name/text()').to_s
159
-
160
- attributes = {'Name' => name}
161
- REXML::XPath.each(item, "./Attribute") do |attr|
162
- key = REXML::XPath.first(attr, './Name/text()').to_s
163
- value = REXML::XPath.first(attr, './Value/text()').to_s
164
- ( attributes[key] ||= [] ) << value
165
- end
166
- results << attributes
167
- end
168
- return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
169
- end
170
-
171
- protected
172
-
173
- def call(method, params)
174
- params.merge!( {
175
- 'Version' => '2007-11-07',
176
- 'SignatureVersion' => '1',
177
- 'AWSAccessKeyId' => @access_key_id,
178
- 'Timestamp' => Time.now.gmtime.iso8601
179
- }
180
- )
181
- data = ''
182
- query = []
183
- params.keys.sort_by { |k| k.upcase }.each do |key|
184
- data << "#{key}#{params[key].to_s}"
185
- query << "#{key}=#{CGI::escape(params[key].to_s)}"
186
- end
187
- digest = OpenSSL::Digest::Digest.new('sha1')
188
- hmac = OpenSSL::HMAC.digest(digest, @secret_access_key, data)
189
- signature = Base64.encode64(hmac).strip
190
- query << "Signature=#{CGI::escape(signature)}"
191
- query = query.join('&')
192
- url = "#{@base_url}?#{query}"
193
- uri = URI.parse(url)
194
- @logger.debug("#{url}") if @logger
195
- response =
196
- Net::HTTP.new(uri.host, uri.port).send_request(method, uri.request_uri)
197
- @logger.debug("#{response.code}\n#{response.body}") if @logger
198
- raise(ConnectionError.new(response)) unless (200..400).include?(
199
- response.code.to_i
200
- )
201
- doc = REXML::Document.new(response.body)
202
- error = doc.get_elements('*/Errors/Error')[0]
203
- raise(
204
- Module.class_eval(
205
- "AwsSdb::#{error.get_elements('Code')[0].text}Error"
206
- ).new(
207
- error.get_elements('Message')[0].text,
208
- doc.get_elements('*/RequestID')[0].text
209
- )
210
- ) unless error.nil?
211
- doc
212
- end
213
- end
214
-
215
- end