cloudfactory 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/fixtures/input_data/test.csv +2 -2
- data/lib/cf.rb +2 -1
- data/lib/cf/cli.rb +7 -0
- data/lib/cf/cli/line.rb +9 -1
- data/lib/cf/cli/line_yaml_validator.rb +183 -0
- data/lib/cf/cli/production.rb +17 -0
- data/lib/cf/line.rb +9 -8
- data/lib/cf/run.rb +3 -3
- data/lib/cf/version.rb +1 -1
- data/spec/badge_spec.rb +2 -2
- data/spec/concept_tagging_robot_spec.rb +6 -6
- data/spec/content_scraping_robot_spec.rb +2 -4
- data/spec/custom_task_form_spec.rb +10 -10
- data/spec/entity_extraction_robot_spec.rb +2 -2
- data/spec/form_field_spec.rb +30 -26
- data/spec/google_translate_robot_spec.rb +6 -12
- data/spec/human_worker_spec.rb +4 -4
- data/spec/image_processing_robot_spec.rb +6 -8
- data/spec/keyword_matching_and_text_extraction_robot_spec.rb +12 -12
- data/spec/line_spec.rb +15 -31
- data/spec/mailer_robot_spec.rb +12 -18
- data/spec/media_converter_robot_spec.rb +8 -14
- data/spec/media_splitting_robot_spec.rb +10 -14
- data/spec/run_spec.rb +50 -77
- data/spec/sentiment_robot_spec.rb +6 -8
- data/spec/station_spec.rb +23 -63
- data/spec/task_form_spec.rb +46 -73
- data/spec/term_extraction_robot_spec.rb +6 -10
- data/spec/text_appending_robot_spec.rb +6 -6
- metadata +47 -46
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module CF
|
4
4
|
describe CF::RobotWorker do
|
5
5
|
context "create a media converter robot worker" do
|
6
|
-
|
6
|
+
it "should create media_converter_robot worker for first station in a plain ruby way" do
|
7
7
|
# WebMock.allow_net_connect!
|
8
8
|
VCR.use_cassette "robot_worker/media_converter_robot/plain-ruby/create-worker-in-first-station", :record => :new_episodes do
|
9
9
|
line = CF::Line.new("media_converter_robot","Digitization")
|
@@ -23,7 +23,7 @@ module CF
|
|
23
23
|
station = CF::Station.new({:type => "work"})
|
24
24
|
line.stations station
|
25
25
|
|
26
|
-
worker = CF::RobotWorker.create({:type => "media_converter_robot", :settings => {:url => "
|
26
|
+
worker = CF::RobotWorker.create({:type => "media_converter_robot", :settings => {:url => ["{{url}}"], :to => "{{to}}", :audio_quality => "{{audio_quality}}", :video_quality => "{{video_quality}}"}})
|
27
27
|
line.stations.first.worker = worker
|
28
28
|
|
29
29
|
form = CF::TaskForm.new({:title => "Enter text", :instruction => "Describe"})
|
@@ -32,18 +32,15 @@ module CF
|
|
32
32
|
form_fields = CF::FormField.new({:label => "Description", :field_type => "SA", :required => "true"})
|
33
33
|
line.stations.first.form.form_fields form_fields
|
34
34
|
|
35
|
-
run = CF::Run.create(line, "media_converter_robot_run", [{"url"=> "
|
35
|
+
run = CF::Run.create(line, "media_converter_robot_run", [{"url"=> "http://media-robot.s3.amazonaws.com/media_robot/media/upload/8/ten.mov", "to" => "mpg", "audio_quality" => "320", "video_quality" => "3"}])
|
36
36
|
@final_output = run.final_output
|
37
37
|
line.stations.first.worker.number.should eq(1)
|
38
|
-
@final_output.first.final_output.first.
|
39
|
-
@final_output.first.final_output.first.video_quality.should eql("3")
|
40
|
-
@final_output.first.final_output.first.to.should eql("mpg")
|
41
|
-
converted_url = @final_output.first.final_output.first.converted_file_from_url.first
|
38
|
+
converted_url = @final_output.first.final_output.first.converted_file_from_url
|
42
39
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url}").should eql(true)
|
43
40
|
end
|
44
41
|
end
|
45
42
|
|
46
|
-
|
43
|
+
it "should create media_converter_robot in block DSL way" do
|
47
44
|
# WebMock.allow_net_connect!
|
48
45
|
VCR.use_cassette "robot_worker/media_converter_robot/block/create-worker-block-dsl-way", :record => :new_episodes do
|
49
46
|
line = CF::Line.create("media_converter_robot_1","Digitization") do |l|
|
@@ -52,18 +49,15 @@ module CF
|
|
52
49
|
CF::InputFormat.new({:line => l, :name => "audio_quality", :required => false, :valid_type => "general"})
|
53
50
|
CF::InputFormat.new({:line => l, :name => "video_quality", :required => false, :valid_type => "general"})
|
54
51
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
55
|
-
CF::RobotWorker.create({:station => s, :type => "media_converter_robot", :settings => {:url => "
|
52
|
+
CF::RobotWorker.create({:station => s, :type => "media_converter_robot", :settings => {:url => ["{{url}}"], :to => "{{to}}", :audio_quality => "{{audio_quality}}", :video_quality => "{{video_quality}}"}})
|
56
53
|
end
|
57
54
|
end
|
58
55
|
|
59
|
-
run = CF::Run.create(line, "media_converter_robot_run_1", [{"url"=> "
|
56
|
+
run = CF::Run.create(line, "media_converter_robot_run_1", [{"url"=> "http://media-robot.s3.amazonaws.com/media_robot/media/upload/8/ten.mov", "to" => "mpg", "audio_quality" => "320", "video_quality" => "3"}])
|
60
57
|
|
61
58
|
@final_output = run.final_output
|
62
59
|
line.stations.first.worker.number.should eq(1)
|
63
|
-
@final_output.first.final_output.first.
|
64
|
-
@final_output.first.final_output.first.video_quality.should eql("3")
|
65
|
-
@final_output.first.final_output.first.to.should eql("mpg")
|
66
|
-
converted_url = @final_output.first.final_output.first.converted_file_from_url.first
|
60
|
+
converted_url = @final_output.first.final_output.first.converted_file_from_url
|
67
61
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url}").should eql(true)
|
68
62
|
end
|
69
63
|
end
|
@@ -10,21 +10,19 @@ module CF
|
|
10
10
|
line = CF::Line.create("media_splitting_robot","Digitization") do |l|
|
11
11
|
CF::InputFormat.new({:line => l, :name => "url", :valid_type => "url", :required => "true"})
|
12
12
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
13
|
-
CF::RobotWorker.create({:station => s, :type => "media_splitting_robot", :settings => {:url => ["
|
13
|
+
CF::RobotWorker.create({:station => s, :type => "media_splitting_robot", :settings => {:url => ["{{url}}"], :split_duration => "2", :overlapping_time => "1"}})
|
14
14
|
end
|
15
15
|
end
|
16
16
|
run = CF::Run.create(line, "media_splitting_robot_run", [{"url"=> "http://media-robot.s3.amazonaws.com/media_robot/media/upload/8/ten.mov"}])
|
17
17
|
output = run.final_output
|
18
|
-
output.first.final_output.first.
|
19
|
-
output.first.final_output.first.
|
20
|
-
converted_url_1= output.first.final_output.first.splits_of_url.first.first
|
21
|
-
converted_url_2= output.first.final_output.first.splits_of_url.first.last
|
18
|
+
converted_url_1= output.first.final_output.first.splits_of_url.first
|
19
|
+
converted_url_2= output.first.final_output.first.splits_of_url.last
|
22
20
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url_1}").should eql(true)
|
23
21
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url_2}").should eql(true)
|
24
22
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
25
|
-
line.stations.first.worker.reward.should eql(
|
23
|
+
line.stations.first.worker.reward.should eql(0.01)
|
26
24
|
line.stations.first.worker.number.should eql(1)
|
27
|
-
line.stations.first.worker.settings.should eql({:url => ["
|
25
|
+
line.stations.first.worker.settings.should eql({:url => ["{{url}}"], :split_duration => "2", :overlapping_time => "1"})
|
28
26
|
line.stations.first.worker.type.should eql("MediaSplittingRobot")
|
29
27
|
end
|
30
28
|
end
|
@@ -39,21 +37,19 @@ module CF
|
|
39
37
|
station = CF::Station.new({:type => "work"})
|
40
38
|
line.stations station
|
41
39
|
|
42
|
-
worker = CF::RobotWorker.create({:type => "media_splitting_robot", :settings => {:url => ["
|
40
|
+
worker = CF::RobotWorker.create({:type => "media_splitting_robot", :settings => {:url => ["{{url}}"], :split_duration => "2", :overlapping_time => "1"}})
|
43
41
|
line.stations.first.worker = worker
|
44
42
|
|
45
43
|
run = CF::Run.create(line, "media_splitting_robot_run_1", [{"url"=> "http://media-robot.s3.amazonaws.com/media_robot/media/upload/8/ten.mov"}])
|
46
44
|
output = run.final_output
|
47
|
-
output.first.final_output.first.
|
48
|
-
output.first.final_output.first.
|
49
|
-
converted_url_1= output.first.final_output.first.splits_of_url.first.first
|
50
|
-
converted_url_2= output.first.final_output.first.splits_of_url.first.last
|
45
|
+
converted_url_1= output.first.final_output.first.splits_of_url.first
|
46
|
+
converted_url_2= output.first.final_output.first.splits_of_url.last
|
51
47
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url_1}").should eql(true)
|
52
48
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url_2}").should eql(true)
|
53
49
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
54
|
-
line.stations.first.worker.reward.should eql(
|
50
|
+
line.stations.first.worker.reward.should eql(0.01)
|
55
51
|
line.stations.first.worker.number.should eql(1)
|
56
|
-
line.stations.first.worker.settings.should eql({:url => ["
|
52
|
+
line.stations.first.worker.settings.should eql({:url => ["{{url}}"], :split_duration => "2", :overlapping_time => "1"})
|
57
53
|
line.stations.first.worker.type.should eql("MediaSplittingRobot")
|
58
54
|
end
|
59
55
|
end
|
data/spec/run_spec.rb
CHANGED
@@ -12,9 +12,9 @@ module CF
|
|
12
12
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
13
13
|
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
14
14
|
CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
15
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "
|
16
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "
|
17
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "
|
15
|
+
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
16
|
+
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
17
|
+
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -23,8 +23,8 @@ module CF
|
|
23
23
|
|
24
24
|
line.title.should eq("Digarde-007")
|
25
25
|
|
26
|
-
line.
|
27
|
-
line.
|
26
|
+
line.input_formats.first.name.should eq("Company")
|
27
|
+
line.input_formats.first.required.should eq(true)
|
28
28
|
|
29
29
|
line.stations[0].type.should eq("WorkStation")
|
30
30
|
|
@@ -35,7 +35,7 @@ module CF
|
|
35
35
|
line.stations[0].form.instruction.should eq("Describe")
|
36
36
|
|
37
37
|
line.stations[0].form.form_fields[0].label.should eq("First Name")
|
38
|
-
line.stations[0].form.form_fields[0].field_type.should eq("
|
38
|
+
line.stations[0].form.form_fields[0].field_type.should eq("short_answer")
|
39
39
|
line.stations[0].form.form_fields[0].required.should eq(true)
|
40
40
|
|
41
41
|
run.title.should eq("runnamee1")
|
@@ -44,7 +44,7 @@ module CF
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
it "should create a production run for input data as
|
47
|
+
it "should create a production run for input data as Block DSL way" do
|
48
48
|
# WebMock.allow_net_connect!
|
49
49
|
VCR.use_cassette "run/block/create-run-without-file", :record => :new_episodes do
|
50
50
|
line = CF::Line.create("Digitizard--11111000","Digitization") do |l|
|
@@ -53,9 +53,9 @@ module CF
|
|
53
53
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
54
54
|
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
55
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 => "
|
57
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "
|
58
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "
|
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
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -72,14 +72,13 @@ module CF
|
|
72
72
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
73
73
|
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
74
74
|
CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
75
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "
|
76
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "
|
77
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "
|
75
|
+
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
76
|
+
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
77
|
+
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
81
|
-
|
82
|
-
run = CF::Run.create(old_line,"Runusingline", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
|
81
|
+
run = CF::Run.create("Digitizeard123","Runusingline", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
|
83
82
|
run.title.should eq("Runusingline")
|
84
83
|
|
85
84
|
end
|
@@ -93,9 +92,9 @@ module CF
|
|
93
92
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
94
93
|
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
95
94
|
CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
96
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "
|
97
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "
|
98
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "
|
95
|
+
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
96
|
+
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
97
|
+
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
99
98
|
end
|
100
99
|
end
|
101
100
|
end
|
@@ -108,23 +107,25 @@ module CF
|
|
108
107
|
it "for a line in a plain ruby way" do
|
109
108
|
VCR.use_cassette "run/plain-ruby/create-run", :record => :new_episodes do
|
110
109
|
line = CF::Line.new("Digitize--ard1", "Digitization")
|
111
|
-
station = CF::Station.new({:type => "work"})
|
112
|
-
line.stations station
|
113
110
|
input_format_1 = CF::InputFormat.new({:name => "Company", :required => true, :valid_type => "general"})
|
114
111
|
input_format_2 = CF::InputFormat.new({:name => "Website", :required => true, :valid_type => "url"})
|
115
112
|
line.input_formats input_format_1
|
116
113
|
line.input_formats input_format_2
|
114
|
+
|
115
|
+
station = CF::Station.new({:type => "work"})
|
116
|
+
line.stations station
|
117
|
+
|
117
118
|
worker = CF::HumanWorker.new({:number => 1, :reward => 20})
|
118
119
|
line.stations.first.worker = worker
|
119
120
|
|
120
121
|
form = CF::TaskForm.new({:title => "Enter text from a business card image", :instruction => "Describe"})
|
121
122
|
line.stations.first.form = form
|
122
123
|
|
123
|
-
form_fields_1 = CF::FormField.new({:label => "First Name", :field_type => "
|
124
|
+
form_fields_1 = CF::FormField.new({:label => "First Name", :field_type => "short_answer", :required => "true"})
|
124
125
|
line.stations.first.form.form_fields form_fields_1
|
125
|
-
form_fields_2 = CF::FormField.new({:label => "Middle Name", :field_type => "
|
126
|
+
form_fields_2 = CF::FormField.new({:label => "Middle Name", :field_type => "short_answer"})
|
126
127
|
line.stations.first.form.form_fields form_fields_2
|
127
|
-
form_fields_3 = CF::FormField.new({:label => "Last Name", :field_type => "
|
128
|
+
form_fields_3 = CF::FormField.new({:label => "Last Name", :field_type => "short_answer", :required => "true"})
|
128
129
|
line.stations.first.form.form_fields form_fields_3
|
129
130
|
|
130
131
|
run = CF::Run.create(line,"Run-in-plain-ruby-way", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
|
@@ -144,12 +145,12 @@ module CF
|
|
144
145
|
line.stations.first.form.instruction.should eql("Describe")
|
145
146
|
|
146
147
|
line.stations.first.form.form_fields[0].label.should eql("First Name")
|
147
|
-
line.stations.first.form.form_fields[0].field_type.should eql("
|
148
|
+
line.stations.first.form.form_fields[0].field_type.should eql("short_answer")
|
148
149
|
line.stations.first.form.form_fields[0].required.should eql(true)
|
149
150
|
line.stations.first.form.form_fields[1].label.should eql("Middle Name")
|
150
|
-
line.stations.first.form.form_fields[1].field_type.should eql("
|
151
|
+
line.stations.first.form.form_fields[1].field_type.should eql("short_answer")
|
151
152
|
line.stations.first.form.form_fields[2].label.should eql("Last Name")
|
152
|
-
line.stations.first.form.form_fields[2].field_type.should eql("
|
153
|
+
line.stations.first.form.form_fields[2].field_type.should eql("short_answer")
|
153
154
|
line.stations.first.form.form_fields[2].required.should eql(true)
|
154
155
|
end
|
155
156
|
end
|
@@ -161,44 +162,18 @@ module CF
|
|
161
162
|
CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
|
162
163
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
163
164
|
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
164
|
-
CF::TaskForm.create({:station => s, :title => "Enter
|
165
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "
|
166
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "
|
167
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "
|
165
|
+
CF::TaskForm.create({:station => s, :title => "Enter about CEO from card", :instruction => "Describe"}) do |i|
|
166
|
+
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
167
|
+
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
168
|
+
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
168
169
|
end
|
169
170
|
end
|
170
171
|
end
|
171
172
|
run = CF::Run.create(line, "run-name-result-0111111111", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
|
172
173
|
@final_output = run.final_output
|
173
|
-
|
174
|
-
@final_output.first.
|
175
|
-
@final_output.first.
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
xit "should fetch result of the specified station" do
|
180
|
-
VCR.use_cassette "run/block/fetch-result-of-specified-station", :record => :new_episodes do
|
181
|
-
line = CF::Line.create("Digitizeard-run-111","Digitization") do |l|
|
182
|
-
CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
|
183
|
-
CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
|
184
|
-
CF::Station.create({:line => l, :type => "work"}) do |s|
|
185
|
-
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
186
|
-
CF::TaskForm.create({:station => s, :title => "Enter name of CEO :station", :instruction => "Describe"}) do |i|
|
187
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
188
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
|
189
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
run = CF::Run.create(line, "run-name-run", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
|
195
|
-
@final_output = run.final_output
|
196
|
-
@final_output.first.meta_data['company'].should eql("Apple")
|
197
|
-
@final_output.first.final_outputs.last['first-name'].should eql("Bob")
|
198
|
-
@final_output.first.final_outputs.last['last-name'].should eql("Marley")
|
199
|
-
|
200
|
-
result_of_station_1 = run.output(:station => 1)
|
201
|
-
result_of_station_1.first.meta_data['company'].should eql("Apple")
|
174
|
+
# debugger
|
175
|
+
@final_output.first.final_output.first['first-name'].should eql("Bob")
|
176
|
+
@final_output.first.final_output.first['last-name'].should eql("Marley")
|
202
177
|
end
|
203
178
|
end
|
204
179
|
|
@@ -208,10 +183,10 @@ module CF
|
|
208
183
|
line = CF::Line.create("keyword_matching_robot_result","Digitization") do |l|
|
209
184
|
CF::InputFormat.new({:line => l, :name => "url", :valid_type => "url", :required => "true"})
|
210
185
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
211
|
-
CF::RobotWorker.create({:station => s, :type => "text_extraction_robot", :settings => {:url => ["{url}"]}})
|
186
|
+
CF::RobotWorker.create({:station => s, :type => "text_extraction_robot", :settings => {:url => ["{{url}}"]}})
|
212
187
|
end
|
213
188
|
CF::Station.create({:line => l, :type => "work"}) do |s1|
|
214
|
-
CF::RobotWorker.create({:station => s1, :type => "keyword_matching_robot", :settings => {:content => ["{contents_of_url}"], :keywords => ["SaaS","see","additional","deepak","saroj"]}})
|
189
|
+
CF::RobotWorker.create({:station => s1, :type => "keyword_matching_robot", :settings => {:content => ["{{contents_of_url}}"], :keywords => ["SaaS","see","additional","deepak","saroj"]}})
|
215
190
|
end
|
216
191
|
end
|
217
192
|
run = CF::Run.create(line, "keyword_matching_robot_run_result", [{"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"}])
|
@@ -219,19 +194,19 @@ module CF
|
|
219
194
|
output.first.final_output.first.included_keywords_count_in_contents_of_url.should eql(["3", "2", "2"])
|
220
195
|
output.first.final_output.first.keyword_included_in_contents_of_url.should eql(["SaaS", "see", "additional"])
|
221
196
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
222
|
-
line.stations.first.worker.reward.should eql(
|
197
|
+
line.stations.first.worker.reward.should eql(0.5)
|
223
198
|
line.stations.first.worker.number.should eql(1)
|
224
|
-
line.stations.first.worker.settings.should eql({:url => ["{url}"]})
|
199
|
+
line.stations.first.worker.settings.should eql({:url => ["{{url}}"]})
|
225
200
|
line.stations.first.worker.type.should eql("TextExtractionRobot")
|
226
201
|
line.stations.last.worker.class.should eql(CF::RobotWorker)
|
227
|
-
line.stations.last.worker.reward.should eql(
|
202
|
+
line.stations.last.worker.reward.should eql(0.5)
|
228
203
|
line.stations.last.worker.number.should eql(1)
|
229
|
-
line.stations.last.worker.settings.should eql({:content => ["{contents_of_url}"], :keywords => ["SaaS","see","additional","deepak","saroj"]})
|
204
|
+
line.stations.last.worker.settings.should eql({:content => ["{{contents_of_url}}"], :keywords => ["SaaS","see","additional","deepak","saroj"]})
|
230
205
|
line.stations.last.worker.type.should eql("KeywordMatchingRobot")
|
231
206
|
output_of_station_1 = CF::Run.output({:title => "keyword_matching_robot_run_result", :station => 1})
|
232
207
|
output_of_station_2 = CF::Run.output({:title => "keyword_matching_robot_run_result", :station => 2})
|
233
|
-
output_of_station_2['keyword_included_in_contents_of_url'].should eql(["SaaS", "see", "additional"])
|
234
|
-
output_of_station_2['included_keywords_count_in_contents_of_url'].should eql(["3", "2", "2"])
|
208
|
+
output_of_station_2.first['keyword_included_in_contents_of_url'].should eql(["SaaS", "see", "additional"])
|
209
|
+
output_of_station_2.first['included_keywords_count_in_contents_of_url'].should eql(["3", "2", "2"])
|
235
210
|
end
|
236
211
|
end
|
237
212
|
|
@@ -250,8 +225,8 @@ module CF
|
|
250
225
|
end
|
251
226
|
|
252
227
|
it "should create production run with invalid data" do
|
253
|
-
WebMock.allow_net_connect!
|
254
|
-
|
228
|
+
# WebMock.allow_net_connect!
|
229
|
+
VCR.use_cassette "run/block/create-run-invalid-file", :record => :new_episodes do
|
255
230
|
line = CF::Line.create("media_splitting_robot_4","Digitization") do |l|
|
256
231
|
CF::InputFormat.new({:line => l, :name => "url", :valid_type => "url", :required => "true"})
|
257
232
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
@@ -260,8 +235,7 @@ module CF
|
|
260
235
|
end
|
261
236
|
run = CF::Run.create(line, "media_splitting_robot_run_4", File.expand_path("../../fixtures/input_data/media_converter_robot.csv", __FILE__))
|
262
237
|
run.errors.should eql(["Extra Headers in file: [url_1]", "Insufficient Headers in file: [url]"])
|
263
|
-
|
264
|
-
# end
|
238
|
+
end
|
265
239
|
end
|
266
240
|
|
267
241
|
it "should create production run with used title data" do
|
@@ -402,12 +376,10 @@ module CF
|
|
402
376
|
run_2 = CF::Run.create(line_2, "progress_run_32", [{"url"=> "http://www.sprout-technology.com"}])
|
403
377
|
|
404
378
|
got_run = CF::Run.all
|
405
|
-
got_run
|
406
|
-
got_run
|
407
|
-
got_run
|
408
|
-
got_run
|
409
|
-
got_run[2].line.title.should eql("progress_run_line_32")
|
410
|
-
got_run[2].title.should eql("progress_run_32")
|
379
|
+
got_run.first.line.title.should eql("digitizard--11111000")
|
380
|
+
got_run.first.title.should eql("run-name--11111000")
|
381
|
+
got_run.last.line.title.should eql("progress_run_line_31")
|
382
|
+
got_run.last.title.should eql("progress_run_31")
|
411
383
|
end
|
412
384
|
end
|
413
385
|
|
@@ -449,6 +421,7 @@ module CF
|
|
449
421
|
end
|
450
422
|
end
|
451
423
|
run = CF::Run.create(line, "resume_run", [{"Company"=>"Apple,Inc","Website"=>"Apple.com"},{"Company"=>"Google","Website"=>"google.com"}])
|
424
|
+
run.errors.should eql("run is created but could not be started because of lack of funds please refund your account to continue the run see your email for more information")
|
452
425
|
# debugger
|
453
426
|
# Change account available_balance to 200000 cents
|
454
427
|
resumed_run = CF::Run.resume("resume_run")
|
@@ -10,18 +10,17 @@ module CF
|
|
10
10
|
line = CF::Line.create("sentiment_robot","Digitization") do |l|
|
11
11
|
CF::InputFormat.new({:line => l, :name => "url", :valid_type => "url", :required => "true"})
|
12
12
|
CF::Station.create({:line => l, :type => "work"}) do |s|
|
13
|
-
CF::RobotWorker.create({:station => s, :settings => {:document => ["{url}"], :sanitize => true}, :type => "sentiment_robot"})
|
13
|
+
CF::RobotWorker.create({:station => s, :settings => {:document => ["{{url}}"], :sanitize => true}, :type => "sentiment_robot"})
|
14
14
|
end
|
15
15
|
end
|
16
16
|
run = CF::Run.create(line, "sentiment_robot_run", [{"url"=> "http://www.thehappyguy.com/happiness-self-help-book.html"}])
|
17
17
|
output = run.final_output
|
18
|
-
output.first.final_output.first.sanitize.should eql("true")
|
19
18
|
output.first.final_output.first.sentiment_of_url.should eql("positive")
|
20
19
|
output.first.final_output.first.sentiment_relevance_of_url.should eql(24.0408)
|
21
20
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
22
|
-
line.stations.first.worker.reward.should eql(0)
|
21
|
+
line.stations.first.worker.reward.should eql(0.5)
|
23
22
|
line.stations.first.worker.number.should eql(1)
|
24
|
-
line.stations.first.worker.settings.should eql({:document => ["{url}"], :sanitize => true})
|
23
|
+
line.stations.first.worker.settings.should eql({:document => ["{{url}}"], :sanitize => true})
|
25
24
|
line.stations.first.worker.type.should eql("SentimentRobot")
|
26
25
|
end
|
27
26
|
end
|
@@ -36,18 +35,17 @@ module CF
|
|
36
35
|
station = CF::Station.new({:type => "work"})
|
37
36
|
line.stations station
|
38
37
|
|
39
|
-
worker = CF::RobotWorker.new({:settings => {:document => ["{url}"], :sanitize => true}, :type => "sentiment_robot"})
|
38
|
+
worker = CF::RobotWorker.new({:settings => {:document => ["{{url}}"], :sanitize => true}, :type => "sentiment_robot"})
|
40
39
|
line.stations.first.worker = worker
|
41
40
|
|
42
41
|
run = CF::Run.create(line, "sentiment_robot_run_1", [{"url"=> "http://www.thehappyguy.com/happiness-self-help-book.html"}])
|
43
42
|
output = run.final_output
|
44
|
-
output.first.final_output.first.sanitize.should eql("true")
|
45
43
|
output.first.final_output.first.sentiment_of_url.should eql("positive")
|
46
44
|
output.first.final_output.first.sentiment_relevance_of_url.should eql(24.0408)
|
47
45
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
48
|
-
line.stations.first.worker.reward.should eql(0)
|
46
|
+
line.stations.first.worker.reward.should eql(0.5)
|
49
47
|
line.stations.first.worker.number.should eql(1)
|
50
|
-
line.stations.first.worker.settings.should eql({:document => ["{url}"], :sanitize => true})
|
48
|
+
line.stations.first.worker.settings.should eql({:document => ["{{url}}"], :sanitize => true})
|
51
49
|
line.stations.first.worker.type.should eql("SentimentRobot")
|
52
50
|
end
|
53
51
|
end
|
data/spec/station_spec.rb
CHANGED
@@ -6,6 +6,7 @@ describe CF::Station do
|
|
6
6
|
# WebMock.allow_net_connect!
|
7
7
|
VCR.use_cassette "stations/plain-ruby/create", :record => :new_episodes do
|
8
8
|
line = CF::Line.new("Digitize--ard", "Digitization")
|
9
|
+
CF::InputFormat.new({:line => line, :name => "image_url", :required => true, :valid_type => "url"})
|
9
10
|
station = CF::Station.new({:type => "work"})
|
10
11
|
line.stations station
|
11
12
|
line.stations.first.type.should eql("WorkStation")
|
@@ -16,12 +17,13 @@ describe CF::Station do
|
|
16
17
|
# WebMock.allow_net_connect!
|
17
18
|
VCR.use_cassette "stations/block/create-with-block-var", :record => :new_episodes do
|
18
19
|
line = CF::Line.create("igitizeard", "Digitization") do
|
20
|
+
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
19
21
|
CF::Station.create({:line => self, :type => "work"}) do |s|
|
20
22
|
CF::HumanWorker.new({:station => s, :number => 2, :reward => 20})
|
21
23
|
CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
22
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "
|
23
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "
|
24
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "
|
24
|
+
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
25
|
+
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
26
|
+
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -40,12 +42,13 @@ describe CF::Station do
|
|
40
42
|
# WebMock.allow_net_connect!
|
41
43
|
VCR.use_cassette "stations/block/create-without-block-var", :record => :new_episodes do
|
42
44
|
line = CF::Line.create("Digitizrd", "Digitization") do
|
45
|
+
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
43
46
|
CF::Station.create({:line => self, :type => "work"}) do
|
44
47
|
CF::HumanWorker.new({:station => self, :number => 2, :reward => 20})
|
45
48
|
CF::TaskForm.create({:station => self, :title => "Enter text from a business card image", :instruction => "Describe"}) do
|
46
|
-
CF::FormField.new({:form => self, :label => "First Name", :field_type => "
|
47
|
-
CF::FormField.new({:form => self, :label => "Middle Name", :field_type => "
|
48
|
-
CF::FormField.new({:form => self, :label => "Last Name", :field_type => "
|
49
|
+
CF::FormField.new({:form => self, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
50
|
+
CF::FormField.new({:form => self, :label => "Middle Name", :field_type => "short_answer"})
|
51
|
+
CF::FormField.new({:form => self, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
49
52
|
end
|
50
53
|
end
|
51
54
|
end
|
@@ -65,17 +68,17 @@ describe CF::Station do
|
|
65
68
|
VCR.use_cassette "stations/block/tournament-station", :record => :new_episodes do
|
66
69
|
line = CF::Line.create("Digitized-9", "Digitization") do
|
67
70
|
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
68
|
-
CF::Station.create({:line => self, :type => "tournament", :jury_worker=> {:max_judges => 10}, :auto_judge => {:enabled => true}}) do |s|
|
71
|
+
CF::Station.create({:line => self, :type => "tournament", :jury_worker=> {:max_judges => 10, :reward => 5}, :auto_judge => {:enabled => true}}) do |s|
|
69
72
|
CF::HumanWorker.new({:station => s, :number => 3, :reward => 20})
|
70
73
|
CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
71
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "
|
72
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "
|
73
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "
|
74
|
+
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
75
|
+
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
76
|
+
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
74
77
|
end
|
75
78
|
end
|
76
79
|
end
|
77
80
|
line.stations.first.type.should eq("TournamentStation")
|
78
|
-
line.stations.first.jury_worker.should eql({:max_judges => 10})
|
81
|
+
line.stations.first.jury_worker.should eql({:max_judges => 10,:reward=>5})
|
79
82
|
line.stations.first.auto_judge.should eql({:enabled => true})
|
80
83
|
line.stations.first.worker.number.should eql(3)
|
81
84
|
line.stations.first.worker.reward.should eql(20)
|
@@ -91,6 +94,7 @@ describe CF::Station do
|
|
91
94
|
# WebMock.allow_net_connect!
|
92
95
|
VCR.use_cassette "stations/block/improve-as-first-station", :record => :new_episodes do
|
93
96
|
line = CF::Line.new("Digitd", "Digitization")
|
97
|
+
CF::InputFormat.new({:line => line, :name => "image_url", :required => true, :valid_type => "url"})
|
94
98
|
station = CF::Station.new({:type => "improve"})
|
95
99
|
expect { line.stations station }.to raise_error(CF::ImproveStationNotAllowed)
|
96
100
|
end
|
@@ -129,6 +133,7 @@ describe CF::Station do
|
|
129
133
|
VCR.use_cassette "stations/plain-ruby/get-station", :record => :new_episodes do
|
130
134
|
line = CF::Line.new("Digitizerd1","Digitization")
|
131
135
|
line.title.should eq("Digitizerd1")
|
136
|
+
CF::InputFormat.new({:line => line, :name => "image_url", :required => true, :valid_type => "url"})
|
132
137
|
station = CF::Station.new(:type => "Work")
|
133
138
|
line.stations station
|
134
139
|
station.type.should eq("Work")
|
@@ -141,6 +146,7 @@ describe CF::Station do
|
|
141
146
|
VCR.use_cassette "stations/plain-ruby/get-all-stations", :record => :new_episodes do
|
142
147
|
line = CF::Line.new("Digitizrd11","Digitization")
|
143
148
|
line.title.should eq("Digitizrd11")
|
149
|
+
CF::InputFormat.new({:line => line, :name => "image_url", :required => true, :valid_type => "url"})
|
144
150
|
station = CF::Station.new(:type => "Work")
|
145
151
|
line.stations station
|
146
152
|
stations = CF::Station.all(line)
|
@@ -148,52 +154,6 @@ describe CF::Station do
|
|
148
154
|
end
|
149
155
|
end
|
150
156
|
end
|
151
|
-
|
152
|
-
context "create multiple station" do
|
153
|
-
xit "should create two stations with improve station" do
|
154
|
-
WebMock.allow_net_connect!
|
155
|
-
# VCR.use_cassette "stations/block/multiple-station", :record => :new_episodes do
|
156
|
-
line = CF::Line.create("Company Info -1","Digitization") do |l|
|
157
|
-
CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
|
158
|
-
CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
|
159
|
-
CF::Station.create({:line => l, :type => "work"}) do |s|
|
160
|
-
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
161
|
-
CF::TaskForm.create({:station => s, :title => "Enter the name of CEO", :instruction => "Describe"}) do |i|
|
162
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
163
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
|
164
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
station = CF::Station.new({:type => "Improve"})
|
170
|
-
line.stations station
|
171
|
-
|
172
|
-
worker = CF::HumanWorker.new({:number => 1, :reward => 10})
|
173
|
-
line.stations.last.worker = worker
|
174
|
-
|
175
|
-
form = CF::TaskForm.new({:title => "Enter the address of the given Person", :instruction => "Description"})
|
176
|
-
line.stations.last.form = form
|
177
|
-
|
178
|
-
form_fields_1 = CF::FormField.new({:label => "Street", :field_type => "SA", :required => "true"})
|
179
|
-
line.stations.last.form.form_fields form_fields_1
|
180
|
-
form_fields_2 = CF::FormField.new({:label => "City", :field_type => "SA", :required => "true"})
|
181
|
-
line.stations.last.form.form_fields form_fields_2
|
182
|
-
form_fields_3 = CF::FormField.new({:label => "Country", :field_type => "SA", :required => "true"})
|
183
|
-
line.stations.last.form.form_fields form_fields_3
|
184
|
-
|
185
|
-
run = CF::Run.create(line,"Creation of Multiple Station", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
|
186
|
-
# debugger
|
187
|
-
result_of_station_1 = run.output(:station => 1)
|
188
|
-
result_of_station_2 = run.output(:station => 2)
|
189
|
-
@final_output = run.final_output
|
190
|
-
@final_output.first.meta_data['company'].should eql("Apple")
|
191
|
-
@final_output.first.final_outputs.last['street'].should eql("Kupondole")
|
192
|
-
@final_output.first.final_outputs.last['city'].should eql("Kathmandu")
|
193
|
-
@final_output.first.final_outputs.last['country'].should eql("Nepal")
|
194
|
-
# end
|
195
|
-
end
|
196
|
-
end
|
197
157
|
|
198
158
|
context "create multiple station" do
|
199
159
|
it "should create two stations using different input format" do
|
@@ -205,9 +165,9 @@ describe CF::Station do
|
|
205
165
|
CF::Station.create({:line => l, :type => "work", :input_formats=> {:station_0 => [{:name => "Company"},{:name => "Website", :except => true}]}}) do |s|
|
206
166
|
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
207
167
|
CF::TaskForm.create({:station => s, :title => "Enter the name of CEO", :instruction => "Describe"}) do |i|
|
208
|
-
CF::FormField.new({:form => i, :label => "First Name", :field_type => "
|
209
|
-
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "
|
210
|
-
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "
|
168
|
+
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
169
|
+
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
170
|
+
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
211
171
|
end
|
212
172
|
end
|
213
173
|
end
|
@@ -222,11 +182,11 @@ describe CF::Station do
|
|
222
182
|
form = CF::TaskForm.new({:title => "Enter the address of the given Person", :instruction => "Description"})
|
223
183
|
line.stations.last.form = form
|
224
184
|
|
225
|
-
form_fields_1 = CF::FormField.new({:label => "Street", :field_type => "
|
185
|
+
form_fields_1 = CF::FormField.new({:label => "Street", :field_type => "short_answer", :required => "true"})
|
226
186
|
line.stations.last.form.form_fields form_fields_1
|
227
|
-
form_fields_2 = CF::FormField.new({:label => "City", :field_type => "
|
187
|
+
form_fields_2 = CF::FormField.new({:label => "City", :field_type => "short_answer", :required => "true"})
|
228
188
|
line.stations.last.form.form_fields form_fields_2
|
229
|
-
form_fields_3 = CF::FormField.new({:label => "Country", :field_type => "
|
189
|
+
form_fields_3 = CF::FormField.new({:label => "Country", :field_type => "short_answer", :required => "true"})
|
230
190
|
line.stations.last.form.form_fields form_fields_3
|
231
191
|
station_1 = line.stations.first.get
|
232
192
|
station_1.input_formats.count.should eql(1)
|