rturk 2.0.4 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  mturk.yml
2
2
  *.gem
3
3
  examples/last_hit
4
- pkg
4
+ pkg
5
+ *.sw?
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.4
1
+ 2.0.5
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), 'lib', 'rturk')
data/lib/rturk.rb CHANGED
@@ -3,6 +3,9 @@ module RTurk
3
3
 
4
4
  SANDBOX = 'http://mechanicalturk.sandbox.amazonaws.com/'
5
5
  PRODUCTION = 'http://mechanicalturk.amazonaws.com/'
6
+ API_VERSION = '2008-08-02'
7
+ OLD_API_VERSION = '2006-05-05'
8
+
6
9
  class << self
7
10
  attr_reader :access_key, :secret_key, :host
8
11
 
@@ -11,17 +14,15 @@ module RTurk
11
14
  @secret_key = secret_key
12
15
  @host = opts[:sandbox] ? SANDBOX : PRODUCTION
13
16
  end
14
-
17
+
15
18
  def sandbox?
16
19
  @host == SANDBOX
17
20
  end
18
-
21
+
19
22
  def logger
20
23
  RTurk::Logger.logger
21
24
  end
22
-
23
25
  end
24
-
25
26
  end
26
27
 
27
28
  require 'rturk/utilities'
@@ -1,13 +1,13 @@
1
1
  module RTurk
2
2
 
3
3
  # =The RTurk Hit Adapter
4
- #
4
+ #
5
5
  # Lets us interact with Mechanical Turk without having to know all the operations.
6
6
  #
7
7
  # == Basic usage
8
8
  # @example
9
9
  # require 'rturk'
10
- #
10
+ #
11
11
  # RTurk.setup(YourAWSAccessKeyId, YourAWSAccessKey, :sandbox => true)
12
12
  # hit = RTurk::Hit.create(:title => "Add some tags to a photo") do |hit|
13
13
  # hit.assignments = 2
@@ -15,30 +15,29 @@ module RTurk
15
15
  # hit.reward = 0.05
16
16
  # hit.qualifications.approval_rate, {:gt => 80}
17
17
  # end
18
- #
18
+ #
19
19
  # hit.url #=> 'http://mturk.amazonaws.com/?group_id=12345678'
20
-
21
-
20
+
21
+
22
22
  class Hit
23
23
  include RTurk::XMLUtilities
24
24
 
25
- class << self;
26
-
25
+ class << self
27
26
  def create(*args, &blk)
28
27
  response = RTurk::CreateHIT(*args, &blk)
29
28
  new(response.hit_id, response)
30
29
  end
31
-
30
+
32
31
  def find(id)
33
-
32
+
34
33
  end
35
-
34
+
36
35
  def all_reviewable
37
36
  RTurk.GetReviewableHITs.hit_ids.inject([]) do |arr, hit_id|
38
37
  arr << new(hit_id); arr
39
38
  end
40
39
  end
41
-
40
+
42
41
  def all
43
42
  RTurk.SearchHITs.hits.inject([]) do |arr, hit|
44
43
  arr << new(hit.id, hit); arr;
@@ -53,26 +52,28 @@ module RTurk
53
52
  @id, @source = id, source
54
53
  end
55
54
 
55
+ # memoing
56
56
  def assignments
57
- RTurk::GetAssignmentsForHIT(:hit_id => self.id).assignments.inject([]) do |arr,assignment|
58
- arr << RTurk::Assignment.new(assignment.assignment_id, assignment); arr
59
- end
57
+ @assignments ||=
58
+ RTurk::GetAssignmentsForHIT(:hit_id => self.id).assignments.inject([]) do |arr, assignment|
59
+ arr << RTurk::Assignment.new(assignment.assignment_id, assignment)
60
+ end
60
61
  end
61
-
62
+
62
63
  def details
63
64
  @details ||= RTurk::GetHIT(:hit_id => self.id)
64
65
  end
65
-
66
+
66
67
  def expire!
67
68
  RTurk::ForceExpireHIT(:hit_id => self.id)
