cloudfactory 0.1.14 → 0.1.15
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/cf.gemspec +1 -0
- data/lib/cf/cli/line.rb +22 -11
- data/lib/cf/cli/line_yaml_validator.rb +68 -68
- data/lib/cf/cli/production.rb +86 -50
- data/lib/cf/cli.rb +5 -1
- data/lib/cf/client.rb +1 -1
- data/lib/cf/line.rb +46 -15
- data/lib/cf/run.rb +42 -16
- data/lib/cf/station.rb +33 -13
- data/lib/cf/version.rb +1 -1
- data/spec/concept_tagging_robot_spec.rb +4 -4
- data/spec/content_scraping_robot_spec.rb +2 -2
- data/spec/entity_extraction_robot_spec.rb +8 -8
- data/spec/google_translate_robot_spec.rb +2 -2
- data/spec/image_processing_robot_spec.rb +2 -2
- data/spec/keyword_matching_and_text_extraction_robot_spec.rb +4 -4
- data/spec/line_spec.rb +27 -3
- data/spec/mailer_robot_spec.rb +4 -4
- data/spec/media_converter_robot_spec.rb +2 -2
- data/spec/media_splitting_robot_spec.rb +4 -4
- data/spec/run_spec.rb +16 -14
- data/spec/sentiment_robot_spec.rb +4 -4
- data/spec/station_spec.rb +37 -2
- data/spec/term_extraction_robot_spec.rb +4 -4
- data/spec/text_appending_robot_spec.rb +4 -4
- metadata +57 -46
data/lib/cf/run.rb
CHANGED
@@ -31,14 +31,23 @@ module CF
|
|
31
31
|
@line = line
|
32
32
|
@line_title = line.title
|
33
33
|
elsif line.class == String
|
34
|
-
|
34
|
+
if line.split("/").count == 2
|
35
|
+
@account = line.split("/").first
|
36
|
+
@line_title = line.split("/").last
|
37
|
+
elsif line.split("/").count == 1
|
38
|
+
@line_title = line
|
39
|
+
end
|
35
40
|
end
|
36
41
|
@title = title
|
37
42
|
if File.exist?(input.to_s)
|
38
43
|
@file = input
|
39
44
|
@param_data = File.new(input, 'rb')
|
40
45
|
@param_for_input = :file
|
41
|
-
|
46
|
+
if line.class == String && line.split("/").count == 2
|
47
|
+
resp = self.class.post("/lines/#{@account}/#{@line_title.downcase}/runs.json", {:data => {:run => {:title => @title}}, @param_for_input => @param_data})
|
48
|
+
else
|
49
|
+
resp = self.class.post("/lines/#{CF.account_name}/#{@line_title.downcase}/runs.json", {:data => {:run => {:title => @title}}, @param_for_input => @param_data})
|
50
|
+
end
|
42
51
|
if resp.code != 200
|
43
52
|
self.errors = resp.error.message
|
44
53
|
end
|
@@ -54,7 +63,11 @@ module CF
|
|
54
63
|
:data =>{:run => { :title => @title }, :inputs => @param_data}
|
55
64
|
}
|
56
65
|
}
|
57
|
-
|
66
|
+
if line.class == String && line.split("/").count == 2
|
67
|
+
run = HTTParty.post("#{CF.api_url}#{CF.api_version}/lines/#{@account}/#{@line_title.downcase}/runs.json",options)
|
68
|
+
else
|
69
|
+
run = HTTParty.post("#{CF.api_url}#{CF.api_version}/lines/#{CF.account_name}/#{@line_title.downcase}/runs.json",options)
|
70
|
+
end
|
58
71
|
if run.code != 200
|
59
72
|
self.errors = run.parsed_response['error']['message']
|
60
73
|
end
|
@@ -78,18 +91,13 @@ module CF
|
|
78
91
|
# run_object.final_output
|
79
92
|
def final_output
|
80
93
|
resp = self.class.get("/runs/#{CF.account_name}/#{self.title.downcase}/output.json")
|
81
|
-
|
82
|
-
resp['output'].
|
83
|
-
|
84
|
-
|
85
|
-
result.send("#{k}=",v) if result.respond_to?(k)
|
94
|
+
output = []
|
95
|
+
if resp['output'].class == Array
|
96
|
+
resp['output'].each do |o|
|
97
|
+
output << o.to_hash
|
86
98
|
end
|
87
|
-
if result.final_output == nil
|
88
|
-
result.final_output = resp.output
|
89
|
-
end
|
90
|
-
@final_output << result
|
91
99
|
end
|
92
|
-
return
|
100
|
+
return output
|
93
101
|
end
|
94
102
|
|
95
103
|
# ==Returns Final Output of production Run
|
@@ -97,7 +105,13 @@ module CF
|
|
97
105
|
# CF::Run.final_output("run_title")
|
98
106
|
def self.final_output(title)
|
99
107
|
resp = get("/runs/#{CF.account_name}/#{title.downcase}/output.json")
|
100
|
-
|
108
|
+
output = []
|
109
|
+
if resp['output'].class == Array
|
110
|
+
resp['output'].each do |o|
|
111
|
+
output << o.to_hash
|
112
|
+
end
|
113
|
+
end
|
114
|
+
return output
|
101
115
|
end
|
102
116
|
|
103
117
|
# ==Returns Output of production Run for any specific Station and for given Run Title
|
@@ -108,7 +122,13 @@ module CF
|
|
108
122
|
station_no = options[:station]
|
109
123
|
title = options[:title]
|
110
124
|
resp = get("/runs/#{CF.account_name}/#{title.downcase}/output/#{station_no}.json")
|
111
|
-
|
125
|
+
output = []
|
126
|
+
if resp['output'].class == Array
|
127
|
+
resp['output'].each do |o|
|
128
|
+
output << o.to_hash
|
129
|
+
end
|
130
|
+
end
|
131
|
+
return output
|
112
132
|
end
|
113
133
|
|
114
134
|
# ==Returns Output of Run object for any specific Station
|
@@ -118,7 +138,13 @@ module CF
|
|
118
138
|
def output(options={})
|
119
139
|
station_no = options[:station]
|
120
140
|
resp = self.class.get("/runs/#{CF.account_name}/#{self.title.downcase}/output/#{station_no}.json")
|
121
|
-
|
141
|
+
output = []
|
142
|
+
if resp['output'].class == Array
|
143
|
+
resp['output'].each do |o|
|
144
|
+
output << o.to_hash
|
145
|
+
end
|
146
|
+
end
|
147
|
+
return output
|
122
148
|
end
|
123
149
|
|
124
150
|
# ==Searches Run for the given "run_title"
|
data/lib/cf/station.rb
CHANGED
@@ -25,7 +25,7 @@ module CF
|
|
25
25
|
attr_accessor :auto_judge
|
26
26
|
|
27
27
|
# Contains Error Message if any
|
28
|
-
attr_accessor :errors
|
28
|
+
attr_accessor :errors, :batch_size
|
29
29
|
|
30
30
|
# ==Initializes a new station
|
31
31
|
# ===Usage Example:
|
@@ -40,22 +40,42 @@ module CF
|
|
40
40
|
@auto_judge = options[:auto_judge]
|
41
41
|
@station_input_formats = options[:input_formats]
|
42
42
|
@line_instance = options[:line]
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
@batch_size = options[:batch_size]
|
44
|
+
if @batch_size.nil?
|
45
|
+
request_general =
|
46
46
|
{
|
47
|
-
:
|
48
|
-
|
47
|
+
:body =>
|
48
|
+
{
|
49
|
+
:api_key => CF.api_key,
|
50
|
+
:station => {:type => @type, :input_formats => @station_input_formats}
|
51
|
+
}
|
49
52
|
}
|
50
|
-
|
51
|
-
request_tournament =
|
52
|
-
{
|
53
|
-
:body =>
|
53
|
+
request_tournament =
|
54
54
|
{
|
55
|
-
:
|
56
|
-
|
55
|
+
:body =>
|
56
|
+
{
|
57
|
+
:api_key => CF.api_key,
|
58
|
+
:station => {:type => @type, :jury_worker => @jury_worker, :auto_judge => @auto_judge, :input_formats => @station_input_formats}
|
59
|
+
}
|
57
60
|
}
|
58
|
-
|
61
|
+
else
|
62
|
+
request_general =
|
63
|
+
{
|
64
|
+
:body =>
|
65
|
+
{
|
66
|
+
:api_key => CF.api_key,
|
67
|
+
:station => {:type => @type, :input_formats => @station_input_formats, :batch_size => @batch_size}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
request_tournament =
|
71
|
+
{
|
72
|
+
:body =>
|
73
|
+
{
|
74
|
+
:api_key => CF.api_key,
|
75
|
+
:station => {:type => @type, :jury_worker => @jury_worker, :auto_judge => @auto_judge, :input_formats => @station_input_formats, :batch_size => @batch_size}
|
76
|
+
}
|
77
|
+
}
|
78
|
+
end
|
59
79
|
if @line_title
|
60
80
|
if @type == "Improve"
|
61
81
|
line = options[:line]
|
data/lib/cf/version.rb
CHANGED
@@ -15,8 +15,8 @@ module CF
|
|
15
15
|
end
|
16
16
|
run = CF::Run.create(line, "concept_tagging_robot_run", [{"url"=>"www.mosexindex.com"}])
|
17
17
|
output = run.final_output
|
18
|
-
output.first
|
19
|
-
output.first
|
18
|
+
output.first['concept_tagging_of_url'].should eql(["Canada", "English language"])
|
19
|
+
output.first['concept_tagging_relevance_of_url'].should eql([89.5153, 79.0912])
|
20
20
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
21
21
|
line.stations.first.worker.reward.should eql(0.5)
|
22
22
|
line.stations.first.worker.number.should eql(1)
|
@@ -40,8 +40,8 @@ module CF
|
|
40
40
|
|
41
41
|
run = CF::Run.create(line, "concept_tagging_robot_run_1", [{"url"=>"www.mosexindex.com"}])
|
42
42
|
output = run.final_output
|
43
|
-
output.first
|
44
|
-
output.first
|
43
|
+
output.first['concept_tagging_of_url'].should eql(["Canada", "English language"])
|
44
|
+
output.first['concept_tagging_relevance_of_url'].should eql([89.5153, 79.0912])
|
45
45
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
46
46
|
line.stations.first.worker.reward.should eql(0.5)
|
47
47
|
line.stations.first.worker.number.should eql(1)
|
@@ -16,7 +16,7 @@ module CF
|
|
16
16
|
run = CF::Run.create(line, "content_scraping_robot_run", [{"url"=> "http://www.sprout-technology.com"}])
|
17
17
|
|
18
18
|
output = run.final_output
|
19
|
-
output.first
|
19
|
+
output.first['scraped_link_from_document'].should eql([["http://www.cloudfactory.com", "http://www.bizcardarmy.com"]])
|
20
20
|
|
21
21
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
22
22
|
line.stations.first.worker.reward.should eql(0.5)
|
@@ -42,7 +42,7 @@ module CF
|
|
42
42
|
run = CF::Run.create(line, "content_scraping_robot_run_1", [{"url"=> "http://www.sprout-technology.com"}])
|
43
43
|
|
44
44
|
output = run.final_output
|
45
|
-
output.first
|
45
|
+
output.first['scraped_link_from_document'].should eql([["http://www.cloudfactory.com", "http://www.bizcardarmy.com"]])
|
46
46
|
|
47
47
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
48
48
|
line.stations.first.worker.reward.should eql(0.5)
|
@@ -15,10 +15,10 @@ module CF
|
|
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
17
|
output = run.final_output
|
18
|
-
output.first
|
19
|
-
output.first
|
20
|
-
output.first
|
21
|
-
output.first
|
18
|
+
output.first['entity_counts_of_document'].should eql([["2", "2", "1", "1", "2", "1"]])
|
19
|
+
output.first['entity_names_of_document'].should eql([["Ludwig Von Beethoven", "Franz Kafka", "George Orwell", "Mozart", "China", "Japan"]])
|
20
|
+
output.first['entity_relevances_of_document'].should eql([[92.12089999999999, 73.8997, 48.079100000000004, 28.9416, 27.1982, 21.1997]])
|
21
|
+
output.first['entity_types_of_document'].should eql([["Person", "Person", "Person", "Person", "Country", "Country"]])
|
22
22
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
23
23
|
line.stations.first.worker.reward.should eql(0.5)
|
24
24
|
line.stations.first.worker.number.should eql(1)
|
@@ -41,10 +41,10 @@ module CF
|
|
41
41
|
|
42
42
|
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"}])
|
43
43
|
output = run.final_output
|
44
|
-
output.first
|
45
|
-
output.first
|
46
|
-
output.first
|
47
|
-
output.first
|
44
|
+
output.first['entity_counts_of_document'].should eql([["2", "2", "1", "1", "2", "1"]])
|
45
|
+
output.first['entity_names_of_document'].should eql([["Ludwig Von Beethoven", "Franz Kafka", "George Orwell", "Mozart", "China", "Japan"]])
|
46
|
+
output.first['entity_relevances_of_document'].should eql([[92.12089999999999, 73.8997, 48.079100000000004, 28.9416, 27.1982, 21.1997]])
|
47
|
+
output.first['entity_types_of_document'].should eql([["Person", "Person", "Person", "Person", "Country", "Country"]])
|
48
48
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
49
49
|
line.stations.first.worker.reward.should eql(0.5)
|
50
50
|
line.stations.first.worker.number.should eql(1)
|
@@ -28,7 +28,7 @@ module CF
|
|
28
28
|
run = CF::Run.create(line, "google_translate_robot_run", [{"text"=> "I started loving Monsoon"}])
|
29
29
|
@final_output = run.final_output
|
30
30
|
line.stations.first.worker.number.should eq(1)
|
31
|
-
@final_output.first
|
31
|
+
@final_output.first['translation_of_text'].should eql('Empecé a amar a Monzón')
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -50,7 +50,7 @@ module CF
|
|
50
50
|
|
51
51
|
@final_output = run.final_output
|
52
52
|
line.stations.first.worker.number.should eq(1)
|
53
|
-
@final_output.first
|
53
|
+
@final_output.first['translation_of_text'].should eql('Empecé a amar a Monzón')
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -15,7 +15,7 @@ module CF
|
|
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
17
|
output = run.final_output
|
18
|
-
converted_url = output.first
|
18
|
+
converted_url = output.first['processed_image_of_url']
|
19
19
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url}").should eql(true)
|
20
20
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
21
21
|
line.stations.first.worker.reward.should eql(0.01)
|
@@ -40,7 +40,7 @@ module CF
|
|
40
40
|
|
41
41
|
run = CF::Run.create(line, "image_processing_robot_run_1", [{"url"=> "http://wwwdelivery.superstock.com/WI/223/1527/PreviewComp/SuperStock_1527R-020214.jpg"}])
|
42
42
|
output = run.final_output
|
43
|
-
converted_url = output.first
|
43
|
+
converted_url = output.first['processed_image_of_url']
|
44
44
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url}").should eql(true)
|
45
45
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
46
46
|
line.stations.first.worker.reward.should eql(0.01)
|
@@ -18,8 +18,8 @@ module CF
|
|
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
20
|
output = run.final_output
|
21
|
-
output.first
|
22
|
-
output.first
|
21
|
+
output.first['included_keywords_count_in_contents_of_url'].should eql(["3", "2", "2"])
|
22
|
+
output.first['keyword_included_in_contents_of_url'].should eql(["SaaS", "see", "additional"])
|
23
23
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
24
24
|
line.stations.first.worker.reward.should eql(0.5)
|
25
25
|
line.stations.first.worker.number.should eql(1)
|
@@ -54,8 +54,8 @@ module CF
|
|
54
54
|
|
55
55
|
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"}])
|
56
56
|
output = run.final_output
|
57
|
-
output.first
|
58
|
-
output.first
|
57
|
+
output.first['included_keywords_count_in_contents_of_url'].should eql(["3", "2", "2"])
|
58
|
+
output.first['keyword_included_in_contents_of_url'].should eql(["SaaS", "see", "additional"])
|
59
59
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
60
60
|
line.stations.first.worker.reward.should eql(0.5)
|
61
61
|
line.stations.first.worker.number.should eql(1)
|
data/spec/line_spec.rb
CHANGED
@@ -346,8 +346,8 @@ describe CF::Line do
|
|
346
346
|
forced_delete = CF::Line.destroy("delete_line_of_run", :forced => true)
|
347
347
|
|
348
348
|
search_line = CF::Line.find("delete_line_of_run")
|
349
|
-
search_line
|
350
|
-
search_line
|
349
|
+
search_line['code'].should eql(404)
|
350
|
+
search_line['error']['message'].should eql("Line document not found using selector: {:public=>true, :title=>\"delete_line_of_run\"}")
|
351
351
|
end
|
352
352
|
end
|
353
353
|
end
|
@@ -365,7 +365,7 @@ describe CF::Line do
|
|
365
365
|
end
|
366
366
|
end
|
367
367
|
end
|
368
|
-
line_details = CF::Line.
|
368
|
+
line_details = CF::Line.inspect("line_details")
|
369
369
|
line_input_format_id = line_details['input_formats'].first['id']
|
370
370
|
from_field_id = line_details['stations'].first['form_fields'].first['id']
|
371
371
|
station_input_format_id = line_details['stations'].first['input_formats'].first['id']
|
@@ -373,4 +373,28 @@ describe CF::Line do
|
|
373
373
|
end
|
374
374
|
end
|
375
375
|
end
|
376
|
+
|
377
|
+
context "get a line of other account" do
|
378
|
+
it "as public line" do
|
379
|
+
VCR.use_cassette "lines/plain-ruby/public-line", :record => :new_episodes do
|
380
|
+
# WebMock.allow_net_connect!
|
381
|
+
got_line = CF::Line.find("hero/dummy")
|
382
|
+
got_line['title'].should eql("dummy")
|
383
|
+
got_line['public'].should eql(true)
|
384
|
+
|
385
|
+
run = CF::Run.create("hero/dummy", "dummy_run", [{"text" => "run for public line of another account"}])
|
386
|
+
run.title.should eql("dummy_run")
|
387
|
+
run.input.should eql([{"text" => "run for public line of another account"}])
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
it "as private line" do
|
392
|
+
VCR.use_cassette "lines/plain-ruby/private-line", :record => :new_episodes do
|
393
|
+
# WebMock.allow_net_connect!
|
394
|
+
got_line = CF::Line.find("hero/dummy_false")
|
395
|
+
got_line['code'].should eql(404)
|
396
|
+
got_line['error']['message'].should eql("Line with title: dummy_false under account hero is not public")
|
397
|
+
end
|
398
|
+
end
|
399
|
+
end
|
376
400
|
end
|
data/spec/mailer_robot_spec.rb
CHANGED
@@ -16,8 +16,8 @@ module CF
|
|
16
16
|
end
|
17
17
|
run = CF::Run.create(line, "mailer_robot_run", [{"to"=> "manish.das@sprout-technology.com"}])
|
18
18
|
output = run.final_output
|
19
|
-
output.first
|
20
|
-
output.first
|
19
|
+
output.first['recipients_of_to'].should eql([["manish.das@sprout-technology.com"]])
|
20
|
+
output.first['sent_message_for_to'].should eql(["<html><body><h1>Hello manish.das@sprout-technology.com Welcome to CLoudfactory!!!!</h1><p>Thanks for using!!!!</p></body></html>"])
|
21
21
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
22
22
|
line.stations.first.worker.reward.should eql(0.01)
|
23
23
|
line.stations.first.worker.number.should eql(1)
|
@@ -42,8 +42,8 @@ module CF
|
|
42
42
|
|
43
43
|
run = CF::Run.create(line, "mailer_robot_run_1", [{"to"=> "manish.das@sprout-technology.com"}])
|
44
44
|
output = run.final_output
|
45
|
-
output.first
|
46
|
-
output.first
|
45
|
+
output.first['recipients_of_to'].should eql([["manish.das@sprout-technology.com"]])
|
46
|
+
output.first['sent_message_for_to'].should eql(["<html><body><h1>Hello manish.das@sprout-technology.com Welcome to CLoudfactory!!!!</h1><p>Thanks for using!!!!</p></body></html>"])
|
47
47
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
48
48
|
line.stations.first.worker.reward.should eql(0.01)
|
49
49
|
line.stations.first.worker.number.should eql(1)
|
@@ -35,7 +35,7 @@ module CF
|
|
35
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
|
-
converted_url = @final_output.first
|
38
|
+
converted_url = @final_output.first['converted_file_from_url']
|
39
39
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url}").should eql(true)
|
40
40
|
end
|
41
41
|
end
|
@@ -57,7 +57,7 @@ module CF
|
|
57
57
|
|
58
58
|
@final_output = run.final_output
|
59
59
|
line.stations.first.worker.number.should eq(1)
|
60
|
-
converted_url = @final_output.first
|
60
|
+
converted_url = @final_output.first['converted_file_from_url']
|
61
61
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url}").should eql(true)
|
62
62
|
end
|
63
63
|
end
|
@@ -15,8 +15,8 @@ module CF
|
|
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
|
-
converted_url_1= output.first
|
19
|
-
converted_url_2= output.first
|
18
|
+
converted_url_1= output.first['splits_of_url'].first
|
19
|
+
converted_url_2= output.first['splits_of_url'].last
|
20
20
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url_1}").should eql(true)
|
21
21
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url_2}").should eql(true)
|
22
22
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
@@ -42,8 +42,8 @@ module CF
|
|
42
42
|
|
43
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"}])
|
44
44
|
output = run.final_output
|
45
|
-
converted_url_1= output.first
|
46
|
-
converted_url_2= output.first
|
45
|
+
converted_url_1= output.first['splits_of_url'].first
|
46
|
+
converted_url_2= output.first['splits_of_url'].last
|
47
47
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url_1}").should eql(true)
|
48
48
|
File.exist?("/Users/manish/apps/cloudfactory/public#{converted_url_2}").should eql(true)
|
49
49
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
data/spec/run_spec.rb
CHANGED
@@ -170,10 +170,10 @@ module CF
|
|
170
170
|
end
|
171
171
|
end
|
172
172
|
run = CF::Run.create(line, "run-name-result-0111111111", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
|
173
|
-
@final_output = run.final_output
|
174
173
|
# debugger
|
175
|
-
@final_output.
|
176
|
-
@final_output.first
|
174
|
+
@final_output = run.final_output
|
175
|
+
@final_output.first['first-name'].should eql("Bob")
|
176
|
+
@final_output.first['last-name'].should eql("Marley")
|
177
177
|
end
|
178
178
|
end
|
179
179
|
|
@@ -186,13 +186,15 @@ module CF
|
|
186
186
|
CF::RobotWorker.create({:station => s, :type => "text_extraction_robot", :settings => {:url => ["{{url}}"]}})
|
187
187
|
end
|
188
188
|
CF::Station.create({:line => l, :type => "work"}) do |s1|
|
189
|
-
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", "iPhone"]}})
|
190
190
|
end
|
191
191
|
end
|
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"}])
|
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"}, {"url"=> "http://techcrunch.com/2011/07/26/buddytv-iphone/"}])
|
193
193
|
output = run.final_output
|
194
|
-
output.first
|
195
|
-
output.first
|
194
|
+
output.first['included_keywords_count_in_contents_of_url'].should eql(["3", "2", "2"])
|
195
|
+
output.first['keyword_included_in_contents_of_url'].should eql(["SaaS", "see", "additional"])
|
196
|
+
output.last['included_keywords_count_in_contents_of_url'].should eql(["4"])
|
197
|
+
output.last['keyword_included_in_contents_of_url'].should eql(["iPhone"])
|
196
198
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
197
199
|
line.stations.first.worker.reward.should eql(0.5)
|
198
200
|
line.stations.first.worker.number.should eql(1)
|
@@ -201,7 +203,7 @@ module CF
|
|
201
203
|
line.stations.last.worker.class.should eql(CF::RobotWorker)
|
202
204
|
line.stations.last.worker.reward.should eql(0.5)
|
203
205
|
line.stations.last.worker.number.should eql(1)
|
204
|
-
line.stations.last.worker.settings.should eql({:content => ["{{contents_of_url}}"], :keywords => ["SaaS","see","additional","deepak","saroj"]})
|
206
|
+
line.stations.last.worker.settings.should eql({:content => ["{{contents_of_url}}"], :keywords => ["SaaS","see","additional","deepak","saroj", "iPhone"]})
|
205
207
|
line.stations.last.worker.type.should eql("KeywordMatchingRobot")
|
206
208
|
output_of_station_1 = CF::Run.output({:title => "keyword_matching_robot_run_result", :station => 1})
|
207
209
|
output_of_station_2 = CF::Run.output({:title => "keyword_matching_robot_run_result", :station => 2})
|
@@ -249,7 +251,7 @@ module CF
|
|
249
251
|
end
|
250
252
|
run = CF::Run.create(line, "media_splitting_robot_run_5", [{"url"=> "http://media-robot.s3.amazonaws.com/media_robot/media/upload/8/ten.mov"}])
|
251
253
|
run_1 = CF::Run.create(line, "media_splitting_robot_run_5", [{"url"=> "http://media-robot.s3.amazonaws.com/media_robot/media/upload/8/ten.mov"}])
|
252
|
-
run_1.errors.should eql(
|
254
|
+
run_1.errors.should eql(["Title is already taken for this account"])
|
253
255
|
end
|
254
256
|
end
|
255
257
|
|
@@ -284,7 +286,7 @@ module CF
|
|
284
286
|
run = CF::Run.create(line, "media_splitting_robot_run_7", [{"url"=> "http://media-robot.s3.amazonaws.com/media_robot/media/upload/8/ten.mov"}])
|
285
287
|
found_run = CF::Run.find("unused_title")
|
286
288
|
found_run.code.should eql(404)
|
287
|
-
found_run.errors.should eql("Run document not found using selector: {:tenant_id=>BSON::ObjectId('4def16fa5511274d98000014'),
|
289
|
+
found_run.errors.should eql("Run document not found using selector: {:tenant_id=>BSON::ObjectId('4def16fa5511274d98000014'), :title=>\"unused_title\"}")
|
288
290
|
end
|
289
291
|
end
|
290
292
|
end
|
@@ -376,10 +378,10 @@ module CF
|
|
376
378
|
run_2 = CF::Run.create(line_2, "progress_run_32", [{"url"=> "http://www.sprout-technology.com"}])
|
377
379
|
|
378
380
|
got_run = CF::Run.all
|
379
|
-
got_run.first.line.title.should eql("
|
380
|
-
got_run.first.title.should eql("
|
381
|
-
got_run.last.line.title.should eql("
|
382
|
-
got_run.last.title.should eql("
|
381
|
+
got_run.first.line.title.should eql("keyword_matching_robot_result")
|
382
|
+
got_run.first.title.should eql("keyword_matching_robot_run_result")
|
383
|
+
got_run.last.line.title.should eql("digarde-007")
|
384
|
+
got_run.last.title.should eql("runnamee1")
|
383
385
|
end
|
384
386
|
end
|
385
387
|
|
@@ -15,8 +15,8 @@ module CF
|
|
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
|
19
|
-
output.first
|
18
|
+
output.first['sentiment_of_url'].should eql("positive")
|
19
|
+
output.first['sentiment_relevance_of_url'].should eql(24.0408)
|
20
20
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
21
21
|
line.stations.first.worker.reward.should eql(0.5)
|
22
22
|
line.stations.first.worker.number.should eql(1)
|
@@ -40,8 +40,8 @@ module CF
|
|
40
40
|
|
41
41
|
run = CF::Run.create(line, "sentiment_robot_run_1", [{"url"=> "http://www.thehappyguy.com/happiness-self-help-book.html"}])
|
42
42
|
output = run.final_output
|
43
|
-
output.first
|
44
|
-
output.first
|
43
|
+
output.first['sentiment_of_url'].should eql("positive")
|
44
|
+
output.first['sentiment_relevance_of_url'].should eql(24.0408)
|
45
45
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
46
46
|
line.stations.first.worker.reward.should eql(0.5)
|
47
47
|
line.stations.first.worker.number.should eql(1)
|
data/spec/station_spec.rb
CHANGED
@@ -53,8 +53,8 @@ describe CF::Station do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
line.stations.first.type.should eq("WorkStation")
|
56
|
-
line.stations.first.worker.number.should
|
57
|
-
line.stations.first.worker.reward.should
|
56
|
+
line.stations.first.worker.number.should eql(2)
|
57
|
+
line.stations.first.worker.reward.should eql(20)
|
58
58
|
line.stations.first.form.title.should eq("Enter text from a business card image")
|
59
59
|
line.stations.first.form.instruction.should eq("Describe")
|
60
60
|
line.stations.first.form.form_fields[0].label.should eq("First Name")
|
@@ -251,4 +251,39 @@ describe CF::Station do
|
|
251
251
|
end
|
252
252
|
end
|
253
253
|
end
|
254
|
+
|
255
|
+
context "create station with batch size option" do
|
256
|
+
it "for work station in block DSL way" do
|
257
|
+
# WebMock.allow_net_connect!
|
258
|
+
VCR.use_cassette "stations/block/create-with-batch-size", :record => :new_episodes do
|
259
|
+
line = CF::Line.create("batch_size_line", "Digitization") do
|
260
|
+
CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
|
261
|
+
CF::Station.create({:line => self, :type => "work", :batch_size => 3}) do |s|
|
262
|
+
CF::HumanWorker.new({:station => s, :number => 2, :reward => 20})
|
263
|
+
CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
264
|
+
CF::FormField.new({:form => i, :label => "First Name", :field_type => "short_answer", :required => "true"})
|
265
|
+
CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "short_answer"})
|
266
|
+
CF::FormField.new({:form => i, :label => "Last Name", :field_type => "short_answer", :required => "true"})
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
line.stations.first.type.should eql("WorkStation")
|
271
|
+
line.stations.first.batch_size.should eql(3)
|
272
|
+
line.stations.first.worker.number.should eql(2)
|
273
|
+
line.stations.first.worker.reward.should eql(20)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
it "for work station in Plain Ruby way" do
|
278
|
+
# WebMock.allow_net_connect!
|
279
|
+
VCR.use_cassette "stations/plain-ruby/create-with-batch-size", :record => :new_episodes do
|
280
|
+
line = CF::Line.new("batch_size_line_1", "Digitization")
|
281
|
+
CF::InputFormat.new({:line => line, :name => "image_url", :required => true, :valid_type => "url"})
|
282
|
+
station = CF::Station.new({:type => "work", :batch_size => 3})
|
283
|
+
line.stations station
|
284
|
+
line.stations.first.type.should eql("WorkStation")
|
285
|
+
line.stations.first.batch_size.should eql(3)
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
254
289
|
end
|
@@ -15,8 +15,8 @@ module CF
|
|
15
15
|
end
|
16
16
|
run = CF::Run.create(line, "term_extraction_run", [{"url"=> "http://www.sprout-technology.com"}])
|
17
17
|
output = run.final_output
|
18
|
-
output.first
|
19
|
-
output.first
|
18
|
+
output.first['keyword_relevance_of_url'].should eql([99.7991, 95.6566, 83.2383, 79.39450000000001, 76.0281])
|
19
|
+
output.first['keywords_of_url'].should eql(["Web App", "web application", "Web App Development", "Web App Management", "world-class web development"])
|
20
20
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
21
21
|
line.stations.first.worker.reward.should eql(0.5)
|
22
22
|
line.stations.first.worker.number.should eql(1)
|
@@ -40,8 +40,8 @@ module CF
|
|
40
40
|
|
41
41
|
run = CF::Run.create(line, "term_extraction_run_1", [{"url"=> "http://www.sprout-technology.com"}])
|
42
42
|
output = run.final_output
|
43
|
-
output.first
|
44
|
-
output.first
|
43
|
+
output.first['keyword_relevance_of_url'].should eql([99.7991, 95.6566, 83.2383, 79.39450000000001, 76.0281])
|
44
|
+
output.first['keywords_of_url'].should eql(["Web App", "web application", "Web App Development", "Web App Management", "world-class web development"])
|
45
45
|
line.stations.first.worker.class.should eql(CF::RobotWorker)
|
46
46
|
line.stations.first.worker.reward.should eql(0.5)
|
47
47
|
line.stations.first.worker.number.should eql(1)
|
@@ -28,8 +28,8 @@ module CF
|
|
28
28
|
# debugger
|
29
29
|
output = run.final_output
|
30
30
|
station_1_output = run.output(:station => 1)
|
31
|
-
station_1_output['description'].should eql(["this is description", "about company", "the company works on", "Ruby on Rails"])
|
32
|
-
output.first
|
31
|
+
station_1_output.first['description'].should eql(["this is description", "about company", "the company works on", "Ruby on Rails"])
|
32
|
+
output.first['append_description'].should eql("this is description||about company||the company works on||Ruby on Rails")
|
33
33
|
line.stations.last.worker.class.should eql(CF::RobotWorker)
|
34
34
|
line.stations.first.worker.reward.should eql(20)
|
35
35
|
line.stations.first.worker.number.should eql(1)
|
@@ -72,8 +72,8 @@ module CF
|
|
72
72
|
# debugger
|
73
73
|
output = run.final_output
|
74
74
|
station_1_output = run.output(:station => 1)
|
75
|
-
station_1_output['description'].should eql(["this is description", "about company", "the company works on", "Ruby on Rails"])
|
76
|
-
output.first
|
75
|
+
station_1_output.first['description'].should eql(["this is description", "about company", "the company works on", "Ruby on Rails"])
|
76
|
+
output.first['append_description'].should eql("this is description||about company||the company works on||Ruby on Rails")
|
77
77
|
line.stations.last.worker.class.should eql(CF::RobotWorker)
|
78
78
|
line.stations.first.worker.reward.should eql(20)
|
79
79
|
line.stations.first.worker.number.should eql(1)
|