cloudfactory 0.1.14 → 0.1.15
Sign up to get free protection for your applications and to get access to all the features.
- 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/cf.gemspec
CHANGED
data/lib/cf/cli/line.rb
CHANGED
@@ -75,15 +75,24 @@ module Cf # :nodoc: all
|
|
75
75
|
CF::Line.destroy(line_title, :forced => true)
|
76
76
|
say("The line #{line_title} deleted forcefully!", :yellow)
|
77
77
|
else
|
78
|
-
|
79
|
-
#
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
78
|
+
|
79
|
+
# Check whether this line has existing runs or not
|
80
|
+
runs = CF::Run.all(line_title)
|
81
|
+
if runs.try(:error).blank?
|
82
|
+
say("!!! Warning !!!\nThe following are the existing production runs based on this line.", :cyan)
|
83
|
+
existing_runs = Cf::Production.new
|
84
|
+
existing_runs.options = {"line" => line_title}
|
85
|
+
existing_runs.list
|
86
|
+
delete_forcefully = agree("Do you still want to delete this line? [y/n] ")
|
87
|
+
if delete_forcefully
|
88
|
+
CF::Line.destroy(line_title, :forced => true)
|
89
|
+
say("The line #{line_title} deleted successfully!", :yellow)
|
90
|
+
else
|
91
|
+
say("Line deletion aborted!", :cyan)
|
92
|
+
end
|
85
93
|
else
|
86
|
-
|
94
|
+
CF::Line.destroy(line_title)
|
95
|
+
say("The line #{line_title} deleted successfully!", :yellow)
|
87
96
|
end
|
88
97
|
end
|
89
98
|
else
|
@@ -132,6 +141,7 @@ module Cf # :nodoc: all
|
|
132
141
|
line_title = line_dump['title'].parameterize
|
133
142
|
line_description = line_dump['description']
|
134
143
|
line_department = line_dump['department']
|
144
|
+
line_public = line_dump['public']
|
135
145
|
|
136
146
|
line = CF::Line.info(line_title)
|
137
147
|
if line.error.blank? && options.force?
|
@@ -146,7 +156,7 @@ module Cf # :nodoc: all
|
|
146
156
|
say("Line creation aborted!!", :yellow) and exit(1)
|
147
157
|
end
|
148
158
|
end
|
149
|
-
line = CF::Line.new(line_title, line_department, :description => line_description)
|
159
|
+
line = CF::Line.new(line_title, line_department, {:description => line_description, :public => line_public})
|
150
160
|
say "Creating new assembly line: #{line.title}", :green
|
151
161
|
say("Error: #{line.errors}", :red) and exit(1) if line.errors.present?
|
152
162
|
|
@@ -173,12 +183,13 @@ module Cf # :nodoc: all
|
|
173
183
|
type = station_file['station']['station_type']
|
174
184
|
index = station_file['station']['station_index']
|
175
185
|
input_formats_for_station = station_file['station']['input_formats']
|
186
|
+
batch_size = station_file['station']['batch_size']
|
176
187
|
if type == "tournament"
|
177
188
|
jury_worker = station_file['station']['jury_worker']
|
178
189
|
auto_judge = station_file['station']['auto_judge']
|
179
|
-
station_params = {:line => line, :type => type, :jury_worker => jury_worker, :auto_judge => auto_judge, :input_formats => input_formats_for_station}
|
190
|
+
station_params = {:line => line, :type => type, :jury_worker => jury_worker, :auto_judge => auto_judge, :input_formats => input_formats_for_station, :batch_size => batch_size}
|
180
191
|
else
|
181
|
-
station_params = {:line => line, :type => type, :input_formats => input_formats_for_station}
|
192
|
+
station_params = {:line => line, :type => type, :input_formats => input_formats_for_station, :batch_size => batch_size}
|
182
193
|
end
|
183
194
|
station = CF::Station.create(station_params) do |s|
|
184
195
|
say "Adding Station #{index}: #{s.type}", :green
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Cf
|
2
2
|
class LineYamlValidator
|
3
|
-
|
3
|
+
|
4
4
|
def self.validate(yaml_path)
|
5
5
|
line_dump = YAML::load(File.read(yaml_path))
|
6
6
|
errors = []
|
@@ -91,83 +91,85 @@ module Cf
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
94
|
+
if station_type != "improve"
|
95
|
+
# Checking Stat_badge
|
96
|
+
stat_badge = station['station']['worker']['stat_badge']
|
97
|
+
if !stat_badge.nil?
|
98
|
+
errors << "Stat badge setting is invalid in Block station #{i+1}!" if stat_badge.class != Hash
|
99
|
+
end
|
99
100
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
101
|
+
# Checking skill_badge
|
102
|
+
skill_badges = station['station']['worker']['skill_badges']
|
103
|
+
if !skill_badges.nil?
|
104
|
+
errors << "Skill badge settings is invalid in Block station #{i+1}!" if skill_badges.class != Array
|
105
|
+
skill_badges.each_with_index do |badge, badge_index|
|
106
|
+
badge_title = badge['title']
|
107
|
+
badge_description = badge['description']
|
108
|
+
max_badges = badge['max_badges']
|
109
|
+
badge_test = badge['test']
|
110
|
+
test_input = badge_test['input'] if badge_test.class == Hash
|
111
|
+
expected_output = badge_test['expected_output'] if badge_test.class == Hash
|
112
|
+
errors << "Skill badge title is Missing in Block #{badge_index+1}!" if badge_title.nil?
|
113
|
+
errors << "Skill badge Description is Missing in Block #{badge_index+1}!" if badge_description.nil?
|
114
|
+
errors << "Skill badge max_badges must be greater than 1000 in Block #{badge_index+1}!" if max_badges < 1000 && !max_badges.nil?
|
115
|
+
errors << "Skill badge Test is Missing in Block #{badge_index+1}!" if badge_test.nil?
|
116
|
+
errors << "Skill badge Test is Invalid (must be Hash) in Block #{badge_index+1}!" if badge_test.class != Hash && !badge_test.nil?
|
117
|
+
errors << "Skill badge Test input is Missing in Block #{badge_index+1}!" if test_input.nil? && !badge_test.nil?
|
118
|
+
errors << "Skill badge Test input is Invalid (must be Hash) in Block #{badge_index+1}!" if test_input.class != Hash && !test_input.nil? && !badge_test.nil?
|
119
|
+
errors << "Skill badge Test expected_output is Missing in Block #{badge_index+1}!" if expected_output.nil? && !badge_test.nil?
|
120
|
+
errors << "Skill badge Test expected_output is Invalid (must be an array) in Block #{badge_index+1}!" if expected_output.class != Array && !expected_output.nil? && !badge_test.nil?
|
121
|
+
end
|
120
122
|
end
|
121
|
-
end
|
122
123
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
124
|
+
# Checking TaskForm
|
125
|
+
if worker_type == "human"
|
126
|
+
task_form = station['station']['task_form']
|
127
|
+
if task_form.nil?
|
128
|
+
custom_task_form = station['station']['custom_task_form']
|
129
|
+
if custom_task_form.nil?
|
130
|
+
errors << "Form is missing in Block station #{i+1}!"
|
131
|
+
elsif custom_task_form.class == Hash
|
132
|
+
form_title = custom_task_form['form_title']
|
133
|
+
errors << "Form Title is missing in Block station #{i+1}!" if form_title.nil?
|
134
|
+
|
135
|
+
instruction = custom_task_form['instruction']
|
136
|
+
errors << "Form Instruction is missing in Block station #{i+1}!" if instruction.nil?
|
137
|
+
end
|
138
|
+
elsif task_form.class == Hash
|
139
|
+
form_title = task_form['form_title']
|
132
140
|
errors << "Form Title is missing in Block station #{i+1}!" if form_title.nil?
|
133
141
|
|
134
|
-
instruction =
|
142
|
+
instruction = task_form['instruction']
|
135
143
|
errors << "Form Instruction is missing in Block station #{i+1}!" if instruction.nil?
|
136
|
-
end
|
137
|
-
elsif task_form.class == Hash
|
138
|
-
form_title = task_form['form_title']
|
139
|
-
errors << "Form Title is missing in Block station #{i+1}!" if form_title.nil?
|
140
|
-
|
141
|
-
instruction = task_form['instruction']
|
142
|
-
errors << "Form Instruction is missing in Block station #{i+1}!" if instruction.nil?
|
143
144
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
145
|
+
# Checking Form Fields
|
146
|
+
form_fields = task_form['form_fields']
|
147
|
+
errors << "Form Field is missing in Block station #{i+1}!" if form_fields.nil?
|
148
|
+
if form_fields.class == Array
|
149
|
+
form_fields.each_with_index do |form_field, index|
|
150
|
+
field_label = form_field['label']
|
151
|
+
errors << "Label is missing in block #{index+1} of Form Field within Station #{i+1}!" if field_label.nil?
|
152
|
+
required = form_field['required']
|
153
|
+
field_type = form_field['field_type']
|
154
|
+
if !field_type.nil?
|
155
|
+
unless %w(short_answer long_answer radio_button check_box select_box date email number).include?(field_type)
|
156
|
+
errors << "Field Type of Form Field is invalid in Block #{index+1} of station Block #{i+1}!"
|
157
|
+
end
|
158
|
+
if field_type == "radio_button" || field_type == "select_box"
|
159
|
+
option_values = form_field['option_values']
|
160
|
+
if option_values.nil?
|
161
|
+
errors << "Option values is required for field_type => #{field_type} in block #{index+1} of Form Field within Station #{i+1} !"
|
162
|
+
elsif !option_values.nil?
|
163
|
+
if option_values.class != Array
|
164
|
+
errors << "Option values must be an array for field_type => #{field_type} in block #{index+1} of Form Field within Station #{i+1}!"
|
165
|
+
end
|
164
166
|
end
|
165
167
|
end
|
166
168
|
end
|
167
169
|
end
|
170
|
+
else
|
171
|
+
errors << "Form fields must be an array for Station #{i+1}!"
|
168
172
|
end
|
169
|
-
else
|
170
|
-
errors << "Form fields must be an array for Station #{i+1}!"
|
171
173
|
end
|
172
174
|
end
|
173
175
|
end
|
@@ -175,9 +177,7 @@ module Cf
|
|
175
177
|
end
|
176
178
|
end
|
177
179
|
end
|
178
|
-
|
179
180
|
return errors
|
180
181
|
end
|
181
|
-
|
182
182
|
end
|
183
183
|
end
|
data/lib/cf/cli/production.rb
CHANGED
@@ -12,85 +12,116 @@ module Cf # :nodoc: all
|
|
12
12
|
|
13
13
|
desc "production start <run-title>", "creates a production run with input data file at input/<run-title>.csv"
|
14
14
|
method_option :input_data, :type => :string, :aliases => "-i", :desc => "the name of the input data file"
|
15
|
-
method_option :live, :type => :boolean, :default => false, :
|
16
|
-
|
17
|
-
|
15
|
+
method_option :live, :type => :boolean, :default => false, :desc => "specifies sandbox or live mode"
|
16
|
+
method_option :line, :type => :string, :aliases => "-l", :desc => "public line to use to do the production run. the format should be <account_name>/<line-title> e.g. millisami/brandiator"
|
17
|
+
def start(title=nil)
|
18
18
|
line_destination = Dir.pwd
|
19
19
|
yaml_source = "#{line_destination}/line.yml"
|
20
|
+
|
21
|
+
set_target_uri(options[:live])
|
22
|
+
set_api_key
|
23
|
+
CF.account_name = CF::Account.info.name
|
20
24
|
|
21
|
-
|
22
|
-
|
25
|
+
if File.exist?("#{yaml_source}")
|
26
|
+
line_yaml_dump = YAML::load(File.open(yaml_source))
|
27
|
+
line_title = line_yaml_dump['title'].parameterize
|
28
|
+
line = CF::Line.find(line_title)
|
29
|
+
line = Hashie::Mash.new(line)
|
30
|
+
if line.error.blank?
|
31
|
+
line_title = line_title
|
32
|
+
else
|
33
|
+
say("#{line.error.message}", :red) and return
|
34
|
+
end
|
35
|
+
elsif options[:line].present?
|
36
|
+
line = CF::Line.find(options[:line])
|
37
|
+
line = Hashie::Mash.new(line)
|
38
|
+
if line.error.blank?
|
39
|
+
line_title = options[:line]
|
40
|
+
else
|
41
|
+
say("#{line.error.message}", :red) and return
|
42
|
+
end
|
43
|
+
else
|
44
|
+
say("Looks like you're not in the Line directory or did not provide the line title to use the line", :red) and return
|
23
45
|
end
|
24
46
|
|
25
|
-
line_yaml_dump = YAML::load(File.open(yaml_source))
|
26
|
-
line_title = line_yaml_dump['title'].parameterize
|
27
|
-
|
28
47
|
if title.nil?
|
29
|
-
|
48
|
+
if line_title =~ /\w\/\w/
|
49
|
+
run_title = "#{line_title.split("/").last}-#{Time.new.strftime('%y%b%e-%H%M%S')}".downcase
|
50
|
+
else
|
51
|
+
run_title = "#{line_title}-#{Time.new.strftime('%y%b%e-%H%M%S')}".downcase
|
52
|
+
end
|
30
53
|
else
|
31
54
|
run_title = "#{title.parameterize}-#{Time.new.strftime('%y%b%e-%H%M%S')}".downcase
|
32
55
|
end
|
33
56
|
|
34
|
-
|
35
|
-
|
57
|
+
input_data = options[:input_data].presence
|
58
|
+
|
59
|
+
if input_data =~ /^\// #checking absolute input data path
|
60
|
+
input_data_file = input_data
|
36
61
|
else
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
62
|
+
if Dir.exist?("#{line_destination}/input")
|
63
|
+
input_data_dir = "#{line_destination}/input"
|
64
|
+
input_files = Dir["#{input_data_dir}/*.csv"]
|
65
|
+
file_count = input_files.size
|
66
|
+
case file_count
|
67
|
+
when 0
|
68
|
+
say("No input data file present inside the input folder", :red) and return
|
69
|
+
when 1
|
70
|
+
input_data_file = "#{Dir.pwd}/input/#{extract_name(input_files.first)}"
|
71
|
+
else
|
72
|
+
# Let the user choose the file
|
73
|
+
chosen_file = nil
|
74
|
+
choose do |menu|
|
75
|
+
menu.header = "Input data files"
|
76
|
+
menu.prompt = "Please choose which file to be used as input data: "
|
51
77
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
78
|
+
input_files.each do |item|
|
79
|
+
menu.choice(extract_name(item)) do
|
80
|
+
chosen_file = extract_name(item)
|
81
|
+
say("Using the file #{chosen_file} as input data")
|
82
|
+
end
|
56
83
|
end
|
57
84
|
end
|
85
|
+
input_data_file = "#{Dir.pwd}/input/#{chosen_file}"
|
58
86
|
end
|
59
|
-
|
87
|
+
else
|
88
|
+
unless File.exist?(input_data)
|
89
|
+
say("The input data file named #{input_data} doesn't exist", :red) and return
|
90
|
+
end
|
91
|
+
input_data_file = "#{Dir.pwd}/#{input_data}"
|
60
92
|
end
|
61
93
|
end
|
62
94
|
|
63
|
-
unless File.exist?(
|
64
|
-
say("The input data file named #{input_data} is missing
|
95
|
+
unless File.exist?(input_data_file)
|
96
|
+
say("The input data file named #{input_data} is missing", :red) and return
|
65
97
|
end
|
66
98
|
|
67
|
-
|
99
|
+
|
68
100
|
# before starting the run creation process, we need to make sure whether the line exists or not
|
69
101
|
# if not, then we got to first create the line and then do the production run
|
70
102
|
# else we just simply do the production run
|
71
|
-
|
72
|
-
CF.account_name = CF::Account.info.name
|
73
|
-
line = CF::Line.info(line_title)
|
74
|
-
input_data_file = "#{Dir.pwd}/#{input_data}"
|
103
|
+
|
75
104
|
if line.error.blank?
|
76
105
|
say "Creating a production run with title #{run_title}", :green
|
77
|
-
run = CF::Run.create(
|
106
|
+
run = CF::Run.create(line_title, run_title, input_data_file)
|
78
107
|
if run.errors.blank?
|
79
108
|
display_success_run(run)
|
80
109
|
else
|
81
110
|
say("Error: #{run.errors}", :red)
|
82
111
|
end
|
83
112
|
else
|
84
|
-
#
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
113
|
+
if File.exist?("#{yaml_source}") and !line_title =~ /\w\/\w/
|
114
|
+
# first create line only if its in the valid line directory
|
115
|
+
say("Creating the line: #{line_title}", :green)
|
116
|
+
Cf::Line.new.create
|
117
|
+
# Now create a production run with the title run_title
|
118
|
+
say "Creating a production run with title #{run_title}", :green
|
119
|
+
run = CF::Run.create(CF::Line.info(line_title), run_title, input_data_file)
|
120
|
+
if run.errors.blank?
|
121
|
+
display_success_run(run)
|
122
|
+
else
|
123
|
+
say("Error: #{run.errors}", :red)
|
124
|
+
end
|
94
125
|
end
|
95
126
|
end
|
96
127
|
end
|
@@ -109,7 +140,8 @@ module Cf # :nodoc: all
|
|
109
140
|
set_api_key
|
110
141
|
CF.account_name = CF::Account.info.name
|
111
142
|
if options['line'].present?
|
112
|
-
|
143
|
+
line_title = options['line'].parameterize
|
144
|
+
runs = CF::Run.all(line_title)
|
113
145
|
else
|
114
146
|
runs = CF::Run.all
|
115
147
|
end
|
@@ -128,7 +160,11 @@ module Cf # :nodoc: all
|
|
128
160
|
end
|
129
161
|
end
|
130
162
|
say("\n")
|
131
|
-
|
163
|
+
if runs_table.rows.present?
|
164
|
+
say(runs_table)
|
165
|
+
else
|
166
|
+
say("No production run for line #{line_title}", :yellow)
|
167
|
+
end
|
132
168
|
end
|
133
169
|
|
134
170
|
desc "production resume", "resume a paused production run"
|
data/lib/cf/cli.rb
CHANGED
@@ -22,6 +22,10 @@ require "#{cli_directory}/line_yaml_validator"
|
|
22
22
|
|
23
23
|
if ENV['TEST']
|
24
24
|
require 'ruby-debug'
|
25
|
+
require 'awesome_print'
|
26
|
+
require 'active_support/time_with_zone'
|
27
|
+
::Debugger.start
|
28
|
+
::Debugger.settings[:autoeval] = true if ::Debugger.respond_to?(:settings)
|
25
29
|
end
|
26
30
|
|
27
31
|
module Cf # :nodoc: all
|
@@ -39,7 +43,7 @@ module Cf # :nodoc: all
|
|
39
43
|
set_target_uri(false)
|
40
44
|
resp = CF::Account.login(email, passwd)
|
41
45
|
if resp.error.blank? and resp.api_key.present?
|
42
|
-
File.open(config_file, 'w') {|f| f.write({ :target_url => CF.api_url, :api_version => CF.api_version, :api_key => resp.api_key }.to_yaml) }
|
46
|
+
File.open(config_file, 'w') {|f| f.write("#Don't change this file unless you know what you're doing\n" + { :target_url => CF.api_url, :api_version => CF.api_version, :api_key => resp.api_key }.to_yaml) }
|
43
47
|
say("\nNow you're logged in.\nTo get started, run cf help\n", :green)
|
44
48
|
else
|
45
49
|
say("\n#{resp.error.message}\nTry again with valid one.\n", :red)
|
data/lib/cf/client.rb
CHANGED
data/lib/cf/line.rb
CHANGED
@@ -56,6 +56,7 @@ module CF
|
|
56
56
|
def stations stations = nil
|
57
57
|
if stations
|
58
58
|
type = stations.type
|
59
|
+
@batch_size = stations.batch_size
|
59
60
|
@station_input_formats = stations.station_input_formats
|
60
61
|
if type == "Improve" && self.stations.size < 1
|
61
62
|
raise ImproveStationNotAllowed.new("You cannot add Improve Station as a first station of a line")
|
@@ -63,30 +64,53 @@ module CF
|
|
63
64
|
if type == "Tournament"
|
64
65
|
@jury_worker = stations.jury_worker
|
65
66
|
@auto_judge = stations.auto_judge
|
66
|
-
|
67
|
-
|
68
|
-
:body =>
|
67
|
+
if @batch_size.nil?
|
68
|
+
request_tournament =
|
69
69
|
{
|
70
|
-
:
|
71
|
-
|
70
|
+
:body =>
|
71
|
+
{
|
72
|
+
:api_key => CF.api_key,
|
73
|
+
:station => {:type => type, :jury_worker => @jury_worker, :auto_judge => @auto_judge, :input_formats => @station_input_formats}
|
74
|
+
}
|
72
75
|
}
|
73
|
-
|
76
|
+
else
|
77
|
+
request_tournament =
|
78
|
+
{
|
79
|
+
:body =>
|
80
|
+
{
|
81
|
+
:api_key => CF.api_key,
|
82
|
+
:station => {:type => type, :jury_worker => @jury_worker, :auto_judge => @auto_judge, :input_formats => @station_input_formats, :batch_size => @batch_size}
|
83
|
+
}
|
84
|
+
}
|
85
|
+
end
|
74
86
|
resp = HTTParty.post("#{CF.api_url}#{CF.api_version}/lines/#{CF.account_name}/#{self.title.downcase}/stations.json",request_tournament)
|
75
87
|
else
|
76
|
-
|
77
|
-
|
78
|
-
|
88
|
+
if @batch_size.nil?
|
89
|
+
request_general =
|
90
|
+
{
|
91
|
+
:body =>
|
92
|
+
{
|
93
|
+
:api_key => CF.api_key,
|
94
|
+
:station => {:type => type, :input_formats => @station_input_formats}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
else
|
98
|
+
request_general =
|
79
99
|
{
|
80
|
-
:
|
81
|
-
|
100
|
+
:body =>
|
101
|
+
{
|
102
|
+
:api_key => CF.api_key,
|
103
|
+
:station => {:type => type, :input_formats => @station_input_formats, :batch_size => @batch_size}
|
104
|
+
}
|
82
105
|
}
|
83
|
-
|
106
|
+
end
|
84
107
|
resp = HTTParty.post("#{CF.api_url}#{CF.api_version}/lines/#{CF.account_name}/#{self.title.downcase}/stations.json",request_general)
|
85
108
|
end
|
86
109
|
station = CF::Station.new()
|
87
110
|
resp.to_hash.each_pair do |k,v|
|
88
111
|
station.send("#{k}=",v) if station.respond_to?(k)
|
89
112
|
end
|
113
|
+
station.batch_size = @batch_size
|
90
114
|
station.line = self
|
91
115
|
station.line_title = self.title
|
92
116
|
if resp.response.code != "200"
|
@@ -183,9 +207,16 @@ module CF
|
|
183
207
|
def self.find(line)
|
184
208
|
if line.class == CF::Line
|
185
209
|
resp = get("/lines/#{CF.account_name}/#{line.title.downcase}.json")
|
186
|
-
|
187
|
-
|
210
|
+
elsif line.class == String
|
211
|
+
if line.split("/").count == 2
|
212
|
+
account = line.split("/").first
|
213
|
+
title = line.split("/").last
|
214
|
+
resp = get("/lines/#{account}/#{title.downcase}.json")
|
215
|
+
elsif line.split("/").count == 1
|
216
|
+
resp = get("/lines/#{CF.account_name}/#{line.downcase}.json")
|
217
|
+
end
|
188
218
|
end
|
219
|
+
return resp.to_hash
|
189
220
|
end
|
190
221
|
|
191
222
|
# ==Returns all the lines of an account
|
@@ -252,7 +283,7 @@ module CF
|
|
252
283
|
end
|
253
284
|
end
|
254
285
|
|
255
|
-
def self.
|
286
|
+
def self.inspect(line_title)
|
256
287
|
resp = get("/lines/#{CF.account_name}/#{line_title.downcase}/inspect.json")
|
257
288
|
send_resp = resp.to_hash
|
258
289
|
@line_input_formats = []
|