ruby-aws 1.7.1 → 1.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/History.md +5 -0
  5. data/Manifest.txt +0 -28
  6. data/Rakefile +3 -4
  7. data/lib/ruby-aws.rb +2 -1
  8. data/lib/ruby-aws/version.rb +2 -2
  9. metadata +7 -49
  10. metadata.gz.sig +0 -0
  11. data/lib/amazon/util.rb +0 -10
  12. data/lib/amazon/util/binder.rb +0 -48
  13. data/lib/amazon/util/data_reader.rb +0 -169
  14. data/lib/amazon/util/filter_chain.rb +0 -79
  15. data/lib/amazon/util/hash_nesting.rb +0 -93
  16. data/lib/amazon/util/lazy_results.rb +0 -59
  17. data/lib/amazon/util/logging.rb +0 -23
  18. data/lib/amazon/util/paginated_iterator.rb +0 -70
  19. data/lib/amazon/util/proactive_results.rb +0 -116
  20. data/lib/amazon/util/threadpool.rb +0 -129
  21. data/lib/amazon/util/user_data_store.rb +0 -100
  22. data/lib/amazon/webservices/mechanical_turk.rb +0 -123
  23. data/lib/amazon/webservices/mechanical_turk_requester.rb +0 -285
  24. data/lib/amazon/webservices/mturk/mechanical_turk_error_handler.rb +0 -153
  25. data/lib/amazon/webservices/mturk/question_generator.rb +0 -58
  26. data/lib/amazon/webservices/util/amazon_authentication_relay.rb +0 -72
  27. data/lib/amazon/webservices/util/command_line.rb +0 -157
  28. data/lib/amazon/webservices/util/convenience_wrapper.rb +0 -90
  29. data/lib/amazon/webservices/util/filter_proxy.rb +0 -45
  30. data/lib/amazon/webservices/util/mock_transport.rb +0 -70
  31. data/lib/amazon/webservices/util/request_signer.rb +0 -42
  32. data/lib/amazon/webservices/util/rest_transport.rb +0 -120
  33. data/lib/amazon/webservices/util/soap_simplifier.rb +0 -48
  34. data/lib/amazon/webservices/util/soap_transport.rb +0 -20
  35. data/lib/amazon/webservices/util/soap_transport_header_handler.rb +0 -27
  36. data/lib/amazon/webservices/util/unknown_result_exception.rb +0 -27
  37. data/lib/amazon/webservices/util/validation_exception.rb +0 -55
  38. data/lib/amazon/webservices/util/xml_simplifier.rb +0 -61