68
69
  end
69
-
70
+
70
71
  def dispose!
71
- RTurk::DisposeHIT(:hit_id => self.id)
72
+ RTurk::DisposeHIT(:hit_id => self.id)
72
73
  end
73
-
74
+
74
75
  def disable!
75
- RTurk::DisableHIT(:hit_id => self.id)
76
+ RTurk::DisableHIT(:hit_id => self.id)
76
77
  end
77
78
 
78
79
 
@@ -0,0 +1,23 @@
1
+ module RTurk
2
+ Notification = Struct.new(:Destination, :Transport, :Version, :EventType) do
3
+ extend RTurk::Utilities
4
+
5
+ members.each do |member|
6
+ underscore = underscore(member)
7
+ alias_method underscore, member
8
+ alias_method "#{underscore}=", "#{member}="
9
+ end
10
+
11
+ def to_param_hash
12
+ self.version = RTurk::OLD_API_VERSION # enforce this blindly
13
+
14
+ hash = {}
15
+ missing = []
16
+ each_pair do |k, v|
17
+ raise MissingParameters, "Missing parameter for #{k}" if v.nil?
18
+ hash["Notification.1.#{k}"] = v
19
+ end
20
+ hash
21
+ end
22
+ end
23
+ end
@@ -55,7 +55,7 @@ module RTurk
55
55
  # Override this in your operation if you like
56
56
  RTurk::Response.new(xml)
57
57
  end
58
-
58
+
59
59
  def to_params
60
60
  {}# Override to include extra params
61
61
  end
@@ -0,0 +1,37 @@
1
+ #########################################################################
2
+ # Operation to send email to a group of workers. #
3
+ # #
4
+ # Caveats: #
5
+ # - A message can only be send to a maximum of 100 workers at a time. #
6
+ # - The message length must be 4096 characters or less. #
7
+ # - The subject length must be 200 characters or less. #
8
+ #########################################################################
9
+
10
+ module RTurk
11
+ class NotifyWorkers < Operation
12
+ attr_accessor :worker_ids, :subject, :message_text
13
+ require_params :worker_ids, :subject, :message_text
14
+
15
+ def to_params
16
+ if worker_ids.length > 100
17
+ raise ArgumentError, 'Cannot send a message to more than 100 workers at a time.'
18
+ elsif message_text.length > 4096
19
+ raise ArgumentError, 'Message cannot be longer than 4096 characters.'
20
+ elsif subject.length > 200
21
+ raise ArgumentError, 'Subject cannot be longer than 200 characters.'
22
+ end
23
+
24
+ id_hash = {}
25
+ worker_ids.each_with_index do |worker_id, index|
26
+ id_hash["WorkerId.#{index}"] = worker_id
27
+ end
28
+
29
+ { 'Subject' => self.subject,
30
+ 'MessageText' => self.message_text }.merge(id_hash)
31
+ end
32
+ end
33
+
34
+ def self.NotifyWorkers(*args)
35
+ RTurk::NotifyWorkers.create(*args)
36
+ end
37
+ end
@@ -35,25 +35,30 @@ module RTurk
35
35
  end
36
36
  raise RTurk::MissingParameters, "Parameters: '#{missing_parameters.join(', ')}'" unless missing_parameters.empty?
37
37
  end
38
-
38
+
39
39
  def required_fields
40
40
  [:title, :description, :reward]
41
41
  end
42
-
42
+
43
43
  protected
44
-
45
44
  def map_params
46
- {'Title'=>title,
47
- 'Description' => description,
48
- 'AssignmentDurationInSeconds' => (duration || 86400),
49
- 'Reward.Amount' => reward,
50
- 'Reward.CurrencyCode' => (currency || 'USD'),
51
- 'Keywords' => keywords,
52
- 'AutoApprovalDelayInSeconds' => auto_approval}
45
+ begin
46
+ keyword_string = keywords.join(', ')
47
+ rescue NoMethodError
48
+ keyword_string = keywords.to_s
49
+ end
50
+
51
+ { 'Title'=>title,
52
+ 'Description' => description,
53
+ 'AssignmentDurationInSeconds' => (duration || 86400),
54
+ 'Reward.Amount' => reward,
55
+ 'Reward.CurrencyCode' => (currency || 'USD'),
56
+ 'Keywords' => keyword_string,
57
+ 'AutoApprovalDelayInSeconds' => auto_approval }
53
58
  end
