cloudfactory 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +7 -0
- data/lib/cf/cli.rb +41 -41
- data/lib/cf/cli/line.rb +24 -4
- data/lib/cf/cli/line_yaml_validator.rb +3 -1
- data/lib/cf/cli/templates/sample-line/sample-line.csv +2 -2
- data/lib/cf/line.rb +20 -7
- data/lib/cf/station.rb +35 -12
- data/lib/cf/version.rb +1 -1
- data/spec/badge_spec.rb +6 -6
- data/spec/concept_tagging_robot_spec.rb +2 -0
- data/spec/content_scraping_robot_spec.rb +6 -4
- data/spec/custom_task_form_spec.rb +11 -11
- data/spec/entity_extraction_robot_spec.rb +12 -10
- data/spec/form_field_spec.rb +6 -6
- data/spec/google_translate_robot_spec.rb +4 -3
- data/spec/human_worker_spec.rb +8 -8
- data/spec/image_processing_robot_spec.rb +2 -0
- data/spec/input_format_spec.rb +2 -3
- data/spec/keyword_matching_and_text_extraction_robot_spec.rb +2 -0
- data/spec/line_spec.rb +21 -21
- data/spec/mailer_robot_spec.rb +8 -6
- data/spec/media_converter_robot_spec.rb +8 -7
- data/spec/media_splitting_robot_spec.rb +2 -0
- data/spec/robot_worker_spec.rb +1 -1
- data/spec/run_spec.rb +31 -20
- data/spec/sentiment_robot_spec.rb +2 -0
- data/spec/station_spec.rb +11 -14
- data/spec/task_form_spec.rb +9 -9
- data/spec/term_extraction_robot_spec.rb +6 -4
- data/spec/text_appending_robot_spec.rb +2 -2
- metadata +48 -48
@@ -79,7 +79,7 @@ describe CF::CustomTaskForm do
|
|
79
79
|
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
80
80
|
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
81
81
|
CF::Station.create({:line => self, :type => "work"}) do |s|
|
82
|
-
CF::HumanWorker.new({:station => s, :number =>
|
82
|
+
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
83
83
|
CF::CustomTaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe", :raw_html => html, :raw_css => css, :raw_javascript => javascript})
|
84
84
|
end
|
85
85
|
end
|
@@ -222,13 +222,13 @@ describe CF::CustomTaskForm do
|
|
222
222
|
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
223
223
|
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
224
224
|
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
225
|
-
CF::HumanWorker.new({:station => s, :number =>
|
225
|
+
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
226
226
|
CF::CustomTaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe", :raw_html => html})
|
227
227
|
end
|
228
228
|
end
|
229
229
|
line.title.should eql("Digitizecustomform111")
|
230
230
|
line.department_name.should eql("Digitization")
|
231
|
-
line.stations.first.form.errors.should eql(
|
231
|
+
line.stations.first.form.errors.should eql(["Raw html should contain a Form tag", "Raw html The name 'final_output[first_name]' is not valid, it should be of format output[name]", "Raw html The name 'final_output[middle_name]' is not valid, it should be of format output[name]", "Raw html The name 'final_output[last_name]' is not valid, it should be of format output[name]", "Raw html The name 'final_output[email]' is not valid, it should be of format output[name]", "Raw html The name 'final_output[phone]' is not valid, it should be of format output[name]", "Raw html The name 'final_output[mobile]' is not valid, it should be of format output[name]"])
|
232
232
|
end
|
233
233
|
end
|
234
234
|
|
@@ -265,13 +265,13 @@ describe CF::CustomTaskForm do
|
|
265
265
|
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
266
266
|
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
267
267
|
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
268
|
-
CF::HumanWorker.new({:station => s, :number =>
|
268
|
+
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
269
269
|
CF::CustomTaskForm.create({:station => s, :instruction => "Describe", :raw_html => html})
|
270
270
|
end
|
271
271
|
end
|
272
272
|
line.title.should eql("Digitizecustomform112")
|
273
273
|
line.department_name.should eql("Digitization")
|
274
|
-
line.stations.first.form.errors.should eql(
|
274
|
+
line.stations.first.form.errors.should eql(["Title can't be blank", "Raw html should contain a Form tag"])
|
275
275
|
end
|
276
276
|
end
|
277
277
|
|
@@ -308,13 +308,13 @@ describe CF::CustomTaskForm do
|
|
308
308
|
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
309
309
|
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
310
310
|
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
311
|
-
CF::HumanWorker.new({:station => s, :number =>
|
311
|
+
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
312
312
|
CF::CustomTaskForm.create({:station => s, :title => "title", :raw_html => html})
|
313
313
|
end
|
314
314
|
end
|
315
315
|
line.title.should eql("Digitizecustomform113")
|
316
316
|
line.department_name.should eql("Digitization")
|
317
|
-
line.stations.first.form.errors.should eql(
|
317
|
+
line.stations.first.form.errors.should eql(["Instruction can't be blank", "Raw html should contain a Form tag"])
|
318
318
|
end
|
319
319
|
end
|
320
320
|
|
@@ -325,13 +325,13 @@ describe CF::CustomTaskForm do
|
|
325
325
|
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
326
326
|
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
327
327
|
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
328
|
-
CF::HumanWorker.new({:station => s, :number =>
|
328
|
+
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
329
329
|
CF::CustomTaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"})
|
330
330
|
end
|
331
331
|
end
|
332
332
|
line.title.should eql("Digitizecustomform114")
|
333
333
|
line.department_name.should eql("Digitization")
|
334
|
-
line.stations.first.form.errors.should eql(
|
334
|
+
line.stations.first.form.errors.should eql(["Raw html is required"])
|
335
335
|
end
|
336
336
|
end
|
337
337
|
|
@@ -342,7 +342,7 @@ describe CF::CustomTaskForm do
|
|
342
342
|
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
343
343
|
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
344
344
|
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
345
|
-
CF::HumanWorker.new({:station => s, :number =>
|
345
|
+
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
346
346
|
end
|
347
347
|
end
|
348
348
|
|
@@ -351,7 +351,7 @@ describe CF::CustomTaskForm do
|
|
351
351
|
|
352
352
|
line.title.should eql("Digitizecustomform115")
|
353
353
|
line.department_name.should eql("Digitization")
|
354
|
-
line.stations.first.form.errors.should eql(
|
354
|
+
line.stations.first.form.errors.should eql(["Raw html is required"])
|
355
355
|
end
|
356
356
|
end
|
357
357
|
end
|
@@ -8,17 +8,18 @@ module CF
|
|
8
8
|
# WebMock.allow_net_connect!
|
9
9
|
VCR.use_cassette "robot_worker/entity_extraction_robot/block/create-worker-single-station", :record => :new_episodes do
|
10
10
|
line = CF::Line.create("entity_extraction_robot","Digitization") do |l|
|
11
|
-
CF::InputFormat.new({:line => l, :name => "text", :
|
11
|
+
CF::InputFormat.new({:line => l, :name => "text", :required => "true"})
|
12
12
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
13
13
|
CF::RobotWorker.create({:station => s, :type => "entity_extraction_robot", :settings => {:document => ["Franz Kafka and George Orwell are authors. Ludwig Von Beethoven and Mozart are musicians. China and Japan are countries"]}})
|
14
14
|
end
|
15
15
|
end
|
16
16
|
run = CF::Run.create(line, "entity_extraction_robot_run", [{"text"=> "Franz Kafka and George Orwell are authors. Ludwig Von Beethoven and Mozart are musicians. China and Japan are countries"}])
|
17
|
+
# sleep 20
|
17
18
|
output = run.final_output
|
18
|
-
output.first['entity_counts_of_document'].should eql([
|
19
|
-
output.first['entity_names_of_document'].should eql([
|
20
|
-
output.first['entity_relevances_of_document'].should eql([
|
21
|
-
output.first['entity_types_of_document'].should eql([
|
19
|
+
output.first['entity_counts_of_document'].should eql(["2", "2", "1", "1", "2", "1"])
|
20
|
+
output.first['entity_names_of_document'].should eql(["Ludwig Von Beethoven", "Franz Kafka", "George Orwell", "Mozart", "China", "Japan"])
|
21
|
+
output.first['entity_relevances_of_document'].should eql([92.12089999999999, 73.8997, 48.079100000000004, 28.9416, 27.1982, 21.1997])
|
22
|
+
output.first['entity_types_of_document'].should eql(["Person", "Person", "Person", "Person", "Country", "Country"])
|
22
23
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
23
24
|
line.stations.first.worker.reward.should eql(0.5)
|
24
25
|
line.stations.first.worker.number.should eql(1)
|
@@ -30,7 +31,7 @@ module CF
|
|
30
31
|
# WebMock.allow_net_connect!
|
31
32
|
VCR.use_cassette "robot_worker/entity_extraction_robot/plain-ruby/create-worker-in-first-station", :record => :new_episodes do
|
32
33
|
line = CF::Line.new("entity_extraction_robot_1","Digitization")
|
33
|
-
input_format = CF::InputFormat.new({:name => "text", :required => "true"
|
34
|
+
input_format = CF::InputFormat.new({:name => "text", :required => "true"})
|
34
35
|
line.input_formats input_format
|
35
36
|
|
36
37
|
station = CF::Station.new({:type => "work"})
|
@@ -40,11 +41,12 @@ module CF
|
|
40
41
|
line.stations.first.worker = worker
|
41
42
|
|
42
43
|
run = CF::Run.create(line, "entity_extraction_robot_run_1", [{"text"=> "Franz Kafka and George Orwell are authors. Ludwig Von Beethoven and Mozart are musicians. China and Japan are countries"}])
|
44
|
+
# sleep 20
|
43
45
|
output = run.final_output
|
44
|
-
output.first['entity_counts_of_document'].should eql([
|
45
|
-
output.first['entity_names_of_document'].should eql([
|
46
|
-
output.first['entity_relevances_of_document'].should eql([
|
47
|
-
output.first['entity_types_of_document'].should eql([
|
46
|
+
output.first['entity_counts_of_document'].should eql(["2", "2", "1", "1", "2", "1"])
|
47
|
+
output.first['entity_names_of_document'].should eql(["Ludwig Von Beethoven", "Franz Kafka", "George Orwell", "Mozart", "China", "Japan"])
|
48
|
+
output.first['entity_relevances_of_document'].should eql([92.12089999999999, 73.8997, 48.079100000000004, 28.9416, 27.1982, 21.1997])
|
49
|
+
output.first['entity_types_of_document'].should eql(["Person", "Person", "Person", "Person", "Country", "Country"])
|
48
50
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
49
51
|
line.stations.first.worker.reward.should eql(0.5)
|
50
52
|
line.stations.first.worker.number.should eql(1)
|
data/spec/form_field_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe CF::FormField do
|
|
13
13
|
station = CF::Station.new({:type => "work"})
|
14
14
|
line.stations station
|
15
15
|
|
16
|
-
worker = CF::HumanWorker.new({:number =>
|
16
|
+
worker = CF::HumanWorker.new({:number => 1, :reward => 20})
|
17
17
|
line.stations.first.worker = worker
|
18
18
|
|
19
19
|
form = CF::TaskForm.new({:title => "Enter text from a business card image", :instruction => "Describe"})
|
@@ -52,7 +52,7 @@ describe CF::FormField do
|
|
52
52
|
line = CF::Line.create("Digitize-0101111-final", "Digitization") do
|
53
53
|
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
54
54
|
CF::Station.create({:line => self, :type => "work"}) do |station|
|
55
|
-
CF::HumanWorker.new({:station => station, :number =>
|
55
|
+
CF::HumanWorker.new({:station => station, :number => 1, :reward => 20})
|
56
56
|
CF::TaskForm.create({:station => station, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
57
57
|
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
58
58
|
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
@@ -65,7 +65,7 @@ describe CF::FormField do
|
|
65
65
|
line.department_name.should eq("Digitization")
|
66
66
|
line.input_formats.first.name.should eql("image_url")
|
67
67
|
line.stations.first.type.should eq("WorkStation")
|
68
|
-
line.stations.first.worker.number.should eq(
|
68
|
+
line.stations.first.worker.number.should eq(1)
|
69
69
|
line.stations.first.form.instruction.should eq("Describe")
|
70
70
|
line.stations.first.form.form_fields[0].label.should eq("First Name")
|
71
71
|
line.stations.first.form.form_fields[0].field_type.should eq("short_answer")
|
@@ -122,7 +122,7 @@ describe CF::FormField do
|
|
122
122
|
line = CF::Line.create("Digitize-0101111-final", "Digitization") do
|
123
123
|
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
124
124
|
CF::Station.create({:line => self, :type => "work"}) do |station|
|
125
|
-
CF::HumanWorker.new({:station => station, :number =>
|
125
|
+
CF::HumanWorker.new({:station => station, :number => 1, :reward => 20})
|
126
126
|
CF::TaskForm.create({:station => station, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
127
127
|
CF::FormField.new({:form => i, :field_type => "short_answer", :required => "true"})
|
128
128
|
end
|
@@ -143,7 +143,7 @@ describe CF::FormField do
|
|
143
143
|
station = CF::Station.new({:type => "work"})
|
144
144
|
line.stations station
|
145
145
|
|
146
|
-
worker = CF::HumanWorker.new({:number =>
|
146
|
+
worker = CF::HumanWorker.new({:number => 1, :reward => 20})
|
147
147
|
line.stations.first.worker = worker
|
148
148
|
|
149
149
|
form = CF::TaskForm.new({:title => "Enter text from a business card image", :instruction => "Describe"})
|
@@ -163,7 +163,7 @@ describe CF::FormField do
|
|
163
163
|
line = CF::Line.create("Display_form_fields", "Digitization") do
|
164
164
|
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
165
165
|
CF::Station.create({:line => self, :type => "work"}) do |station|
|
166
|
-
CF::HumanWorker.new({:station => station, :number =>
|
166
|
+
CF::HumanWorker.new({:station => station, :number => 1, :reward => 20})
|
167
167
|
CF::TaskForm.create({:station => station, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
168
168
|
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
169
169
|
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
@@ -8,7 +8,7 @@ module CF
|
|
8
8
|
# WebMock.allow_net_connect!
|
9
9
|
VCR.use_cassette "robot_worker/google_translate_robot/plain-ruby/create-worker-in-first-station", :record => :new_episodes do
|
10
10
|
line = CF::Line.new("google_translate_robot","Digitization")
|
11
|
-
input_format = CF::InputFormat.new({:name => "text", :required => true
|
11
|
+
input_format = CF::InputFormat.new({:name => "text", :required => true})
|
12
12
|
line.input_formats input_format
|
13
13
|
|
14
14
|
station = CF::Station.new({:type => "work"})
|
@@ -26,6 +26,7 @@ module CF
|
|
26
26
|
line.stations.first.worker.settings.should eql({:data => ["{{text}}"], :from => "en", :to => "es"})
|
27
27
|
line.stations.first.worker.type.should eql("GoogleTranslateRobot")
|
28
28
|
run = CF::Run.create(line, "google_translate_robot_run", [{"text"=> "I started loving Monsoon"}])
|
29
|
+
# sleep 20
|
29
30
|
@final_output = run.final_output
|
30
31
|
line.stations.first.worker.number.should eq(1)
|
31
32
|
@final_output.first['translation_of_text'].should eql('Empecé a amar a Monzón')
|
@@ -36,7 +37,7 @@ module CF
|
|
36
37
|
VCR.use_cassette "robot_worker/google_translate_robot/block/create-worker-block-dsl-way", :record => :new_episodes do
|
37
38
|
# WebMock.allow_net_connect!
|
38
39
|
line = CF::Line.create("google_translate_robot_1","Digitization") do |l|
|
39
|
-
CF::InputFormat.new({:line => l, :name => "text", :required => true
|
40
|
+
CF::InputFormat.new({:line => l, :name => "text", :required => true})
|
40
41
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
41
42
|
CF::RobotWorker.create({:station => s, :type => "google_translate_robot", :settings => {:data => ["{{text}}"], :from => "en", :to => "es"}})
|
42
43
|
end
|
@@ -47,7 +48,7 @@ module CF
|
|
47
48
|
line.stations.first.worker.settings.should eql({:data => ["{{text}}"], :from => "en", :to => "es"})
|
48
49
|
line.stations.first.worker.type.should eql("GoogleTranslateRobot")
|
49
50
|
run = CF::Run.create(line, "google_translate_robot_run_1", [{"text"=> "I started loving Monsoon"}])
|
50
|
-
|
51
|
+
# sleep 20
|
51
52
|
@final_output = run.final_output
|
52
53
|
line.stations.first.worker.number.should eq(1)
|
53
54
|
@final_output.first['translation_of_text'].should eql('Empecé a amar a Monzón')
|
data/spec/human_worker_spec.rb
CHANGED
@@ -9,11 +9,11 @@ module CF
|
|
9
9
|
line = CF::Line.create("human_worker", "Digitization") do |l|
|
10
10
|
CF::InputFormat.new({:line => l, :name => "image_url", :required => true, :valid_type => "url"})
|
11
11
|
CF::Station.create({:line =>l, :type => "work"}) do |s|
|
12
|
-
@worker = CF::HumanWorker.new({:station => s, :number =>
|
12
|
+
@worker = CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
13
13
|
end
|
14
14
|
end
|
15
15
|
line.stations.first.type.should eql("WorkStation")
|
16
|
-
line.stations.first.worker.number.should eql(
|
16
|
+
line.stations.first.worker.number.should eql(1)
|
17
17
|
line.stations.first.worker.reward.should eql(20)
|
18
18
|
end
|
19
19
|
end
|
@@ -56,10 +56,10 @@ module CF
|
|
56
56
|
line = CF::Line.create("Display_human_worker", "Digitization") do
|
57
57
|
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
58
58
|
CF::Station.create({:line => self, :type => "work"}) do |station|
|
59
|
-
CF::HumanWorker.new({:station => station, :number =>
|
59
|
+
CF::HumanWorker.new({:station => station, :number => 1, :reward => 20})
|
60
60
|
end
|
61
61
|
end
|
62
|
-
line.stations.first.worker.to_s.should eql("{:id => => #{line.stations.first.worker.id}, :number =>
|
62
|
+
line.stations.first.worker.to_s.should eql("{:id => => #{line.stations.first.worker.id}, :number => 1, :reward => 20, :stat_badge => {\"approval_rating\"=>80, \"assignment_duration\"=>3600, \"abandonment_rate\"=>30, \"country\"=>nil}, :skill_badges => [nil], :errors => }")
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -83,11 +83,11 @@ module CF
|
|
83
83
|
line = CF::Line.create("human_worker3", "Digitization") do |l|
|
84
84
|
CF::InputFormat.new({:line => l, :name => "image_url", :required => true, :valid_type => "url"})
|
85
85
|
CF::Station.create({:line =>l, :type => "work"}) do |s|
|
86
|
-
@worker = CF::HumanWorker.new({:station => s, :number =>
|
86
|
+
@worker = CF::HumanWorker.new({:station => s, :number => 1, :reward => 20, :skill_badge => badge})
|
87
87
|
end
|
88
88
|
end
|
89
89
|
line.stations.first.type.should eql("WorkStation")
|
90
|
-
line.stations.first.worker.number.should eql(
|
90
|
+
line.stations.first.worker.number.should eql(1)
|
91
91
|
line.stations.first.worker.reward.should eql(20)
|
92
92
|
line.stations.first.worker.skill_badges.first.should eql([{"title"=>"Football Fanatic", "description"=>"This qualification allows you to perform work at stations which have this badge.", "score"=>nil, "quality_rating"=>nil, "max_badges"=>3, "skill_test"=>{"score_after"=>"submit", "manual_scoring"=>false, "display_answers"=>false, "edit_answers"=>true, "retries"=>0, "pass_percentage"=>100, "test_units"=>[{"input"=>{"name"=>"Lionel Andres Messi", "country"=>"Argentina"}, "expected_output"=>[{"birthplace"=>"Rosario, Santa Fe, Argentina", "match_options"=>{"tolerance"=>"1", "ignore_case"=>"false"}, "position"=>"CF", "current-club"=>"Barcelona"}], "match_options"=>{"tolerance"=>0, "ignore_case"=>false}}]}}])
|
93
93
|
line.stations.first.worker.stat_badge.should eql({"approval_rating"=>80, "assignment_duration"=>3600, "abandonment_rate"=>30, "country"=>nil})
|
@@ -116,11 +116,11 @@ module CF
|
|
116
116
|
station = CF::Station.new({:type => "work"})
|
117
117
|
line.stations station
|
118
118
|
|
119
|
-
worker = CF::HumanWorker.new({:number =>
|
119
|
+
worker = CF::HumanWorker.new({:number => 1, :reward => 20, :skill_badge => skill_badge})
|
120
120
|
line.stations.first.worker = worker
|
121
121
|
|
122
122
|
line.stations.first.type.should eql("WorkStation")
|
123
|
-
line.stations.first.worker.number.should eql(
|
123
|
+
line.stations.first.worker.number.should eql(1)
|
124
124
|
line.stations.first.worker.reward.should eql(20)
|
125
125
|
line.stations.first.worker.skill_badges.first.should eql([{"title"=>"Football Fanatic", "description"=>"This qualification allows you to perform work at stations which have this badge.", "score"=>nil, "quality_rating"=>nil, "max_badges"=>3, "skill_test"=>{"score_after"=>"submit", "manual_scoring"=>false, "display_answers"=>false, "edit_answers"=>true, "retries"=>0, "pass_percentage"=>100, "test_units"=>[{"input"=>{"name"=>"Lionel Andres Messi", "country"=>"Argentina"}, "expected_output"=>[{"birthplace"=>"Rosario, Santa Fe, Argentina", "match_options"=>{"tolerance"=>"1", "ignore_case"=>"false"}, "position"=>"CF", "current-club"=>"Barcelona"}], "match_options"=>{"tolerance"=>0, "ignore_case"=>false}}]}}])
|
126
126
|
line.stations.first.worker.stat_badge.should eql({"approval_rating"=>80, "assignment_duration"=>3600, "abandonment_rate"=>30, "country"=>nil})
|
@@ -14,6 +14,7 @@ module CF
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
run = CF::Run.create(line, "image_processing_robot_run", [{"url"=> "http://wwwdelivery.superstock.com/WI/223/1527/PreviewComp/SuperStock_1527R-020214.jpg"}])
|
17
|
+
# sleep 20
|
17
18
|
output = run.final_output
|
18
19
|
converted_url = output.first['processed_image_of_url']
|
19
20
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url}").should eql(true)
|
@@ -39,6 +40,7 @@ module CF
|
|
39
40
|
line.stations.first.worker = worker
|
40
41
|
|
41
42
|
run = CF::Run.create(line, "image_processing_robot_run_1", [{"url"=> "http://wwwdelivery.superstock.com/WI/223/1527/PreviewComp/SuperStock_1527R-020214.jpg"}])
|
43
|
+
# sleep 20
|
42
44
|
output = run.final_output
|
43
45
|
converted_url = output.first['processed_image_of_url']
|
44
46
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url}").should eql(true)
|
data/spec/input_format_spec.rb
CHANGED
@@ -6,10 +6,9 @@ describe CF::InputFormat do
|
|
6
6
|
# WebMock.allow_net_connect!
|
7
7
|
VCR.use_cassette "input_formats/plain-ruby/create-within-line", :record => :new_episodes do
|
8
8
|
line = CF::Line.new("Digitize","Digitization")
|
9
|
-
input_format = CF::InputFormat.new({:name => "Company", :required => true
|
9
|
+
input_format = CF::InputFormat.new({:name => "Company", :required => true})
|
10
10
|
line.input_formats input_format
|
11
11
|
line.input_formats.first.name.should eql("Company")
|
12
|
-
line.input_formats.first.valid_type.should eql("general")
|
13
12
|
end
|
14
13
|
end
|
15
14
|
|
@@ -82,7 +81,7 @@ describe CF::InputFormat do
|
|
82
81
|
line = CF::Line.create("Display_input_format", "Digitization") do
|
83
82
|
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
84
83
|
CF::Station.create({:line => self, :type => "work"}) do |station|
|
85
|
-
CF::HumanWorker.new({:station => station, :number =>
|
84
|
+
CF::HumanWorker.new({:station => station, :number => 1, :reward => 20})
|
86
85
|
end
|
87
86
|
end
|
88
87
|
line.input_formats.first.to_s.should eql("{:id => #{line.input_formats.first.id}, :name => image_url, :required => true, :valid_type => url, :errors => }")
|
@@ -17,6 +17,7 @@ module CF
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
run = CF::Run.create(line, "keyword_matching_robot_run", [{"url"=> "http://techcrunch.com/2011/07/26/with-v2-0-assistly-brings-a-simple-pricing-model-rewards-and-a-bit-of-free-to-customer-service-software"}])
|
20
|
+
# sleep 20
|
20
21
|
output = run.final_output
|
21
22
|
output.first['included_keywords_count_in_contents_of_url'].should eql(["3", "2", "2"])
|
22
23
|
output.first['keyword_included_in_contents_of_url'].should eql(["SaaS", "see", "additional"])
|
@@ -53,6 +54,7 @@ module CF
|
|
53
54
|
line.stations.last.worker = worker
|
54
55
|
|
55
56
|
run = CF::Run.create(line, "keyword_matching_robot_run_1", [{"url"=> "http://techcrunch.com/2011/07/26/with-v2-0-assistly-brings-a-simple-pricing-model-rewards-and-a-bit-of-free-to-customer-service-software"}])
|
57
|
+
# sleep 20
|
56
58
|
output = run.final_output
|
57
59
|
output.first['included_keywords_count_in_contents_of_url'].should eql(["3", "2", "2"])
|
58
60
|
output.first['keyword_included_in_contents_of_url'].should eql(["SaaS", "see", "additional"])
|
data/spec/line_spec.rb
CHANGED
@@ -35,7 +35,7 @@ describe CF::Line do
|
|
35
35
|
line = CF::Line.create("Digitizeard", "Digitization") do
|
36
36
|
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
37
37
|
CF::Station.create({:line => self, :type => "work"}) do |station|
|
38
|
-
CF::HumanWorker.new({:station => station, :number =>
|
38
|
+
CF::HumanWorker.new({:station => station, :number => 1, :reward => 20})
|
39
39
|
CF::TaskForm.create({:station => station, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
40
40
|
CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
41
41
|
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
|
@@ -47,7 +47,7 @@ describe CF::Line do
|
|
47
47
|
line.department_name.should eq("Digitization")
|
48
48
|
line.input_formats.first.name.should eql("image_url")
|
49
49
|
line.stations.first.type.should eq("WorkStation")
|
50
|
-
line.stations.first.worker.number.should eq(
|
50
|
+
line.stations.first.worker.number.should eq(1)
|
51
51
|
line.stations.first.form.instruction.should eq("Describe")
|
52
52
|
line.stations.first.form.form_fields.first.label.should eq("First Name")
|
53
53
|
end
|
@@ -72,7 +72,7 @@ describe CF::Line do
|
|
72
72
|
line = CF::Line.create("Digitizer1", "Digitization") do |l|
|
73
73
|
CF::InputFormat.new({:line => l, :name => "image_url", :required => true, :valid_type => "url"})
|
74
74
|
CF::Station.create({:line => l, :type => "work"}) do |station|
|
75
|
-
CF::HumanWorker.new({:line => l, :station => station, :number =>
|
75
|
+
CF::HumanWorker.new({:line => l, :station => station, :number => 1, :reward => 20})
|
76
76
|
CF::TaskForm.create({:station => station, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
77
77
|
CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
78
78
|
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
|
@@ -84,7 +84,7 @@ describe CF::Line do
|
|
84
84
|
line.department_name.should eq("Digitization")
|
85
85
|
line.input_formats.first.name.should eql("image_url")
|
86
86
|
line.stations.first.type.should eq("WorkStation")
|
87
|
-
line.stations.first.worker.number.should eq(
|
87
|
+
line.stations.first.worker.number.should eq(1)
|
88
88
|
line.stations.first.worker.reward.should eq(20)
|
89
89
|
line.stations.first.form.title.should eq("Enter text from a business card image")
|
90
90
|
line.stations.first.form.instruction.should eq("Describe")
|
@@ -118,7 +118,7 @@ describe CF::Line do
|
|
118
118
|
end
|
119
119
|
|
120
120
|
lines = CF::Line.public_lines
|
121
|
-
lines.
|
121
|
+
lines.map(&:title).should include("lineee-1")
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|
@@ -151,7 +151,7 @@ describe CF::Line do
|
|
151
151
|
VCR.use_cassette "lines/block/non-existing-line", :record => :new_episodes do
|
152
152
|
get_line = CF::Line.info("non-existing-line-title")
|
153
153
|
get_line.code.should eql(404)
|
154
|
-
get_line.error.message.should match("Line
|
154
|
+
get_line.error.message.should match("Line not found for title: non-existing-line-title under your account")
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
@@ -165,7 +165,7 @@ describe CF::Line do
|
|
165
165
|
resp = line.destroy
|
166
166
|
resp.code.should eql(200)
|
167
167
|
deleted_resp = CF::Line.info(line)
|
168
|
-
deleted_resp.error.message.should eql("Line
|
168
|
+
deleted_resp.error.message.should eql("Line not found for title: digitizerd-2 under your account")
|
169
169
|
end
|
170
170
|
end
|
171
171
|
|
@@ -188,7 +188,7 @@ describe CF::Line do
|
|
188
188
|
line = CF::Line.create("Digiard-11","Digitization") do |l|
|
189
189
|
CF::InputFormat.new({:line => l, :name => "image_url", :required => true, :valid_type => "url"})
|
190
190
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
191
|
-
CF::HumanWorker.new({:station => s, :number =>
|
191
|
+
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
192
192
|
CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
193
193
|
CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
194
194
|
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
|
@@ -199,7 +199,7 @@ describe CF::Line do
|
|
199
199
|
line.title.should eq("Digiard-11")
|
200
200
|
line.input_formats.first.name.should eql("image_url")
|
201
201
|
line.stations.first.type.should eq("WorkStation")
|
202
|
-
line.stations.first.worker.number.should eq(
|
202
|
+
line.stations.first.worker.number.should eq(1)
|
203
203
|
line.stations.first.worker.reward.should eq(20)
|
204
204
|
line.stations.first.form.title.should eq("Enter text from a business card image")
|
205
205
|
line.stations.first.form.instruction.should eq("Describe")
|
@@ -235,10 +235,10 @@ describe CF::Line do
|
|
235
235
|
CF::InputFormat.new({:line => line, :name => "image_url", :required => true, :valid_type => "url"})
|
236
236
|
station = CF::Station.new({:type => "work"})
|
237
237
|
line.stations station
|
238
|
-
worker = CF::HumanWorker.new({:number =>
|
238
|
+
worker = CF::HumanWorker.new({:number => 1, :reward => 20})
|
239
239
|
line.stations.first.worker = worker
|
240
240
|
line.stations.first.type.should eql("WorkStation")
|
241
|
-
line.stations.first.worker.number.should eql(
|
241
|
+
line.stations.first.worker.number.should eql(1)
|
242
242
|
line.stations.first.worker.reward.should eql(20)
|
243
243
|
end
|
244
244
|
end
|
@@ -251,7 +251,7 @@ describe CF::Line do
|
|
251
251
|
station = CF::Station.new({:type => "work"})
|
252
252
|
line.stations station
|
253
253
|
|
254
|
-
worker = CF::HumanWorker.new({:number =>
|
254
|
+
worker = CF::HumanWorker.new({:number => 1, :reward => 20})
|
255
255
|
line.stations.first.worker = worker
|
256
256
|
|
257
257
|
form = CF::TaskForm.new({:title => "Enter text from a business card image", :instruction => "Describe"})
|
@@ -284,7 +284,7 @@ describe CF::Line do
|
|
284
284
|
station = CF::Station.new({:type => "work"})
|
285
285
|
line.stations station
|
286
286
|
|
287
|
-
worker = CF::HumanWorker.new({:number =>
|
287
|
+
worker = CF::HumanWorker.new({:number => 1, :reward => 20})
|
288
288
|
line.stations.first.worker = worker
|
289
289
|
|
290
290
|
form = CF::TaskForm.new({:title => "Enter text from a business card image", :instruction => "Describe"})
|
@@ -325,7 +325,7 @@ describe CF::Line do
|
|
325
325
|
VCR.use_cassette "lines/block/delete-line-of-active-run", :record => :new_episodes do
|
326
326
|
# WebMock.allow_net_connect!
|
327
327
|
line = CF::Line.create("delete_line_of_run","Digitization") do |l|
|
328
|
-
CF::InputFormat.new({:line => l, :name => "Company", :required => true
|
328
|
+
CF::InputFormat.new({:line => l, :name => "Company", :required => true})
|
329
329
|
CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
|
330
330
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
331
331
|
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
@@ -338,16 +338,15 @@ describe CF::Line do
|
|
338
338
|
end
|
339
339
|
|
340
340
|
run = CF::Run.create(line, "delete_line_of_run_run", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
|
341
|
-
|
342
341
|
delete = CF::Line.destroy("delete_line_of_run")
|
343
|
-
delete.error.message.should eql("
|
342
|
+
delete.error.message.should eql("Cannot delete line. You have production runs using this line. Pass force option to enforce deletion.")
|
344
343
|
delete.code.should_not eql(200)
|
345
344
|
|
346
345
|
forced_delete = CF::Line.destroy("delete_line_of_run", :forced => true)
|
347
346
|
|
348
347
|
search_line = CF::Line.find("delete_line_of_run")
|
349
348
|
search_line['code'].should eql(404)
|
350
|
-
search_line['error']['message'].should eql("Line
|
349
|
+
search_line['error']['message'].should eql("Line not found for title: delete_line_of_run under your account")
|
351
350
|
end
|
352
351
|
end
|
353
352
|
end
|
@@ -357,7 +356,7 @@ describe CF::Line do
|
|
357
356
|
VCR.use_cassette "lines/block/line-details", :record => :new_episodes do
|
358
357
|
# WebMock.allow_net_connect!
|
359
358
|
line = CF::Line.create("line_details","Digitization") do |l|
|
360
|
-
CF::InputFormat.new({:line => l, :name => "Company", :required => true
|
359
|
+
CF::InputFormat.new({:line => l, :name => "Company", :required => true})
|
361
360
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
362
361
|
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
363
362
|
CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
@@ -367,9 +366,10 @@ describe CF::Line do
|
|
367
366
|
end
|
368
367
|
line_details = CF::Line.inspect("line_details")
|
369
368
|
line_input_format_id = line_details['input_formats'].first['id']
|
369
|
+
worker_id = line_details['stations'].first['worker']['id']
|
370
370
|
form_field_id = line_details['stations'].first['form_fields'].first['id']
|
371
371
|
station_input_format_id = line_details['stations'].first['input_formats'].first['id']
|
372
|
-
line_details.should eql({"title"=>"line_details", "description"=>"", "
|
372
|
+
line_details.should eql({"title"=>"line_details", "description"=>"", "department"=>"Digitization", "code"=>200, "input_formats"=>[{"id"=>"#{line_input_format_id}", "name"=>"Company", "required"=>true, "valid_type"=>nil}], "stations"=>[{"index"=>1, "type"=>"WorkStation", "worker"=>{"id"=>"4e679284551127c825000203", "number"=>1, "reward"=>20, "type"=>"HumanWorker", "stat_badge"=>{"abandonment_rate"=>30, "approval_rating"=>80, "country"=>nil, "adult"=>nil}, "skill_badge"=>nil}, "form"=>{"title"=>"Enter text from a business card image", "instruction"=>"Describe"}, "form_fields"=>[{"id"=>"#{form_field_id}", "label"=>"First Name", "field_type"=>"short_answer", "hint"=>nil, "required"=>true, "unique"=>nil, "hide_label"=>nil, "value"=>nil}], "input_formats"=>[{"id"=>"#{station_input_format_id}", "name"=>"Company", "required"=>true, "valid_type"=>nil}]}]})
|
373
373
|
end
|
374
374
|
end
|
375
375
|
|
@@ -377,7 +377,7 @@ describe CF::Line do
|
|
377
377
|
VCR.use_cassette "lines/block/line-details_robot_worker", :record => :new_episodes do
|
378
378
|
# WebMock.allow_net_connect!
|
379
379
|
line = CF::Line.create("line_details_robot","Digitization") do |l|
|
380
|
-
CF::InputFormat.new({:line => l, :name => "text", :
|
380
|
+
CF::InputFormat.new({:line => l, :name => "text", :required => "true"})
|
381
381
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
382
382
|
CF::RobotWorker.create({:station => s, :type => "entity_extraction_robot", :settings => {:document => ["Franz Kafka and George Orwell are authors. Ludwig Von Beethoven and Mozart are musicians. China and Japan are countries"]}})
|
383
383
|
end
|
@@ -386,7 +386,7 @@ describe CF::Line do
|
|
386
386
|
line_input_format_id = line_details['input_formats'].first['id']
|
387
387
|
station_input_format_id = line_details['stations'].first['input_formats'].first['id']
|
388
388
|
worker_id = line_details['stations'].first['worker']['id']
|
389
|
-
line_details.should eql({"title"=>"line_details_robot", "description"=>"", "department"=>"Digitization", "code"=>200, "input_formats"=>[{"id"=>"#{line_input_format_id}", "name"=>"text", "required"=>true, "valid_type"=>
|
389
|
+
line_details.should eql({"title"=>"line_details_robot", "description"=>"", "department"=>"Digitization", "code"=>200, "input_formats"=>[{"id"=>"#{line_input_format_id}", "name"=>"text", "required"=>true, "valid_type"=>nil}], "stations"=>[{"index"=>1, "type"=>"WorkStation", "worker"=>{"id"=>"#{worker_id}", "number"=>1, "reward"=>0.5, "type"=>"EntityExtractionRobot"}, "input_formats"=>[{"id"=>"#{station_input_format_id}", "name"=>"text", "required"=>true, "valid_type"=>nil}]}]})
|
390
390
|
end
|
391
391
|
end
|
392
392
|
|