@@ -1,93 +0,0 @@
1
- # Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
2
- # License:: Apache License, Version 2.0
3
-
4
- module Amazon
5
- module Util
6
-
7
- module HashNesting
8
-
9
- def nest
10
- result = {}.extend HashNesting
11
- primaryKeys.each { |key| traverse_nest( "#{key}", self[key] ) { |k,v| result[k] = v } }
12
- result
13
- end
14
-
15
- def nest!
16
- keys = primaryKeys
17
- tmp = self.dup
18
- self.keys.each { |k| self.delete k}
19
- keys.each { |key| traverse_nest( "#{key}", tmp[key] ) { |k,v| self[k] = v} }
20
- self
21
- end
22
-
23
- def unnest
24
- result = {}.extend HashNesting
25
- for key in primaryKeys
26
- true_keys = key.to_s.split('.')
27
- resolve_nesting( result, self[key], *true_keys)
28
- end
29
- result
30
- end
31
-
32
- def unnest!
33
- for key in primaryKeys
34
- true_keys = key.to_s.split('.')
35
- value = self[key]
36
- self.delete key
37
- resolve_nesting( self, value, *true_keys)
38
- end
39
- self
40
- end
41
-
42
- private
43
-
44
- # if hash has both string and symbol keys, symbol wins
45
- def primaryKeys
46
- sym_keys = []
47
- str_keys = []
48
- self.keys.each { |k|
49
- case k
50
- when Symbol
51
- sym_keys << k
52
- when String
53
- str_keys << k
54
- else
55
- str_keys << k
56
- end
57
- }
58
- str_keys.delete_if {|k| sym_keys.member? k.to_s.to_sym }
59
- sym_keys + str_keys
60
- end
61
-
62
- def resolve_nesting( dest, data, *keys )
63
- return data if keys.empty?
64
- dest ||= {}
65
- key = keys.shift.to_sym
66
- if keys.first.to_i.to_s == keys.first
67
- # array
68
- index = keys.shift.to_i - 1
69
- raise "illegal index: #{keys.join '.'} index must be >= 1" if index < 0
70
- dest[key] ||= []
71
- dest[key][index] = resolve_nesting( dest[key][index], data, *keys )
72
- else
73
- # hash
74
- dest[key] = resolve_nesting( dest[key], data, *keys )
75
- end
76
- dest
77
- end
78
-
79
- def traverse_nest( namespace, data, &block )
80
- case data.class.to_s
81
- when 'Array'
82
- data.each_with_index { |v,i| traverse_nest( "#{namespace}.#{i+1}", v, &block ) }
83
- when 'Hash'
84
- data.each { |k,v| traverse_nest( "#{namespace}.#{k}", v, &block ) }
85
- else
86
- yield namespace, data.to_s
87
- end
88
- end
89
-
90
- end # HashNesting
91
-
92
- end # Amazon::Util
93
- end # Amazon
@@ -1,59 +0,0 @@
1
- # Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
2
- # License:: Apache License, Version 2.0
3
-
4
- require 'amazon/util/paginated_iterator'
5
-
6
- module Amazon
7
- module Util
8
-
9
- # This class provides a wrapper for lazy evaluation of results.
10
- # The constructor takes a block which should accept a pagenumber
11
- # and return a page worth of results.
12
- class LazyResults
13
- include Enumerable
14
-
15
- def initialize( &feeder )
16
- @iterator = PaginatedIterator.new( &feeder )
17
- flush
18
- end
19
-
20
- # clear the result set and start over again
21
- def flush
22
- @truth = []
23
- @iterator.restart
24
- end
25
-
26
- # iterate over entire result set, loading lazily
27
- def each( &block ) # :yields: item
28
- @truth.each {|e| yield e }
29
- @iterator.each {|e| @truth << e ; yield e }
30
- end
31
-
32
- # index into the array set. if requested index has not been loaded, will load up to that index
33
- def []( index )
34
- feedme while !@iterator.done and index >= @truth.size
35
- return @truth[index]
36
- end
37
-
38
- # fully populate the result set and return a true array
39
- def to_a
40
- feedme until @iterator.done
41
- return @truth.dup
42
- end
43
-
44
- def inspect # :nodoc:
45
- "#<Amazon::Util::LazyResults truth_size=#{@truth.size} page=#{@page} done=#{@done}>"
46
- end
47
-
48
- private
49
-
50
- # fetch the next item from the iterator and stick it in @truth
51
- def feedme
52
- item = @iterator.next
53
- @truth << item unless item.nil?
54
- end
55
-
56
- end # LazyResults
57
-
58
- end # Amazon::Util
59
- end # Amazon
@@ -1,23 +0,0 @@
1
- # Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
2
- # License:: Apache License, Version 2.0
3
-
4
- require 'logger'
5
-
6
- module Amazon
7
- module Util
8
- module Logging
9
-
10
- @@AmazonLogger = nil
11
-
12
- def set_log( filename )
13
- @@AmazonLogger = Logger.new filename
14
- end
15
-
16
- def log( str )
17
- set_log 'ruby-aws.log' if @@AmazonLogger.nil?
18
- @@AmazonLogger.debug str
19
- end
20
-
21
- end
22
- end
23
- end
@@ -1,70 +0,0 @@
1
- # Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
2
- # License:: Apache License, Version 2.0
3
-
4
- module Amazon
5
- module Util
6
-
7
- # PaginatedIterator provides an iterator interface to a paginated
8
- # dataset, buffering the current page. It can be used to stream
9
- # large result sets which would not fit into memory or only need
10
- # to be processed in a single pass.
11
- class PaginatedIterator
12
-
13
- # feeder should be a block that accepts a pagenumber and
14
- # returns an array containing the corresponding page
15
- # worth of results. It should return an empty array when
16
- # there are no more results in the dataset.
17
- def initialize( &feeder )
18
- @feeder = feeder
19
- restart
20
- end
21
-
22
- # resets the iterator to start pulling from the first page
23
- def restart
24
- @buffer = []
25
- @page = 1
26
- @done = false
27
- end
28
-
29
- # returns the next item, or nil if there are no more items
30
- def next
31
- fetchpage if @buffer.empty?
32
- @buffer.shift
33
- end
34
-
35
- # checks if we have another item available
36
- def hasNext
37
- fetchpage if @buffer.empty?
38
- return !@buffer.empty?
39
- end
40
-
41
- # iterates over the remaining items
42
- def each( &block ) # :yields: item
43
- until @done
44
- item = self.next
45
- yield item unless item.nil?
46
- end
47
- end
48
-
49
- attr_reader :done
50
-
51
- private
52
-
53
- def fetchpage
54
- return [] if @done
55
- res = @feeder.call @page
56
- res = [res].flatten - [nil]
57
- if res.nil? or res.empty?
58
- @done = true
59
- return []
60
- else
61
- @page += 1
62
- @buffer += res
63
- return res
64
- end
65
- end
66
-
67
- end # PaginatedIterator
68
-
69
- end # Amazon::Util
70
- end # Amazon
@@ -1,116 +0,0 @@
1
- # Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
2
- # License:: Apache License, Version 2.0
3
-
4
- require 'monitor'
5
- require 'amazon/util/threadpool'
6
-
7
- module Amazon
8
- module Util
9
-
10
- # ProactiveResults is not as lazy as LazyResults
11
- # The constructor takes a block which should accept a pagenumber
12
- # and return a page worth of results.
13
- class ProactiveResults
14
- include Enumerable
15
-
16
- THREADPOOL_SIZE = 3
17
-
18
- def initialize( exception_handler=nil, &feeder )
19
- @feeder = feeder
20
- @eh = exception_handler
21
- @tp = nil
22
- self.flush
23
- end
24
-
25
- # clear the result set and start over again
26
- def flush
27
- @tp.finish unless @tp.nil?
28
- @tp = ThreadPool.new(THREADPOOL_SIZE, @eh)
29
- @done = false
30
- @inflight = [].extend(MonitorMixin)
31
- @current_page = 1
32
- @truth = []
33
- 1.upto(THREADPOOL_SIZE) do |page|
34
- getPage(page)
35
- end
36
- end
37
-
38
- # iterate over entire result set, waiting for
39
- # threads to finish where necessary
40
- def each( &block ) # :yields: item
41
- index = 0
42
- while true
43
- if index >= @truth.size
44
- break if @done
45
- feedme
46
- else
47
- yield @truth[index]
48
- index += 1
49
- end
50
- end
51
- end
52
-
53
- # index into the result set. if we haven't
54
- # loaded enough, will wait until we have
55
- def []( index )
56
- feedme while !@done and index >= @truth.size
57
- return @truth[index]
58
- end
59
-
60
- # wait for the entire results set to be populated,
61
- # then return an array of the results
62
- def to_a
63
- feedme until @done
64
- return @truth.dup
65
- end
66
-
67
- def inspect # :nodoc:
68
- "#<Amazon::Util::ProactiveResults truth_size=#{@truth.size} pending_pages=#{@pending.size}>"
69
- end
70
-
71
- private
72
-
73
- def getPage(num)
74
- @inflight.synchronize do
75
- workitem = @tp.addWork(num) { |n| worker(n) }
76
- @inflight[num] = workitem
77
- end
78
- end
79
-
80
- def worker(page)
81
- res = []
82
- begin
83
- res = @feeder.call( page )
84
- ensure
85
- getPage( page + THREADPOOL_SIZE ) unless (res.nil? || res.empty?)
86
- end
87
- end
88
-
89
- def feedme
90
- return if @done
91
- item = nil
92
- @inflight.synchronize do
93
- if @inflight[@current_page].nil?
94
- raise "This should be the last page! #{@current_page} #{@inflight.inspect}" unless [] == ( @inflight - [nil] )
95
- @done = true
96
- return
97
- end
98
- item = @inflight[@current_page]
99
- @inflight[@current_page] = nil # clear out our references
100
- @current_page += 1
101
- end
102
- res = item.getResult
103
- case res
104
- when Array
105
- @truth += res
106
- when Exception, NilClass
107
- # ignore
108
- else
109
- raise "Unexpected result type: #{res.class}"
110
- end
111
- end
112
-
113
- end
114
-
115
- end # Amazon::Util
116
- end # Amazon
@@ -1,129 +0,0 @@
1
- # Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
2
- # License:: Apache License, Version 2.0
3
-
4
- require 'thread'
5
- require 'set'
6
-
7
- module Amazon
8
- module Util
9
-
10
- # ThreadPool is a generic threadpooling class that enables
11
- # easier multithreaded workflows. Initialize with a thread count,
12
- # then addWork to queue up tasks. You can +sync+ to ensure the current
13
- # workload is complete, or +finish+ to flush the threads when you're done.
14
- class ThreadPool
15
-
16
- # First arg is the thread count. Threads will be created once and wait
17
- # for work ( no performance penalty, since they're waiting on a Queue.
18
- # Second arg (optional) is a proc to be used as an exception handler. If
19
- # this argument is passed in and the thread encounters an uncaught
20
- # exception, the proc will be called with the exception as the only argument.
21
- def initialize( num_threads, exception_handler=nil )
22
- @work = Queue.new
23
- @threads = ThreadGroup.new
24
- num_threads.times do
25
- worker_thread = Thread.new { workerProcess(exception_handler) }
26
- @threads.add worker_thread
27
- end
28
- end
29
-
30
- # add work to the queue
31
- # pass any number of arguments, they will be passed on to the block.
32
- def addWork( *args, &block )
33
- item = WorkItem.new( args, &block )
34
- @work.push( item )
35
- item
36
- end
37
-
38
- # how many worker threads are there?
39
- def threadcount
40
- @threads.list.length
41
- end
42
-
43
- # request thread completion
44
- # No more work will be performed
45
- def noMoreWork
46
- threadcount.times { @work << :Finish }
47
- end
48
-
49
- # request thread completion and wait for them to finish
50
- def finish
51
- noMoreWork
52
- @threads.list.each do |t|
53
- t.join
54
- end
55
- end
56
-
57
- # wait for the currently queued work to finish
58
- # (This freezes up the entire pool, temporarily)
59
- def sync
60
- t = threadcount
61
-
62
- if t < 2
63
- item = addWork { :sync }
64
- return item.getResult
65
- end
66
-
67
- q = Queue.new
68
- items = []
69
-
70
- items << addWork do
71
- q.pop
72
- end
73
-
74
- (t-2).times do |z|
75
- items << addWork(z) do |i|
76
- items[i].getResult
77
- end
78
- end
79
-
80
- addWork do
81
- q.push :sync
82
- end
83
-
84
- items.last.getResult
85
- end
86
-
87
- private
88
-
89
- def workerProcess( exception_handler=nil )
90
- while true
91
- workitem = @work.pop
92
- return if workitem == :Finish
93
- begin
94
- workitem.run
95
- rescue Exception => e
96
- if exception_handler.nil?
97
- print "Worker thread has thrown an exception: "+e.to_s+"\n"
98
- else
99
- exception_handler.call(workitem)
100
- end
101
- end
102
- end
103
- end
104
-
105
- class WorkItem
106
- attr_reader :args, :block
107
- def initialize( args, &block )
108
- @args = args
109
- @block = block
110
- @result = Queue.new
111
- end
112
- def run
113
- res = @block.call( *@args)
114
- @result.push res
115
- rescue Exception => e
116
- @result.push e
117
- raise e
118
- end
119
- def getResult
120
- value = @result.pop
121
- @result = [value]
122
- value
123
- end
124
- end
125
-
126
- end # ThreadPool
127
-
128
- end # Amazon::Util
129
- end # Amazon