aws 1.11.2 → 1.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/right_aws.rb +1 -1
- data/lib/sdb/active_sdb.rb +81 -72
- data/lib/sdb/right_sdb_interface.rb +74 -47
- metadata +2 -2
data/lib/right_aws.rb
CHANGED
data/lib/sdb/active_sdb.rb
CHANGED
@@ -33,56 +33,56 @@ module RightAws
|
|
33
33
|
# = RightAws::ActiveSdb -- RightScale SDB interface (alpha release)
|
34
34
|
# The RightAws::ActiveSdb class provides a complete interface to Amazon's Simple
|
35
35
|
# Database Service.
|
36
|
-
#
|
36
|
+
#
|
37
37
|
# ActiveSdb is in alpha and does not load by default with the rest of RightAws. You must use an additional require statement to load the ActiveSdb class. For example:
|
38
|
-
#
|
38
|
+
#
|
39
39
|
# require 'right_aws'
|
40
40
|
# require 'sdb/active_sdb'
|
41
|
-
#
|
42
|
-
# Additionally, the ActiveSdb class requires the 'uuidtools' gem; this gem is not normally required by RightAws and is not installed as a
|
41
|
+
#
|
42
|
+
# Additionally, the ActiveSdb class requires the 'uuidtools' gem; this gem is not normally required by RightAws and is not installed as a
|
43
43
|
# dependency of RightAws.
|
44
44
|
#
|
45
45
|
# Simple ActiveSdb usage example:
|
46
46
|
#
|
47
|
-
# class Client < RightAws::ActiveSdb::Base
|
47
|
+
# class Client < RightAws::ActiveSdb::Base
|
48
48
|
# end
|
49
|
-
#
|
49
|
+
#
|
50
50
|
# # connect to SDB
|
51
51
|
# RightAws::ActiveSdb.establish_connection
|
52
|
-
#
|
52
|
+
#
|
53
53
|
# # create domain
|
54
54
|
# Client.create_domain
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# # create initial DB
|
57
57
|
# Client.create 'name' => 'Bush', 'country' => 'USA', 'gender' => 'male', 'expiration' => '2009', 'post' => 'president'
|
58
|
-
# Client.create 'name' => 'Putin', 'country' => 'Russia', 'gender' => 'male', 'expiration' => '2008', 'post' => 'president'
|
58
|
+
# Client.create 'name' => 'Putin', 'country' => 'Russia', 'gender' => 'male', 'expiration' => '2008', 'post' => 'president'
|
59
59
|
# Client.create 'name' => 'Medvedev', 'country' => 'Russia', 'gender' => 'male', 'expiration' => '2012', 'post' => 'president'
|
60
60
|
# Client.create 'name' => 'Mary', 'country' => 'USA', 'gender' => 'female', 'hobby' => ['patchwork', 'bundle jumping']
|
61
61
|
# Client.create 'name' => 'Mary', 'country' => 'Russia', 'gender' => 'female', 'hobby' => ['flowers', 'cats', 'cooking']
|
62
62
|
# sandy_id = Client.create('name' => 'Sandy', 'country' => 'Russia', 'gender' => 'female', 'hobby' => ['flowers', 'cats', 'cooking']).id
|
63
|
-
#
|
63
|
+
#
|
64
64
|
# # find all Bushes in USA
|
65
65
|
# Client.find(:all, :conditions => ["['name'=?] intersection ['country'=?]",'Bush','USA']).each do |client|
|
66
66
|
# client.reload
|
67
67
|
# puts client.attributes.inspect
|
68
68
|
# end
|
69
|
-
#
|
69
|
+
#
|
70
70
|
# # find all Maries through the world
|
71
71
|
# Client.find_all_by_name_and_gender('Mary','female').each do |mary|
|
72
72
|
# mary.reload
|
73
73
|
# puts "#{mary[:name]}, gender: #{mary[:gender]}, hobbies: #{mary[:hobby].join(',')}"
|
74
74
|
# end
|
75
|
-
#
|
75
|
+
#
|
76
76
|
# # find new russian president
|
77
77
|
# medvedev = Client.find_by_post_and_country_and_expiration('president','Russia','2012')
|
78
78
|
# if medvedev
|
79
79
|
# medvedev.reload
|
80
80
|
# medvedev.save_attributes('age' => '42', 'hobby' => 'Gazprom')
|
81
81
|
# end
|
82
|
-
#
|
82
|
+
#
|
83
83
|
# # retire old president
|
84
84
|
# Client.find_by_name('Putin').delete
|
85
|
-
#
|
85
|
+
#
|
86
86
|
# # Sandy disappointed in 'cooking' and decided to hide her 'gender' and 'country' ()
|
87
87
|
# sandy = Client.find(sandy_id)
|
88
88
|
# sandy.reload
|
@@ -93,7 +93,7 @@ module RightAws
|
|
93
93
|
# Client.delete_domain
|
94
94
|
#
|
95
95
|
class ActiveSdb
|
96
|
-
|
96
|
+
|
97
97
|
module ActiveSdbConnect
|
98
98
|
def connection
|
99
99
|
@connection || raise(ActiveSdbError.new('Connection to SDB is not established'))
|
@@ -124,9 +124,9 @@ module RightAws
|
|
124
124
|
@connection.close_connection unless @connection.nil?
|
125
125
|
end
|
126
126
|
end
|
127
|
-
|
127
|
+
|
128
128
|
class ActiveSdbError < RuntimeError ; end
|
129
|
-
|
129
|
+
|
130
130
|
class << self
|
131
131
|
include ActiveSdbConnect
|
132
132
|
|
@@ -138,49 +138,49 @@ module RightAws
|
|
138
138
|
connection.list_domains[:domains]
|
139
139
|
end
|
140
140
|
|
141
|
-
# Create new domain.
|
141
|
+
# Create new domain.
|
142
142
|
# Raises no errors if the domain already exists.
|
143
|
-
#
|
143
|
+
#
|
144
144
|
# RightAws::ActiveSdb.create_domain('alpha') #=> {:request_id=>"6fc652a0-0000-41d5-91f4-3ed390a3d3b2", :box_usage=>"0.0055590278"}
|
145
145
|
#
|
146
146
|
def create_domain(domain_name)
|
147
147
|
connection.create_domain(domain_name)
|
148
148
|
end
|
149
149
|
|
150
|
-
# Remove domain from SDB.
|
150
|
+
# Remove domain from SDB.
|
151
151
|
# Raises no errors if the domain does not exist.
|
152
|
-
#
|
152
|
+
#
|
153
153
|
# RightAws::ActiveSdb.create_domain('alpha') #=> {:request_id=>"6fc652a0-0000-41c6-91f4-3ed390a3d3b2", :box_usage=>"0.0055590001"}
|
154
154
|
#
|
155
155
|
def delete_domain(domain_name)
|
156
156
|
connection.delete_domain(domain_name)
|
157
157
|
end
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
class Base
|
161
|
-
|
161
|
+
|
162
162
|
class << self
|
163
163
|
include ActiveSdbConnect
|
164
|
-
|
164
|
+
|
165
165
|
# next_token value returned by last find: is useful to continue finding
|
166
166
|
attr_accessor :next_token
|
167
|
-
|
167
|
+
|
168
168
|
# Returns a RightAws::SdbInterface object
|
169
169
|
#
|
170
170
|
# class A < RightAws::ActiveSdb::Base
|
171
171
|
# end
|
172
|
-
#
|
172
|
+
#
|
173
173
|
# class B < RightAws::ActiveSdb::Base
|
174
174
|
# end
|
175
|
-
#
|
175
|
+
#
|
176
176
|
# class C < RightAws::ActiveSdb::Base
|
177
177
|
# end
|
178
178
|
#
|
179
179
|
# RightAws::ActiveSdb.establish_connection 'key_id_1', 'secret_key_1'
|
180
|
-
#
|
180
|
+
#
|
181
181
|
# C.establish_connection 'key_id_2', 'secret_key_2'
|
182
182
|
#
|
183
|
-
# # A and B uses the default connection, C - uses its own
|
183
|
+
# # A and B uses the default connection, C - uses its own
|
184
184
|
# puts A.connection #=> #<RightAws::SdbInterface:0xb76d6d7c>
|
185
185
|
# puts B.connection #=> #<RightAws::SdbInterface:0xb76d6d7c>
|
186
186
|
# puts C.connection #=> #<RightAws::SdbInterface:0xb76d6ca0>
|
@@ -197,7 +197,7 @@ module RightAws
|
|
197
197
|
# class Client < RightAws::ActiveSdb::Base
|
198
198
|
# end
|
199
199
|
# puts Client.domain #=> 'client'
|
200
|
-
#
|
200
|
+
#
|
201
201
|
# # if 'ActiveSupport' is loaded then class name being tableized
|
202
202
|
# require 'activesupport'
|
203
203
|
# class Client < RightAws::ActiveSdb::Base
|
@@ -222,7 +222,7 @@ module RightAws
|
|
222
222
|
end
|
223
223
|
|
224
224
|
# Change the default domain name to user defined.
|
225
|
-
#
|
225
|
+
#
|
226
226
|
# class Client < RightAws::ActiveSdb::Base
|
227
227
|
# set_domain_name :foreign_clients
|
228
228
|
# end
|
@@ -233,7 +233,7 @@ module RightAws
|
|
233
233
|
|
234
234
|
# Create domain at SDB.
|
235
235
|
# Raises no errors if the domain already exists.
|
236
|
-
#
|
236
|
+
#
|
237
237
|
# class Client < RightAws::ActiveSdb::Base
|
238
238
|
# end
|
239
239
|
# Client.create_domain #=> {:request_id=>"6fc652a0-0000-41d5-91f4-3ed390a3d3b2", :box_usage=>"0.0055590278"}
|
@@ -244,7 +244,7 @@ module RightAws
|
|
244
244
|
|
245
245
|
# Remove domain from SDB.
|
246
246
|
# Raises no errors if the domain does not exist.
|
247
|
-
#
|
247
|
+
#
|
248
248
|
# class Client < RightAws::ActiveSdb::Base
|
249
249
|
# end
|
250
250
|
# Client.delete_domain #=> {:request_id=>"e14d90d3-0000-4898-9995-0de28cdda270", :box_usage=>"0.0055590278"}
|
@@ -252,7 +252,7 @@ module RightAws
|
|
252
252
|
def delete_domain
|
253
253
|
connection.delete_domain(domain)
|
254
254
|
end
|
255
|
-
|
255
|
+
|
256
256
|
#
|
257
257
|
# See select(), original find with QUERY syntax is deprecated so now find and select are synonyms.
|
258
258
|
#
|
@@ -314,7 +314,7 @@ module RightAws
|
|
314
314
|
#
|
315
315
|
# Sort oder:
|
316
316
|
# If :order=>'attribute' option is specified then result response (ordered by 'attribute') will contain only items where attribute is defined (is not null).
|
317
|
-
#
|
317
|
+
#
|
318
318
|
# Client.select(:all) # returns all records
|
319
319
|
# Client.select(:all, :order => 'gender') # returns all records ordered by gender where gender attribute exists
|
320
320
|
# Client.select(:all, :order => 'name desc') # returns all records ordered by name in desc order where name attribute exists
|
@@ -323,6 +323,7 @@ module RightAws
|
|
323
323
|
#
|
324
324
|
def select(*args)
|
325
325
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
326
|
+
# puts 'first=' + args.first.to_s
|
326
327
|
case args.first
|
327
328
|
when :all then sql_select(options)
|
328
329
|
when :first then sql_select(options.merge(:limit => 1)).first
|
@@ -448,7 +449,7 @@ module RightAws
|
|
448
449
|
# request items
|
449
450
|
query_result = self.connection.query(domain, query_expression, options[:max_number_of_items], @next_token)
|
450
451
|
@next_token = query_result[:next_token]
|
451
|
-
items = query_result[:items].map do |name|
|
452
|
+
items = query_result[:items].map do |name|
|
452
453
|
new_item = self.new('id' => name)
|
453
454
|
new_item.mark_as_old
|
454
455
|
reload_if_exists(record) if options[:auto_load]
|
@@ -511,7 +512,7 @@ module RightAws
|
|
511
512
|
end
|
512
513
|
end
|
513
514
|
|
514
|
-
# find_by helpers
|
515
|
+
# find_by helpers
|
515
516
|
def find_all_by_(format_str, args, options) # :nodoc:
|
516
517
|
fields = format_str.to_s.sub(/^find_(all_)?by_/,'').split('_and_')
|
517
518
|
conditions = fields.map { |field| "['#{field}'=?]" }.join(' intersection ')
|
@@ -567,12 +568,12 @@ module RightAws
|
|
567
568
|
end
|
568
569
|
|
569
570
|
end
|
570
|
-
|
571
|
+
|
571
572
|
public
|
572
573
|
|
573
574
|
# instance attributes
|
574
|
-
attr_accessor :attributes
|
575
|
-
|
575
|
+
attr_accessor :attributes
|
576
|
+
|
576
577
|
# item name
|
577
578
|
attr_accessor :id
|
578
579
|
|
@@ -583,7 +584,7 @@ module RightAws
|
|
583
584
|
# puts item.inspect #=> #<Client:0xb77a2698 @new_record=true, @attributes={"name"=>["Jon"], "toys"=>["girls", "beer", "pub"]}>
|
584
585
|
# item.save #=> {"name"=>["Jon"], "id"=>"c03edb7e-e45c-11dc-bede-001bfc466dd7", "toys"=>["girls", "beer", "pub"]}
|
585
586
|
# puts item.inspect #=> #<Client:0xb77a2698 @new_record=false, @attributes={"name"=>["Jon"], "id"=>"c03edb7e-e45c-11dc-bede-001bfc466dd7", "toys"=>["girls", "beer", "pub"]}>
|
586
|
-
#
|
587
|
+
#
|
587
588
|
def initialize(attrs={})
|
588
589
|
@attributes = uniq_values(attrs)
|
589
590
|
@new_record = true
|
@@ -592,20 +593,20 @@ module RightAws
|
|
592
593
|
# Create and save new Item instance.
|
593
594
|
# +Attributes+ is a hash: { attribute1 => values1, ..., attributeN => valuesN }.
|
594
595
|
#
|
595
|
-
# item = Client.create('name' => 'Cat', 'toys' => ['Jons socks', 'mice', 'clew'])
|
596
|
+
# item = Client.create('name' => 'Cat', 'toys' => ['Jons socks', 'mice', 'clew'])
|
596
597
|
# puts item.inspect #=> #<Client:0xb77a0a78 @new_record=false, @attributes={"name"=>["Cat"], "id"=>"2937601a-e45d-11dc-a75f-001bfc466dd7", "toys"=>["Jons socks", "mice", "clew"]}>
|
597
|
-
#
|
598
|
+
#
|
598
599
|
def self.create(attributes={})
|
599
600
|
item = self.new(attributes)
|
600
601
|
item.save
|
601
602
|
item
|
602
603
|
end
|
603
|
-
|
604
|
+
|
604
605
|
# Returns an item id. Same as: item['id'] or item.attributes['id']
|
605
606
|
def id
|
606
607
|
@attributes['id']
|
607
608
|
end
|
608
|
-
|
609
|
+
|
609
610
|
# Sets an item id.
|
610
611
|
def id=(id)
|
611
612
|
@attributes['id'] = id.to_s
|
@@ -618,7 +619,7 @@ module RightAws
|
|
618
619
|
def attributes
|
619
620
|
@attributes.dup
|
620
621
|
end
|
621
|
-
|
622
|
+
|
622
623
|
# Allows one to set all the attributes at once by passing in a hash with keys matching the attribute names.
|
623
624
|
# if '+id+' attribute is not set in new attributes has then it being derived from old attributes.
|
624
625
|
#
|
@@ -637,7 +638,7 @@ module RightAws
|
|
637
638
|
self.attributes
|
638
639
|
end
|
639
640
|
|
640
|
-
def connection
|
641
|
+
def connection
|
641
642
|
self.class.connection
|
642
643
|
end
|
643
644
|
|
@@ -645,9 +646,9 @@ module RightAws
|
|
645
646
|
def domain
|
646
647
|
self.class.domain
|
647
648
|
end
|
648
|
-
|
649
|
+
|
649
650
|
# Returns the values of the attribute identified by +attribute+.
|
650
|
-
#
|
651
|
+
#
|
651
652
|
# puts item['Cat'].inspect #=> ["Jons socks", "clew", "mice"]
|
652
653
|
#
|
653
654
|
def [](attribute)
|
@@ -655,7 +656,7 @@ module RightAws
|
|
655
656
|
end
|
656
657
|
|
657
658
|
# Updates the attribute identified by +attribute+ with the specified +values+.
|
658
|
-
#
|
659
|
+
#
|
659
660
|
# puts item['Cat'].inspect #=> ["Jons socks", "clew", "mice"]
|
660
661
|
# item['Cat'] = ["Whiskas", "chicken"]
|
661
662
|
# puts item['Cat'].inspect #=> ["Whiskas", "chicken"]
|
@@ -666,10 +667,10 @@ module RightAws
|
|
666
667
|
end
|
667
668
|
|
668
669
|
# Reload attributes from SDB. Replaces in-memory attributes.
|
669
|
-
#
|
670
|
+
#
|
670
671
|
# item = Client.find_by_name('Cat') #=> #<Client:0xb77d0d40 @attributes={"id"=>"2937601a-e45d-11dc-a75f-001bfc466dd7"}, @new_record=false>
|
671
672
|
# item.reload #=> #<Client:0xb77d0d40 @attributes={"id"=>"2937601a-e45d-11dc-a75f-001bfc466dd7", "name"=>["Cat"], "toys"=>["Jons socks", "clew", "mice"]}, @new_record=false>
|
672
|
-
#
|
673
|
+
#
|
673
674
|
def reload
|
674
675
|
raise_on_id_absence
|
675
676
|
old_id = id
|
@@ -686,10 +687,10 @@ module RightAws
|
|
686
687
|
# Reload a set of attributes from SDB. Adds the loaded list to in-memory data.
|
687
688
|
# +attrs_list+ is an array or comma separated list of attributes names.
|
688
689
|
# Returns a hash of loaded attributes.
|
689
|
-
#
|
690
|
+
#
|
690
691
|
# This is not the best method to get a bunch of attributes because
|
691
692
|
# a web service call is being performed for every attribute.
|
692
|
-
#
|
693
|
+
#
|
693
694
|
# item = Client.find_by_name('Cat')
|
694
695
|
# item.reload_attributes('toys', 'name') #=> {"name"=>["Cat"], "toys"=>["Jons socks", "clew", "mice"]}
|
695
696
|
#
|
@@ -713,7 +714,7 @@ module RightAws
|
|
713
714
|
|
714
715
|
# Stores in-memory attributes to SDB.
|
715
716
|
# Adds the attributes values to already stored at SDB.
|
716
|
-
# Returns a hash of stored attributes.
|
717
|
+
# Returns a hash of stored attributes.
|
717
718
|
#
|
718
719
|
# sandy = Client.new(:name => 'Sandy') #=> #<Client:0xb775a7a8 @attributes={"name"=>["Sandy"]}, @new_record=true>
|
719
720
|
# sandy['toys'] = 'boys'
|
@@ -763,8 +764,8 @@ module RightAws
|
|
763
764
|
|
764
765
|
# Store in-memory attributes to SDB.
|
765
766
|
# Replaces the attributes values already stored at SDB by in-memory data.
|
766
|
-
# Returns a hash of stored attributes.
|
767
|
-
#
|
767
|
+
# Returns a hash of stored attributes.
|
768
|
+
#
|
768
769
|
# sandy = Client.new(:name => 'Sandy') #=> #<Client:0xb775a7a8 @attributes={"name"=>["Sandy"]}, @new_record=true>
|
769
770
|
# sandy['toys'] = 'boys'
|
770
771
|
# sandy.put
|
@@ -777,13 +778,21 @@ module RightAws
|
|
777
778
|
#
|
778
779
|
# compare to +put+ method
|
779
780
|
def save
|
780
|
-
|
781
|
-
prepare_for_update
|
781
|
+
pre_save2
|
782
782
|
connection.put_attributes(domain, id, @attributes, :replace)
|
783
|
-
|
783
|
+
apres_save2
|
784
784
|
@attributes
|
785
785
|
end
|
786
786
|
|
787
|
+
def pre_save2
|
788
|
+
@attributes = uniq_values(@attributes)
|
789
|
+
prepare_for_update
|
790
|
+
end
|
791
|
+
|
792
|
+
def apres_save2
|
793
|
+
mark_as_old
|
794
|
+
end
|
795
|
+
|
787
796
|
# Replaces the attributes at SDB by the given values.
|
788
797
|
# +Attrs+ is a hash: { attribute1 => values1, ..., attributeN => valuesN }.
|
789
798
|
# The other in-memory attributes are not being saved.
|
@@ -808,7 +817,7 @@ module RightAws
|
|
808
817
|
# Remove specified values from corresponding attributes.
|
809
818
|
# +attrs+ is a hash: { attribute1 => values1, ..., attributeN => valuesN }.
|
810
819
|
#
|
811
|
-
# sandy = Client.find_by_name 'Sandy'
|
820
|
+
# sandy = Client.find_by_name 'Sandy'
|
812
821
|
# sandy.reload
|
813
822
|
# puts sandy.inspect #=> #<Client:0xb77b48fc @new_record=false, @attributes={"name"=>["Sandy"], "id"=>"b2832ce2-e461-11dc-b13c-001bfc466dd7", "toys"=>["boys", "kids", "patchwork"]}>
|
814
823
|
# puts sandy.delete_values('toys' => 'patchwork') #=> { 'toys' => ['patchwork'] }
|
@@ -836,8 +845,8 @@ module RightAws
|
|
836
845
|
# Removes specified attributes from the item.
|
837
846
|
# +attrs_list+ is an array or comma separated list of attributes names.
|
838
847
|
# Returns the list of deleted attributes.
|
839
|
-
#
|
840
|
-
# sandy = Client.find_by_name 'Sandy'
|
848
|
+
#
|
849
|
+
# sandy = Client.find_by_name 'Sandy'
|
841
850
|
# sandy.reload
|
842
851
|
# puts sandy.inspect #=> #<Client:0xb7761d28 @new_record=false, @attributes={"name"=>["Sandy"], "id"=>"b2832ce2-e461-11dc-b13c-001bfc466dd7", "toys"=>["boys", "kids", "patchwork"}>
|
843
852
|
# puts sandy.delete_attributes('toys') #=> ['toys']
|
@@ -855,14 +864,14 @@ module RightAws
|
|
855
864
|
end
|
856
865
|
|
857
866
|
# Delete the Item entirely from SDB.
|
858
|
-
#
|
859
|
-
# sandy = Client.find_by_name 'Sandy'
|
867
|
+
#
|
868
|
+
# sandy = Client.find_by_name 'Sandy'
|
860
869
|
# sandy.reload
|
861
870
|
# sandy.inspect #=> #<Client:0xb7761d28 @new_record=false, @attributes={"name"=>["Sandy"], "id"=>"b2832ce2-e461-11dc-b13c-001bfc466dd7", "toys"=>["boys", "kids", "patchwork"}>
|
862
871
|
# puts sandy.delete
|
863
|
-
# sandy.reload
|
872
|
+
# sandy.reload
|
864
873
|
# puts sandy.inspect #=> #<Client:0xb7761d28 @attributes={}, @new_record=false>
|
865
|
-
#
|
874
|
+
#
|
866
875
|
def delete
|
867
876
|
raise_on_id_absence
|
868
877
|
connection.delete_attributes(domain, id)
|
@@ -873,7 +882,7 @@ module RightAws
|
|
873
882
|
@id
|
874
883
|
end
|
875
884
|
|
876
|
-
# Returns true if this object hasn‘t been saved yet.
|
885
|
+
# Returns true if this object hasn‘t been saved yet.
|
877
886
|
def new_record?
|
878
887
|
@new_record
|
879
888
|
end
|
@@ -882,16 +891,16 @@ module RightAws
|
|
882
891
|
@new_record = false
|
883
892
|
end
|
884
893
|
|
885
|
-
private
|
886
|
-
|
894
|
+
private
|
895
|
+
|
887
896
|
def raise_on_id_absence
|
888
897
|
raise ActiveSdbError.new('Unknown record id') unless id
|
889
898
|
end
|
890
|
-
|
899
|
+
|
891
900
|
def prepare_for_update
|
892
901
|
@attributes['id'] = self.class.generate_id if @attributes['id'].blank?
|
893
902
|
end
|
894
|
-
|
903
|
+
|
895
904
|
def uniq_values(attributes=nil) # :nodoc:
|
896
905
|
attrs = {}
|
897
906
|
attributes.each do |attribute, values|
|
@@ -49,13 +49,13 @@ module RightAws
|
|
49
49
|
# :protocol => 'https' # Amazon service protocol: 'http' or 'https'(default)
|
50
50
|
# :signature_version => '0' # The signature version : '0' or '1'(default)
|
51
51
|
# :multi_thread => true|false # Multi-threaded (connection per each thread): true or false(default)
|
52
|
-
# :logger => Logger Object # Logger instance: logs to STDOUT if omitted
|
52
|
+
# :logger => Logger Object # Logger instance: logs to STDOUT if omitted
|
53
53
|
# :nil_representation => 'mynil'} # interpret Ruby nil as this string value; i.e. use this string in SDB to represent Ruby nils (default is the string 'nil')
|
54
|
-
#
|
54
|
+
#
|
55
55
|
# Example:
|
56
|
-
#
|
56
|
+
#
|
57
57
|
# sdb = RightAws::SdbInterface.new('1E3GDYEOGFJPIT7XXXXXX','hgTHt68JY07JKUY08ftHYtERkjgtfERn57XXXXXX', {:multi_thread => true, :logger => Logger.new('/tmp/x.log')}) #=> #<RightSdb:0xa6b8c27c>
|
58
|
-
#
|
58
|
+
#
|
59
59
|
# see: http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/
|
60
60
|
#
|
61
61
|
def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
|
@@ -136,24 +136,24 @@ module RightAws
|
|
136
136
|
|
137
137
|
# Prepare attributes for putting.
|
138
138
|
# (used by put_attributes)
|
139
|
-
def pack_attributes(attributes, replace = false) #:nodoc:
|
139
|
+
def pack_attributes(attributes, replace = false, key_prefix = "") #:nodoc:
|
140
140
|
result = {}
|
141
141
|
if attributes
|
142
142
|
idx = 0
|
143
143
|
skip_values = attributes.is_a?(Array)
|
144
144
|
attributes.each do |attribute, values|
|
145
145
|
# set replacement attribute
|
146
|
-
result["Attribute.#{idx}.Replace"] = 'true' if replace
|
146
|
+
result["#{key_prefix}Attribute.#{idx}.Replace"] = 'true' if replace
|
147
147
|
# pack Name/Value
|
148
148
|
unless values.nil?
|
149
149
|
Array(values).each do |value|
|
150
|
-
result["Attribute.#{idx}.Name"] = attribute
|
151
|
-
result["Attribute.#{idx}.Value"] = ruby_to_sdb(value) unless skip_values
|
150
|
+
result["#{key_prefix}Attribute.#{idx}.Name"] = attribute
|
151
|
+
result["#{key_prefix}Attribute.#{idx}.Value"] = ruby_to_sdb(value) unless skip_values
|
152
152
|
idx += 1
|
153
153
|
end
|
154
154
|
else
|
155
|
-
result["Attribute.#{idx}.Name"] = attribute
|
156
|
-
result["Attribute.#{idx}.Value"] = ruby_to_sdb(nil) unless skip_values
|
155
|
+
result["#{key_prefix}Attribute.#{idx}.Name"] = attribute
|
156
|
+
result["#{key_prefix}Attribute.#{idx}.Value"] = ruby_to_sdb(nil) unless skip_values
|
157
157
|
idx += 1
|
158
158
|
end
|
159
159
|
end
|
@@ -161,9 +161,10 @@ module RightAws
|
|
161
161
|
result
|
162
162
|
end
|
163
163
|
|
164
|
-
|
164
|
+
|
165
|
+
# Use this helper to manually escape the fields in the query expressions.
|
165
166
|
# To escape the single quotes and backslashes and to wrap the string into the single quotes.
|
166
|
-
#
|
167
|
+
#
|
167
168
|
# see: http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/SDB_API.html
|
168
169
|
#
|
169
170
|
def escape(value)
|
@@ -220,23 +221,23 @@ module RightAws
|
|
220
221
|
end
|
221
222
|
|
222
223
|
# Retrieve a list of SDB domains from Amazon.
|
223
|
-
#
|
224
|
+
#
|
224
225
|
# Returns a hash:
|
225
226
|
# { :domains => [domain1, ..., domainN],
|
226
227
|
# :next_token => string || nil,
|
227
228
|
# :box_usage => string,
|
228
229
|
# :request_id => string }
|
229
|
-
#
|
230
|
+
#
|
230
231
|
# Example:
|
231
|
-
#
|
232
|
+
#
|
232
233
|
# sdb = RightAws::SdbInterface.new
|
233
234
|
# sdb.list_domains #=> { :box_usage => "0.0000071759",
|
234
235
|
# :request_id => "976709f9-0111-2345-92cb-9ce90acd0982",
|
235
236
|
# :domains => ["toys", "dolls"]}
|
236
|
-
#
|
237
|
+
#
|
237
238
|
# If a block is given, this method yields to it. If the block returns true, list_domains will continue looping the request. If the block returns false,
|
238
239
|
# list_domains will end.
|
239
|
-
#
|
240
|
+
#
|
240
241
|
# sdb.list_domains(10) do |result| # list by 10 domains per iteration
|
241
242
|
# puts result.inspect
|
242
243
|
# true
|
@@ -253,7 +254,7 @@ module RightAws
|
|
253
254
|
return result unless block_given?
|
254
255
|
# loop if block if given
|
255
256
|
begin
|
256
|
-
# the block must return true if it wanna continue
|
257
|
+
# the block must return true if it wanna continue
|
257
258
|
break unless yield(result) && result[:next_token]
|
258
259
|
# make new request
|
259
260
|
request_params['NextToken'] = result[:next_token]
|
@@ -265,12 +266,12 @@ module RightAws
|
|
265
266
|
end
|
266
267
|
|
267
268
|
# Create new SDB domain at Amazon.
|
268
|
-
#
|
269
|
+
#
|
269
270
|
# Returns a hash: { :box_usage, :request_id } on success or an exception on error.
|
270
271
|
# (Amazon raises no errors if the domain already exists).
|
271
|
-
#
|
272
|
+
#
|
272
273
|
# Example:
|
273
|
-
#
|
274
|
+
#
|
274
275
|
# sdb = RightAws::SdbInterface.new
|
275
276
|
# sdb.create_domain('toys') # => { :box_usage => "0.0000071759",
|
276
277
|
# :request_id => "976709f9-0111-2345-92cb-9ce90acd0982" }
|
@@ -285,12 +286,12 @@ module RightAws
|
|
285
286
|
end
|
286
287
|
|
287
288
|
# Delete SDB domain at Amazon.
|
288
|
-
#
|
289
|
+
#
|
289
290
|
# Returns a hash: { :box_usage, :request_id } on success or an exception on error.
|
290
291
|
# (Amazon raises no errors if the domain does not exist).
|
291
|
-
#
|
292
|
+
#
|
292
293
|
# Example:
|
293
|
-
#
|
294
|
+
#
|
294
295
|
# sdb = RightAws::SdbInterface.new
|
295
296
|
# sdb.delete_domain('toys') # => { :box_usage => "0.0000071759",
|
296
297
|
# :request_id => "976709f9-0111-2345-92cb-9ce90acd0982" }
|
@@ -306,7 +307,7 @@ module RightAws
|
|
306
307
|
end
|
307
308
|
|
308
309
|
# Add/Replace item attributes.
|
309
|
-
#
|
310
|
+
#
|
310
311
|
# Params:
|
311
312
|
# domain_name = DomainName
|
312
313
|
# item_name = ItemName
|
@@ -316,28 +317,28 @@ module RightAws
|
|
316
317
|
# 'nameZ' => [valueZ1,..., valueZN]
|
317
318
|
# }
|
318
319
|
# replace = :replace | any other value to skip replacement
|
319
|
-
#
|
320
|
-
# Returns a hash: { :box_usage, :request_id } on success or an exception on error.
|
320
|
+
#
|
321
|
+
# Returns a hash: { :box_usage, :request_id } on success or an exception on error.
|
321
322
|
# (Amazon raises no errors if the attribute was not overridden, as when the :replace param is unset).
|
322
|
-
#
|
323
|
+
#
|
323
324
|
# Example:
|
324
|
-
#
|
325
|
+
#
|
325
326
|
# sdb = RightAws::SdbInterface.new
|
326
327
|
# sdb.create_domain 'family'
|
327
|
-
#
|
328
|
+
#
|
328
329
|
# attributes = {}
|
329
330
|
# # create attributes for Jon and Silvia
|
330
331
|
# attributes['Jon'] = %w{ car beer }
|
331
|
-
# attributes['Silvia'] = %w{ beetle rolling_pin kids }
|
332
|
+
# attributes['Silvia'] = %w{ beetle rolling_pin kids }
|
332
333
|
# sdb.put_attributes 'family', 'toys', attributes #=> ok
|
333
334
|
# # now: Jon=>[car, beer], Silvia=>[beetle, rolling_pin, kids]
|
334
|
-
#
|
335
|
+
#
|
335
336
|
# # add attributes to Jon
|
336
337
|
# attributes.delete('Silvia')
|
337
338
|
# attributes['Jon'] = %w{ girls pub }
|
338
339
|
# sdb.put_attributes 'family', 'toys', attributes #=> ok
|
339
340
|
# # now: Jon=>[car, beer, girls, pub], Silvia=>[beetle, rolling_pin, kids]
|
340
|
-
#
|
341
|
+
#
|
341
342
|
# # replace attributes for Jon and add to a cat (the cat had no attributes before)
|
342
343
|
# attributes['Jon'] = %w{ vacuum_cleaner hammer spade }
|
343
344
|
# attributes['cat'] = %w{ mouse clew Jons_socks }
|
@@ -355,15 +356,32 @@ module RightAws
|
|
355
356
|
on_exception
|
356
357
|
end
|
357
358
|
|
359
|
+
#
|
360
|
+
# items is an array of RightAws::SdbInterface::Item.new(o.id, o.attributes, true)
|
361
|
+
def batch_put_attributes(domain_name, items)
|
362
|
+
params = { 'DomainName' => domain_name }
|
363
|
+
i = 0
|
364
|
+
items.each do |item|
|
365
|
+
prefix = "Item." + i.to_s + "."
|
366
|
+
params[prefix + "ItemName"] = item.item_name
|
367
|
+
params.merge!(pack_attributes(item.attributes, item.replace, prefix))
|
368
|
+
i += 1
|
369
|
+
end
|
370
|
+
link = generate_request("BatchPutAttributes", params)
|
371
|
+
request_info( link, QSdbSimpleParser.new )
|
372
|
+
rescue Exception
|
373
|
+
on_exception
|
374
|
+
end
|
375
|
+
|
358
376
|
# Retrieve SDB item's attribute(s).
|
359
|
-
#
|
377
|
+
#
|
360
378
|
# Returns a hash:
|
361
379
|
# { :box_usage => string,
|
362
380
|
# :request_id => string,
|
363
381
|
# :attributes => { 'nameA' => [valueA1,..., valueAN],
|
364
382
|
# ... ,
|
365
383
|
# 'nameZ' => [valueZ1,..., valueZN] } }
|
366
|
-
#
|
384
|
+
#
|
367
385
|
# Example:
|
368
386
|
# # request all attributes
|
369
387
|
# sdb.get_attributes('family', 'toys') # => { :attributes => {"cat" => ["clew", "Jons_socks", "mouse"] },
|
@@ -371,7 +389,7 @@ module RightAws
|
|
371
389
|
# "Jon" => ["vacuum_cleaner", "hammer", "spade"]},
|
372
390
|
# :box_usage => "0.0000093222",
|
373
391
|
# :request_id => "81273d21-000-1111-b3f9-512d91d29ac8" }
|
374
|
-
#
|
392
|
+
#
|
375
393
|
# # request cat's attributes only
|
376
394
|
# sdb.get_attributes('family', 'toys', 'cat') # => { :attributes => {"cat" => ["clew", "Jons_socks", "mouse"] },
|
377
395
|
# :box_usage => "0.0000093222",
|
@@ -400,13 +418,13 @@ module RightAws
|
|
400
418
|
#
|
401
419
|
# # delete the all the values from attributes (i.e. delete the attributes)
|
402
420
|
# sdb.delete_attributes 'family', 'toys', { 'Jon' => [], 'cat' => [] }
|
403
|
-
# # or
|
421
|
+
# # or
|
404
422
|
# sdb.delete_attributes 'family', 'toys', [ 'Jon', 'cat' ]
|
405
423
|
#
|
406
424
|
# # delete all the attributes from item 'toys' (i.e. delete the item)
|
407
425
|
# sdb.delete_attributes 'family', 'toys'
|
408
|
-
#
|
409
|
-
# see http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/SDB_API_DeleteAttributes.html
|
426
|
+
#
|
427
|
+
# see http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/SDB_API_DeleteAttributes.html
|
410
428
|
#
|
411
429
|
def delete_attributes(domain_name, item_name, attributes = nil)
|
412
430
|
params = { 'DomainName' => domain_name,
|
@@ -421,29 +439,29 @@ module RightAws
|
|
421
439
|
# QUERY:
|
422
440
|
|
423
441
|
# Perform a query on SDB.
|
424
|
-
#
|
442
|
+
#
|
425
443
|
# Returns a hash:
|
426
444
|
# { :box_usage => string,
|
427
445
|
# :request_id => string,
|
428
446
|
# :next_token => string,
|
429
447
|
# :items => [ItemName1,..., ItemNameN] }
|
430
|
-
#
|
448
|
+
#
|
431
449
|
# Example:
|
432
|
-
#
|
450
|
+
#
|
433
451
|
# query = "['cat' = 'clew']"
|
434
452
|
# sdb.query('family', query) #=> hash of data
|
435
453
|
# sdb.query('family', query, 10) #=> hash of data with max of 10 items
|
436
|
-
#
|
454
|
+
#
|
437
455
|
# If a block is given, query will iteratively yield results to it as long as the block continues to return true.
|
438
|
-
#
|
439
|
-
# # List 10 items per iteration. Don't
|
456
|
+
#
|
457
|
+
# # List 10 items per iteration. Don't
|
440
458
|
# # forget to escape single quotes and backslashes and wrap all the items in single quotes.
|
441
459
|
# query = "['cat'='clew'] union ['dog'='Jon\\'s boot']"
|
442
460
|
# sdb.query('family', query, 10) do |result|
|
443
461
|
# puts result.inspect
|
444
462
|
# true
|
445
463
|
# end
|
446
|
-
#
|
464
|
+
#
|
447
465
|
# # Same query using automatic escaping...to use the auto escape, pass the query and its params as an array:
|
448
466
|
# query = [ "['cat'=?] union ['dog'=?]", "clew", "Jon's boot" ]
|
449
467
|
# sdb.query('family', query)
|
@@ -468,7 +486,7 @@ module RightAws
|
|
468
486
|
return result unless block_given?
|
469
487
|
# loop if block if given
|
470
488
|
begin
|
471
|
-
# the block must return true if it wanna continue
|
489
|
+
# the block must return true if it wanna continue
|
472
490
|
break unless yield(result) && result[:next_token]
|
473
491
|
# make new request
|
474
492
|
request_params['NextToken'] = result[:next_token]
|
@@ -610,6 +628,15 @@ module RightAws
|
|
610
628
|
on_exception
|
611
629
|
end
|
612
630
|
|
631
|
+
class Item
|
632
|
+
attr_accessor :item_name, :attributes, :replace
|
633
|
+
def initialize(item_name, attributes, replace = false)
|
634
|
+
@item_name = item_name
|
635
|
+
@attributes = attributes
|
636
|
+
@replace = replace
|
637
|
+
end
|
638
|
+
end
|
639
|
+
|
613
640
|
#-----------------------------------------------------------------
|
614
641
|
# PARSERS:
|
615
642
|
#-----------------------------------------------------------------
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.11.
|
4
|
+
version: 1.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis Reeder
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-05-
|
12
|
+
date: 2009-05-21 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|