marty 2.4.5 → 2.4.6
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.
- checksums.yaml +5 -5
- data/Dockerfile.dummy +40 -0
- data/Gemfile.lock +1 -1
- data/Makefile +2 -0
- data/README.md +16 -0
- data/app/controllers/marty/delayed_job_controller.rb +23 -0
- data/app/controllers/marty/rpc_controller.rb +1 -1
- data/app/models/marty/delorean_rule.rb +2 -1
- data/app/models/marty/promise.rb +3 -25
- data/config/routes.rb +1 -0
- data/docker-compose.dummy.yml +41 -0
- data/lib/marty/promise_job.rb +11 -0
- data/lib/marty/railtie.rb +1 -0
- data/lib/marty/version.rb +1 -1
- data/make-dummy.mk +42 -0
- data/spec/controllers/delayed_job_controller_spec.rb +35 -0
- data/spec/dummy/config/database.yml.example +2 -0
- data/spec/fixtures/csv/rule/MyRule.csv +2 -2
- data/spec/lib/logger_spec.rb +6 -2
- data/spec/models/rule_spec.rb +1 -1
- data/spec/support/empty_job.rb +5 -0
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bd09d3bb234821197b1ae5dd78b70e8d07db080f
|
4
|
+
data.tar.gz: 4a2b19ce73da8012c2cd8157661e56fef22d2fd6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5862a5cc24a94a11a71ba2d649440d6636768b8b18872ae1f1653cfeef588d34d81069486cdb45bf9a2793a22bf9aef172df3bbf9f9e4fad243138b2be04f9b9
|
7
|
+
data.tar.gz: fc3048d404e60b186f3ab9bc49063369f98fd05f30a161ee5736ed116224ec544a3059218e60cf8eacccf1685f7a1f4bfaf15793569fc09d804b731a32e8ac27
|
data/Dockerfile.dummy
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# ONLY FOR DEVELOPMENT PURPOSES
|
2
|
+
# dockerfile is not suitable to produce a production-grade docker image
|
3
|
+
FROM ruby:2.5.1
|
4
|
+
|
5
|
+
WORKDIR /opt/app
|
6
|
+
|
7
|
+
ADD https://dl.yarnpkg.com/debian/pubkey.gpg /tmp/yarn-pubkey.gpg
|
8
|
+
RUN apt-key add /tmp/yarn-pubkey.gpg && rm /tmp/yarn-pubkey.gpg
|
9
|
+
RUN echo 'deb http://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list
|
10
|
+
|
11
|
+
RUN apt-get update && apt-get install -qq -y --no-install-recommends \
|
12
|
+
build-essential libpq-dev curl
|
13
|
+
|
14
|
+
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
|
15
|
+
RUN apt-get update && apt-get install -qq -y --no-install-recommends nodejs yarn
|
16
|
+
|
17
|
+
# Install chrome for integration tests
|
18
|
+
# RUN curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
|
19
|
+
# && dpkg -i google-chrome.deb || true \
|
20
|
+
# && apt-get install -f -y \
|
21
|
+
# && sed -i 's|HERE/chrome\"|HERE/chrome\" --disable-setuid-sandbox|g' /opt/google/chrome/google-chrome \
|
22
|
+
# && rm google-chrome.deb
|
23
|
+
|
24
|
+
ENV BUNDLE_PATH /bundle_box/bundle
|
25
|
+
ENV GEM_HOME /bundle_box/bundle
|
26
|
+
ENV PATH /bundle_box/bundle/bin:$PATH
|
27
|
+
# ENV NODE_PATH /bundle_box/node
|
28
|
+
|
29
|
+
COPY . .
|
30
|
+
|
31
|
+
# RUN bundle install
|
32
|
+
# RUN yarn install
|
33
|
+
|
34
|
+
# RUN mv .rbenv-vars.example .rbenv-vars
|
35
|
+
# RUN chmod +x entrypoint.sh
|
36
|
+
|
37
|
+
# ENV RAILS_ENV=development
|
38
|
+
# ENV PORT=3001
|
39
|
+
# EXPOSE 3001
|
40
|
+
|
data/Gemfile.lock
CHANGED
data/Makefile
ADDED
data/README.md
CHANGED
@@ -56,6 +56,22 @@ $ rake marty:delete_scripts
|
|
56
56
|
Make sure that extjs is installed (or symbolically linked) in the
|
57
57
|
dummy app at spec/dummy/public.
|
58
58
|
|
59
|
+
Docker doesn't support symlinks, so in order to run it in Docker you will have to copy extjs files.
|
60
|
+
|
61
|
+
```bash
|
62
|
+
$ cp -r PATH/TO/YOUR/EXTJS/FILES spec/dummy/public/extjs
|
63
|
+
```
|
64
|
+
|
65
|
+
You can run it with docker:
|
66
|
+
|
67
|
+
```bash
|
68
|
+
$ make dummy-app-initialise-docker
|
69
|
+
|
70
|
+
$ make dummy-app-start
|
71
|
+
```
|
72
|
+
|
73
|
+
To run without docker:
|
74
|
+
|
59
75
|
Marty currently only runs with postgresql. To be able to run the tests
|
60
76
|
you will first need to create a `database.yml` file in `spec/dummy/config`.
|
61
77
|
You can use the example file by doing:
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Marty::DelayedJobController < ActionController::Base
|
2
|
+
def trigger
|
3
|
+
work_off_job if delayed_job.present?
|
4
|
+
render json: { status: :ok }, status: :ok
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def delayed_job
|
10
|
+
return unless params['id'].present?
|
11
|
+
@delayed_job ||= ::Delayed::Job.find_by(id: params['id'])
|
12
|
+
end
|
13
|
+
|
14
|
+
def work_off_job
|
15
|
+
return if delayed_job.locked_at.present?
|
16
|
+
|
17
|
+
::Delayed::Job.where(id: delayed_job.id).
|
18
|
+
update_all(locked_at: ::Delayed::Job.db_time_now, locked_by: 'Lambda')
|
19
|
+
|
20
|
+
w = ::Delayed::Worker.new
|
21
|
+
w.run(delayed_job)
|
22
|
+
end
|
23
|
+
end
|
@@ -25,7 +25,7 @@ class Marty::RpcController < ActionController::Base
|
|
25
25
|
return result = massaged_params if massaged_params.include?(:error)
|
26
26
|
|
27
27
|
api_params = api.process_params(massaged_params)
|
28
|
-
auth = api.is_authorized?(
|
28
|
+
auth = api.is_authorized?(api_params)
|
29
29
|
return result = {error: "Permission denied"} unless auth
|
30
30
|
|
31
31
|
start_time = Time.zone.now
|
@@ -96,7 +96,8 @@ class Marty::DeloreanRule < Marty::BaseRule
|
|
96
96
|
result.err_section)
|
97
97
|
end
|
98
98
|
result.cg_hash = Hash[result.cg_keys.zip(result.cg_vals)]
|
99
|
-
|
99
|
+
fails = result.cg_hash.select{|k,v| ![v].flatten.first}
|
100
|
+
return fails if fails.present?
|
100
101
|
end
|
101
102
|
|
102
103
|
grids_computed = false
|
data/app/models/marty/promise.rb
CHANGED
@@ -136,6 +136,8 @@ class Marty::Promise < Marty::Base
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def wait_for_result(timeout)
|
139
|
+
# FIXME: Not sure that comparing result with empty hash if a good idea
|
140
|
+
# perhaps it's better to use .present? or .blank?
|
139
141
|
return self.result if self.result != {}
|
140
142
|
|
141
143
|
begin
|
@@ -148,25 +150,7 @@ class Marty::Promise < Marty::Base
|
|
148
150
|
if !last.start_dt
|
149
151
|
job = Marty::Promise.job_by_id(last.job_id)
|
150
152
|
|
151
|
-
|
152
|
-
|
153
|
-
if !job || job.locked_at
|
154
|
-
# job has been locked, so it looks like it started already
|
155
|
-
# and we need to wait for it.
|
156
|
-
wait_for_my_notify(Marty::Promise::DEFAULT_JOB_TIMEOUT)
|
157
|
-
else
|
158
|
-
# work off the job instead of waiting for a real worker to
|
159
|
-
# pick it up.
|
160
|
-
# log "OFF0 #{Process.pid} #{last}"
|
161
|
-
begin
|
162
|
-
work_off_job(job)
|
163
|
-
rescue => exc
|
164
|
-
# log "OFFERR #{exc}"
|
165
|
-
res = Delorean::Engine.grok_runtime_exception(exc)
|
166
|
-
last.set_result(res)
|
167
|
-
end
|
168
|
-
# log "OFF1 #{Process.pid} #{last}"
|
169
|
-
end
|
153
|
+
wait_for_my_notify(Marty::Promise::DEFAULT_JOB_TIMEOUT)
|
170
154
|
|
171
155
|
last = latest
|
172
156
|
|
@@ -184,19 +168,13 @@ class Marty::Promise < Marty::Base
|
|
184
168
|
# at this point, we know the promise has already started
|
185
169
|
if !last.end_dt
|
186
170
|
wait_for_my_notify(timeout)
|
187
|
-
# log "UUUU #{Process.pid} #{id} #{Time.now.to_f}"
|
188
171
|
last = latest
|
189
172
|
|
190
|
-
# log "XXXX #{Process.pid} #{Time.now.to_f} #{last}"
|
191
|
-
|
192
173
|
if !last.end_dt
|
193
|
-
# log "TO22 #{Process.pid} #{last}"
|
194
174
|
return {"error" => "promise #{last.id} timed out (didn't end)"}
|
195
175
|
end
|
196
176
|
end
|
197
177
|
|
198
|
-
# log "RRRR #{Process.pid} #{last} #{Time.now.to_f}"
|
199
|
-
|
200
178
|
last.result
|
201
179
|
ensure
|
202
180
|
# Stop listening to the promise notifications
|
data/config/routes.rb
CHANGED
@@ -6,5 +6,6 @@ Marty::Engine.routes.draw do
|
|
6
6
|
match via: [:get, :post], "rpc/evaluate(.:format)" => "rpc", as: :rpc
|
7
7
|
match via: [:get, :post], "report(.:format)" => "report#index", as: :report
|
8
8
|
get 'job/download' => 'job', as: :job
|
9
|
+
post 'delayed_job/trigger' => 'delayed_job#trigger', as: :trigger_delayed_job
|
9
10
|
get 'diag', to: 'diagnostic/#op'
|
10
11
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
version: "2"
|
2
|
+
|
3
|
+
services:
|
4
|
+
app:
|
5
|
+
build:
|
6
|
+
context: .
|
7
|
+
dockerfile: Dockerfile.dummy
|
8
|
+
command: bash -c 'cd spec/dummy && rm -f tmp/pids/server.pid && rails s -b 0.0.0.0'
|
9
|
+
ports:
|
10
|
+
- "3000:3000"
|
11
|
+
environment:
|
12
|
+
- "PORT=3000"
|
13
|
+
- "PATH=/bundle_box/bundle/bin:/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
14
|
+
- "DEVELOPMENT_DATABASE_URL=postgres://postgres@postgres/marty_dev"
|
15
|
+
- "TEST_DATABASE_URL=postgres://postgres@postgres/marty_test"
|
16
|
+
# env_file: ".rbenv-vars"
|
17
|
+
depends_on:
|
18
|
+
- "postgres"
|
19
|
+
volumes:
|
20
|
+
- .:/opt/app:delegated
|
21
|
+
|
22
|
+
# - '~/.bash_history:/root/.bash_history'
|
23
|
+
# - '~/.pry_history:/root/.pry_history'
|
24
|
+
volumes_from:
|
25
|
+
- bundle_box
|
26
|
+
tty: true
|
27
|
+
stdin_open: true
|
28
|
+
|
29
|
+
postgres:
|
30
|
+
image: "clkao/postgres-plv8:9.6-2.0"
|
31
|
+
volumes:
|
32
|
+
- postgresql-data:/var/lib/postgresql/data
|
33
|
+
|
34
|
+
bundle_box:
|
35
|
+
image: busybox
|
36
|
+
volumes:
|
37
|
+
- /bundle_box
|
38
|
+
|
39
|
+
volumes:
|
40
|
+
postgresql-data:
|
41
|
+
|
data/lib/marty/promise_job.rb
CHANGED
@@ -107,6 +107,17 @@ class Marty::PromiseJob < Struct.new(:promise,
|
|
107
107
|
# def log(msg)
|
108
108
|
# open('/tmp/dj.out', 'a') { |f| f.puts msg }
|
109
109
|
# end
|
110
|
+
#
|
111
|
+
def enqueue(job)
|
112
|
+
config = Rails.configuration.marty
|
113
|
+
hooks = config.promise_job_enqueue_hooks
|
114
|
+
|
115
|
+
return if hooks.blank?
|
116
|
+
|
117
|
+
hooks.each do |hook|
|
118
|
+
hook.call(job)
|
119
|
+
end
|
120
|
+
end
|
110
121
|
|
111
122
|
def perform
|
112
123
|
# log "PERF #{Process.pid} #{title}"
|
data/lib/marty/railtie.rb
CHANGED
data/lib/marty/version.rb
CHANGED
data/make-dummy.mk
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
dummy-app-build:
|
2
|
+
docker-compose --file=docker-compose.dummy.yml build
|
3
|
+
|
4
|
+
dummy-app:
|
5
|
+
docker-compose --file=docker-compose.dummy.yml up
|
6
|
+
|
7
|
+
dummy-app-start:
|
8
|
+
docker-compose --file=docker-compose.dummy.yml up app
|
9
|
+
|
10
|
+
dummy-app-stop:
|
11
|
+
docker-compose --file=docker-compose.dummy.yml stop
|
12
|
+
|
13
|
+
dummy-app-down:
|
14
|
+
docker-compose --file=docker-compose.dummy.yml down
|
15
|
+
|
16
|
+
dummy-app-bash:
|
17
|
+
docker-compose --file=docker-compose.dummy.yml run --rm app bash
|
18
|
+
|
19
|
+
dummy-app-console:
|
20
|
+
docker-compose --file=docker-compose.dummy.yml run --rm app bin/rails c
|
21
|
+
|
22
|
+
dummy-app-initialise-docker:
|
23
|
+
make dummy-app-install
|
24
|
+
make dummy-app-db-prepare
|
25
|
+
|
26
|
+
dummy-app-install:
|
27
|
+
make dummy-app-install-bundle
|
28
|
+
|
29
|
+
dummy-app-install-bundle:
|
30
|
+
docker-compose --file=docker-compose.dummy.yml run --rm app bundle
|
31
|
+
|
32
|
+
dummy-app-db-drop:
|
33
|
+
docker-compose --file=docker-compose.dummy.yml run --rm app rake db:drop
|
34
|
+
|
35
|
+
dummy-app-db-prepare:
|
36
|
+
cp spec/dummy/config/database.yml.example spec/dummy/config/database.yml
|
37
|
+
docker-compose --file=docker-compose.dummy.yml run --rm app bundle exec rake db:create db:migrate db:seed app:marty:load_scripts
|
38
|
+
|
39
|
+
dummy-app-db-seed:
|
40
|
+
docker-compose --file=docker-compose.dummy.yml run --rm app rake db:seed
|
41
|
+
|
42
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'marty'
|
3
|
+
require 'delorean_lang'
|
4
|
+
require 'benchmark'
|
5
|
+
require 'job_helper'
|
6
|
+
require 'support/empty_job'
|
7
|
+
|
8
|
+
describe Marty::DelayedJobController, slow: false do
|
9
|
+
before(:each) { @routes = Marty::Engine.routes }
|
10
|
+
|
11
|
+
describe "#trigger" do
|
12
|
+
before do
|
13
|
+
@job = ::Delayed::Job.enqueue EmptyJob.new
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should be able to execute existing job" do
|
17
|
+
expect(::Delayed::Job.exists?(@job.id)).to be true
|
18
|
+
post :trigger, params: { id: @job.id }
|
19
|
+
expect(response).to have_http_status(:ok)
|
20
|
+
expect(::Delayed::Job.exists?(@job.id)).to be false
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return ok if triggered job is locked" do
|
24
|
+
@job.update!(locked_at: Time.zone.now)
|
25
|
+
post :trigger, params: { id: @job.id }
|
26
|
+
expect(response).to have_http_status(:ok)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return ok if triggered job is missing" do
|
30
|
+
@job.destroy!
|
31
|
+
post :trigger, params: { id: @job.id }
|
32
|
+
expect(response).to have_http_status(:ok)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -10,6 +10,6 @@ Rule2,SimpleRule,2017-2-1 14:00:00,2017-4-1,true,"{""g_array"":[""G1V2""],""g_si
|
|
10
10
|
Rule2a,SimpleRule,2017-2-1 14:00:00,2017-4-1,true,"{""g_array"":[""G1V2""],""g_single"":""G2V3"",""g_string"":""abc"",""g_bool"":true,""g_range"":""(,50]"",""g_integer"":99}",,,"{""simple_result"":""\""b value\"""", ""sr2"":""true"", ""sr3"": ""123""}"
|
11
11
|
Rule2b,SimpleRule,2017-2-1 14:00:00,2017-4-1,true,"{""g_array"":[""G1V2""],""g_single"":""G2V3"",""g_string"":""abc"",""g_bool"":true,""g_range"":""(,50]"",""g_integer"":999}",,"{""grid1"":""DataGrid1"",""grid2"":""DataGrid2""}",
|
12
12
|
Rule2c,SimpleRule,2017-2-1 14:00:00,2017-4-1,true,"{""g_array"":[""G1V2""],""g_single"":""G2V3"",""g_string"":""abc"",""g_bool"":false,""g_range"":""(,50]"",""g_integer"":10}",,"{""grid1"":""DataGrid1"",""grid2"":""DataGrid2""}",
|
13
|
-
Rule3,ComplexRule,2017-3-1 00:00:00,2017-4-1,false,"{""g_array"":[""G1V2"",""G1V3""],""g_string"":""def"",""g_integer"":11}","{""cguard1"":""1==1"",""cguard2"":""param2 == 'abc'""}","{""grid1"":""DataGrid1"",""grid2"":""DataGrid2""}","{""simple_result"":""\""c value\"""",""computed_value"":""if paramb\nthen param1 / (grid1_grid_result||1)\nelse (grid2_grid_result||1) / param1""}"
|
13
|
+
Rule3,ComplexRule,2017-3-1 00:00:00,2017-4-1,false,"{""g_array"":[""G1V2"",""G1V3""],""g_string"":""def"",""g_integer"":11}","{""cguard1"":""1==1"",""cguard2"":""[param2 == 'abc', \""a string\""]""}","{""grid1"":""DataGrid1"",""grid2"":""DataGrid2""}","{""simple_result"":""\""c value\"""",""computed_value"":""if paramb\nthen param1 / (grid1_grid_result||1)\nelse (grid2_grid_result||1) / param1""}"
|
14
14
|
Rule4,ComplexRule,2017-4-1 15:00:01,2017-5-1,,"{""g_array"":[""G1V2"",""G1V3""],""g_string"":""Hi Mom"",""g_integer"":11}","{""cguard1"":""1==1"",""cguard2"":""param2 == \""abc\""""}","{""grid1"":""DataGrid1"",""grid2"":""DataGrid2""}","{""computed_name_grid"":""\""DataGrid\""+\""X\"""", ""simple_result"":""computed_name_grid"",""grid_sum"":""computed_name_grid_result + (grid1_grid_result||0)+(grid2_grid_result||0)""}"
|
15
|
-
Rule5,ComplexRule,2017-4-2 15:00:01,2017-5-1,,"{""g_string"":""zzz"",""g_integer"":3757,""g_has_default"":""foo""}","{""cguard1"":""1==1""}",,"{""flavor"": ""[\""cherry\"",\""lemon\""][param2]"",""other_grid"": ""\""DataGrid4\"""",""final_value"": ""other_grid_result * 3""}"
|
15
|
+
Rule5,ComplexRule,2017-4-2 15:00:01,2017-5-1,,"{""g_string"":""zzz"",""g_integer"":3757,""g_has_default"":""foo""}","{""cguard1"":""[1==1, \""a string\""]""}",,"{""flavor"": ""[\""cherry\"",\""lemon\""][param2]"",""other_grid"": ""\""DataGrid4\"""",""final_value"": ""other_grid_result * 3""}"
|
data/spec/lib/logger_spec.rb
CHANGED
@@ -15,8 +15,12 @@ module Marty
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "log has its own connection" do
|
18
|
-
|
19
|
-
|
18
|
+
log_conn = Marty::Log.connection.raw_connection
|
19
|
+
posting_conn = Marty::Posting.connection.raw_connection
|
20
|
+
script_conn = Marty::Script.connection.raw_connection
|
21
|
+
|
22
|
+
expect(log_conn).not_to equal(posting_conn)
|
23
|
+
expect(posting_conn).to equal(script_conn)
|
20
24
|
end
|
21
25
|
|
22
26
|
it "logs" do
|
data/spec/models/rule_spec.rb
CHANGED
@@ -286,7 +286,7 @@ module Marty::RuleSpec
|
|
286
286
|
it "computed guards work" do
|
287
287
|
c = complex.compute(@ruleopts_myrule, {"pt"=>Time.zone.now,
|
288
288
|
'param2'=>'def'})
|
289
|
-
expect(c).to eq({"cguard2"=>false})
|
289
|
+
expect(c).to eq({"cguard2"=>[false, "a string"]})
|
290
290
|
end
|
291
291
|
it "returns simple results via #fixed_results" do
|
292
292
|
expect(simple.fixed_results["simple_result"]).to eq("b value")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arman Bostani
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date:
|
17
|
+
date: 2019-01-09 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: pg
|
@@ -186,10 +186,12 @@ files:
|
|
186
186
|
- ".gitignore"
|
187
187
|
- ".rspec"
|
188
188
|
- ".travis.yml"
|
189
|
+
- Dockerfile.dummy
|
189
190
|
- Gemfile
|
190
191
|
- Gemfile.lock
|
191
192
|
- INDEPENDENCE_ISSUES.md
|
192
193
|
- MIT-LICENSE
|
194
|
+
- Makefile
|
193
195
|
- README.md
|
194
196
|
- Rakefile
|
195
197
|
- app/assets/images/marty/.gitkeep
|
@@ -401,6 +403,7 @@ files:
|
|
401
403
|
- app/components/marty/user_view.rb
|
402
404
|
- app/controllers/marty/application_controller.rb
|
403
405
|
- app/controllers/marty/components_controller.rb
|
406
|
+
- app/controllers/marty/delayed_job_controller.rb
|
404
407
|
- app/controllers/marty/diagnostic/controller.rb
|
405
408
|
- app/controllers/marty/job_controller.rb
|
406
409
|
- app/controllers/marty/report_controller.rb
|
@@ -488,6 +491,7 @@ files:
|
|
488
491
|
- db/seeds.rb
|
489
492
|
- delorean/diagnostics.dl
|
490
493
|
- delorean/script_report.dl
|
494
|
+
- docker-compose.dummy.yml
|
491
495
|
- gemini_deprecations.md
|
492
496
|
- lib/marty.rb
|
493
497
|
- lib/marty/aws/base.rb
|
@@ -520,6 +524,7 @@ files:
|
|
520
524
|
- lib/pyxll/pyxll.cfg
|
521
525
|
- lib/pyxll/sample.xlsx
|
522
526
|
- lib/tasks/marty_tasks.rake
|
527
|
+
- make-dummy.mk
|
523
528
|
- marty.gemspec
|
524
529
|
- other/marty/api/base.rb
|
525
530
|
- other/marty/diagnostic/aws/ec2_instance.rb
|
@@ -540,6 +545,7 @@ files:
|
|
540
545
|
- other/marty/diagnostic/version.rb
|
541
546
|
- script/rails
|
542
547
|
- spec/controllers/application_controller_spec.rb
|
548
|
+
- spec/controllers/delayed_job_controller_spec.rb
|
543
549
|
- spec/controllers/diagnostic/controller_spec.rb
|
544
550
|
- spec/controllers/job_controller_spec.rb
|
545
551
|
- spec/controllers/rpc_controller_spec.rb
|
@@ -1693,6 +1699,7 @@ files:
|
|
1693
1699
|
- spec/support/custom_selectors.rb
|
1694
1700
|
- spec/support/delayed_job_helpers.rb
|
1695
1701
|
- spec/support/download_helper.rb
|
1702
|
+
- spec/support/empty_job.rb
|
1696
1703
|
- spec/support/helper.rb
|
1697
1704
|
- spec/support/netzke.rb
|
1698
1705
|
- spec/support/performance_helper.rb
|
@@ -1723,7 +1730,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1723
1730
|
version: '0'
|
1724
1731
|
requirements: []
|
1725
1732
|
rubyforge_project:
|
1726
|
-
rubygems_version: 2.
|
1733
|
+
rubygems_version: 2.6.14
|
1727
1734
|
signing_key:
|
1728
1735
|
specification_version: 4
|
1729
1736
|
summary: A framework for working with versioned data
|