54
59
  end
55
-
60
+
56
61
  def self.RegisterHITType(*args, &blk)
57
62
  RTurk::RegisterHITType.create(*args, &blk)
58
63
  end
59
- end
64
+ end
@@ -0,0 +1,17 @@
1
+ module RTurk
2
+ class SendTestEventNotification < Operation
3
+ PARAMZ = [:notification, :test_event_type]
4
+
5
+ attr_accessor *PARAMZ
6
+ require_params *PARAMZ
7
+
8
+ def to_params
9
+ { :TestEventType => self.test_event_type }.
10
+ merge(self.notification.to_param_hash)
11
+ end
12
+ end
13
+
14
+ def self.SendTestEventNotification(*args)
15
+ RTurk::SendTestEventNotification.create(*args)
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ module RTurk
2
+ class SetHITTypeNotification < Operation
3
+ PARAMZ = [:hit_type_id, :notification, :active]
4
+
5
+ attr_accessor *PARAMZ
6
+ require_params *PARAMZ
7
+
8
+ def to_params
9
+ { :HITTypeId => self.hit_type_id,
10
+ :Active => self.active }.
11
+ merge(self.notification.to_param_hash)
12
+ end
13
+ end
14
+
15
+ def self.SetHITTypeNotification(*args)
16
+ RTurk::SetHITTypeNotification.create(*args)
17
+ end
18
+ end
@@ -20,13 +20,13 @@
20
20
  # </HIT>
21
21
 
22
22
  module RTurk
23
-
23
+
24
24
  class HITParser < RTurk::Parser
25
-
26
- attr_reader :id, :type_id, :status, :title, :created_at, :expires_at, :assignments_duration,
27
- :reward_amount, :max_assignments, :pending_assignments, :available_assignments,
28
- :completed_assignments, :auto_approval_delay
29
-
25
+
26
+ attr_reader :id, :type_id, :status, :title, :created_at, :expires_at, :assignments_duration,
27
+ :reward_amount, :max_assignments, :pending_assignments, :available_assignments,
28
+ :completed_assignments, :auto_approval_delay, :keywords
29
+
30
30
  def initialize(hit_xml)
31
31
  @xml_obj = hit_xml
32
32
  map_content(@xml_obj,
@@ -44,7 +44,7 @@ module RTurk
44
44
  :completed_assignments => 'NumberOfAssignmentsCompleted',
45
45
  :auto_approval_delay => 'AutoApprovalDelayInSeconds')
46
46
  end
47
-
47
+
48
48
  end
49
-
50
- end
49
+
50
+ end
@@ -15,7 +15,7 @@
15
15
  # <Title>Write a twitter update</Title>
16
16
  # <Description>Simply write a twitter update for me</Description>
17
17
  # <Question>&lt;ExternalQuestion xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2006-07-14/ExternalQuestion.xsd"&gt;
18
- # &lt;ExternalURL&gt;http://s3.amazonaws.com/mpercival.com/newtweet.html?id=foo&lt;/ExternalURL&gt;
18
+ # &lt;ExternalURL&gt;http://s3.amazonaws.com/mpercival.com/newtweet.html?id=foo&lt;/ExternalURL&gt;
19
19
  # &lt;FrameHeight&gt;400&lt;/FrameHeight&gt;
20
20
  # &lt;/ExternalQuestion&gt;
21
21
  # </Question>
@@ -43,12 +43,11 @@
43
43
  # </GetHITResponse>
44
44
 
45
45
  module RTurk
46
-
47
46
  class GetHITResponse < Response
