cloudfactory 0.0.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.
Files changed (116) hide show
  1. data/.gitignore +11 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +10 -0
  4. data/README.md +44 -0
  5. data/Rakefile +40 -0
  6. data/bin/cf +8 -0
  7. data/cf.gemspec +76 -0
  8. data/example/google_translate_app/Gemfile +12 -0
  9. data/example/google_translate_app/config.ru +7 -0
  10. data/example/google_translate_app/google_translate_input.csv +4 -0
  11. data/example/google_translate_app/google_translator_app.rb +53 -0
  12. data/example/google_translate_app/views/index.haml +2 -0
  13. data/example/google_translate_app/views/layout.haml +7 -0
  14. data/example/google_translate_app/views/run.haml +4 -0
  15. data/example/google_translate_app/views/style.sass +2 -0
  16. data/example/human_worker_app/Gemfile +12 -0
  17. data/example/human_worker_app/config.ru +7 -0
  18. data/example/human_worker_app/human_worker_app.rb +55 -0
  19. data/example/human_worker_app/human_worker_input.csv +5 -0
  20. data/example/human_worker_app/public/app.js +12 -0
  21. data/example/human_worker_app/temp.csv +3 -0
  22. data/example/human_worker_app/views/index.haml +15 -0
  23. data/example/human_worker_app/views/layout.haml +10 -0
  24. data/example/human_worker_app/views/result.haml +18 -0
  25. data/example/human_worker_app/views/run.haml +12 -0
  26. data/example/human_worker_app/views/style.sass +25 -0
  27. data/example/sample_yaml_files/concept_tagging_robot.yaml +18 -0
  28. data/example/sample_yaml_files/content_scraping_robot.yaml +19 -0
  29. data/example/sample_yaml_files/entity_extraction_robot.yaml +18 -0
  30. data/example/sample_yaml_files/google_translate_robot.yaml +20 -0
  31. data/example/sample_yaml_files/image_processing_robot.yaml +20 -0
  32. data/example/sample_yaml_files/keyword_matching_and_text_extraction_robot.yaml +26 -0
  33. data/example/sample_yaml_files/mailer_robot.yaml +21 -0
  34. data/example/sample_yaml_files/media_converter_robot.yaml +21 -0
  35. data/example/sample_yaml_files/media_splitting_robot.yaml +20 -0
  36. data/example/sample_yaml_files/multiple_skill_badge.yaml +75 -0
  37. data/example/sample_yaml_files/sentiment_robot.yaml +19 -0
  38. data/example/sample_yaml_files/skill_badge.yaml +56 -0
  39. data/example/sample_yaml_files/stat_badge.yaml +40 -0
  40. data/example/sample_yaml_files/term_extraction_robot.yaml +20 -0
  41. data/example/sample_yaml_files/tournament_station_and_form_fields.yaml +40 -0
  42. data/features/form_generation.feature +46 -0
  43. data/features/form_preview.feature +98 -0
  44. data/features/line_creation.feature +99 -0
  45. data/features/line_deletion.feature +50 -0
  46. data/features/line_generation.feature +57 -0
  47. data/features/run.feature +141 -0
  48. data/features/support/cli_steps.rb +16 -0
  49. data/features/support/env.rb +23 -0
  50. data/features/target_url.feature +82 -0
  51. data/fixtures/api_credentials_example.yml +4 -0
  52. data/fixtures/input_data/media_converter_robot.csv +2 -0
  53. data/fixtures/input_data/test.csv +2 -0
  54. data/lib/cf.rb +94 -0
  55. data/lib/cf/account.rb +32 -0
  56. data/lib/cf/cli.rb +52 -0
  57. data/lib/cf/cli/config.rb +87 -0
  58. data/lib/cf/cli/form.rb +82 -0
  59. data/lib/cf/cli/line.rb +237 -0
  60. data/lib/cf/cli/production.rb +62 -0
  61. data/lib/cf/cli/templates/css_file.css.erb +22 -0
  62. data/lib/cf/cli/templates/form_preview.html.erb +17 -0
  63. data/lib/cf/cli/templates/html_file.html.erb +21 -0
  64. data/lib/cf/cli/templates/js_file.js.erb +18 -0
  65. data/lib/cf/cli/templates/line.tt +55 -0
  66. data/lib/cf/cli/templates/sample-line/form.css +27 -0
  67. data/lib/cf/cli/templates/sample-line/form.html +26 -0
  68. data/lib/cf/cli/templates/sample-line/form.js +7 -0
  69. data/lib/cf/cli/templates/sample-line/line.yml.erb +67 -0
  70. data/lib/cf/cli/templates/sample-line/sample-line.csv +3 -0
  71. data/lib/cf/client.rb +56 -0
  72. data/lib/cf/custom_task_form.rb +136 -0
  73. data/lib/cf/department.rb +24 -0
  74. data/lib/cf/final_output.rb +20 -0
  75. data/lib/cf/form_field.rb +62 -0
  76. data/lib/cf/human_worker.rb +67 -0
  77. data/lib/cf/input_format.rb +134 -0
  78. data/lib/cf/line.rb +231 -0
  79. data/lib/cf/robot_worker.rb +31 -0
  80. data/lib/cf/run.rb +158 -0
  81. data/lib/cf/station.rb +340 -0
  82. data/lib/cf/task_form.rb +147 -0
  83. data/lib/cf/version.rb +3 -0
  84. data/lib/generators/cf/form/form_generator.rb +55 -0
  85. data/lib/generators/cf/form/templates/cf_form.html.erb +11 -0
  86. data/lib/generators/cf/install/install_generator.rb +22 -0
  87. data/lib/generators/cf/install/templates/README +13 -0
  88. data/lib/generators/cf/install/templates/cloud_factory.rb +7 -0
  89. data/spec/account_spec.rb +11 -0
  90. data/spec/badge_spec.rb +88 -0
  91. data/spec/concept_tagging_robot_spec.rb +54 -0
  92. data/spec/config_spec.rb +20 -0
  93. data/spec/content_scraping_robot_spec.rb +58 -0
  94. data/spec/custom_task_form_spec.rb +190 -0
  95. data/spec/department_spec.rb +14 -0
  96. data/spec/entity_extraction_robot_spec.rb +56 -0
  97. data/spec/form_field_spec.rb +126 -0
  98. data/spec/generators/form_generator_spec.rb +60 -0
  99. data/spec/generators/install_generator_spec.rb +35 -0
  100. data/spec/google_translate_robot_spec.rb +64 -0
  101. data/spec/human_worker_spec.rb +118 -0
  102. data/spec/image_processing_robot_spec.rb +56 -0
  103. data/spec/input_format_spec.rb +113 -0
  104. data/spec/keyword_matching_and_text_extraction_robot_spec.rb +73 -0
  105. data/spec/line_spec.rb +338 -0
  106. data/spec/mailer_robot_spec.rb +62 -0
  107. data/spec/media_converter_robot_spec.rb +72 -0
  108. data/spec/media_splitting_robot_spec.rb +62 -0
  109. data/spec/run_spec.rb +298 -0
  110. data/spec/sentiment_robot_spec.rb +56 -0
  111. data/spec/spec_helper.rb +39 -0
  112. data/spec/station_spec.rb +256 -0
  113. data/spec/task_form_spec.rb +96 -0
  114. data/spec/term_extraction_robot_spec.rb +58 -0
  115. data/spec/text_appending_robot_spec.rb +86 -0
  116. metadata +472 -0
