cloudfactory 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- data/cf.gemspec +1 -0
- data/features/error_custom_task_form.feature +117 -0
- data/features/error_form_field.feature +58 -0
- data/features/error_task_form.feature +64 -0
- data/features/errors.feature +192 -0
- data/features/run.feature +136 -121
- data/features/support/cli_steps.rb +44 -0
- data/features/support/env.rb +2 -2
- data/lib/cf.rb +3 -4
- data/lib/cf/account.rb +12 -1
- data/lib/cf/cli.rb +2 -2
- data/lib/cf/cli/config.rb +2 -2
- data/lib/cf/cli/form.rb +5 -5
- data/lib/cf/cli/line.rb +40 -16
- data/lib/cf/cli/production.rb +50 -18
- data/lib/cf/cli/templates/sample-line/form.css +41 -17
- data/lib/cf/cli/templates/sample-line/form.html +27 -18
- data/lib/cf/cli/templates/sample-line/form.js +12 -3
- data/lib/cf/cli/templates/sample-line/line.yml.erb +42 -32
- data/lib/cf/client.rb +3 -3
- data/lib/cf/custom_task_form.rb +21 -91
- data/lib/cf/department.rb +1 -10
- data/lib/cf/final_output.rb +2 -16
- data/lib/cf/form_field.rb +11 -6
- data/lib/cf/human_worker.rb +93 -1
- data/lib/cf/input_format.rb +10 -62
- data/lib/cf/line.rb +46 -37
- data/lib/cf/robot_worker.rb +63 -2
- data/lib/cf/run.rb +37 -66
- data/lib/cf/station.rb +42 -104
- data/lib/cf/task_form.rb +17 -56
- data/lib/cf/version.rb +2 -2
- data/lib/generators/cf/form/form_generator.rb +3 -3
- data/lib/generators/cf/install/install_generator.rb +3 -3
- data/spec/custom_task_form_spec.rb +169 -1
- data/spec/generators/form_generator_spec.rb +2 -2
- data/spec/generators/install_generator_spec.rb +2 -2
- data/spec/run_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -0
- data/spec/station_spec.rb +13 -1
- data/spec/task_form_spec.rb +38 -6
- metadata +63 -44
data/lib/cf/station.rb
CHANGED
@@ -3,19 +3,35 @@ module CF
|
|
3
3
|
require 'httparty'
|
4
4
|
include Client
|
5
5
|
|
6
|
-
# type of the station, e.g. station = Station.new(
|
6
|
+
# type of the station, e.g. station = Station.new({:type => "Work"})
|
7
7
|
attr_accessor :type
|
8
8
|
|
9
|
-
#
|
9
|
+
# Title of line with which station is associated with
|
10
10
|
attr_accessor :line_title
|
11
11
|
|
12
|
-
#
|
13
|
-
attr_accessor :
|
12
|
+
# Index number of station
|
13
|
+
attr_accessor :index
|
14
|
+
|
15
|
+
# Line attribute of the station with which station is associated
|
16
|
+
attr_accessor :line
|
17
|
+
|
18
|
+
# Manual input format settings for the station
|
19
|
+
attr_accessor :station_input_formats
|
20
|
+
|
21
|
+
# Jury worker settings for the Tournament Station
|
22
|
+
attr_accessor :jury_worker
|
23
|
+
|
24
|
+
# Auto Judge settings for the Tournament Station
|
25
|
+
attr_accessor :auto_judge
|
26
|
+
|
27
|
+
# Contains Error Message if any
|
28
|
+
attr_accessor :errors
|
14
29
|
|
15
30
|
# ==Initializes a new station
|
16
|
-
# ===Usage Example
|
31
|
+
# ===Usage Example:
|
17
32
|
# line = CF::Line.new("Digitize", "Survey")
|
18
|
-
# station = CF::Station.new({:
|
33
|
+
# station = CF::Station.new({:type => "Work"})
|
34
|
+
# line.stations station
|
19
35
|
def initialize(options={})
|
20
36
|
@input_formats =[]
|
21
37
|
@line_title = options[:line].nil? ? nil : options[:line].title
|
@@ -63,35 +79,20 @@ module CF
|
|
63
79
|
end
|
64
80
|
end
|
65
81
|
|
66
|
-
# ==
|
82
|
+
# ==Creation of a new station
|
67
83
|
# ===Usage Example
|
68
|
-
# ===Creating station using block variable
|
69
84
|
# line = CF::Line.create("Digitize Card","Digitization") do |l|
|
70
|
-
# CF::InputFormat.new({:line => l, :label => "Company", :
|
71
|
-
# CF::InputFormat.new({:line => l, :label => "Website", :
|
85
|
+
# CF::InputFormat.new({:line => l, :label => "Company", :required => "true", :valid_type => "general"})
|
86
|
+
# CF::InputFormat.new({:line => l, :label => "Website", :required => "true", :valid_type => "url"})
|
72
87
|
# CF::Station.create({:line => l, :type => "work") do |s|
|
73
88
|
# CF::HumanWorker.new({:station => s, :number => 1, :reward => 20)
|
74
|
-
# CF::Form.create({:station => s, :title => "Enter text from a business card image", :
|
89
|
+
# CF::Form.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
75
90
|
# CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
76
91
|
# CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
|
77
92
|
# CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
|
78
93
|
# end
|
79
94
|
# end
|
80
95
|
# end
|
81
|
-
#
|
82
|
-
# ===OR creating without variable within block
|
83
|
-
# line = CF::Line.create("Digitize Card","Digitization") do
|
84
|
-
# CF::InputFormat.new({:line => self, :label => "Company", :field_type => "text_data", :value => "Google", :required => true, :validation_format => "general"})
|
85
|
-
# CF::InputFormat.new({:line => self, :label => "Website", :field_type => "text_data", :value => "www.google.com", :required => true, :validation_format => "url"})
|
86
|
-
# CF::Station.create({:line => self, :type => "work") do
|
87
|
-
# CF::HumanWorker.new({:station => self, :number => 1, :reward => 20)
|
88
|
-
# CF::Form.create({:station => self, :title => "Enter text from a business card image", :description => "Describe"}) do
|
89
|
-
# CF::FormField.new({:form => self, :label => "First Name", :field_type => "SA", :required => "true"})
|
90
|
-
# CF::FormField.new({:form => self, :label => "Middle Name", :field_type => "SA"})
|
91
|
-
# CF::FormField.new({:form => self, :label => "Last Name", :field_type => "SA", :required => "true"})
|
92
|
-
# end
|
93
|
-
# end
|
94
|
-
# end
|
95
96
|
def self.create(options, &block)
|
96
97
|
station = Station.new(options)
|
97
98
|
if block.arity >= 1
|
@@ -102,12 +103,12 @@ module CF
|
|
102
103
|
station
|
103
104
|
end
|
104
105
|
|
105
|
-
# ==Creates new
|
106
|
-
# ===Usage
|
106
|
+
# ==Creates new Worker for station object
|
107
|
+
# ===Usage Example:
|
107
108
|
# line = CF::Line.new("line name", "Survey")
|
108
109
|
# station = CF::Station.new({:type => "work"})
|
109
110
|
# line.stations station
|
110
|
-
# human_worker = CF::HumanWorker.new({:number => 1, :
|
111
|
+
# human_worker = CF::HumanWorker.new({:number => 1, :reward => 20})
|
111
112
|
# line.stations.first.worker human_worker
|
112
113
|
def worker worker_instance = nil
|
113
114
|
if worker_instance
|
@@ -183,11 +184,11 @@ module CF
|
|
183
184
|
end
|
184
185
|
|
185
186
|
# ==Creates new form for station object
|
186
|
-
# ===Usage
|
187
|
+
# ===Usage Example:
|
187
188
|
# line = CF::Line.new("line name", "Survey")
|
188
189
|
# station = CF::Station.new({:type => "work"})
|
189
190
|
# line.stations station
|
190
|
-
#
|
191
|
+
# form = CF::Form.new({:title => "title", :instruction => "description"})
|
191
192
|
# line.stations.first.form form
|
192
193
|
def form form_instance = nil
|
193
194
|
if form_instance
|
@@ -226,55 +227,18 @@ module CF
|
|
226
227
|
@resp.to_hash.each_pair do |k,v|
|
227
228
|
form.send("#{k}=",v) if form.respond_to?(k)
|
228
229
|
end
|
230
|
+
if @resp.code != 200
|
231
|
+
form.errors = @resp.error.message
|
232
|
+
end
|
229
233
|
form.station = self
|
230
234
|
@form_instance = form
|
231
235
|
end
|
232
236
|
end
|
233
237
|
|
234
|
-
# ==Usage of line.input_formats(input_format)
|
235
|
-
# line = CF::Line.new("line name", "Survey")
|
236
|
-
# station = CF::Station.new({:type => "work"})
|
237
|
-
# line.stations station
|
238
|
-
# input_format = CF::InputFormat.new({:line => l, :label => "Website", :field_type => "text_data", :value => "www.google.com", :required => true, :validation_format => "url"})
|
239
|
-
# line.stations.first.input_formats input_format
|
240
|
-
# * returns
|
241
|
-
# line.stationss.first.input_formats as an array of input_formats
|
242
|
-
def input_formats input_formats_value = nil
|
243
|
-
if input_formats_value
|
244
|
-
name = input_formats_value.name
|
245
|
-
required = input_formats_value.required
|
246
|
-
valid_type = input_formats_value.valid_type
|
247
|
-
resp = CF::InputFormat.post("/lines/#{CF.account_name}/#{self.line_title.downcase}/input_formats.json", :input_format => {:name => name, :required => required, :valid_type => valid_type})
|
248
|
-
input_format = CF::InputFormat.new()
|
249
|
-
resp.input_format.to_hash.each_pair do |k,v|
|
250
|
-
input_format.send("#{k}=",v) if input_format.respond_to?(k)
|
251
|
-
end
|
252
|
-
@input_formats << input_format
|
253
|
-
else
|
254
|
-
@input_formats.first
|
255
|
-
end
|
256
|
-
end
|
257
|
-
def input_formats=(input_formats_value) # :nodoc:
|
258
|
-
@input_formats << input_formats_value
|
259
|
-
end
|
260
|
-
# ==Updates Standard Instruction of a station
|
261
|
-
# ===Usage example
|
262
|
-
# line = CF::Line.create("Digitize Card","Digitization") do |l|
|
263
|
-
# CF::Station.create({:line => l, :type => "work") do |s|
|
264
|
-
# CF::HumanWorker.new({:station => s, :number => 1, :reward => 20)
|
265
|
-
# end
|
266
|
-
# end
|
267
|
-
# line.stations[0].update_form({:title => "Enter phone number from a business card image", :description => "Call"})
|
268
|
-
def update_form(options={})
|
269
|
-
@title = options[:title]
|
270
|
-
@description = options[:description]
|
271
|
-
self.class.put("/stations/#{self.id}/form.json", :form => {:title => @title, :description => @description, :type => "Form"})
|
272
|
-
end
|
273
|
-
|
274
238
|
# ==Returns a particular station of a line
|
275
|
-
# ===Usage
|
276
|
-
# line = CF::Line.create("Digitize
|
277
|
-
# station = CF::Station.new({:
|
239
|
+
# ===Usage Example:
|
240
|
+
# line = CF::Line.create("Digitize", "Department_name")
|
241
|
+
# station = CF::Station.new({:type => "Work"})
|
278
242
|
# line.stations station
|
279
243
|
#
|
280
244
|
# got_station = line.stations[0].get
|
@@ -285,40 +249,14 @@ module CF
|
|
285
249
|
end
|
286
250
|
|
287
251
|
# ==Returns information of form
|
288
|
-
# ===Usage example
|
289
|
-
# line = CF::Line.create("Digitize Card","Digitization") do |l|
|
290
|
-
# CF::InputFormat.new({:line => l, :label => "Company", :field_type => "text_data", :value => "Google", :required => true, :validation_format => "general"})
|
291
|
-
# CF::InputFormat.new({:line => l, :label => "Website", :field_type => "text_data", :value => "www.google.com", :required => true, :validation_format => "url"})
|
292
|
-
# CF::Station.create({:line => l, :type => "work") do |s|
|
293
|
-
# CF::HumanWorker.new({:station => s, :number => 1, :reward => 20)
|
294
|
-
# CF::Form.create({:station => s, :title => "Enter text from a business card image", :description => "Describe"}) do |i|
|
295
|
-
# CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
296
|
-
# CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
|
297
|
-
# CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
|
298
|
-
# end
|
299
|
-
# end
|
300
|
-
# end
|
301
|
-
#
|
252
|
+
# ===Usage example:
|
302
253
|
# @got_form = line.stations[0].get_form
|
303
254
|
def get_form
|
304
255
|
self.class.get("/lines/#{CF.account_name}/#{self.line_title.downcase}/stations/#{self.index}/form.json")
|
305
256
|
end
|
306
257
|
|
307
258
|
# ==Returns all the stations associated with a particular line
|
308
|
-
# ===Usage
|
309
|
-
# line = CF::Line.create("Digitize Card","Digitization") do |l|
|
310
|
-
# CF::InputFormat.new({:line => l, :label => "Company", :field_type => "text_data", :value => "Google", :required => true, :validation_format => "general"})
|
311
|
-
# CF::InputFormat.new({:line => l, :label => "Website", :field_type => "text_data", :value => "www.google.com", :required => true, :validation_format => "url"})
|
312
|
-
# CF::Station.create({:line => l, :type => "work") do |s|
|
313
|
-
# CF::HumanWorker.new({:station => s, :number => 1, :reward => 20)
|
314
|
-
# CF::Form.create({:station => s, :title => "Enter text from a business card image", :description => "Describe"}) do |i|
|
315
|
-
# CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
316
|
-
# CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
|
317
|
-
# CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
|
318
|
-
# end
|
319
|
-
# end
|
320
|
-
# end
|
321
|
-
#
|
259
|
+
# ===Usage Example:
|
322
260
|
# CF::Station.all(line)
|
323
261
|
# returns all stations
|
324
262
|
def self.all(line)
|
@@ -328,11 +266,11 @@ module CF
|
|
328
266
|
# ==Deletes a station
|
329
267
|
# * We need to pass line object with which desired station associated with as an argument to delete a station
|
330
268
|
# ===Usage example for delete method
|
331
|
-
# line = CF::Line.new("Digitize
|
332
|
-
# station = CF::Station.new({:
|
269
|
+
# line = CF::Line.new("Digitize", "Department_name")
|
270
|
+
# station = CF::Station.new({:type => "Work"})
|
333
271
|
# line.stations station
|
334
272
|
#
|
335
|
-
#
|
273
|
+
# line.stations.first.delete
|
336
274
|
def delete
|
337
275
|
self.class.delete("/lines/#{CF.account_name}/#{self.line_title.downcase}/stations/#{self.index}.json")
|
338
276
|
end
|
data/lib/cf/task_form.rb
CHANGED
@@ -3,23 +3,23 @@ module CF
|
|
3
3
|
require 'httparty'
|
4
4
|
include Client
|
5
5
|
|
6
|
-
# title of the
|
6
|
+
# title of the form
|
7
7
|
attr_accessor :title
|
8
8
|
|
9
|
-
# instruction
|
9
|
+
# instruction of the form
|
10
10
|
attr_accessor :instruction
|
11
11
|
|
12
|
-
# form_fields
|
12
|
+
# form_fields of the Form
|
13
13
|
attr_accessor :form_fields
|
14
14
|
|
15
15
|
# station attributes required to store station information
|
16
16
|
attr_accessor :station
|
17
17
|
|
18
|
-
#
|
19
|
-
attr_accessor :
|
20
|
-
|
18
|
+
# Contains Error message if any
|
19
|
+
attr_accessor :errors
|
20
|
+
|
21
21
|
# ==Initializes a new Form
|
22
|
-
#
|
22
|
+
# ===Usage Example:
|
23
23
|
# attrs = {:title => "Enter text from a business card image",
|
24
24
|
# :instruction => "Describe"}
|
25
25
|
#
|
@@ -34,40 +34,23 @@ module CF
|
|
34
34
|
resp.to_hash.each_pair do |k,v|
|
35
35
|
self.send("#{k}=",v) if self.respond_to?(k)
|
36
36
|
end
|
37
|
+
if resp.code != 200
|
38
|
+
self.errors = resp.error.message
|
39
|
+
end
|
37
40
|
@station.form = self
|
38
41
|
end
|
39
42
|
end
|
40
43
|
|
41
44
|
# ==Initializes a new Form within block using Variable
|
42
|
-
#
|
43
|
-
# ===Creating Form using block variable
|
45
|
+
# ===Usage Example:
|
44
46
|
# line = CF::Line.create("Digitize Card","Digitization") do |l|
|
45
|
-
# CF::InputHeader.new({:line => l, :label => "Company", :
|
46
|
-
# CF::InputHeader.new({:line => l, :label => "Website", :
|
47
|
+
# CF::InputHeader.new({:line => l, :label => "Company", :required => true, :valid_type => "general"})
|
48
|
+
# CF::InputHeader.new({:line => l, :label => "Website", :required => true, :valid_type => "url"})
|
47
49
|
# CF::Station.create({:line => l, :type => "work") do |s|
|
48
50
|
# CF::HumanWorker.new({:station => s, :number => 1, :reward => 20)
|
49
|
-
# CF::Form.create(:station => s, :title => "Enter text from a business card image", :instruction => "Describe"})
|
50
|
-
# CF::FormField.new({:instruction => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
51
|
-
# CF::FormField.new({:instruction => i, :label => "Middle Name", :field_type => "SA"})
|
52
|
-
# CF::FormField.new({:instruction => i, :label => "Last Name", :field_type => "SA", :required => "true"})
|
53
|
-
# end
|
54
|
-
# end
|
55
|
-
# end
|
56
|
-
#
|
57
|
-
# ===OR without block variable
|
58
|
-
# line = CF::Line.create("Digitize Card","Digitization") do
|
59
|
-
# CF::InputHeader.new({:line => self, :label => "Company", :field_type => "text_data", :value => "Google", :required => true, :validation_format => "general"})
|
60
|
-
# CF::InputHeader.new({:line => self, :label => "Website", :field_type => "text_data", :value => "www.google.com", :required => true, :validation_format => "url"})
|
61
|
-
# CF::Station.create({:line => self, :type => "work") do
|
62
|
-
# CF::HumanWorker.new({:station => self, :number => 1, :reward => 20)
|
63
|
-
# CF::Form.create(:station => self, :title => "Enter text from a business card image", :instruction => "Describe"}) do
|
64
|
-
# CF::FormField.new({:instruction => self, :label => "First Name", :field_type => "SA", :required => "true"})
|
65
|
-
# CF::FormField.new({:instruction => self, :label => "Middle Name", :field_type => "SA"})
|
66
|
-
# CF::FormField.new({:instruction => self, :label => "Last Name", :field_type => "SA", :required => "true"})
|
67
|
-
# end
|
51
|
+
# CF::Form.create(:station => s, :title => "Enter text from a business card image", :instruction => "Describe"})
|
68
52
|
# end
|
69
53
|
# end
|
70
|
-
#
|
71
54
|
def self.create(options, &block)
|
72
55
|
form = TaskForm.new(options)
|
73
56
|
if block.arity >= 1
|
@@ -78,12 +61,12 @@ module CF
|
|
78
61
|
form
|
79
62
|
end
|
80
63
|
|
81
|
-
# ==
|
64
|
+
# ==Adding different form_fields
|
82
65
|
# ===Syntax for FormField method is form_fields << form_field_values
|
83
66
|
# ==Usage of form_fields method
|
84
67
|
# line = CF::Line.create("Digitize Card","Digitization") do |l|
|
85
|
-
# CF::InputHeader.new({:line => l, :label => "Company", :
|
86
|
-
# CF::InputHeader.new({:line => l, :label => "Website", :
|
68
|
+
# CF::InputHeader.new({:line => l, :label => "Company", :required => true, :valid_type => "general"})
|
69
|
+
# CF::InputHeader.new({:line => l, :label => "Website", :required => true, :valid_type => "url"})
|
87
70
|
# CF::Station.create({:line => l, :type => "work") do |s|
|
88
71
|
# CF::HumanWorker.new({:station => s, :number => 1, :reward => 20)
|
89
72
|
# CF::Form.create(:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
@@ -93,7 +76,6 @@ module CF
|
|
93
76
|
# end
|
94
77
|
# end
|
95
78
|
# end
|
96
|
-
#
|
97
79
|
def form_fields form_fields = nil
|
98
80
|
if form_fields
|
99
81
|
form_field_params = form_fields.form_field_params
|
@@ -122,26 +104,5 @@ module CF
|
|
122
104
|
def form_fields=(form_fields) # :nodoc:
|
123
105
|
@form_fields << form_fields
|
124
106
|
end
|
125
|
-
# ==Deletes Standard Instruction of a station
|
126
|
-
# ==Usage example
|
127
|
-
# line = CF::Line.create("Digitize Card","Digitization") do |l|
|
128
|
-
# CF::InputHeader.new({:line => l, :label => "Company", :field_type => "text_data", :value => "Google", :required => true, :validation_format => "general"})
|
129
|
-
# CF::InputHeader.new({:line => l, :label => "Website", :field_type => "text_data", :value => "www.google.com", :required => true, :validation_format => "url"})
|
130
|
-
# CF::Station.create({:line => l, :type => "work") do |s|
|
131
|
-
# CF::HumanWorker.new({:station => s, :number => 1, :reward => 20)
|
132
|
-
# CF::Form.create(:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
|
133
|
-
# CF::FormField.new({:instruction => i, :label => "First Name", :field_type => "SA", :required => "true"})
|
134
|
-
# CF::FormField.new({:instruction => i, :label => "Middle Name", :field_type => "SA"})
|
135
|
-
# CF::FormField.new({:instruction => i, :label => "Last Name", :field_type => "SA", :required => "true"})
|
136
|
-
# end
|
137
|
-
# end
|
138
|
-
# end
|
139
|
-
# station = line.stations[0]
|
140
|
-
#
|
141
|
-
# CF::Form.delete_instruction(station)
|
142
|
-
# deletes standard_instruction of a station
|
143
|
-
def self.delete_instruction(station)
|
144
|
-
delete("/lines/#{CF.account_name}/#{station.line_title.downcase}/stations/#{station.index}/form.json")
|
145
|
-
end
|
146
107
|
end
|
147
108
|
end
|
data/lib/cf/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module CF
|
2
|
-
VERSION = "0.1.
|
1
|
+
module CF # :nodoc: all
|
2
|
+
VERSION = "0.1.10"
|
3
3
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module Cf
|
2
|
-
module Generators
|
1
|
+
module Cf # :nodoc: all
|
2
|
+
module Generators # :nodoc: all
|
3
3
|
|
4
4
|
#
|
5
5
|
# TODO: if the parameter like 'company' below is not provided, then its a survey form.
|
@@ -22,7 +22,7 @@ module Cf
|
|
22
22
|
#
|
23
23
|
#
|
24
24
|
|
25
|
-
class FormGenerator < Rails::Generators::Base
|
25
|
+
class FormGenerator < Rails::Generators::Base # :nodoc: all
|
26
26
|
source_root File.expand_path("../templates", __FILE__)
|
27
27
|
argument :attributes, :type => :array, :default => [], :banner => "[label1,label2] field:type field:type"
|
28
28
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
module Cf
|
2
|
-
module Generators
|
3
|
-
class InstallGenerator < Rails::Generators::Base
|
1
|
+
module Cf # :nodoc: all
|
2
|
+
module Generators # :nodoc: all
|
3
|
+
class InstallGenerator < Rails::Generators::Base # :nodoc: all
|
4
4
|
source_root File.expand_path("../templates", __FILE__)
|
5
5
|
# argument :account_name, :required => true,
|
6
6
|
# :desc => "The account name that you used to signup at http://cloudfactory.com"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe CF::CustomTaskForm do
|
4
|
-
context "create a
|
4
|
+
context "create a Custom Task Form" do
|
5
5
|
it "in block DSL way" do
|
6
6
|
# WebMock.allow_net_connect!
|
7
7
|
VCR.use_cassette "custom-task-form/block/create", :record => :new_episodes do
|
@@ -187,4 +187,172 @@ describe CF::CustomTaskForm do
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
end
|
190
|
+
|
191
|
+
context "create a Custom Task Form for Error Handling;" do
|
192
|
+
it "creating with invalid Html content" do
|
193
|
+
# WebMock.allow_net_connect!
|
194
|
+
VCR.use_cassette "custom-task-form/block/invalid-html-content", :record => :new_episodes do
|
195
|
+
html = '<div id="form-content">
|
196
|
+
<div id="instructions">
|
197
|
+
<ul>
|
198
|
+
<li>Look at the business card properly and fill in asked data.</li>
|
199
|
+
<li>Make sure you enter everything found on business card.</li>
|
200
|
+
<li>Work may be rejected if it is incomplete or mistakes are found.</li>
|
201
|
+
</ul>
|
202
|
+
</div>
|
203
|
+
<div id="image-field-wrapper">
|
204
|
+
<div id = "image-panel" >
|
205
|
+
<img class="card-image" src="{{image_url}}">
|
206
|
+
</div>
|
207
|
+
<div id = "field-panel">
|
208
|
+
Name<br />
|
209
|
+
<input class="input-field first_name" type="text" name="final_output[first_name]" />
|
210
|
+
<input class="input-field middle_name" type="text" name="final_output[middle_name]" />
|
211
|
+
<input class="input-field last_name" type="text" name="final_output[last_name]" /><br />
|
212
|
+
|
213
|
+
<br />Contact<br />
|
214
|
+
<input class="input-field email" type="text" name="final_output[email]" placeholder="Email"/>
|
215
|
+
<input class="input-field phone" type="text" name="final_output[phone]" placeholder="Phone"/>
|
216
|
+
<input class="input-field mobile" type="text" name="final_output[mobile]" placeholder="Mobile"/><br />
|
217
|
+
|
218
|
+
</div>
|
219
|
+
</div>
|
220
|
+
</div>'
|
221
|
+
line = CF::Line.create("Digitizecustomform111", "Digitization") do
|
222
|
+
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
223
|
+
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
224
|
+
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
225
|
+
CF::HumanWorker.new({:station => s, :number => 3, :reward => 20})
|
226
|
+
CF::CustomTaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe", :raw_html => html})
|
227
|
+
end
|
228
|
+
end
|
229
|
+
line.title.should eql("Digitizecustomform111")
|
230
|
+
line.department_name.should eql("Digitization")
|
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
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
it "creating without title" do
|
236
|
+
# WebMock.allow_net_connect!
|
237
|
+
VCR.use_cassette "custom-task-form/block/without-title", :record => :new_episodes do
|
238
|
+
html = '<div id="form-content">
|
239
|
+
<div id="instructions">
|
240
|
+
<ul>
|
241
|
+
<li>Look at the business card properly and fill in asked data.</li>
|
242
|
+
<li>Make sure you enter everything found on business card.</li>
|
243
|
+
<li>Work may be rejected if it is incomplete or mistakes are found.</li>
|
244
|
+
</ul>
|
245
|
+
</div>
|
246
|
+
<div id="image-field-wrapper">
|
247
|
+
<div id = "image-panel" >
|
248
|
+
<img class="card-image" src="{{image_url}}">
|
249
|
+
</div>
|
250
|
+
<div id = "field-panel">
|
251
|
+
Name<br />
|
252
|
+
<input class="input-field first_name" type="text" name="output[first_name]" />
|
253
|
+
<input class="input-field middle_name" type="text" name="output[middle_name]" />
|
254
|
+
<input class="input-field last_name" type="text" name="output[last_name]" /><br />
|
255
|
+
|
256
|
+
<br />Contact<br />
|
257
|
+
<input class="input-field email" type="text" name="output[email]" placeholder="Email"/>
|
258
|
+
<input class="input-field phone" type="text" name="output[phone]" placeholder="Phone"/>
|
259
|
+
<input class="input-field mobile" type="text" name="output[mobile]" placeholder="Mobile"/><br />
|
260
|
+
|
261
|
+
</div>
|
262
|
+
</div>
|
263
|
+
</div>'
|
264
|
+
line = CF::Line.create("Digitizecustomform112", "Digitization") do
|
265
|
+
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
266
|
+
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
267
|
+
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
268
|
+
CF::HumanWorker.new({:station => s, :number => 3, :reward => 20})
|
269
|
+
CF::CustomTaskForm.create({:station => s, :instruction => "Describe", :raw_html => html})
|
270
|
+
end
|
271
|
+
end
|
272
|
+
line.title.should eql("Digitizecustomform112")
|
273
|
+
line.department_name.should eql("Digitization")
|
274
|
+
line.stations.first.form.errors.should eql("[\"Title can't be blank\", \"Raw html should contain a Form tag\"]")
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
it "creating without instruction" do
|
279
|
+
# WebMock.allow_net_connect!
|
280
|
+
VCR.use_cassette "custom-task-form/block/without-instruction", :record => :new_episodes do
|
281
|
+
html = '<div id="form-content">
|
282
|
+
<div id="instructions">
|
283
|
+
<ul>
|
284
|
+
<li>Look at the business card properly and fill in asked data.</li>
|
285
|
+
<li>Make sure you enter everything found on business card.</li>
|
286
|
+
<li>Work may be rejected if it is incomplete or mistakes are found.</li>
|
287
|
+
</ul>
|
288
|
+
</div>
|
289
|
+
<div id="image-field-wrapper">
|
290
|
+
<div id = "image-panel" >
|
291
|
+
<img class="card-image" src="{{image_url}}">
|
292
|
+
</div>
|
293
|
+
<div id = "field-panel">
|
294
|
+
Name<br />
|
295
|
+
<input class="input-field first_name" type="text" name="output[first_name]" />
|
296
|
+
<input class="input-field middle_name" type="text" name="output[middle_name]" />
|
297
|
+
<input class="input-field last_name" type="text" name="output[last_name]" /><br />
|
298
|
+
|
299
|
+
<br />Contact<br />
|
300
|
+
<input class="input-field email" type="text" name="output[email]" placeholder="Email"/>
|
301
|
+
<input class="input-field phone" type="text" name="output[phone]" placeholder="Phone"/>
|
302
|
+
<input class="input-field mobile" type="text" name="output[mobile]" placeholder="Mobile"/><br />
|
303
|
+
|
304
|
+
</div>
|
305
|
+
</div>
|
306
|
+
</div>'
|
307
|
+
line = CF::Line.create("Digitizecustomform113", "Digitization") do
|
308
|
+
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
309
|
+
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
310
|
+
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
311
|
+
CF::HumanWorker.new({:station => s, :number => 3, :reward => 20})
|
312
|
+
CF::CustomTaskForm.create({:station => s, :title => "title", :raw_html => html})
|
313
|
+
end
|
314
|
+
end
|
315
|
+
line.title.should eql("Digitizecustomform113")
|
316
|
+
line.department_name.should eql("Digitization")
|
317
|
+
line.stations.first.form.errors.should eql("[\"Instruction can't be blank\", \"Raw html should contain a Form tag\"]")
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
it "creating without any html data" do
|
322
|
+
# WebMock.allow_net_connect!
|
323
|
+
VCR.use_cassette "custom-task-form/block/without-html", :record => :new_episodes do
|
324
|
+
line = CF::Line.create("Digitizecustomform114", "Digitization") do
|
325
|
+
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
326
|
+
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
327
|
+
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
328
|
+
CF::HumanWorker.new({:station => s, :number => 3, :reward => 20})
|
329
|
+
CF::CustomTaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"})
|
330
|
+
end
|
331
|
+
end
|
332
|
+
line.title.should eql("Digitizecustomform114")
|
333
|
+
line.department_name.should eql("Digitization")
|
334
|
+
line.stations.first.form.errors.should eql("[\"Raw html is required\"]")
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
it "creating without any html data in plain ruby way" do
|
339
|
+
# WebMock.allow_net_connect!
|
340
|
+
VCR.use_cassette "custom-task-form/plain/without-html", :record => :new_episodes do
|
341
|
+
line = CF::Line.create("Digitizecustomform115", "Digitization") do
|
342
|
+
CF::InputFormat.new({:line => self, :name => "Name", :required => true, :valid_format => "general"})
|
343
|
+
CF::InputFormat.new({:line => self, :name => "Contact", :required => true, :valid_type => "url"})
|
344
|
+
CF::Station.create({:line => self, :type => "work", :max_judges => 10, :auto_judge => true}) do |s|
|
345
|
+
CF::HumanWorker.new({:station => s, :number => 3, :reward => 20})
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
349
|
+
form = CF::CustomTaskForm.create({:title => "Enter text from a business card image", :instruction => "Describe"})
|
350
|
+
line.stations.first.form = form
|
351
|
+
|
352
|
+
line.title.should eql("Digitizecustomform115")
|
353
|
+
line.department_name.should eql("Digitization")
|
354
|
+
line.stations.first.form.errors.should eql("[\"Raw html is required\"]")
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
190
358
|
end
|