48
-
49
47
  attr_reader :hit_id, :type_id, :status, :review_status, :title, :created_at, :expires_at,
50
- :assignments_duration, :reward_amount, :max_assignments, :auto_approval_delay
51
-
48
+ :assignments_duration, :reward_amount, :max_assignments, :auto_approval_delay,
49
+ :keywords
50
+
52
51
  def initialize(response)
53
52
  @raw_xml = response
54
53
  @xml = Nokogiri::XML(@raw_xml)
@@ -56,6 +55,7 @@ module RTurk
56
55
  map_content(@xml.xpath('//HIT'),
57
56
  :hit_id => 'HITId',
58
57
  :type_id => 'HITTypeId',
58
+ :keywords => 'Keywords',
59
59
  :status => 'HITStatus',
60
60
  :review_status => 'HITReviewStatus',
61
61
  :title => 'Title',
@@ -66,8 +66,8 @@ module RTurk
66
66
  :max_assignments => 'MaxAssignments',
67
67
  :auto_approval_delay => 'AutoApprovalDelayInSeconds'
68
68
  )
69
+
70
+ @keywords = @keywords.split(', ') if @keywords
69
71
  end
70
-
71
72
  end
72
-
73
- end
73
+ end
@@ -23,7 +23,7 @@ module RTurk
23
23
  'Service'=>'AWSMechanicalTurkRequester',
24
24
  'AWSAccessKeyId' => credentials.access_key,
25
25
  'Timestamp' => Time.now.iso8601,
26
- 'Version' => '2008-08-02'
26
+ 'Version' => RTurk::API_VERSION
27
27
  }
28
28
 
29
29
  params.merge!(base_params)
