kaya 0.0.1

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 (112) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +26 -0
  3. data/CHANGELOG +52 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/NOTAS +19 -0
  7. data/README.md +279 -0
  8. data/Rakefile +1 -0
  9. data/bin/kaya +4 -0
  10. data/documentation/api.md +47 -0
  11. data/documentation/api_execution_data.md +47 -0
  12. data/documentation/configuration.md +13 -0
  13. data/documentation/custom_parameters.md +117 -0
  14. data/documentation/document_kaya.md +122 -0
  15. data/documentation/link.md +12 -0
  16. data/documentation/results.md +119 -0
  17. data/documentation/start.md +19 -0
  18. data/documentation/suites.md +60 -0
  19. data/documentation/test_suite_information.md +9 -0
  20. data/kaya.gemspec +42 -0
  21. data/lib/generators/task_rack.rb +160 -0
  22. data/lib/generators/templates/Gemfile.tt +2 -0
  23. data/lib/generators/templates/config.ru.tt +2 -0
  24. data/lib/generators/templates/kaya_conf.tt +49 -0
  25. data/lib/generators/templates/kaya_log.tt +0 -0
  26. data/lib/generators/templates/sidekiq_log.tt +0 -0
  27. data/lib/generators/templates/tasks.kaya.tt +10 -0
  28. data/lib/generators/templates/unicorn.rb.tt +21 -0
  29. data/lib/kaya/API/error.rb +17 -0
  30. data/lib/kaya/API/execution.rb +141 -0
  31. data/lib/kaya/API/result.rb +49 -0
  32. data/lib/kaya/API/results.rb +31 -0
  33. data/lib/kaya/API/suite.rb +42 -0
  34. data/lib/kaya/API/suites.rb +36 -0
  35. data/lib/kaya/background_jobs/sidekiq.rb +35 -0
  36. data/lib/kaya/background_jobs/workers/execution_checker.rb +20 -0
  37. data/lib/kaya/background_jobs/workers/garbage_cleaner.rb +31 -0
  38. data/lib/kaya/commands/bye.rb +12 -0
  39. data/lib/kaya/commands/help.rb +13 -0
  40. data/lib/kaya/commands/install.rb +27 -0
  41. data/lib/kaya/commands/reset.rb +39 -0
  42. data/lib/kaya/commands/reset_suites.rb +40 -0
  43. data/lib/kaya/commands/restart.rb +9 -0
  44. data/lib/kaya/commands/start.rb +104 -0
  45. data/lib/kaya/commands/stop.rb +53 -0
  46. data/lib/kaya/cuba.rb +287 -0
  47. data/lib/kaya/cucumber/features.rb +15 -0
  48. data/lib/kaya/cucumber/task.rb +64 -0
  49. data/lib/kaya/custom/execution_data.rb +50 -0
  50. data/lib/kaya/custom/params.rb +34 -0
  51. data/lib/kaya/database/mongo_connector.rb +285 -0
  52. data/lib/kaya/error/errors.rb +55 -0
  53. data/lib/kaya/execution.rb +57 -0
  54. data/lib/kaya/results/result.rb +493 -0
  55. data/lib/kaya/results/results.rb +47 -0
  56. data/lib/kaya/suites/custom/params.rb +151 -0
  57. data/lib/kaya/suites/suite.rb +177 -0
  58. data/lib/kaya/suites/suites.rb +130 -0
  59. data/lib/kaya/support/clean.rb +12 -0
  60. data/lib/kaya/support/configuration.rb +254 -0
  61. data/lib/kaya/support/console.rb +11 -0
  62. data/lib/kaya/support/documentation.rb +34 -0
  63. data/lib/kaya/support/error_handler_helper.rb +24 -0
  64. data/lib/kaya/support/files_cleanner.rb +136 -0
  65. data/lib/kaya/support/git.rb +161 -0
  66. data/lib/kaya/support/if_config.rb +14 -0
  67. data/lib/kaya/support/logo.rb +23 -0
  68. data/lib/kaya/support/logs.rb +37 -0
  69. data/lib/kaya/support/notification.rb +127 -0
  70. data/lib/kaya/support/processes.rb +96 -0
  71. data/lib/kaya/support/query_string.rb +22 -0
  72. data/lib/kaya/support/request.rb +32 -0
  73. data/lib/kaya/support/risk.rb +9 -0
  74. data/lib/kaya/support/time_helper.rb +11 -0
  75. data/lib/kaya/support/update.rb +65 -0
  76. data/lib/kaya/version.rb +3 -0
  77. data/lib/kaya/view/body.mote +60 -0
  78. data/lib/kaya/view/custom/params/select_list.mote +14 -0
  79. data/lib/kaya/view/custom/params/text.mote +9 -0
  80. data/lib/kaya/view/custom/params.mote +9 -0
  81. data/lib/kaya/view/error_handler.mote +40 -0
  82. data/lib/kaya/view/features/feature.mote +14 -0
  83. data/lib/kaya/view/features/features_list.mote +10 -0
  84. data/lib/kaya/view/features.mote +57 -0
  85. data/lib/kaya/view/footer.mote +10 -0
  86. data/lib/kaya/view/git_information.mote +21 -0
  87. data/lib/kaya/view/help/main.mote +21 -0
  88. data/lib/kaya/view/help/page.mote +2 -0
  89. data/lib/kaya/view/help/search_result.mote +29 -0
  90. data/lib/kaya/view/help.mote +72 -0
  91. data/lib/kaya/view/javascript.mote +96 -0
  92. data/lib/kaya/view/logs/log.mote +3 -0
  93. data/lib/kaya/view/modals.mote +31 -0
  94. data/lib/kaya/view/navigation_bar.mote +48 -0
  95. data/lib/kaya/view/not_found.mote +40 -0
  96. data/lib/kaya/view/parser.rb +79 -0
  97. data/lib/kaya/view/results/all.mote +59 -0
  98. data/lib/kaya/view/results/console.mote +106 -0
  99. data/lib/kaya/view/results/detailed_info.mote +112 -0
  100. data/lib/kaya/view/results/report.mote +1 -0
  101. data/lib/kaya/view/results/result.mote +23 -0
  102. data/lib/kaya/view/results/results.mote +52 -0
  103. data/lib/kaya/view/screenshot.mote +42 -0
  104. data/lib/kaya/view/sections.rb +25 -0
  105. data/lib/kaya/view/styles.mote +58 -0
  106. data/lib/kaya/view/suites/suite.mote +73 -0
  107. data/lib/kaya/view/suites/suites.mote +9 -0
  108. data/lib/kaya/view/view.rb +72 -0
  109. data/lib/kaya.rb +175 -0
  110. data/test/features/install.feature +18 -0
  111. data/test/features/support/env.rb +3 -0
  112. metadata +395 -0