@@ -0,0 +1,20 @@
1
+ api_key: f488a62d0307e79ec4f1e6131fa220be47e83d44
2
+ title: manish
3
+ description: Describe the line what its purpose is and what it does. You got the idea, right?
4
+ department: Survey
5
+
6
+ input_formats:
7
+ - name: url
8
+ required: true
9
+ valid_type: url
10
+
11
+ stations:
12
+ - station:
13
+ station_index: 1
14
+ station_type: work
15
+ worker:
16
+ worker_type: term_extraction_robot
17
+ settings:
18
+ url: ["{url}"]
19
+ max_retrieve: 5
20
+ show_source_text: true
@@ -0,0 +1,40 @@
1
+ api_key: f488a62d0307e79ec4f1e6131fa220be47e83d44
2
+ title: manish
3
+ description: Describe the line what its purpose is and what it does. You got the idea, right?
4
+ department: Survey
5
+
6
+ input_formats:
7
+ - name: text
8
+ required: true
9
+ valid_type: general
10
+
11
+ stations:
12
+ - station:
13
+ station_index: 1
14
+ station_type: tournament
15
+ jury_worker:
16
+ max_judges: 10
17
+ auto_judge:
18
+ enabled: true
19
+ worker:
20
+ worker_type: human
21
+ num_workers: 1
22
+ reward: 10
23
+ task_form:
24
+ form_title: Enter text from a business card image
25
+ instruction: Description should be written here
26
+ form_fields:
27
+ - label: First Name
28
+ required: true
29
+ field_type: SA
30
+ - label: Middle Name
31
+ field_type: SA
32
+ - label: Last Name
33
+ required: true
34
+ field_type: SA
35
+ - label: Gender
36
+ required: true
37
+ field_type: RB
38
+ option_values:
39
+ - male
40
+ - female
@@ -0,0 +1,46 @@
1
+ Feature: Generate Custom Task Forms
2
+ In order to generate custom task forms
3
+ As a CLI user
4
+ I want to generate custom task forms
5
+
6
+ Scenario: Scaffolding a custom task form but outside of the line directory
7
+ Given a directory named "brandiator"
8
+ When I run `cf form generate --station 1 --labels company,website --fields ceo:string email:email`
9
+ Then the output should contain:
10
+ """
11
+ The current directory is not a valid line directory.
12
+ """
13
+
14
+ Scenario: Warn if the given station already has the form created
15
+ Given an empty file named "brandiator/line.yml"
16
+ And a directory named "brandiator/station_2"
17
+ And I cd to "brandiator"
18
+ When I run `cf form generate --station 2 --labels company,website --fields ceo:string email:email`
19
+ Then the output should contain:
20
+ """
21
+ Skipping the form generation because the station_2 already exists with its custom form.
22
+ Use the -f flag to force it to overwrite or check and delete the station_2 folder manually.
23
+ """
24
+
25
+ Scenario: Overwrite forcefully if the given station already has the form created
26
+ Given an empty file named "brandiator/line.yml"
27
+ And a directory named "brandiator/station_2"
28
+ And I cd to "brandiator"
29
+ When I run `cf form generate --force --station 2 --labels company,website --fields ceo:string email:email`
30
+ Then the output should contain:
31
+ """
32
+ A new custom task form created in station_2.
33
+ """
34
+
35
+ Scenario: Scaffolding a custom task form with all the parameters and valid conditions
36
+ Given an empty file named "brandiator/line.yml"
37
+ And I cd to "brandiator"
38
+ When I run `cf form generate --station 2 --labels company,website --fields ceo:string email:email`
39
+ Then the following files should exist:
40
+ | station_2/form.html |
41
+ | station_2/form.css |
42
+ | station_2/form.js |
43
+ And the output should contain:
44
+ """
45
+ A new custom task form created in station_2.
46
+ """
@@ -0,0 +1,98 @@
1
+ Feature: Preview a generated custom form
2
+ In order to preview the generated custom task form
3
+ As a CLI user
4
+ I want to preview the custom task form
5
+
6
+ Scenario: Previewing the generated form in the browser with the non-existing station
7
+ Given an empty file named "brandiator/line.yml"
8
+ And I cd to "brandiator"
9
+ When I run `cf form preview --station 2`
10
+ Then the output should contain:
11
+ """
12
+ No form exists for station 2
13
+ Generate the form for station 2 and then preview it.
14
+ """
15
+
16
+ Scenario: Trying to preview the form for the empty station directory
17
+ Given an empty file named "brandiator/line.yml"
18
+ And a directory named "station_2"
19
+ And I cd to "brandiator"
20
+ When I run `cf form preview --station 2`
21
+ Then the output should contain:
22
+ """
23
+ No form exists for station 2
24
+ Generate the form for station 2 and then preview it.
25
+ """
26
+ @announce
27
+ Scenario: Previewing the generated form in the browser
28
+ Given an empty file named "brandiator/line.yml"
29
+ # And a directory named "station_2"
30
+ And I cd to "brandiator"
31
+
32
+ And a file named "station_2/form.html" with:
33
+ """
34
+ <div id="my_form_instructions" class="brandiator cf_form_instruction">
35
+ <ul>
36
+ <li>Sample bullet list of instruction</li>
37
+ <li>Sample bullet list of instruction</li>
38
+ <li>Sample bullet list of instruction</li>
39
+ </ul>
40
+ </div>
41
+
42
+ <div id="my_form" class="brandiator cf_form_content">
43
+ <label>{{company}}</label>
44
+ <label>{{website}}</label>
45
+
46
+ <div id = "field-panel">
47
+ <p><label>ceo</label><input id="ceo" type="text" name="output[ceo]" data-valid-type="string" /></p>
48
+ <p><label>email</label><input id="email" type="text" name="output[email]" data-valid-type="email" /></p>
49
+ </div>
50
+ </div>
51
+ """
52
+ And a file named "station_2/form.css" with:
53
+ """
54
+ body { background-color: #777; color: #fefefe; }
55
+ """
56
+ And a file named "station_2/form.js" with:
57
+ """
58
+ alert("Hey! If you see me, it means I work.")
59
+ """
60
+
61
+ When I run `cf form preview --station 2`
62
+ Then a file named "station_2/form_preview.html" should exist
63
+ # And the file ".cf/brandiator/my_form_preview.html" should contain:
64
+ # """
65
+ # <!DOCTYPE html>
66
+ # <html lang="en">
67
+ # <head>
68
+ # <title>Form Preview</title>
69
+ # <link href="my_form.css" media="screen, projection" rel="stylesheet" type="text/css" />
70
+ # <script src="my_formjs" type="text/javascript"></script>
71
+ # </head>
72
+ # <!--[if lt IE 7 ]> <body class="ie6"> <![endif]-->
73
+ # <!--[if IE 7 ]> <body class="ie7"> <![endif]-->
74
+ # <!--[if IE 8 ]> <body class="ie8"> <![endif]-->
75
+ # <!--[if IE 9 ]> <body class="ie9"> <![endif]-->
76
+ # <!--[if (gt IE 9)|!(IE)]><!--> <body> <!--<![endif]-->
77
+ # <div id="container">
78
+ # <div id="my_form_instructions" class="brandiator cf_form_instruction">
79
+ # <ul>
80
+ # <li>Sample bullet list of instruction</li>
81
+ # <li>Sample bullet list of instruction</li>
82
+ # <li>Sample bullet list of instruction</li>
83
+ # </ul>
84
+ # </div>
85
+ #
86
+ # <div id="my_form" class="brandiator cf_form_content">
87
+ # <label>{{company}}</label>
88
+ # <label>{{website}}</label>
89
+ #
90
+ # <div id = "field-panel">
91
+ # <p><label>ceo</label><input id="ceo" type="text" name="output[ceo]" data-valid-type="string" /></p>
92
+ # <p><label>email</label><input id="email" type="text" name="output[email]" data-valid-type="email" /></p>
93
+ # </div>
94
+ # </div>
95
+ # </div>
96
+ # </body>
97
+ # </html>
98
+ # """
@@ -0,0 +1,99 @@
1
+ Feature: Create a new line on CF
2
+ In order to create a line with the generated line file
3
+ As a CLI user
4
+ I want to create a line via cli for the line
5
+
6
+ @announce, @too_slow_process
7
+ Scenario: Creating a Line
8
+ Given a file named ".cf_credentials" with:
9
+ """
10
+ ---
11
+ :target_url: http://lvh.me:3000/api/
12
+ :api_version: v1
13
+
14
+ """
15
+ And a file named "brandiator/line.yml" with:
16
+ """
17
+ api_key: 89ceebf739adbf59d34911f4f28b2fa0e1564fb6
18
+ title: brandiator
19
+ description: Describe the line what its purpose is and what it does. You got the idea, right?
20
+ department: Survey
21
+
22
+ input_formats:
23
+ - name: company
24
+ required: true
25
+ valid_type: general
26
+ - name: website
27
+ required: false
28
+ valid_type: url
29
+
30
+ stations:
31
+ - station:
32
+ station_index: 1
33
+ station_type: work
34
+ worker:
35
+ worker_type: human
36
+ num_workers: 2
37
+ reward: 5
38
+ task_form:
39
+ form_title: Enter text from a business card image for TASKFORM
40
+ instruction: Read the business card image and the fill the fields for TASKFORM
41
+ form_fields:
42
+ - label: CEO Name
43
+ field_type: short_answer
44
+ required: true
45
+ - label: CEO Email
46
+ field_type: email
47
+ required: true
48
+ - station:
49
+ station_index: 2
50
+ station_type: work
51
+ worker:
52
+ worker_type: human
53
+ num_workers: 1
54
+ reward: 3
55
+ custom_task_form:
56
+ form_title: Enter text from a business card image for CUSTOMTASKFORM
57
+ instruction: Read the business card image and the fill the fields for CUSTOMTASKFORM
58
+ html: form.html
59
+ css: form.css
60
+ js: form.js
61
+ """
62
+ And a file named "brandiator/station_2/form.html" with:
63
+ """
64
+ <div id="my_form_instructions" class="brandiator cf_form_instruction">
65
+ <ul>
66
+ <li>Sample bullet list of instruction</li>
67
+ </ul>
68
+ </div>
69
+ <div id="my_form" class="brandiator cf_form_content">
70
+ <label>{{company}}</label>
71
+ <label>{{website}}</label>
72
+ <div id = "field-panel">
73
+ <p><label>ceo</label><input id="ceo" type="text" name="output[ceo]" data-valid-type="string" /></p>
74
+ <p><label>email</label><input id="email" type="text" name="output[email]" data-valid-type="email" /></p>
75
+ </div>
76
+ </div>
77
+ """
78
+ And a file named "brandiator/station_2/form.css" with:
79
+ """
80
+ body { background: #e0e0d8; color: #000; }
81
+ """
82
+ And a file named "brandiator/station_2/form.js" with:
83
+ """
84
+ <script type="text/javascript">
85
+ $(document).ready(function(){
86
+ //do your stuff here
87
+ });
88
+ </script>
89
+ """
90
+
91
+ And I cd to "brandiator"
92
+ When I run `cf line create`
93
+ Then the output should match:
94
+ """
95
+ Congrats! brandiator was successfully created.
96
+ View your line at http://taken.lvh.me:3000/lines/taken/brandiator
97
+ Now you can do production runs with: cf production start <your_run_title>
98
+ Note: Make sure your-run-title.csv file is in the input directory.
99
+ """
@@ -0,0 +1,50 @@
1
+ Feature: Deleting a line on CF
2
+ In order to delete a line
3
+ As a CLI user
4
+ I want to delete a line via cli for the line
5
+
6
+ @announce, @too_slow_process
7
+ Scenario: Creating then deleting a Line
8
+ Given a file named ".cf_credentials" with:
9
+ """
10
+ ---
11
+ :target_url: http://lvh.me:3000/api/
12
+ :api_version: v1
13
+ """
14
+ And a file named "brandiator/line.yml" with:
15
+ """
16
+ api_key: 89ceebf739adbf59d34911f4f28b2fa0e1564fb6
17
+ title: brandiator-deletion
18
+ description: Describe the line what its purpose is and what it does. You got the idea, right?
19
+ department: Survey
20
+ input_formats:
21
+ - name: company
22
+ required: true
23
+ valid_type: general
24
+ stations:
25
+ - station:
26
+ station_index: 1
27
+ station_type: work
28
+ worker:
29
+ worker_type: human
30
+ num_workers: 2
31
+ reward: 5
32
+ task_form:
33
+ form_title: Enter text from a business card image for TASKFORM
34
+ instruction: Read the business card image and the fill the fields for TASKFORM
35
+ form_fields:
36
+ - label: CEO Name
37
+ field_type: short_answer
38
+ required: true
39
+ """
40
+ And I cd to "brandiator"
41
+ When I run `cf line create`
42
+ Then the output should match:
43
+ """
44
+ Congrats! brandiator-deletion was successfully created.
45
+ """
46
+ When I run `cf line delete`
47
+ Then the output should match:
48
+ """
49
+ The line brandiator-deletion is deleted successfully!
50
+ """
@@ -0,0 +1,57 @@
1
+ Feature: Line manage
2
+ In order to generate a line yaml scaffold
3
+ As a CLI user
4
+ I want to scaffold a line
5
+
6
+ @slow_process, @announce
7
+ Scenario: Scaffolding a line
8
+ Given a directory named "cf_apps"
9
+ And I cd to "cf_apps"
10
+ When I run `cf line generate brandiator`
11
+ Then a file named "brandiator/line.yml" should exist
12
+ And the following files should exist:
13
+ | brandiator/station_2/form.html |
14
+ | brandiator/station_2/form.css |
15
+ | brandiator/station_2/form.js |
16
+ | brandiator/input/brandiator.csv |
17
+
18
+ And a directory named "brandiator/output" should exist
19
+ And the output should contain:
20
+ """
21
+ A new line named brandiator generated.
22
+ Modify the brandiator/line.yml file and you can create this line with: cf line create
23
+ """
24
+
25
+ @slow_process, @no-clobber
26
+ Scenario: Overwriting with a --force (-f) flag for an existing line
27
+ And I cd to "cf_apps"
28
+ When I run `cf line generate brandiator`
29
+ Then the output should match:
30
+ """
31
+ Skipping brandiator/line.yml because it already exists.
32
+ Use the -f flag to force it to overwrite or check and delete it manually.
33
+ """
34
+
35
+ Scenario: No api_key present in the yaml file
36
+ Given a file named ".cf_credentials" with:
37
+ """
38
+ ---
39
+ :target_url: http://lvh.me:3000/api/
40
+ :api_version: v1
41
+
42
+ """
43
+
44
+ Given a directory named "cf_apps"
45
+ And I cd to "cf_apps"
46
+ And a file named "brandiator/line.yml" with:
47
+ """
48
+ api_key:
49
+ title: brandiator
50
+ department: Survey
51
+ """
52
+ And I cd to "brandiator"
53
+ When I run `cf line create`
54
+ Then the output should match:
55
+ """
56
+ The api_key is missing in the line.yml file
57
+ """
@@ -0,0 +1,141 @@
1
+ Feature: Create a production run on CF
2
+ In order to create a run with the generated line
3
+ As a CLI user
4
+ I want to make a production run
5
+
6
+ @announce
7
+ Scenario: Creating a production run without run title
8
+ Given an empty file named "brandiator/line.yml"
9
+ And I cd to "brandiator"
10
+ When I run `cf production start`
11
+ Then the output should contain:
12
+ """
13
+ The run title is required to start the production.
14
+ """
15
+
16
+ @announce
17
+ Scenario: Warn about the missing input/input_data.csv input file if not present
18
+ Given a file named "brandiator/line.yml" with:
19
+ """
20
+ api_key: 89ceebf739adbf59d34911f4f28b2fa0e1564fb6
21
+ title: brandiator
22
+ """
23
+ And I cd to "brandiator"
24
+ And a directory named "input"
25
+ When I run `cf production start my_first-run -i input_data.csv`
26
+ Then the output should contain:
27
+ """
28
+ The input data csv file named input/input_data.csv is missing.
29
+ """
30
+
31
+ @announce
32
+ Scenario: Warn about the missing input/run-title.csv input file if not present when -i optional value is not passed
33
+ Given a file named "brandiator/line.yml" with:
34
+ """
35
+ api_key: 89ceebf739adbf59d34911f4f28b2fa0e1564fb6
36
+ title: brandiator
37
+ """
38
+ And I cd to "brandiator"
39
+ And a directory named "input"
40
+ When I run `cf production start my_first-run`
41
+ Then the output should contain:
42
+ """
43
+ The input data csv file named input/my-first-run.csv is missing.
44
+ """
45
+
46
+ @announce, @too_slow_process
47
+ Scenario: Starting a production
48
+ Given a file named ".cf_credentials" with:
49
+ """
50
+ ---
51
+ :target_url: http://lvh.me:3000/api/
52
+ :api_version: v1
53
+
54
+ """
55
+ And a file named "brandiator/station_2/form.html" with:
56
+ """
57
+ <div id="my_form_instructions" class="brandiator cf_form_instruction">
58
+ <ul>
59
+ <li>Sample bullet list of instruction</li>
60
+ </ul>
61
+ </div>
62
+ <div id="my_form" class="brandiator cf_form_content">
63
+ <label>{{company}}</label>
64
+ <label>{{website}}</label>
65
+ <div id = "field-panel">
66
+ <p><label>ceo</label><input id="ceo" type="text" name="output[ceo]" data-valid-type="string" /></p>
67
+ <p><label>email</label><input id="email" type="text" name="output[email]" data-valid-type="email" /></p>
68
+ </div>
69
+ </div>
70
+ """
71
+ And a file named "brandiator/station_2/form.css" with:
72
+ """
73
+ body { background: #e0e0d8; color: #000; }
74
+ """
75
+ And a file named "brandiator/station_2/form.js" with:
76
+ """
77
+ <script type="text/javascript">
78
+ $(document).ready(function(){
79
+ //do your stuff here
80
+ });
81
+ </script>
82
+ """
83
+
84
+ And a file named "brandiator/line.yml" with:
85
+ """
86
+ api_key: 89ceebf739adbf59d34911f4f28b2fa0e1564fb6
87
+ title: brandiator
88
+ description: Describe the line what its purpose is and what it does. You got the idea, right?
89
+ department: Survey
90
+
91
+ input_formats:
92
+ - name: company
93
+ required: true
94
+ valid_type: general
95
+ - name: website
96
+ required: false
97
+ valid_type: url
98
+
99
+ stations:
100
+ - station:
101
+ station_index: 1
102
+ station_type: work
103
+ worker:
104
+ worker_type: human
105
+ num_workers: 2
106
+ reward: 5
107
+ task_form:
108
+ form_title: Enter text from a business card image for TASKFORM
109
+ instruction: Read the business card image and the fill the fields for TASKFORM
110
+ form_fields:
111
+ - label: CEO Name
112
+ field_type: short_answer
113
+ required: true
114
+ - label: CEO Email
115
+ field_type: email
116
+ required: true
117
+ - station:
118
+ station_index: 2
119
+ station_type: work
120
+ worker:
121
+ worker_type: human
122
+ num_workers: 1
123
+ reward: 3
124
+ custom_task_form:
125
+ form_title: Enter text from a business card image for CUSTOMTASKFORM
126
+ instruction: Read the business card image and the fill the fields for CUSTOMTASKFORM
127
+ html: form.html
128
+ css: form.css
129
+ js: form.js
130
+ """
131
+ And a file named "brandiator/input/my-run-title.csv" with:
132
+ """
133
+ company,website,meta_data_company
134
+ Apple,apple.com,Apple
135
+ """
136
+ And I cd to "brandiator"
137
+ When I run `cf production start my_run_title`
138
+ Then the output should match:
139
+ """
140
+ A run with title my-run-title using the line brandiator was successfully created.
141
+ """