cloudfactory 0.6 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -179,26 +179,32 @@ module CF
179
179
  number = worker_instance.number
180
180
  reward = worker_instance.reward
181
181
  stat_badge = worker_instance.stat_badge
182
- badges = worker_instance.badges
183
-
184
- request =
185
- {
186
- :body =>
182
+ if stat_badge.nil?
183
+ request =
187
184
  {
188
- :api_key => CF.api_key,
189
- :worker => {:number => number, :reward => reward, :type => "HumanWorker"},
190
- :stat_badge => stat_badge,
191
- :badge => badges
185
+ :body =>
186
+ {
187
+ :api_key => CF.api_key,
188
+ :worker => {:number => number, :reward => reward, :type => "HumanWorker"}
189
+ }
192
190
  }
193
- }
194
-
191
+ else
192
+ request =
193
+ {
194
+ :body =>
195
+ {
196
+ :api_key => CF.api_key,
197
+ :worker => {:number => number, :reward => reward, :type => "HumanWorker"},
198
+ :stat_badge => stat_badge
199
+ }
200
+ }
201
+ end
195
202
  resp = HTTParty.post("#{CF.api_url}#{CF.api_version}/lines/#{CF.account_name}/#{self.line_title.downcase}/stations/#{self.index}/workers.json",request)
196
203
  worker = CF::HumanWorker.new({})
197
204
  worker.id = resp.parsed_response['id']
198
205
  worker.number = resp.parsed_response['number']
199
206
  worker.reward = resp.parsed_response['reward']
200
207
  worker.stat_badge = resp.parsed_response['stat_badge']
201
- worker.badges = resp.parsed_response['badges']
202
208
  if resp.code != 200
203
209
  worker.errors = resp.parsed_response['error']['message']
204
210
  end
@@ -367,5 +373,45 @@ module CF
367
373
  def gold_standards=(gold_standard) # :nodoc:
368
374
  @gold_standards << gold_standard
369
375
  end
376
+
377
+ #specify the badges for the station
378
+ # ===Usage Example:
379
+ # CF::Badge.new({:line => line, :station => s,:name => "Tomb Digitizer", :description => "This badge qualifies you to work on tomb digitization tasks.",:max_badges => 100,:gold_standards => ["#{@gold_standard.settings[:name]}"],:test_attributes =>{:type => "default",:retries => 10,:pass_percentage => 100,:check_manually => true}})
380
+ def badges badge = nil
381
+ line_title = line["title"] || line.title
382
+ if badge
383
+ if badge.settings[:test_attributes] && badge.settings[:test_attributes][:form_attributes].present?
384
+ form = badge.settings[:test_attributes][:form_attributes]
385
+ if( form[:type] == "CustomTaskForm" && form[:file])
386
+ raw_html = ""
387
+ File.open("#{form[:file]}").each_line do |line|
388
+ raw_html += line
389
+ end
390
+ badge.settings[:test_attributes][:form_attributes].merge!({:raw_html => raw_html,:_type =>"CustomTaskForm"})
391
+ end
392
+ badge.settings[:test_attributes][:form_attributes].merge!({:_type =>"TaskForm"}) if form[:type] == "TaskForm"
393
+ end
394
+ request =
395
+ {
396
+ :body =>
397
+ {
398
+ :api_key => CF.api_key,
399
+ :badge => badge.settings
400
+ }
401
+ }
402
+ resp = HTTParty.post("#{CF.api_url}#{CF.api_version}/lines/#{CF.account_name}/#{line_title.downcase}/stations/#{self.index}/badges.json",request)
403
+ badge = CF::Badge.new()
404
+ badge.settings.merge!(resp.to_hash)
405
+ self.errors = resp.parsed_response['error']['message'] if resp.code != 200
406
+ @badges << badge
407
+ else
408
+ @badges
409
+ end
410
+ end
411
+
412
+ def badges=(badge)
413
+ @badges << badge
414
+ end
415
+
370
416
  end