data/rturk.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rturk}
8
- s.version = "2.0.4"
8
+ s.version = "2.0.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mark Percival"]
12
- s.date = %q{2009-12-07}
12
+ s.date = %q{2010-01-05}
13
13
  s.email = %q{mark@mpercival.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -114,11 +114,13 @@ Gem::Specification.new do |s|
114
114
  "examples/mturk.sample.yml",
115
115
  "examples/newtweet.html",
116
116
  "examples/review_answer.rb",
117
+ "init.rb",
117
118
  "lib/rturk.rb",
118
119
  "lib/rturk/adapter.rb",
119
120
  "lib/rturk/adapters/assignment.rb",
120
121
  "lib/rturk/adapters/hit.rb",
121
122
  "lib/rturk/adapters/worker.rb",
123
+ "lib/rturk/builders/notification_builder.rb",
122
124
  "lib/rturk/builders/qualification_builder.rb",
123
125
  "lib/rturk/builders/qualifications_builder.rb",
124
126
  "lib/rturk/builders/question_builder.rb",
@@ -137,9 +139,12 @@ Gem::Specification.new do |s|
137
139
  "lib/rturk/operations/get_hit.rb",
138
140
  "lib/rturk/operations/get_reviewable_hits.rb",
139
141
  "lib/rturk/operations/grant_bonus.rb",
142
+ "lib/rturk/operations/notify_workers.rb",
140
143
  "lib/rturk/operations/register_hit_type.rb",
141
144
  "lib/rturk/operations/reject_assignment.rb",
142
145
  "lib/rturk/operations/search_hits.rb",
146
+ "lib/rturk/operations/send_test_event_notification.rb",
147
+ "lib/rturk/operations/set_hit_type_notification.rb",
143
148
  "lib/rturk/operations/unblock_worker.rb",
144
149
  "lib/rturk/parser.rb",
145
150
  "lib/rturk/parsers/answer_parser.rb",
@@ -159,6 +164,7 @@ Gem::Specification.new do |s|
159
164
  "rturk.gemspec",
160
165
  "spec/adapters/assignment_spec.rb",
161
166
  "spec/adapters/hit_spec.rb",
167
+ "spec/builders/notification_builder_spec.rb",
162
168
  "spec/builders/qualification_spec.rb",
163
169
  "spec/builders/qualifications_spec.rb",
164
170
  "spec/builders/question_spec.rb",
@@ -175,6 +181,7 @@ Gem::Specification.new do |s|
175
181
  "spec/fake_responses/get_reviewable_hits.xml",
176
182
  "spec/fake_responses/grant_bonus.xml",
177
183
  "spec/fake_responses/invalid_credentials.xml",
184
+ "spec/fake_responses/notify_workers.xml",
178
185
  "spec/fake_responses/register_hit_type.xml",
179
186
  "spec/fake_responses/reject_assignment.xml",
180
187
  "spec/fake_responses/search_hits.xml",
@@ -191,8 +198,11 @@ Gem::Specification.new do |s|
191
198
  "spec/operations/get_hit_spec.rb",
192
199
  "spec/operations/get_reviewable_hits_spec.rb",
193
200
  "spec/operations/grant_bonus_spec.rb",
201
+ "spec/operations/notify_workers_spec.rb",
194
202
  "spec/operations/register_hit_type_spec.rb",
195
203
  "spec/operations/reject_assignment_spec.rb",
204
+ "spec/operations/send_test_event_notification_spec.rb",
205
+ "spec/operations/set_hit_type_notification_spec.rb",
196
206
  "spec/operations/unblock_worker_spec.rb",
197
207
  "spec/parsers/answer_parser_spec.rb",
198
208
  "spec/parsers/hit_parser_spec.rb",
@@ -211,6 +221,7 @@ Gem::Specification.new do |s|
211
221
  s.test_files = [
212
222
  "spec/adapters/assignment_spec.rb",
213
223
  "spec/adapters/hit_spec.rb",
224
+ "spec/builders/notification_builder_spec.rb",
214
225
  "spec/builders/qualification_spec.rb",
215
226
  "spec/builders/qualifications_spec.rb",
216
227
  "spec/builders/question_spec.rb",
@@ -225,8 +236,11 @@ Gem::Specification.new do |s|
225
236
  "spec/operations/get_hit_spec.rb",
226
237
  "spec/operations/get_reviewable_hits_spec.rb",
227
238
  "spec/operations/grant_bonus_spec.rb",
239
+ "spec/operations/notify_workers_spec.rb",
228
240
  "spec/operations/register_hit_type_spec.rb",
229
241
  "spec/operations/reject_assignment_spec.rb",
242
+ "spec/operations/send_test_event_notification_spec.rb",
243
+ "spec/operations/set_hit_type_notification_spec.rb",
230
244
  "spec/operations/unblock_worker_spec.rb",
231
245
  "spec/parsers/answer_parser_spec.rb",
232
246
  "spec/parsers/hit_parser_spec.rb",
@@ -0,0 +1,34 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
2
+
3
+
4
+ describe RTurk::Notification do
5
+ before(:each) do
6
+ @notification = RTurk::Notification.new
7
+ end
8
+
9
+ it "should not allow extra parameters" do
10
+ lambda {
11
+ @notification[:Bananas]
12
+ }.should raise_error NameError
13
+ end
14
+
15
+ describe "#to_param_hash" do
16
+ it "should not allow for empty params" do
17
+ lambda {
18
+ @notification.to_param_hash
19
+ }.should raise_error RTurk::MissingParameters
20
+ end
21
+
22
+ it "should return a REST-friendly hash" do
23
+ @notification.destination = 'foo'
24
+ @notification.transport = 'bar'
25
+ @notification.event_type = 'mumble'
26
+
27
+ @notification.to_param_hash.should ==
28
+ { "Notification.1.Destination" => 'foo',
29
+ "Notification.1.Transport" => 'bar',
30
+ "Notification.1.Version" => RTurk::OLD_API_VERSION,
31
+ "Notification.1.EventType" => 'mumble' }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,5 @@
1
+ <NotifyWorkersResult>
2
+ <Request>
3
+ <IsValid>True</IsValid>
4
+ </Request>
5
+ </NotifyWorkersResult>
@@ -0,0 +1,61 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
2
+
3
+ describe RTurk::NotifyWorkers do
4
+ before(:each) do
5
+ @lambda = lambda do
6
+ begin
7
+ RTurk::NotifyWorkers(:worker_ids => [*1..100],
8
+ :subject => 'Return of the Mack',
9
+ :message_text => 'Mark Morrison, kicking up the jams in 1996')
10
+ rescue RTurk::InvalidRequest
11
+ end
12
+ end
13
+ end
14
+
15
+ before(:all) do
16
+ aws = YAML.load(File.open(File.join(SPEC_ROOT, 'mturk.yml')))
17
+ RTurk.setup(aws['AWSAccessKeyId'], aws['AWSAccessKey'], :sandbox => true)
18
+ faker('notify_workers', :operation => 'NotifyWorkers')
19
+ end
20
+
21
+ it 'should ensure required params' do
22
+ lambda {
23
+ RTurk::NotifyWorkers(:subject => 'peruvian mcwallball')
24
+ }.should raise_error RTurk::MissingParameters
25
+ end
26
+
27
+ it 'should successfully request the operation' do
28
+ RTurk::Requester.should_receive(:request).once.with(
29
+ hash_including('Operation' => 'NotifyWorkers'))
30
+
31
+ @lambda.call
32
+ end
33
+
34
+ it 'should parse and return the result' do
35
+ @lambda.call.should be_a_kind_of RTurk::Response
36
+ end
37
+
38
+ it 'should not allow more than 100 worker ids' do
39
+ lambda {
40
+ RTurk.NotifyWorkers(:worker_ids => [*1..1000],
41
+ :subject => 'BOOM',
42
+ :message_text => 'SHAKA LAKA')
43
+ }.should raise_error(ArgumentError, 'Cannot send a message to more than 100 workers at a time.')
44
+ end
45
+
46
+ it 'should not allow for a message longer than 4096 characters' do
47
+ lambda {
48
+ RTurk.NotifyWorkers(:worker_ids => [*1..100],
49
+ :subject => 'BOOM',
50
+ :message_text => '!' * 4097)
51
+ }.should raise_error(ArgumentError, 'Message cannot be longer than 4096 characters.')
52
+ end
53
+
54
+ it 'should not allow for a subject longer than 200 characters' do
55
+ lambda {
56
+ RTurk.NotifyWorkers(:worker_ids => [*1..100],
57
+ :subject => '!' * 201,
58
+ :message_text => 'WINK')
59
+ }.should raise_error(ArgumentError, 'Subject cannot be longer than 200 characters.')
60
+ end
61
+ end
@@ -7,16 +7,20 @@ describe RTurk::RegisterHITType do
7
7
  RTurk.setup(aws['AWSAccessKeyId'], aws['AWSAccessKey'], :sandbox => true)
8
8
  FakeWeb.clean_registry
9
9
  faker('register_hit_type', :operation => "RegisterHITType")
10
- end
11
10
 
12
- it "should rerturn a CreateHITResponse after the request" do
13
- response = RTurk::RegisterHITType(:title => "Look at some pictures from 4Chan") do |hit|
14
- hit.description = "foo"
15
- hit.reward = 0.05
16
- hit.qualifications.add(:adult, true)
11
+ @lambda = lambda do
12
+ response = RTurk::RegisterHITType(:title => "Look at some pictures from 4Chan") do |hit|
13
+ hit.description = "foo"
14
+ hit.reward = 0.05
15
+ hit.qualifications.add(:adult, true)
16
+ end
17
17
  end
18
+
19
+ end
20
+
21
+ it "should return a CreateHITResponse after the request" do
22
+ response = @lambda.call
18
23
  response.is_a?(RTurk::RegisterHITTypeResponse).should be_true
19
24
  response.type_id.should == 'KZ3GKTRXBWGYX8WXBW60'
20
25
  end
21
-
22
26
  end
@@ -0,0 +1,42 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
2
+
3
+ describe RTurk::SendTestEventNotification do
4
+ before(:each) do
5
+ @lambda = lambda do
6
+ n = RTurk::Notification.new
7
+ n.transport = 'foo'
8
+ n.destination = 'bar'
9
+ n.event_type = 'baz'
10
+
11
+ begin
12
+ RTurk::SendTestEventNotification(:test_event_type => 'foo',
13
+ :notification => n)
14
+ rescue RTurk::InvalidRequest
15
+ end
16
+ end
17
+ end
18
+
19
+ before(:all) do
20
+ aws = YAML.load(File.open(File.join(SPEC_ROOT, 'mturk.yml')))
21
+ RTurk.setup(aws['AWSAccessKeyId'], aws['AWSAccessKey'], :sandbox => true)
22
+ faker('notify_workers', :operation => 'SendTestEventNotification')
23
+ end
24
+
25
+ it 'should ensure required params' do
26
+ lambda {
27
+ RTurk::SetHITTypeNotification(:subject => 'peruvian mcwallball')
28
+ }.should raise_error RTurk::MissingParameters
29
+ end
30
+
31
+ it 'should successfully request the operation' do
32
+ RTurk::Requester.should_receive(:request).once.with(
33
+ hash_including('Operation' => 'SendTestEventNotification'))
34
+
35
+ @lambda.call
36
+ end
37
+
38
+ it 'should parse and return the result' do
39
+ @lambda.call.should be_a_kind_of RTurk::Response
40
+ end
41
+ end
42
+
@@ -0,0 +1,42 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
2
+
3
+ describe RTurk::SetHITTypeNotification do
4
+ before(:each) do
5
+ @lambda = lambda do
6
+ n = RTurk::Notification.new
7
+ n.transport = 'foo'
8
+ n.destination = 'bar'
9
+ n.event_type = 'baz'
10
+
11
+ begin
12
+ RTurk::SetHITTypeNotification(:hit_type_id => 'foo',
13
+ :notification => n,
14
+ :active => true)
15
+ rescue RTurk::InvalidRequest
16
+ end
17
+ end
18
+ end
19
+
20
+ before(:all) do
21
+ aws = YAML.load(File.open(File.join(SPEC_ROOT, 'mturk.yml')))
22
+ RTurk.setup(aws['AWSAccessKeyId'], aws['AWSAccessKey'], :sandbox => true)
23
+ faker('notify_workers', :operation => 'SetHITTypeNotification')
24
+ end
25
+
26
+ it 'should ensure required params' do
27
+ lambda {
28
+ RTurk::SetHITTypeNotification(:subject => 'peruvian mcwallball')
29
+ }.should raise_error RTurk::MissingParameters
30
+ end
31
+
32
+ it 'should successfully request the operation' do
33
+ RTurk::Requester.should_receive(:request).once.with(
34
+ hash_including('Operation' => 'SetHITTypeNotification'))
35
+
36
+ @lambda.call
37
+ end
38
+
39
+ it 'should parse and return the result' do
40
+ @lambda.call.should be_a_kind_of RTurk::Response
41
+ end
42
+ end
@@ -30,12 +30,10 @@ describe RTurk::HITParser do
30
30
  @hit = RTurk::HITParser.new(@hit_xml.children)
31
31
  end
32
32
 
33
- it "should parse a answer" do
33
+ it "should parse an answer" do
34
34
  @hit.id.should eql('ZZRZPTY4ERDZWJ868JCZ')
35
35
  @hit.type_id.should eql('NYVZTQ1QVKJZXCYZCZVZ')
36
36
  @hit.status.should eql('Assignable')
37
37
  @hit.reward_amount.should eql(5.00)
38
38
  end
39
-
40
-
41
- end
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rturk
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Percival
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-07 00:00:00 -05:00
12
+ date: 2010-01-05 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -121,11 +121,13 @@ files:
121
121
  - examples/mturk.sample.yml
122
122
  - examples/newtweet.html
123
123
  - examples/review_answer.rb
124
+ - init.rb
124
125
  - lib/rturk.rb
125
126
  - lib/rturk/adapter.rb
126
127
  - lib/rturk/adapters/assignment.rb
127
128
  - lib/rturk/adapters/hit.rb
128
129
  - lib/rturk/adapters/worker.rb
130
+ - lib/rturk/builders/notification_builder.rb
129
131
  - lib/rturk/builders/qualification_builder.rb
130
132
  - lib/rturk/builders/qualifications_builder.rb
131
133
  - lib/rturk/builders/question_builder.rb
@@ -144,9 +146,12 @@ files:
144
146
  - lib/rturk/operations/get_hit.rb
145
147
  - lib/rturk/operations/get_reviewable_hits.rb
146
148
  - lib/rturk/operations/grant_bonus.rb
149
+ - lib/rturk/operations/notify_workers.rb
147
150
  - lib/rturk/operations/register_hit_type.rb
148
151
  - lib/rturk/operations/reject_assignment.rb
149
152
  - lib/rturk/operations/search_hits.rb
153
+ - lib/rturk/operations/send_test_event_notification.rb
154
+ - lib/rturk/operations/set_hit_type_notification.rb
150
155
  - lib/rturk/operations/unblock_worker.rb
151
156
  - lib/rturk/parser.rb
152
157
  - lib/rturk/parsers/answer_parser.rb
@@ -166,6 +171,7 @@ files:
166
171
  - rturk.gemspec
167
172
  - spec/adapters/assignment_spec.rb
168
173
  - spec/adapters/hit_spec.rb
174
+ - spec/builders/notification_builder_spec.rb
169
175
  - spec/builders/qualification_spec.rb
170
176
  - spec/builders/qualifications_spec.rb
171
177
  - spec/builders/question_spec.rb
@@ -182,6 +188,7 @@ files:
182
188
  - spec/fake_responses/get_reviewable_hits.xml
183
189
  - spec/fake_responses/grant_bonus.xml
184
190
  - spec/fake_responses/invalid_credentials.xml
191
+ - spec/fake_responses/notify_workers.xml
185
192
  - spec/fake_responses/register_hit_type.xml
186
193
  - spec/fake_responses/reject_assignment.xml
187
194
  - spec/fake_responses/search_hits.xml
@@ -198,8 +205,11 @@ files:
198
205
  - spec/operations/get_hit_spec.rb
199
206
  - spec/operations/get_reviewable_hits_spec.rb
200
207
  - spec/operations/grant_bonus_spec.rb
208
+ - spec/operations/notify_workers_spec.rb
201
209
  - spec/operations/register_hit_type_spec.rb
202
210
  - spec/operations/reject_assignment_spec.rb
211
+ - spec/operations/send_test_event_notification_spec.rb
212
+ - spec/operations/set_hit_type_notification_spec.rb
203
213
  - spec/operations/unblock_worker_spec.rb
204
214
  - spec/parsers/answer_parser_spec.rb
205
215
  - spec/parsers/hit_parser_spec.rb
@@ -240,6 +250,7 @@ summary: Mechanical Turk API Wrapper
240
250
  test_files:
241
251
  - spec/adapters/assignment_spec.rb
242
252
  - spec/adapters/hit_spec.rb
253
+ - spec/builders/notification_builder_spec.rb
243
254
  - spec/builders/qualification_spec.rb
244
255
  - spec/builders/qualifications_spec.rb
245
256
  - spec/builders/question_spec.rb
@@ -254,8 +265,11 @@ test_files:
254
265
  - spec/operations/get_hit_spec.rb
255
266
  - spec/operations/get_reviewable_hits_spec.rb
256
267
  - spec/operations/grant_bonus_spec.rb
268
+ - spec/operations/notify_workers_spec.rb
257
269
  - spec/operations/register_hit_type_spec.rb
258
270
  - spec/operations/reject_assignment_spec.rb
271
+ - spec/operations/send_test_event_notification_spec.rb
272
+ - spec/operations/set_hit_type_notification_spec.rb
259
273
  - spec/operations/unblock_worker_spec.rb
260
274
  - spec/parsers/answer_parser_spec.rb
261
275
  - spec/parsers/hit_parser_spec.rb