@@ -0,0 +1,53 @@
1
+ module Kaya
2
+ module Commands
3
+ def self.stop
4
+
5
+ $K_LOG.debug "#{self}:#{__method__}" if $K_LOG
6
+
7
+ Kaya::Support::Configuration.get
8
+
9
+ # Get pids from saved file on start process
10
+ if File.exist? "#{Dir.pwd}/kaya/kaya_pids"
11
+
12
+ kaya_pids = IO.read("#{Dir.pwd}/kaya/kaya_pids").split("\n")
13
+ # Kill all pids specified on file
14
+
15
+ begin
16
+ Kaya::Support::Processes.kill_all_these kaya_pids
17
+ rescue
18
+ end
19
+
20
+ # Delete pid file
21
+ File.delete("#{Dir.pwd}/kaya/kaya_pids")
22
+ end
23
+
24
+ if File.exist? "#{Dir.pwd}/kaya/sidekiq_pid"
25
+
26
+ sidekiq_pid = IO.read("#{Dir.pwd}/kaya/sidekiq_pid").split("\n")
27
+
28
+ begin
29
+ Kaya::Support::Processes.kill_all_these sidekiq_pid
30
+ rescue
31
+ end
32
+
33
+
34
+ File.delete("#{Dir.pwd}/kaya/sidekiq_pid")
35
+ end
36
+
37
+ # Evaluates if any pid could not be killed (retry)
38
+ Kaya::Support::Processes.kill_all_these(Kaya::Support::Processes.kaya_pids)
39
+
40
+ if Kaya::Support::Processes.kaya_pids.empty?
41
+
42
+ puts "
43
+ Kaya stopped!"
44
+
45
+ else
46
+ puts "
47
+ Could not stop Kaya.
48
+ If Kaya is still running please type `kaya help` to get some help"
49
+ end
50
+ end
51
+ end
52
+ end
53
+
data/lib/kaya/cuba.rb ADDED
@@ -0,0 +1,287 @@
1
+ require "cuba"
2
+
3
+ include Mote::Helpers
4
+
5
+ Cuba.define do
6
+
7
+ $suites_counter = 0
8
+
9
+ request = Kaya::Support::Request.new(req)
10
+
11
+ $K_LOG.debug "REQUEST '#{request.path}#{request.path_info}' FROM IP: '#{request.ip}'" if $K_LOG
12
+
13
+ begin
14
+
15
+
16
+ # ========================================================================
17
+ # COMMON INIT
18
+ #
19
+ #
20
+ Kaya::Support::Configuration.get
21
+
22
+ Kaya::Database::MongoConnector.new Kaya::Support::Configuration.db_connection_data
23
+
24
+ on get do
25
+
26
+ HOSTNAME = Kaya::Support::Configuration.hostname
27
+
28
+ # ========================================================================
29
+ # HELP
30
+ #
31
+ #
32
+ on "#{HOSTNAME}/kaya/help/:page" do |page|
33
+ query_string = Kaya::Support::QueryString.new req
34
+ template = Mote.parse(File.read("#{Kaya::View.path}/help.mote"),self, [:page, :query_string])
35
+ res.write template.call(page:page, query_string:query_string.s)
36
+ end
37
+
38
+ on "#{HOSTNAME}/kaya/help" do
39
+ res.redirect "/#{HOSTNAME}/kaya/help/main"
40
+ end
41
+
42
+
43
+ # ========================================================================
44
+ # VIEW ROUTES
45
+ #
46
+ #
47
+ #
48
+ on "#{HOSTNAME}/kaya/results/log/:result_id" do |result_id|
49
+ result = Kaya::Results::Result.get(result_id)
50
+ res.redirect "/#{HOSTNAME}/kaya/404/There%20is%20no%20result%20for%20id=#{result_id}" if result.nil?
51
+ result.mark_as_saw! if (result.finished? or result.stopped?)
52
+ template = Mote.parse(File.read("#{Kaya::View.path}/results/console.mote"),self, [:result])
53
+ res.write template.call(result:result)
54
+ end
55
+
56
+
57
+ on "#{HOSTNAME}/kaya/results/report/:result_id" do |result_id|
58
+ result = Kaya::Results::Result.get(result_id)
59
+ res.redirect "/#{HOSTNAME}/kaya/404/There%20is%20no%20result%20for%20id=#{result_id}" if result.nil?
60
+ result.mark_as_saw! if (result.finished? or result.stopped?)
61
+ if result.finished? and !result.stopped? and result.html_report.size > 0
62
+ template = Mote.parse(File.read("#{Kaya::View.path}/results/report.mote"),self, [:result])
63
+ res.write template.call(result:result)
64
+ else
65
+ res.redirect "#{HOSTNAME}/kaya/results/log/result_id"
66
+ end
67
+ end
68
+
69
+ on "#{HOSTNAME}/kaya/results/:result_id/reset" do |result_id|
70
+ result = Kaya::API::Execution.reset(result_id)
71
+ res.redirect "/#{HOSTNAME}/kaya/results?msg=#{result['message']}"
72
+ end
73
+
74
+ on "#{HOSTNAME}/kaya/results/suite/:suite_name" do |suite_name|
75
+ query_string = Kaya::Support::QueryString.new req
76
+ suite_name.gsub!("%20"," ")
77
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
78
+ res.write template.call(section:"Results", query_string:query_string, suite_name:suite_name, log_name:nil)
79
+ end
80
+
81
+ on "#{HOSTNAME}/kaya/results/all" do
82
+ query_string = Kaya::Support::QueryString.new req
83
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
84
+ res.write template.call(section:"All Results", query_string:query_string, suite_name:nil, log_name:nil)
85
+ end
86
+
87
+ on "#{HOSTNAME}/kaya/results" do
88
+ query_string = Kaya::Support::QueryString.new req
89
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
90
+ res.write template.call(section:"Results", query_string:query_string, suite_name:nil, log_name:nil)
91
+ end
92
+
93
+ on "#{HOSTNAME}/kaya/suites/:suite/run" do |suite_name|
94
+ query_string = Kaya::Support::QueryString.new req
95
+ result = Kaya::API::Execution.start suite_name, query_string.values
96
+
97
+ path = "/#{HOSTNAME}/kaya/suites"
98
+ path += "?msg=#{result['message']}. " if result["message"]
99
+ path += "Execution id=#{result["execution_id"]}" if result["execution_id"]
100
+
101
+ res.status= result["status"]
102
+ res.redirect path
103
+ end
104
+
105
+ on "#{HOSTNAME}/kaya/suites/:suite_name" do |suite_name|
106
+ query_string = Kaya::Support::QueryString.new req
107
+ (Kaya::Support::Git.reset_hard and Kaya::Support::Git.pull) if Kaya::Support::Configuration.use_git?
108
+ Kaya::Suites.update_suites
109
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
110
+ res.write template.call(section:"Test Suites", query_string:query_string, suite_name:suite_name, log_name:nil)
111
+ end
112
+
113
+ on "#{HOSTNAME}/kaya/suites" do
114
+ query_string = Kaya::Support::QueryString.new req
115
+ (Kaya::Support::Git.reset_hard and Kaya::Support::Git.pull) if Kaya::Support::Configuration.use_git?
116
+ Kaya::Suites.update_suites
117
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
118
+ res.write template.call(section:"Test Suites", query_string:query_string, suite_name:nil, log_name:nil)
119
+ end
120
+
121
+ on "#{HOSTNAME}/kaya/logs/:log_name" do |log_name|
122
+ query_string = Kaya::Support::QueryString.new req
123
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
124
+ res.write template.call(section:"Logs", query_string:query_string, suite_name:nil, log_name:log_name)
125
+ end
126
+
127
+ # ========================================================================
128
+ # SCREENSHOTS
129
+ #
130
+ #
131
+
132
+ on "#{HOSTNAME}/kaya/screenshot/:file_name" do |file_name|
133
+ template = Mote.parse(File.read("#{Kaya::View.path}/screenshot.mote"),self, [:file_name])
134
+ res.write template.call(file_name:file_name)
135
+ end
136
+
137
+ # ========================================================================
138
+ # FEATURE SHOW
139
+ #
140
+ #
141
+ on "#{HOSTNAME}/kaya/features/file" do
142
+ template = Mote.parse(File.read("#{Kaya::View.path}/features.mote"),self, [:query_string])
143
+ res.write template.call(query_string:Kaya::Support::QueryString.new(req))
144
+ end
145
+
146
+ # ========================================================================
147
+ # FEATURES / LIST
148
+ #
149
+ #
150
+ on "#{HOSTNAME}/kaya/features" do
151
+ template = Mote.parse(File.read("#{Kaya::View.path}/features.mote"),self, [:query_string])
152
+ res.write template.call(query_string:Kaya::Support::QueryString.new(req))
153
+ end
154
+
155
+
156
+ # ========================================================================
157
+ # API ROUTES
158
+ #
159
+ #
160
+ #
161
+ on "#{HOSTNAME}/kaya/api/version" do
162
+ output = { "version" => Kaya::VERSION}
163
+ res.write output.to_json
164
+ end
165
+
166
+ on "#{HOSTNAME}/kaya/api/results/:id/data" do |result_id|
167
+ output = Kaya::API::Result.data(result_id)
168
+ res.write output.to_json
169
+ end
170
+
171
+ on "#{HOSTNAME}/kaya/api/results/:id/status" do |result_id|
172
+ output = Kaya::API::Result.status(result_id)
173
+ res.write output.to_json
174
+ end
175
+
176
+ on "#{HOSTNAME}/kaya/api/results/:id" do |result_id|
177
+ res.write(Kaya::API::Result.info(result_id).to_json)
178
+ end
179
+
180
+ on "#{HOSTNAME}/kaya/api/results/:id/reset" do |result_id|
181
+ result = Kaya::API::Execution.reset(result_id)
182
+ res.write result.to_json
183
+ end
184
+
185
+ on "#{HOSTNAME}/kaya/api/suites/:suite/run" do |suite_name|
186
+ query_string = Kaya::Support::QueryString.new req
187
+ result = Kaya::API::Execution.start suite_name, query_string.values
188
+ res.write result.to_json
189
+ end
190
+
191
+ on "#{HOSTNAME}/kaya/api/suites/:id/status" do |suite_id|
192
+ output = Kaya::API::Suite.status(suite_id.to_i)
193
+ res.write output.to_json
194
+ end
195
+
196
+ on "#{HOSTNAME}/kaya/api/suites/running" do
197
+ output = Kaya::API::Suites.list({running:true})
198
+ res.write output
199
+ end
200
+
201
+ on "#{HOSTNAME}/kaya/api/suites/active" do
202
+ output = Kaya::API::Suites.list({"active" => true})
203
+ res.write output.to_json
204
+ end
205
+
206
+ on "#{HOSTNAME}/kaya/api/suites/unactive" do
207
+ output = Kaya::API::Suites.list({"active" => false})
208
+ res.write output.to_json
209
+ end
210
+
211
+ on "#{HOSTNAME}/kaya/api/suites/:id" do |suite_id|
212
+ output = Kaya::API::Suite.info(suite_id)
213
+ res.write output.to_json
214
+ end
215
+
216
+ on "#{HOSTNAME}/kaya/api/suites" do
217
+ (Kaya::Support::Git.reset_hard and Kaya::Support::Git.pull) if Kaya::Support::Configuration.use_git?
218
+ Kaya::Suites.update_suites
219
+ output = Kaya::API::Suites.list({"active" => true})
220
+ res.write output.to_json
221
+ end
222
+
223
+ on "#{HOSTNAME}/kaya/api/results" do
224
+ output = Kaya::API::Results.show()
225
+ res.write output.to_json
226
+ end
227
+
228
+ on "#{HOSTNAME}/kaya/api/error" do
229
+ query_string = Kaya::Support::QueryString.new req
230
+ output = Kaya::API::Error.show(query_string)
231
+ res.write output.to_json
232
+ end
233
+
234
+ on "#{HOSTNAME}/kaya/api" do
235
+ response = {"message" => "Please, refer to /#{HOSTNAME}/kaya/help/api for more information"}
236
+ res.write response.to_json
237
+ end
238
+
239
+
240
+
241
+ # ========================================================================
242
+ # CLEAN
243
+ #
244
+ #
245
+ on "#{HOSTNAME}/kaya/clean" do
246
+ Kaya::Support::Clean.start
247
+ res.redirect "/#{HOSTNAME}/kaya/suites?msg=Suites and results cleanned"
248
+ end
249
+
250
+ # ========================================================================
251
+ # REDIRECTS
252
+ #
253
+ on "#{HOSTNAME}/kaya/help" do
254
+ res.redirect "/#{HOSTNAME}/kaya/help/main"
255
+ end
256
+
257
+ on "#{HOSTNAME}/kaya/404" do
258
+ template = Mote.parse(File.read("#{Kaya::View.path}/not_found.mote"),self, [])
259
+ res.write template.call()
260
+ end
261
+
262
+ on "#{HOSTNAME}/kaya/:any" do
263
+ res.redirect("/#{HOSTNAME}/kaya/suites")
264
+ end
265
+
266
+ on "#{HOSTNAME}/kaya" do
267
+ res.redirect "/#{HOSTNAME}/kaya/suites"
268
+ end
269
+
270
+ on "favicon" do
271
+ res.write ""
272
+ end
273
+
274
+ on "#{HOSTNAME}" do
275
+ res.redirect "/#{HOSTNAME}/kaya/suites"
276
+ end
277
+
278
+ on root do
279
+ res.redirect "/#{HOSTNAME}/kaya/suites"
280
+ end
281
+ end
282
+ rescue => e
283
+ $K_LOG.error "Cuba: #{e} #{e.backtrace}" if $K_LOG
284
+ template = Mote.parse(File.read("#{Kaya::View.path}/error_handler.mote"),self, [:exception])
285
+ res.write template.call(exception:e)
286
+ end
287
+ end
@@ -0,0 +1,15 @@
1
+ module Kaya
2
+ module Cucumber
3
+ module Features
4
+
5
+ # Returns an array of all feature files paths (only feature files)
6
+ # @return [Array]
7
+ def self.feature_files_names
8
+ Dir['**/*.*'].select do |file_path_name|
9
+ file_path_name.start_with? "features/" and file_path_name.end_with? ".feature"
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,64 @@
1
+ require 'yaml'
2
+
3
+ require 'tempfile'
4
+
5
+
6
+ module Kaya
7
+ module Cucumber
8
+ class Task
9
+
10
+ def self.run result
11
+
12
+ result.kaya_report_file_name= "kaya_report_#{result.id}.html"
13
+
14
+ begin
15
+ File.delete("#{Dir.pwd}/Gemfile.lock")
16
+ rescue
17
+ end
18
+
19
+ bundle_output = Kaya::Support::Console.execute "bundle install"
20
+ $K_LOG.debug "[result:#{result.id}] Bundle install performed" if $K_LOG
21
+
22
+ result.save_to_bundle_output bundle_output
23
+
24
+ unless bundle_output.include? "Could not find"
25
+
26
+ # Adding _id=result.id to use inside execution the posiibility to add information to the result
27
+ result.kaya_command= "#{Kaya::Support::Configuration.headless?} bundle exec cucumber #{result.command} -f pretty -f html -o kaya/temp/#{result.kaya_report_file_name} #{result.custom_params_values} _id=#{result.id} "
28
+
29
+ result.console_output_file_name= "kaya_co_#{result.id}.out"
30
+
31
+ result.save!
32
+
33
+ command = "#{result.kaya_command} 2>&1 | tee -a kaya/temp/#{result.console_output_file_name}"
34
+
35
+ $K_LOG.debug "[result:#{result.id}] Running in headless mode" if $K_LOG and Kaya::Support::Configuration.headless?
36
+
37
+ Dir.mkdir "#{Dir.pwd}/kaya/temp" unless Dir.exist? "#{Dir.pwd}/kaya/temp"
38
+
39
+
40
+ $K_LOG.debug "[result:#{result.id}] Creating process" if $K_LOG
41
+ result.pid= Kaya::Support::Processes.fork_this command
42
+ $K_LOG.debug "[result:#{result.id}] Process (#{result.pid}) exec'in" if $K_LOG
43
+
44
+ $K_LOG.debug "[result:#{result.id}] Running saved command}" if $K_LOG
45
+
46
+ result.running!
47
+
48
+ $K_LOG.debug "[result:#{result.id}] Result setted as running" if $K_LOG
49
+
50
+ result.append_result_to_console_output!
51
+
52
+ result.save_report!
53
+
54
+ result.save!
55
+
56
+ result.append_result_to_console_output!
57
+
58
+ end # unless
59
+
60
+ end # end self.run
61
+
62
+ end #end Task class
63
+ end # enc Cucumber module
64
+ end
@@ -0,0 +1,50 @@
1
+ module Kaya
2
+ module Custom
3
+ class ExecutionData
4
+
5
+ # This class is used from execution code. It means that user can call this method to store information
6
+ # during exdecution.
7
+
8
+ # Returns execution id
9
+ def self.id
10
+ ENV["_id"]
11
+ end
12
+
13
+ def self.is_there_result?
14
+ Kaya::Database::MongoConnector.result_data_for_id(self.id)
15
+ end
16
+
17
+ # Stores a key => value pair to the result
18
+ # @param [String or Symbol] key
19
+ # @param [Any] value
20
+ # @return hash if stored, nil if not
21
+ def self.add key=nil, value=nil
22
+ self.ensure_db_connection
23
+ if self.is_there_result?
24
+ result = self.get_result
25
+ if result and result.running?
26
+ result.add_execution_data key, value if key
27
+ {key => value}
28
+ end
29
+ end
30
+ end
31
+
32
+ def self.get_result
33
+ Kaya::Results::Result.get(self.id)
34
+ end
35
+
36
+ # Returns result execution data if exist. Else returns an empty hash
37
+ def self.get_data
38
+ self.is_there_result? ? self.get_result.execution_data : {}
39
+ end
40
+
41
+ # Conntects to database if not connected
42
+ def self.ensure_db_connection
43
+ Kaya::Support::Configuration.get
44
+ Kaya::Database::MongoConnector.new(Kaya::Support::Configuration.db_connection_data) unless Kaya::Database::MongoConnector.connected?
45
+ end
46
+
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,34 @@
1
+ module Kaya
2
+ module Custom
3
+ class Params
4
+
5
+ # This class is used to provide to user in his code access to the custom params sent
6
+ # from Kaya
7
+
8
+ def initialize
9
+ params = ENV || {}
10
+ @custom_params = if params["kaya_custom_params"]
11
+ JSON.parse(params["kaya_custom_params"])
12
+ else
13
+ params
14
+ end
15
+ end
16
+
17
+ def self.get
18
+ self.new
19
+ end
20
+
21
+ def all_params
22
+ @custom_params
23
+ end
24
+
25
+ def raw; all_params; end
26
+
27
+ # All custom params can be called as methods
28
+ def method_missing(param, *args, &block)
29
+ @custom_params[param.to_s]
30
+ end
31
+
32
+ end
33
+ end
34
+ end