371
417
  end
@@ -1,3 +1,3 @@
1
1
  module CF # :nodoc: all
2
- VERSION = "0.6"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -1,242 +1,342 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CF::Badge do
4
- context "#create" do
5
- it " in block DSL way" do
4
+ context "add a badge" do
5
+ it "should add a badge to the station in DSL way" do
6
6
  WebMock.allow_net_connect!
7
- @badge = CF::Badge.create(
8
- :name => "Bizcard Digitizer_dsl",
9
- :description => "this badge qualifies the worker for bizcard digitization",
10
- :max_badge_assignments => 100,
11
- :retries_allowed => 5,
12
- :pass_percentage => 80,
13
- :assignment_duration => 3600,
14
- :allow_retake_after => 5,
15
- :check_manually =>false,
16
- :form => "./lib/cf/cli/templates/sample-line/form.html",
17
- :known_answers=>
18
- [
19
- { "name" => "chandra",
20
- "input"=> {"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
21
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"1"}}
22
- },
23
- {
24
- "name" => "mohan",
25
- "input"=>{"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg2"},
26
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"2"}}
27
- }
28
- ]
29
- )
30
- end
31
-
32
- it "in plain ruby way" do
33
- WebMock.allow_net_connect!
34
- @badge = CF::Badge.new(
35
- :name => "Bizcard Digitizer_plain",
36
- :description => "this badge qualifies the worker for bizcard digitization",
37
- :max_badge_assignments => 100,
38
- :retries_allowed => 5,
39
- :pass_percentage => 80,
40
- :assignment_duration => 3600,
41
- :allow_retake_after => 5,
42
- :check_manually =>false,
43
- :form => "./lib/cf/cli/templates/sample-line/form.html",
44
- :known_answers=>
45
- [
46
- { "name" => "chandra",
47
- "input"=> {"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
48
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"1"}}
49
- },
50
- {
51
- "name" => "mohan",
52
- "input"=>{"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg2"},
53
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"2"}}
54
- }
55
- ]
56
- )
57
- end
58
-
59
- it " with standard task form" do
60
- WebMock.allow_net_connect!
61
- @badge = CF::Badge.create(
62
- :name => "Bizcard Digitizer_standard_form",
63
- :description => "this badge qualifies the worker for bizcard digitization",
64
- :max_badge_assignments => 100,
65
- :retries_allowed => 5,
66
- :pass_percentage => 80,
67
- :assignment_duration => 3600,
68
- :allow_retake_after => 5,
69
- :check_manually =>false,
70
- :form => {:title => "standard task form", :instruction => "Describe me"},
71
- :known_answers=>
72
- [
73
- { "name" => "chandra",
74
- "input"=> {"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
75
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"1"}}
76
- },
77
- {
78
- "name" => "mohan",
79
- "input"=>{"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg2"},
80
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"2"}}
81
- }
82
- ]
83
- )
84
- end
85
-
86
- end
87
-
88
- context "create a badge without" do
89
- before(:each) do
90
- WebMock.allow_net_connect!
91
- @badge_hash = {
92
- :name => "Bizcard Digitizer#{Time.new.strftime('%Y%b%d-%H%M%S')}",
93
- :description => "this badge qualifies the worker for bizcard digitization",
94
- :max_badge_assignments => 100,
95
- :retries_allowed => 5,
96
- :pass_percentage => 80,
97
- :assignment_duration => 3600,
98
- :allow_retake_after => 5,
99
- :check_manually =>false,
100
- :form => "./lib/cf/cli/templates/sample-line/form.html",
101
- :known_answers=>
102
- [
103
- { "name" => "chandra",
104
- "input"=> {"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
105
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"1"}}
106
- },
107
- {
108
- "name" => "mohan",
109
- "input"=>{"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg2"},
110
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"2"}}
111
- }
112
- ]
113
- }
114
- end
115
-
116
-
117
- it "name should give error 'Name can't be blank'" do
118
- @badge_hash.delete(:name)
119
- badge = CF::Badge.new(@badge_hash)
120
- badge.errors.should eql(["Name can't be blank"])
121
- end
122
-
123
- it "form should raise error 'Test is invalid'" do
124
- @badge_hash.delete(:form)
125
- badge = CF::Badge.new(@badge_hash)
126
- badge.errors.should eql(["Test is invalid"])
127
- end
128
-
129
- it "known_answers should raise error 'You have not provided known answers for the badge'" do
130
- @badge_hash.delete(:known_answers)
131
- badge = CF::Badge.new(@badge_hash)
132
- badge.errors.should eql("You have not provided known answers for the badge.")
133
- end
134
-
135
- it "form with different file type" do
136
- @badge_hash[:form] = "./lib/cf/cli/templates/sample-line/badge.yml"
137
- badge = CF::Badge.new(@badge_hash)
138
- badge.errors.should eql(["Wrong type of file for the form."])
139
- end
140
- end
141
-
142
-
143
- context "#update" do
144
- before(:each) do
145
- WebMock.allow_net_connect!
146
- @badge = CF::Badge.create(
147
- :name => "Bizcard Digitizer",
148
- :description => "this badge qualifies the worker for bizcard digitization",
149
- :max_badge_assignments => 100,
150
- :retries_allowed => 5,
151
- :pass_percentage => 80,
152
- :assignment_duration => 3600,
153
- :allow_retake_after => 5,
154
- :check_manually =>false,
155
- :form => "./lib/cf/cli/templates/sample-line/form.html",
156
- :known_answers=>
157
- [
158
- { "name" => "chandra",
159
- "input"=> {"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
160
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"1"}}
161
- },
162
- {
163
- "name" => "mohan",
164
- "input"=>{"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg2"},
165
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"2"}}
166
- }
167
- ]
168
- )
169
-
170
- @badge_hash = {
171
- :name => "Bizcard Digitizer_updated",
172
- :description => "this badge qualifies the worker for bizcard digitization for next level",
173
- :max_badge_assignments => 80,
174
- :retries_allowed => 0,
175
- :pass_percentage => 10,
176
- :assignment_duration => 300,
177
- :allow_retake_after => 2,
178
- :check_manually => true,
179
- :form => "./lib/cf/cli/templates/sample-line/form.html",
180
- :known_answers=>
181
- [
182
- {
183
- "name" => "updated",
184
- "input"=>{"image_url"=> "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg2"},
185
- "expected_output"=>{"gender"=>{"value"=>"Male"}, "rich"=>{"value"=>"2"}}
186
- }
187
- ]
188
- }
189
- end
190
-
191
- it "in block DSl Way" do
192
- badge = CF::Badge.update("Bizcard Digitizer", @badge_hash)
193
- badge["name"].should eql("bizcard-digitizer_updated")
194
- badge["description"].should eql("this badge qualifies the worker for bizcard digitization for next level")
195
- badge["max_badge_assignments"].should eql(80)
196
- badge["test"]["retries"].should eql(0)
197
- badge["test"]["check_manually"].should eql(true)
198
- badge["test"]["pass_percentage"].should eql(10)
199
- badge["test"]["known_answers"].should eql(1)
200
- end
201
-
202
- it "in absence of form should raise error" do
203
- @badge_hash.delete(:form)
204
- badge = CF::Badge.update(@badge.name, @badge_hash)
205
- badge["error"]["message"].should eql("Badge #{@badge.name.parameterize} can not be updated beacuse {:test=>[\"is invalid\"]}")
206
- end
207
-
208
- end
209
-
210
- context "#list" do
211
- it "should list all badges" do
212
- WebMock.allow_net_connect!
213
- badge = CF::Badge.list
214
- badge["code"].should eql(200)
215
- end
216
-
217
- it "should list specific badge" do
218
- WebMock.allow_net_connect!
219
- badge_list = CF::Badge.list("bizcard-digitizer_updated")
220
- badge_list["badges"].first["name"].should eql("bizcard-digitizer_updated")
221
- end
222
- end
223
-
224
- context "#delete" do
225
- it "a specific badge" do
226
- WebMock.allow_net_connect!
227
- badge = CF::Badge.destroy("bizcard-digitizer_updated")
228
- badge["code"].should eql(200)
229
- CF::Badge.list("bizcard-digitizer_updated")["error"]["message"].should eql("No badge to list")
230
- end
7
+ title = "line_title#{Time.new.strftime('%Y%b%d-%H%M%S')}".downcase
8
+ sleep 1
9
+ line = CF::Line.create(title,"Digitization") do |l|
10
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
11
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
12
+ end
13
+ station = CF::Station.create({:line => line, :type => "work"}) do |s|
14
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 10})
15
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
16
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
17
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
18
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
19
+ end
20
+ @gold_standard = CF::GoldStandard.new({ :line => line,
21
+ :station => s,
22
+ :name => "easy_#{Time.now}",
23
+ :input => {'image_url' => "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
24
+ :expected_output => {"first_name" => {"value" => "John"}, "last_name" => {"value" => "Lennon"}, "company" => {"value" => "Sprout"}}
25
+ })
231
26
 
232
- it "delete all badges" do
233
- WebMock.allow_net_connect!
234
- badge2 = CF::Badge.destroy("bizcard-digitizer")
235
- badge2 = CF::Badge.destroy("bizcard-digitizer_updated")
236
- badge2 = CF::Badge.destroy("bizcard-digitizer_dsl")
237
- badge3 = CF::Badge.destroy("bizcard-digitizer_plain")
238
- badge4 = CF::Badge.destroy("Bizcard Digitizer_standard_form")
239
- end
240
-
241
- end
242
- end
27
+ @badge = CF::Badge.create({
28
+ :line => line,
29
+ :station => s,
30
+ :name => "Tomb Digitizer#{Time.now.day}",
31
+ :description => "This badge qualifies you to work on tomb digitization tasks.",
32
+ :max_badges => 100,
33
+ :gold_standards => ["#{@gold_standard.settings[:name]}"],
34
+ :test_attributes =>
35
+ {
36
+ :type => "default",
37
+ :retries => 10,
38
+ :pass_percentage => 100,
39
+ :check_manually => true
40
+ }
41
+ })
42
+ end
43
+ end
44
+
45
+ it "should reuse the badge with in the account and badge to the station in DSL way" do
46
+ WebMock.allow_net_connect!
47
+ title = "line_title#{Time.new.strftime('%Y%b%d-%H%M%S')}".downcase
48
+ sleep 1
49
+ line = CF::Line.create(title,"Digitization") do |l|
50
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
51
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
52
+ end
53
+ station = CF::Station.create({:line => line, :type => "work"}) do |s|
54
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 10})
55
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
56
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
57
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
58
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
59
+ end
60
+ @gold_standard = CF::GoldStandard.new({ :line => line,
61
+ :station => s,
62
+ :name => "easy_#{Time.now}",
63
+ :input => {'image_url' => "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
64
+ :expected_output => {"first_name" => {"value" => "John"}, "last_name" => {"value" => "Lennon"}, "company" => {"value" => "Sprout"}}
65
+ })
66
+
67
+ @badge = CF::Badge.create({
68
+ :line => line,
69
+ :station => s,
70
+ :name => "timromero#{Time.now.day}",
71
+ :description => "This badge qualifies you to work on tomb digitization tasks.",
72
+ :max_badges => 100,
73
+ :gold_standards => ["#{@gold_standard.settings[:name]}"],
74
+ :test_attributes =>
75
+ {
76
+ :type => "default",
77
+ :retries => 10,
78
+ :pass_percentage => 100,
79
+ :check_manually => true
80
+ }
81
+ })
82
+
83
+ @badge = CF::Badge.create({
84
+ :line => line,
85
+ :station => s,
86
+ :name => "Tomb Digitizer#{Time.now.day}"
87
+ })
88
+ end
89
+ end
90
+
91
+
92
+ it "should add a badge to the station in plain ruby way" do
93
+ WebMock.allow_net_connect!
94
+ title = "line_title#{Time.new.strftime('%Y%b%d-%H%M%S')}".downcase
95
+ sleep 1
96
+ @line = CF::Line.create(title,"Digitization") do |l|
97
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
98
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
99
+ end
100
+ station = CF::Station.create({:line => @line, :type => "work"}) do |s|
101
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 10})
102
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
103
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
104
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
105
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
106
+ end
107
+ @gold_standard = CF::GoldStandard.new({ :line => @line,
108
+ :station => s,
109
+ :name => "easy",
110
+ :input => {'image_url' => "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
111
+ :expected_output => {"first_name" => {"value" => "John"}, "last_name" => {"value" => "Lennon"}, "company" => {"value" => "Sprout"}}
112
+ })
113
+ end
114
+ badge = CF::Badge.new({
115
+ :name => "Tomb Digitizereee#{Time.now}",
116
+ :description => "This badge qualifies you to work on tomb digitization tasks.",
117
+ :max_badges => 100,
118
+ :gold_standards => ["#{@gold_standard.settings[:name]}"],
119
+ :test_attributes =>
120
+ {
121
+ :type => "default",
122
+ :retries => 10,
123
+ :pass_percentage => 100,
124
+ :check_manually => false
125
+ }
126
+ })
127
+
128
+ @line.stations.first.badges badge
129
+ badge1 = CF::Badge.new({
130
+ :name => "timromero#{Time.now.day}"
131
+ })
132
+ @line.stations.first.badges badge1
133
+ @line.stations.first.badges.count.should eql(2)
134
+ @line.stations.first.badges.last.settings["name"].should eql("timromero#{Time.now.day}")
135
+ @line.stations.first.badges.first.settings["name"].should eq(badge.settings[:name])
136
+ @line.stations.first.badges.first.settings['test']["form"].should eql({"_type"=>"TaskForm", "form_fields"=>[{"label"=>"First Name", "field_type"=>"short_answer", "required"=>true, "position"=>1}, {"label"=>"Middle Name", "field_type"=>"short_answer", "position"=>2}, {"label"=>"Last Name", "field_type"=>"short_answer", "required"=>true, "position"=>3}], "instruction"=>"Describe", "title"=>"Enter text from a business card image"})
137
+
138
+ end
139
+
140
+
141
+ it "should add a badge to the station with test form defined in DSL way" do
142
+ WebMock.allow_net_connect!
143
+ title = "line_title#{Time.new.strftime('%Y%b%d-%H%M%S')}".downcase
144
+ sleep 1
145
+ line = CF::Line.create(title,"Digitization") do |l|
146
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
147
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
148
+ end
149
+ station = CF::Station.create({:line => line, :type => "work"}) do |s|
150
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 10})
151
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
152
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
153
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
154
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
155
+ end
156
+ @gold_standard = CF::GoldStandard.new({ :line => line,
157
+ :station => s,
158
+ :name => "easy_#{Time.now}",
159
+ :input => {'image_url' => "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
160
+ :expected_output => {"first_name" => {"value" => "John"}, "last_name" => {"value" => "Lennon"}, "company" => {"value" => "Sprout"}}
161
+ })
162
+
163
+ @badge = CF::Badge.new({
164
+ :line => line,
165
+ :station => s,
166
+ :name => "Tomb Digitizer#{Time.now}",
167
+ :description => "This badge qualifies you to work on tomb digitization tasks.",
168
+ :max_badges => 100,
169
+ :gold_standards => ["#{@gold_standard.settings[:name]}"],
170
+ :test_attributes =>
171
+ {
172
+ :type => "default",
173
+ :retries => 10,
174
+ :pass_percentage => 100,
175
+ :check_manually => true,
176
+ :form_attributes => {
177
+ :title => "Tombfinder Test",
178
+ :instruction => "Look at the image of the tomb in the url given and answer the asked questions.",
179
+ :type => "TaskForm",
180
+ :form_fields_attributes =>
181
+ [
182
+ { "label" => "Last Name", "field_type" => "radio_button", 'option_values' => ["LEIGH", "IRVING", "GERTRUDE"] },
183
+ { "label" => "Lizzie Year of Birth", "field_type" => "radio_button", 'option_values' => ["1873", "1933", "1896"] }
184
+ ]
185
+ }
186
+ }
187
+ })
188
+ end
189
+ line.stations.first.badges.first.settings[:test_attributes][:form_attributes][:type].should eql("TaskForm")
190
+ line.stations.first.badges.first.settings[:test_attributes][:form_attributes][:form_fields_attributes].should eql([{"label"=>"Last Name", "field_type"=>"radio_button", "option_values"=>["LEIGH", "IRVING", "GERTRUDE"]}, {"label"=>"Lizzie Year of Birth", "field_type"=>"radio_button", "option_values"=>["1873", "1933", "1896"]}])
191
+ end
192
+
193
+
194
+
195
+ it "should add a badge to the station with customtaskform as a badge testform form defined in DSL way" do
196
+ WebMock.allow_net_connect!
197
+ title = "line_title#{Time.new.strftime('%Y%b%d-%H%M%S')}".downcase
198
+ sleep 1
199
+ line = CF::Line.create(title,"Digitization") do |l|
200
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
201
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
202
+ end
203
+ station = CF::Station.create({:line => line, :type => "work"}) do |s|
204
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 10})
205
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
206
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
207
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
208
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
209
+ end
210
+ @gold_standard = CF::GoldStandard.new({ :line => line,
211
+ :station => s,
212
+ :name => "easy_#{Time.now}",
213
+ :input => {'image_url' => "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
214
+ :expected_output => {"first_name" => {"value" => "John"}, "last_name" => {"value" => "Lennon"}, "company" => {"value" => "Sprout"}}
215
+ })
216
+
217
+ @badge = CF::Badge.new({
218
+ :line => line,
219
+ :station => s,
220
+ :name => "Tomb Digitizer#{Time.now}",
221
+ :description => "This badge qualifies you to work on tomb digitization tasks.",
222
+ :max_badges => 100,
223
+ :gold_standards => ["#{@gold_standard.settings[:name]}"],
224
+ :test_attributes =>
225
+ {
226
+ :type => "default",
227
+ :retries => 10,
228
+ :pass_percentage => 100,
229
+ :check_manually => true,
230
+ :form_attributes => {
231
+ :title => "Custom TestForm",
232
+ :instruction => "Look at the image of the tomb in the url given and answer the asked questions.",
233
+ :type => "CustomTaskForm",
234
+ :file =>"./spec/badges/station_1.html"
235
+ }
236
+ }
237
+ })
238
+ end
239
+ line.stations.first.badges.first.settings[:test_attributes][:form_attributes][:type].should eql("CustomTaskForm")
240
+ end
241
+
242
+
243
+ it "should add a badge with defined custom_task_form as a badge test form in plain ruby way " do
244
+ WebMock.allow_net_connect!
245
+ title = "line_title#{Time.new.strftime('%Y%b%d-%H%M%S')}".downcase
246
+ sleep 1
247
+ @line = CF::Line.create(title,"Digitization") do |l|
248
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
249
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
250
+ end
251
+ station = CF::Station.create({:line => @line, :type => "work"}) do |s|
252
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 10})
253
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
254
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
255
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
256
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
257
+ end
258
+ @gold_standard = CF::GoldStandard.new({ :line => @line,
259
+ :station => s,
260
+ :name => "easy",
261
+ :input => {'image_url' => "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
262
+ :expected_output => {"first_name" => {"value" => "John"}, "last_name" => {"value" => "Lennon"}, "company" => {"value" => "Sprout"}}
263
+ })
264
+ end
265
+ badge = CF::Badge.new({
266
+ :name => "Tomb Digitizer#{Time.now}",
267
+ :description => "This badge qualifies you to work on tomb digitization tasks.",
268
+ :max_badges => 100,
269
+ :gold_standards => ["#{@gold_standard.settings[:name]}"],
270
+ :test_attributes =>
271
+ {
272
+ :type => "default",
273
+ :retries => 10,
274
+ :pass_percentage => 100,
275
+ :check_manually => false,
276
+ :form_attributes => {
277
+ :title => "Custom TestForm in plain ruby way",
278
+ :instruction => "Look at the image of the tomb in the url given and answer the asked questions.",
279
+ :type => "CustomTaskForm",
280
+ :file =>"./spec/badges/station_1.html"
281
+ }
282
+ }
283
+ })
284
+ @line.stations.first.badges badge
285
+ @line.stations.first.badges.first.settings["test"]["form"]["_type"].should eql("CustomTaskForm")
286
+ @line.stations.first.badges.first.settings["test"]["form"]["raw_html"].present?.should eql(true)
287
+ end
288
+
289
+
290
+ it "should add a badge with defined task_form as a badge test form in plain ruby way " do
291
+ WebMock.allow_net_connect!
292
+ title = "line_title#{Time.new.strftime('%Y%b%d-%H%M%S')}".downcase
293
+ sleep 1
294
+ @line = CF::Line.create(title,"Digitization") do |l|
295
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
296
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
297
+ end
298
+ station = CF::Station.create({:line => @line, :type => "work"}) do |s|
299
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 10})
300
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
301
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
302
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
303
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
304
+ end
305
+ @gold_standard = CF::GoldStandard.new({ :line => @line,
306
+ :station => s,
307
+ :name => "easy",
308
+ :input => {'image_url' => "http://onwired.com/images/portfolio/linda-stanley-business-card.jpg"},
309
+ :expected_output => {"first_name" => {"value" => "John"}, "last_name" => {"value" => "Lennon"}, "company" => {"value" => "Sprout"}}
310
+ })
311
+ end
312
+ badge = CF::Badge.new({
313
+ :name => "Tomb Digitizer#{Time.now}",
314
+ :description => "This badge qualifies you to work on tomb digitization tasks.",
315
+ :max_badges => 100,
316
+ :gold_standards => ["#{@gold_standard.settings[:name]}"],
317
+ :test_attributes =>
318
+ {
319
+ :type => "default",
320
+ :retries => 10,
321
+ :pass_percentage => 100,
322
+ :check_manually => false,
323
+ :form_attributes => {
324
+ :title => "Tombfinder Test plain ruby way",
325
+ :instruction => "Look at the image of the tomb in the url given and answer the asked questions.",
326
+ :type => "TaskForm",
327
+ :form_fields_attributes =>
328
+ [
329
+ { "label" => "Last Name", "field_type" => "radio_button", 'option_values' => ["LEIGH", "IRVING", "GERTRUDE"] },
330
+ { "label" => "Lizzie Year of Birth", "field_type" => "radio_button", 'option_values' => ["1873", "1933", "1896"] }
331
+ ]
332
+ }
333
+ }
334
+ })
335
+ @line.stations.first.badges badge
336
+ @line.stations.first.badges.first.settings["test"]["form"]["_type"].should eql("TaskForm")
337
+ @line.stations.first.badges.first.settings["test"]["form"]["form_fields"].should eql([{"label"=>"Last Name", "field_type"=>"radio_button", "option_values"=>["LEIGH", "IRVING", "GERTRUDE"]}, {"label"=>"Lizzie Year of Birth", "field_type"=>"radio_button", "option_values"=>["1873", "1933", "1896"]}])
338
+
339
+ end
340
+
341
+ end
342
+ end