rturk 1.0.5 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitmodules +3 -0
- data/.yardoc +0 -0
- data/README.markdown +49 -29
- data/Rakefile +53 -0
- data/TODO.markdown +3 -0
- data/VERSION +1 -1
- data/examples/blank_slate.rb +21 -4
- data/examples/create_hit.rb +19 -0
- data/examples/newtweet.html +0 -1
- data/examples/review_answer.rb +18 -5
- data/lib/rturk.rb +33 -6
- data/lib/rturk/adapters/answers.rb +38 -0
- data/lib/rturk/adapters/assignment.rb +75 -0
- data/lib/rturk/adapters/hit.rb +97 -0
- data/lib/rturk/builders/qualification_builder.rb +68 -0
- data/lib/rturk/builders/qualifications_builder.rb +43 -0
- data/lib/rturk/builders/question_builder.rb +51 -0
- data/lib/rturk/errors.rb +5 -0
- data/lib/rturk/logger.rb +20 -0
- data/lib/rturk/macros.rb +35 -0
- data/lib/rturk/operation.rb +86 -0
- data/lib/rturk/operations/approve_assignment.rb +28 -0
- data/lib/rturk/operations/create_hit.rb +77 -0
- data/lib/rturk/operations/disable_hit.rb +19 -0
- data/lib/rturk/operations/dispose_hit.rb +19 -0
- data/lib/rturk/operations/force_expire_hit.rb +18 -0
- data/lib/rturk/operations/get_account_balance.rb +15 -0
- data/lib/rturk/operations/get_assignments_for_hit.rb +24 -0
- data/lib/rturk/operations/get_hit.rb +21 -0
- data/lib/rturk/operations/get_reviewable_hits.rb +23 -0
- data/lib/rturk/operations/grant_bonus.rb +26 -0
- data/lib/rturk/operations/reject_assignment.rb +23 -0
- data/lib/rturk/requester.rb +58 -76
- data/lib/rturk/response.rb +58 -0
- data/lib/rturk/responses/create_hit_response.rb +33 -0
- data/lib/rturk/responses/get_account_balance_response.rb +11 -0
- data/lib/rturk/responses/get_assignments_for_hit_response.rb +43 -0
- data/lib/rturk/responses/get_hit_response.rb +80 -0
- data/lib/rturk/responses/get_reviewable_hits_response.rb +33 -0
- data/lib/rturk/utilities.rb +19 -1
- data/lib/rturk/xml_utilities.rb +23 -0
- data/rturk.gemspec +143 -0
- data/spec/adapters/answers_spec.rb +27 -0
- data/spec/adapters/assignment_spec.rb +0 -0
- data/spec/adapters/hit_spec.rb +46 -0
- data/spec/builders/qualification_spec.rb +53 -0
- data/spec/builders/qualifications_spec.rb +30 -0
- data/spec/builders/question_spec.rb +46 -0
- data/spec/fake_responses/approve_assignment.xml +5 -0
- data/spec/fake_responses/create_hit.xml +12 -0
- data/spec/fake_responses/disable_hit.xml +5 -0
- data/spec/fake_responses/dispose_hit.xml +5 -0
- data/spec/fake_responses/force_expire_hit.xml +5 -0
- data/spec/fake_responses/get_account_balance.xml +10 -0
- data/spec/fake_responses/get_assignments.xml +35 -0
- data/spec/fake_responses/get_hit.xml +41 -0
- data/spec/fake_responses/get_reviewable_hits.xml +17 -0
- data/spec/fake_responses/grant_bonus.xml +5 -0
- data/spec/fake_responses/invalid_credentials.xml +12 -0
- data/spec/fake_responses/reject_assignment.xml +5 -0
- data/spec/operations/approve_assignment_spec.rb +27 -0
- data/spec/operations/create_hit_spec.rb +66 -0
- data/spec/operations/disable_hit_spec.rb +26 -0
- data/spec/operations/dispose_hit_spec.rb +26 -0
- data/spec/operations/force_expire_hit_spec.rb +26 -0
- data/spec/operations/get_account_balance_spec.rb +15 -0
- data/spec/operations/get_assignments_spec.rb +26 -0
- data/spec/operations/get_hit_spec.rb +18 -0
- data/spec/operations/get_reviewable_hits_spec.rb +0 -0
- data/spec/operations/grant_bonus_spec.rb +32 -0
- data/spec/operations/reject_assignment_spec.rb +26 -0
- data/spec/requester_spec.rb +7 -18
- data/spec/response_spec.rb +48 -0
- data/spec/rturk_spec.rb +27 -0
- data/spec/spec_helper.rb +28 -3
- data/spec/tmp +2 -0
- data/spec/xml_parse_spec.rb +32 -0
- metadata +94 -34
- data/examples/external_page.rb +0 -33
- data/lib/rturk/answer.rb +0 -20
- data/lib/rturk/custom_operations.rb +0 -80
- data/lib/rturk/external_question_builder.rb +0 -22
- data/spec/answer_spec.rb +0 -24
- data/spec/external_question_spec.rb +0 -27
@@ -0,0 +1,80 @@
|
|
1
|
+
# Parses the GetHIT Response
|
2
|
+
#
|
3
|
+
# <?xml version="1.0"?>
|
4
|
+
# <GetHITResponse>
|
5
|
+
# <OperationRequest>
|
6
|
+
# <RequestId>49341251-fcbd-45c3-ab98-8fbe2e4d8060</RequestId>
|
7
|
+
# </OperationRequest>
|
8
|
+
# <HIT>
|
9
|
+
# <Request>
|
10
|
+
# <IsValid>True</IsValid>
|
11
|
+
# </Request>
|
12
|
+
# <HITId>GR4R3HY3YGBZXDCAPJWZ</HITId>
|
13
|
+
# <HITTypeId>YGKZ2W5X6YFZ08ZRXXZZ</HITTypeId>
|
14
|
+
# <CreationTime>2009-06-25T04:21:17Z</CreationTime>
|
15
|
+
# <Title>Write a twitter update</Title>
|
16
|
+
# <Description>Simply write a twitter update for me</Description>
|
17
|
+
# <Question><ExternalQuestion xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2006-07-14/ExternalQuestion.xsd">
|
18
|
+
# <ExternalURL>http://s3.amazonaws.com/mpercival.com/newtweet.html?id=foo</ExternalURL>
|
19
|
+
# <FrameHeight>400</FrameHeight>
|
20
|
+
# </ExternalQuestion>
|
21
|
+
# </Question>
|
22
|
+
# <Keywords>twitter, blogging, writing, english</Keywords>
|
23
|
+
# <HITStatus>Reviewable</HITStatus>
|
24
|
+
# <MaxAssignments>1</MaxAssignments>
|
25
|
+
# <Reward>
|
26
|
+
# <Amount>0.10</Amount>
|
27
|
+
# <CurrencyCode>USD</CurrencyCode>
|
28
|
+
# <FormattedPrice>$0.10</FormattedPrice>
|
29
|
+
# </Reward>
|
30
|
+
# <AutoApprovalDelayInSeconds>3600</AutoApprovalDelayInSeconds>
|
31
|
+
# <Expiration>2009-06-25T05:21:17Z</Expiration>
|
32
|
+
# <AssignmentDurationInSeconds>3600</AssignmentDurationInSeconds>
|
33
|
+
# <NumberOfSimilarHITs>0</NumberOfSimilarHITs>
|
34
|
+
# <RequesterAnnotation>OptionalNote</RequesterAnnotation>
|
35
|
+
# <QualificationRequirement>
|
36
|
+
# <QualificationTypeId>000000000000000000L0</QualificationTypeId>
|
37
|
+
# <Comparator>GreaterThan</Comparator>
|
38
|
+
# <IntegerValue>90</IntegerValue>
|
39
|
+
# <RequiredToPreview>0</RequiredToPreview>
|
40
|
+
# </QualificationRequirement>
|
41
|
+
# <HITReviewStatus>NotReviewed</HITReviewStatus>
|
42
|
+
# </HIT>
|
43
|
+
# </GetHITResponse>
|
44
|
+
|
45
|
+
module RTurk
|
46
|
+
|
47
|
+
class GetHITResponse < Response
|
48
|
+
|
49
|
+
attr_accessor :id, :type_id, :status, :title, :description, :reward, :assignments
|
50
|
+
attr_accessor :similar_hits, :review_status, :expires_at, :auto_approval
|
51
|
+
|
52
|
+
def initialize(response)
|
53
|
+
@raw_xml = response
|
54
|
+
@xml = Nokogiri::XML(@raw_xml)
|
55
|
+
raise_errors
|
56
|
+
map_content(@xml.xpath('//HIT'),
|
57
|
+
:id => 'HITId',
|
58
|
+
:type_id => 'HITTypeId',
|
59
|
+
:status => 'HITStatus',
|
60
|
+
:title => "Title",
|
61
|
+
:description => 'Description',
|
62
|
+
:assignments => 'MaxAssignments',
|
63
|
+
:similar_hits => 'NumberOfSimilarHITs',
|
64
|
+
:review_status => 'HITReviewStatus',
|
65
|
+
:expires_at => 'Expiration',
|
66
|
+
:auto_approval => 'AutoApprovalDelayInSeconds'
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
def expires_at=(time)
|
71
|
+
@expires_at = Time.parse(time)
|
72
|
+
end
|
73
|
+
|
74
|
+
def auto_approval=(seconds)
|
75
|
+
@auto_approval = seconds.to_i
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# <GetReviewableHITsResult>
|
2
|
+
# <Request>
|
3
|
+
# <IsValid>True</IsValid>
|
4
|
+
# </Request>
|
5
|
+
# <NumResults>3</NumResults>
|
6
|
+
# <TotalNumResults>3</TotalNumResults>
|
7
|
+
# <PageNumber>1</PageNumber>
|
8
|
+
# <HIT>
|
9
|
+
# <HITId>GBHZVQX3EHXZ2AYDY2T0</HITId>
|
10
|
+
# </HIT>
|
11
|
+
# <HIT>
|
12
|
+
# <HITId>GBHZVQX3EHXZ2AYDY2T1</HITId>
|
13
|
+
# </HIT>
|
14
|
+
# <HIT>
|
15
|
+
# <HITId>GBHZVQX3EHXZ2AYDY2T2</HITId>
|
16
|
+
# </HIT>
|
17
|
+
# </GetReviewableHITsResult>
|
18
|
+
|
19
|
+
module RTurk
|
20
|
+
|
21
|
+
class GetReviewableHITsResponse < Response
|
22
|
+
|
23
|
+
def hits
|
24
|
+
@hits ||= []
|
25
|
+
@xml.xpath('//HIT').each do |hit_xml|
|
26
|
+
@hits << RTurk::Hit.new(hit_xml.inner_text.strip)
|
27
|
+
end
|
28
|
+
@hits
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/lib/rturk/utilities.rb
CHANGED
@@ -5,7 +5,7 @@ module RTurk::Utilities
|
|
5
5
|
phrase.gsub!(/\_/, '')
|
6
6
|
return phrase
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def stringify_keys(ahash)
|
10
10
|
ahash = ahash.inject({}) do |options, (key, value)|
|
11
11
|
options[(key.to_s rescue key) || key] = value
|
@@ -14,4 +14,22 @@ module RTurk::Utilities
|
|
14
14
|
ahash
|
15
15
|
end
|
16
16
|
|
17
|
+
def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
|
18
|
+
if first_letter_in_uppercase
|
19
|
+
lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
|
20
|
+
else
|
21
|
+
lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def underscore(camel_cased_word)
|
26
|
+
camel_cased_word.to_s.gsub(/::/, '/').
|
27
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
28
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
29
|
+
tr("-", "_").
|
30
|
+
downcase
|
31
|
+
end
|
32
|
+
|
17
33
|
end
|
34
|
+
|
35
|
+
# TODO: Build an Nokogiri from_xml parser, should return a hash
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RTurk::XmlUtilities
|
2
|
+
|
3
|
+
def xml_to_hash(noko_xml)
|
4
|
+
hash = {}
|
5
|
+
noko_xml.children.each do |child|
|
6
|
+
next if child.blank?
|
7
|
+
if child.text?
|
8
|
+
return child.text
|
9
|
+
else
|
10
|
+
hash[child.name] = xml_to_hash(child)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
hash
|
14
|
+
end
|
15
|
+
|
16
|
+
def map_content(xml_obj, hash)
|
17
|
+
hash.each_pair do |k,v|
|
18
|
+
self.send("#{k.to_s}=", xml_obj.xpath(v).inner_text)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
data/rturk.gemspec
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{rturk}
|
8
|
+
s.version = "2.0.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Mark Percival"]
|
12
|
+
s.date = %q{2009-10-26}
|
13
|
+
s.email = %q{mark@mpercival.com}
|
14
|
+
s.extra_rdoc_files = [
|
15
|
+
"LICENSE",
|
16
|
+
"README.markdown"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
".gitmodules",
|
21
|
+
".yardoc",
|
22
|
+
"LICENSE",
|
23
|
+
"README.markdown",
|
24
|
+
"Rakefile",
|
25
|
+
"TODO.markdown",
|
26
|
+
"VERSION",
|
27
|
+
"examples/blank_slate.rb",
|
28
|
+
"examples/create_hit.rb",
|
29
|
+
"examples/mturk.sample.yml",
|
30
|
+
"examples/newtweet.html",
|
31
|
+
"examples/review_answer.rb",
|
32
|
+
"lib/rturk.rb",
|
33
|
+
"lib/rturk/adapters/answers.rb",
|
34
|
+
"lib/rturk/adapters/assignment.rb",
|
35
|
+
"lib/rturk/adapters/hit.rb",
|
36
|
+
"lib/rturk/builders/qualification_builder.rb",
|
37
|
+
"lib/rturk/builders/qualifications_builder.rb",
|
38
|
+
"lib/rturk/builders/question_builder.rb",
|
39
|
+
"lib/rturk/errors.rb",
|
40
|
+
"lib/rturk/logger.rb",
|
41
|
+
"lib/rturk/macros.rb",
|
42
|
+
"lib/rturk/operation.rb",
|
43
|
+
"lib/rturk/operations/approve_assignment.rb",
|
44
|
+
"lib/rturk/operations/create_hit.rb",
|
45
|
+
"lib/rturk/operations/disable_hit.rb",
|
46
|
+
"lib/rturk/operations/dispose_hit.rb",
|
47
|
+
"lib/rturk/operations/force_expire_hit.rb",
|
48
|
+
"lib/rturk/operations/get_account_balance.rb",
|
49
|
+
"lib/rturk/operations/get_assignments_for_hit.rb",
|
50
|
+
"lib/rturk/operations/get_hit.rb",
|
51
|
+
"lib/rturk/operations/get_reviewable_hits.rb",
|
52
|
+
"lib/rturk/operations/grant_bonus.rb",
|
53
|
+
"lib/rturk/operations/reject_assignment.rb",
|
54
|
+
"lib/rturk/requester.rb",
|
55
|
+
"lib/rturk/response.rb",
|
56
|
+
"lib/rturk/responses/create_hit_response.rb",
|
57
|
+
"lib/rturk/responses/get_account_balance_response.rb",
|
58
|
+
"lib/rturk/responses/get_assignments_for_hit_response.rb",
|
59
|
+
"lib/rturk/responses/get_hit_response.rb",
|
60
|
+
"lib/rturk/responses/get_reviewable_hits_response.rb",
|
61
|
+
"lib/rturk/utilities.rb",
|
62
|
+
"lib/rturk/xml_utilities.rb",
|
63
|
+
"rturk.gemspec",
|
64
|
+
"spec/adapters/answers_spec.rb",
|
65
|
+
"spec/adapters/assignment_spec.rb",
|
66
|
+
"spec/adapters/hit_spec.rb",
|
67
|
+
"spec/builders/qualification_spec.rb",
|
68
|
+
"spec/builders/qualifications_spec.rb",
|
69
|
+
"spec/builders/question_spec.rb",
|
70
|
+
"spec/fake_responses/approve_assignment.xml",
|
71
|
+
"spec/fake_responses/create_hit.xml",
|
72
|
+
"spec/fake_responses/disable_hit.xml",
|
73
|
+
"spec/fake_responses/dispose_hit.xml",
|
74
|
+
"spec/fake_responses/force_expire_hit.xml",
|
75
|
+
"spec/fake_responses/get_account_balance.xml",
|
76
|
+
"spec/fake_responses/get_assignments.xml",
|
77
|
+
"spec/fake_responses/get_hit.xml",
|
78
|
+
"spec/fake_responses/get_reviewable_hits.xml",
|
79
|
+
"spec/fake_responses/grant_bonus.xml",
|
80
|
+
"spec/fake_responses/invalid_credentials.xml",
|
81
|
+
"spec/fake_responses/reject_assignment.xml",
|
82
|
+
"spec/mturk.sample.yml",
|
83
|
+
"spec/operations/approve_assignment_spec.rb",
|
84
|
+
"spec/operations/create_hit_spec.rb",
|
85
|
+
"spec/operations/disable_hit_spec.rb",
|
86
|
+
"spec/operations/dispose_hit_spec.rb",
|
87
|
+
"spec/operations/force_expire_hit_spec.rb",
|
88
|
+
"spec/operations/get_account_balance_spec.rb",
|
89
|
+
"spec/operations/get_assignments_spec.rb",
|
90
|
+
"spec/operations/get_hit_spec.rb",
|
91
|
+
"spec/operations/get_reviewable_hits_spec.rb",
|
92
|
+
"spec/operations/grant_bonus_spec.rb",
|
93
|
+
"spec/operations/reject_assignment_spec.rb",
|
94
|
+
"spec/requester_spec.rb",
|
95
|
+
"spec/response_spec.rb",
|
96
|
+
"spec/rturk_spec.rb",
|
97
|
+
"spec/spec_helper.rb",
|
98
|
+
"spec/tmp",
|
99
|
+
"spec/xml_parse_spec.rb"
|
100
|
+
]
|
101
|
+
s.homepage = %q{http://github.com/markpercival/rturk}
|
102
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
103
|
+
s.require_paths = ["lib"]
|
104
|
+
s.rubygems_version = %q{1.3.5}
|
105
|
+
s.summary = %q{Mechanical Turk API Wrapper}
|
106
|
+
s.test_files = [
|
107
|
+
"spec/adapters/answers_spec.rb",
|
108
|
+
"spec/adapters/assignment_spec.rb",
|
109
|
+
"spec/adapters/hit_spec.rb",
|
110
|
+
"spec/builders/qualification_spec.rb",
|
111
|
+
"spec/builders/qualifications_spec.rb",
|
112
|
+
"spec/builders/question_spec.rb",
|
113
|
+
"spec/operations/approve_assignment_spec.rb",
|
114
|
+
"spec/operations/create_hit_spec.rb",
|
115
|
+
"spec/operations/disable_hit_spec.rb",
|
116
|
+
"spec/operations/dispose_hit_spec.rb",
|
117
|
+
"spec/operations/force_expire_hit_spec.rb",
|
118
|
+
"spec/operations/get_account_balance_spec.rb",
|
119
|
+
"spec/operations/get_assignments_spec.rb",
|
120
|
+
"spec/operations/get_hit_spec.rb",
|
121
|
+
"spec/operations/get_reviewable_hits_spec.rb",
|
122
|
+
"spec/operations/grant_bonus_spec.rb",
|
123
|
+
"spec/operations/reject_assignment_spec.rb",
|
124
|
+
"spec/requester_spec.rb",
|
125
|
+
"spec/response_spec.rb",
|
126
|
+
"spec/rturk_spec.rb",
|
127
|
+
"spec/spec_helper.rb",
|
128
|
+
"spec/xml_parse_spec.rb",
|
129
|
+
"examples/blank_slate.rb",
|
130
|
+
"examples/create_hit.rb",
|
131
|
+
"examples/review_answer.rb"
|
132
|
+
]
|
133
|
+
|
134
|
+
if s.respond_to? :specification_version then
|
135
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
136
|
+
s.specification_version = 3
|
137
|
+
|
138
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
139
|
+
else
|
140
|
+
end
|
141
|
+
else
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
2
|
+
|
3
|
+
|
4
|
+
describe RTurk::Answers do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
@answer = <<-XML
|
8
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
9
|
+
<QuestionFormAnswers xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2005-10-01/QuestionFormAnswers.xsd">
|
10
|
+
<Answer>
|
11
|
+
<QuestionIdentifier>tweet</QuestionIdentifier>
|
12
|
+
<FreeText>This is my tweet!</FreeText>
|
13
|
+
</Answer>
|
14
|
+
<Answer>
|
15
|
+
<QuestionIdentifier>Submit</QuestionIdentifier>
|
16
|
+
<FreeText>Submit</FreeText>
|
17
|
+
</Answer>
|
18
|
+
</QuestionFormAnswers>
|
19
|
+
XML
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should parse a answer" do
|
23
|
+
RTurk::Answers.new(@answer).to_hash.should == {"Submit"=>"Submit", "tweet"=>"This is my tweet!"}
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
File without changes
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
2
|
+
|
3
|
+
describe "HIT adapter" do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
aws = YAML.load(File.open(File.join(SPEC_ROOT, 'mturk.yml')))
|
7
|
+
RTurk.setup(aws['AWSAccessKeyId'], aws['AWSAccessKey'], :sandbox => true)
|
8
|
+
faker('create_hit', :operation => 'CreateHIT')
|
9
|
+
faker('get_hit', :operation => 'GetHIT')
|
10
|
+
faker('get_reviewable_hits', :operation => 'GetReviewableHITs')
|
11
|
+
faker('get_assignments', :operation => 'GetAssignments')
|
12
|
+
faker('force_expire_hit', :operation => 'ForceExpireHIT')
|
13
|
+
faker('dispose_hit', :operation => 'DisposeHIT')
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should let us create a hit" do
|
17
|
+
RTurk::Hit.create(:title => 'foo', :description => 'do foo', :question => 'http://mpercival.com', :reward => 0.05)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should automagically request additional information on an existing hit" do
|
21
|
+
hit = RTurk::Hit.new(12345)
|
22
|
+
hit.type_id.should eql("YGKZ2W5X6YFZ08ZRXXZZ")
|
23
|
+
hit.url.should eql("http://workersandbox.mturk.com/mturk/preview?groupId=YGKZ2W5X6YFZ08ZRXXZZ")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should get all reviewable hits" do
|
27
|
+
hits = RTurk::Hit.all_reviewable
|
28
|
+
hits.size.should eql(3)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should find assignments for a hit" do
|
32
|
+
hits = RTurk::Hit.all_reviewable
|
33
|
+
hits.first.assignments.first.answers["tweet"].should eql('This is my tweet!')
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should expire a hit" do
|
37
|
+
hits = RTurk::Hit.all_reviewable
|
38
|
+
hits.first.expire!
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should dispose of a hit" do
|
42
|
+
hits = RTurk::Hit.all_reviewable
|
43
|
+
hits.first.dispose!
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
2
|
+
|
3
|
+
|
4
|
+
describe RTurk::Qualifications do
|
5
|
+
|
6
|
+
# Possible values coming back
|
7
|
+
# {"QualificationTypeId","Comparator", "IntegerValue", "LocaleValue.Country","RequiredToPreview"}
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should build a qualification for Approval rate" do
|
14
|
+
@qualification = RTurk::Qualification.new('000000000000000000L0', :gt => 90)
|
15
|
+
@qualification.to_params.should eql({"QualificationTypeId" => '000000000000000000L0',"Comparator" => 'GreaterThan',
|
16
|
+
"IntegerValue" => 90, "RequiredToPreview" => "true"})
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should build a qualification for boolean qualification" do
|
20
|
+
@qualification = RTurk::Qualification.new('00000000000000000060', true)
|
21
|
+
@qualification.to_params.should eql({"QualificationTypeId" => '00000000000000000060',"Comparator" => 'EqualTo',
|
22
|
+
"IntegerValue" => 1, "RequiredToPreview" => "true"})
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should build a qualification for country qualification" do
|
26
|
+
@qualification = RTurk::Qualification.new('00000000000000000071', :eql => 'PH')
|
27
|
+
@qualification.to_params.should eql({"QualificationTypeId" => '00000000000000000071',"Comparator" => 'EqualTo',
|
28
|
+
"LocaleValue.Country" => 'PH', "RequiredToPreview" => "true"})
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'passing in symbols representing a TypeID' do
|
32
|
+
|
33
|
+
it "should build a qualification for Approval rate" do
|
34
|
+
@qualification = RTurk::Qualification.new(:approval_rate, :gt => 90)
|
35
|
+
@qualification.to_params.should eql({"QualificationTypeId" => '000000000000000000L0',"Comparator" => 'GreaterThan',
|
36
|
+
"IntegerValue" => 90, "RequiredToPreview" => "true"})
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should build a qualification for boolean qualification" do
|
40
|
+
@qualification = RTurk::Qualification.new(:adult, true)
|
41
|
+
@qualification.to_params.should eql({"QualificationTypeId" => '00000000000000000060',"Comparator" => 'EqualTo',
|
42
|
+
"IntegerValue" => 1, "RequiredToPreview" => "true"})
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should build a qualification for country qualification" do
|
46
|
+
@qualification = RTurk::Qualification.new(:country, :eql => 'PH')
|
47
|
+
@qualification.to_params.should eql({"QualificationTypeId" => '00000000000000000071',"Comparator" => 'EqualTo',
|
48
|
+
"LocaleValue.Country" => 'PH', "RequiredToPreview" => "true"})
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|