rudy 0.4.0 → 0.6.0

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.
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