marty 11.0.0 → 13.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintignore +2 -0
- data/.eslintrc.js +11 -6
- data/.gitignore +1 -0
- data/.rubocop.yml +15 -0
- data/.schemalintrc.js +41 -0
- data/CHANGELOG.md +12 -0
- data/app/channels/marty/notification_channel.rb +1 -0
- data/app/components/marty/postings/new_form.rb +12 -6
- data/app/components/marty/postings/new_form/client/new_form.js +1 -1
- data/app/components/marty/postings/summary_grid.rb +3 -3
- data/app/helpers/marty/application_helper.rb +17 -0
- data/app/jobs/marty/cron_job.rb +3 -2
- data/app/models/marty/posting.rb +9 -11
- data/app/models/marty/posting_type.rb +2 -3
- data/app/models/marty/promise.rb +9 -2
- data/app/views/layouts/marty/application.html.erb +4 -0
- data/db/migrate/527_use_pg_enum_for_posting_types.rb +61 -0
- data/db/migrate/600_replace_varchars_with_text.rb +89 -0
- data/db/migrate/601_add_posting_type_index_to_postings.rb +7 -0
- data/db/migrate/602_replace_text_with_varchars_without_size_limit.rb +89 -0
- data/db/seeds.rb +4 -5
- data/docker-compose.dummy.yml +1 -0
- data/lib/marty/aws/request.rb +7 -5
- data/lib/marty/diagnostic/version.rb +3 -2
- data/lib/marty/migrations.rb +10 -0
- data/lib/marty/version.rb +1 -1
- data/make-lint.mk +5 -1
- data/package.json +10 -5
- data/spec/controllers/diagnostic/controller_spec.rb +6 -2
- data/spec/dummy/app/assets/config/manifest.js +1 -0
- data/spec/dummy/app/assets/javascripts/application.js +14 -0
- data/spec/dummy/db/migrate/20200402150405_add_posting_types.rb +14 -0
- data/spec/lib/migrations/vw_marty_postings.sql.expected +2 -4
- data/spec/models/posting_spec.rb +0 -2
- data/spec/models/promise_spec.rb +33 -0
- data/spec/services/background_job/update_schedule_spec.rb +34 -0
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9af04e8e76cf3023af1aa02e26000f68ecfe47ded9811345921b01a266a79e8f
|
4
|
+
data.tar.gz: 4846444b2028e4f757082647c453cae88e6d034e1eea15c4b14eadee0eedb632
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 590a21ed0061f1a29fc294f5600ce409c2f0c762f481373a42552559c20f5f8ea2149b213afe38c3dfae46a532f180ab8853aaf65dc96a338283f04291973eec
|
7
|
+
data.tar.gz: ad4a62998ce1d912205c118c8403cf5ef008a29e60427871fd75b595631b5ab4309460e6ebd4619459cd9b028e10d64daf98c2190cd52ef724c0c1c7ecffce2f
|
data/.eslintignore
CHANGED
data/.eslintrc.js
CHANGED
@@ -1,26 +1,31 @@
|
|
1
1
|
module.exports = {
|
2
2
|
env: {
|
3
3
|
browser: true,
|
4
|
-
es6: true
|
4
|
+
es6: true
|
5
5
|
},
|
6
6
|
extends: ["eslint:recommended", "prettier"],
|
7
7
|
globals: {
|
8
8
|
RailsApp: "writable",
|
9
9
|
ActionCable: "readonly",
|
10
10
|
Ext: "readonly",
|
11
|
-
CodeMirror: "readonly"
|
11
|
+
CodeMirror: "readonly",
|
12
|
+
module: "writable",
|
13
|
+
process: "readonly"
|
12
14
|
},
|
13
15
|
parserOptions: {
|
14
|
-
ecmaVersion: 6
|
16
|
+
ecmaVersion: 6
|
15
17
|
},
|
16
18
|
plugins: ["prettier"],
|
17
19
|
rules: {
|
18
20
|
"no-var": ["error"],
|
19
21
|
"prefer-const": ["error"],
|
20
22
|
"linebreak-style": ["error", "unix"],
|
21
|
-
"quotes": [2, "double", {
|
22
|
-
"no-unused-vars": [
|
23
|
+
"quotes": [2, "double", { avoidEscape: true }],
|
24
|
+
"no-unused-vars": [
|
25
|
+
"error",
|
26
|
+
{ args: "after-used", argsIgnorePattern: "^_" }
|
27
|
+
],
|
23
28
|
"object-shorthand": ["error", "always"],
|
24
|
-
"no-constant-condition": ["error", {
|
29
|
+
"no-constant-condition": ["error", { checkLoops: false }]
|
25
30
|
}
|
26
31
|
};
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -87,3 +87,18 @@ Rails/ApplicationController:
|
|
87
87
|
|
88
88
|
Rails/IndexWith:
|
89
89
|
Enabled: false
|
90
|
+
|
91
|
+
Lint/RaiseException:
|
92
|
+
Enabled: false
|
93
|
+
|
94
|
+
Lint/StructNewOverride:
|
95
|
+
Enabled: false
|
96
|
+
|
97
|
+
Style/HashEachMethods:
|
98
|
+
Enabled: false
|
99
|
+
|
100
|
+
Style/HashTransformKeys:
|
101
|
+
Enabled: false
|
102
|
+
|
103
|
+
Style/HashTransformValues:
|
104
|
+
Enabled: false
|
data/.schemalintrc.js
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module.exports = {
|
2
|
+
connection: {
|
3
|
+
host: process.env["POSTGRES_HOST"] || "localhost",
|
4
|
+
user: process.env["POSTGRES_USER"] || "postgres",
|
5
|
+
password: process.env["POSTGRES_PASSWORD"] || "postgres",
|
6
|
+
database: process.env["POSTGRES_DB_NAME"] || "marty_dev",
|
7
|
+
charset: "utf8"
|
8
|
+
},
|
9
|
+
|
10
|
+
// plugins: ['./custom-rules'],
|
11
|
+
|
12
|
+
rules: {
|
13
|
+
"name-casing": ["error", "snake"],
|
14
|
+
"name-inflection": ["error", "plural"],
|
15
|
+
"prefer-jsonb-to-json": ["error"]
|
16
|
+
// FIXME: user varchar with no size limit instead
|
17
|
+
// We would need to update lib so it would return column size info
|
18
|
+
// And create our own rule that checks that
|
19
|
+
// "prefer-text-to-varchar": ["error"]
|
20
|
+
},
|
21
|
+
|
22
|
+
schemas: [{ name: "public" }],
|
23
|
+
|
24
|
+
ignores: [
|
25
|
+
{
|
26
|
+
identifierPattern: ".*_rules.computed_guards.*",
|
27
|
+
rulePattern: "prefer-jsonb-to-json"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
identifierPattern: ".*_rules.results.*",
|
31
|
+
rulePattern: "prefer-jsonb-to-json"
|
32
|
+
},
|
33
|
+
{ identifierPattern: ".*ar_internal_metadata.*", rulePattern: ".*" },
|
34
|
+
{ identifierPattern: ".*schema_migrations.*", rulePattern: ".*" },
|
35
|
+
{ identifierPattern: ".*gemini_.*", rulePattern: ".*" },
|
36
|
+
{ identifierPattern: "entities.*", rulePattern: ".*" },
|
37
|
+
{ identifierPattern: "groupings.*", rulePattern: ".*" },
|
38
|
+
{ identifierPattern: "heads.*", rulePattern: ".*" },
|
39
|
+
{ identifierPattern: "head_versions.*", rulePattern: ".*" }
|
40
|
+
]
|
41
|
+
};
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
13.0.2 - 2020-04-14
|
2
|
+
=================
|
3
|
+
* Use VARCHAR without size limit instead of recently added TEXT columns, since default field for TEXT column is textarea.
|
4
|
+
|
5
|
+
13.0.1 - 2020-04-14
|
6
|
+
=================
|
7
|
+
* Add missing index by `posting_type` for `marty_postings` table.
|
8
|
+
|
9
|
+
12.0.0 - 2020-04-02
|
10
|
+
=================
|
11
|
+
* Marty::PostingType converted to PgEnum. AR methods (find_by, all, etc...) will no longer work.
|
12
|
+
|
@@ -31,17 +31,23 @@ module Marty
|
|
31
31
|
|
32
32
|
c.model = 'Marty::Posting'
|
33
33
|
c.items = [
|
34
|
-
|
35
|
-
name: :posting_type__name,
|
36
|
-
scope: lambda { |r|
|
37
|
-
r.where(name: Marty::Postings::NewForm.can_perform_actions)
|
38
|
-
},
|
39
|
-
},
|
34
|
+
:posting_type,
|
40
35
|
:comment,
|
41
36
|
:summary_grid
|
42
37
|
]
|
43
38
|
end
|
44
39
|
|
40
|
+
attribute :posting_type do |c|
|
41
|
+
store = Marty::Postings::NewForm.can_perform_actions
|
42
|
+
|
43
|
+
c.editor_config = {
|
44
|
+
multi_select: false,
|
45
|
+
store: store,
|
46
|
+
type: :string,
|
47
|
+
xtype: :combo,
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
45
51
|
component :summary_grid do |c|
|
46
52
|
c.klass = Marty::Postings::SummaryGrid
|
47
53
|
c.data_store = { auto_load: false }
|
@@ -41,13 +41,13 @@ module Marty
|
|
41
41
|
return [] if config[:selected_posting_type].to_i.negative?
|
42
42
|
|
43
43
|
last_posting = Marty::Posting.where(
|
44
|
-
|
44
|
+
posting_type: config[:selected_posting_type]
|
45
45
|
).where.not(created_dt: 'infinity').order(:created_dt).last
|
46
46
|
|
47
47
|
start_dt = last_posting&.created_dt || 1.year.ago
|
48
48
|
end_dt = Time.zone.now
|
49
49
|
|
50
|
-
posting_type = Marty::PostingType
|
50
|
+
posting_type = Marty::PostingType[config[:selected_posting_type]]
|
51
51
|
|
52
52
|
summary_records = class_list(posting_type).map do |klass|
|
53
53
|
summary = Marty::DataChange.change_summary(start_dt, end_dt, klass)
|
@@ -69,7 +69,7 @@ module Marty
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def class_list(posting_type)
|
72
|
-
method_name = "class_list_#{posting_type
|
72
|
+
method_name = "class_list_#{posting_type}".downcase.to_sym
|
73
73
|
|
74
74
|
if Marty::DataChange.respond_to?(method_name)
|
75
75
|
Marty::DataChange.send(method_name)
|
@@ -1,4 +1,21 @@
|
|
1
1
|
module Marty
|
2
2
|
module ApplicationHelper
|
3
|
+
DEFAULT_ASSETS_PATH = 'app/assets'
|
4
|
+
|
5
|
+
def asset_exists?(file, file_extension, default_path)
|
6
|
+
path = Rails.configuration.marty.send("assets_#{file_extension}_path") ||
|
7
|
+
default_path
|
8
|
+
|
9
|
+
asset_path = Rails.root.join("#{path}/#{file}.#{file_extension}")
|
10
|
+
File.exist?(asset_path)
|
11
|
+
end
|
12
|
+
|
13
|
+
def javascript_exists?(file)
|
14
|
+
asset_exists?(file, :js, DEFAULT_ASSETS_PATH + '/javascript')
|
15
|
+
end
|
16
|
+
|
17
|
+
def stylesheet_exists?(file)
|
18
|
+
asset_exists?(file, :css, DEFAULT_ASSETS_PATH + '/stylesheets')
|
19
|
+
end
|
3
20
|
end
|
4
21
|
end
|
data/app/jobs/marty/cron_job.rb
CHANGED
@@ -43,7 +43,7 @@ class Marty::CronJob < ActiveJob::Base
|
|
43
43
|
def schedule(schedule_obj:)
|
44
44
|
dj = schedule_obj.delayed_job
|
45
45
|
|
46
|
-
return
|
46
|
+
return reschedule(schedule_obj: schedule_obj) if dj.present?
|
47
47
|
|
48
48
|
cron = schedule_obj.cron
|
49
49
|
|
@@ -57,7 +57,8 @@ class Marty::CronJob < ActiveJob::Base
|
|
57
57
|
return dj.update(cron: schedule_obj.cron) if dj.locked_by?
|
58
58
|
|
59
59
|
remove(dj)
|
60
|
-
|
60
|
+
set(cron: schedule_obj.cron, schedule_id: schedule_obj.id).
|
61
|
+
perform_later(*schedule_obj.arguments)
|
61
62
|
end
|
62
63
|
|
63
64
|
def remove(dj)
|
data/app/models/marty/posting.rb
CHANGED
@@ -2,10 +2,9 @@ class Marty::Posting < Marty::Base
|
|
2
2
|
has_mcfly append_only: true
|
3
3
|
|
4
4
|
mcfly_validates_uniqueness_of :name
|
5
|
-
validates :name, :
|
5
|
+
validates :name, :posting_type, :comment, presence: true
|
6
6
|
|
7
7
|
belongs_to :user, class_name: 'Marty::User'
|
8
|
-
belongs_to :posting_type
|
9
8
|
|
10
9
|
def self.make_name(posting_type, dt)
|
11
10
|
return 'NOW' if Mcfly.is_infinity(dt)
|
@@ -17,19 +16,17 @@ class Marty::Posting < Marty::Base
|
|
17
16
|
# of using the host's timezone. i.e. since we're in PST8PDT, names
|
18
17
|
# will be based off of the Pacific TZ.
|
19
18
|
dt ||= Time.zone.now
|
20
|
-
"#{posting_type
|
19
|
+
"#{posting_type}-#{dt.strftime('%Y%m%d-%H%M')}"
|
21
20
|
end
|
22
21
|
|
23
22
|
before_validation :set_posting_name
|
23
|
+
|
24
24
|
def set_posting_name
|
25
|
-
posting_type = Marty::PostingType.find_by(id: posting_type_id)
|
26
25
|
self.name = self.class.make_name(posting_type, created_dt)
|
27
26
|
true
|
28
27
|
end
|
29
28
|
|
30
|
-
def self.do_create(
|
31
|
-
posting_type = Marty::PostingType.find_by(name: type_name)
|
32
|
-
|
29
|
+
def self.do_create(posting_type, dt, comment)
|
33
30
|
raise "unknown posting type #{name}" unless posting_type
|
34
31
|
|
35
32
|
o = new
|
@@ -60,10 +57,10 @@ class Marty::Posting < Marty::Base
|
|
60
57
|
|
61
58
|
delorean_fn :first_match, sig: [1, 2] do |dt, posting_type = nil|
|
62
59
|
raise 'bad posting type' if
|
63
|
-
posting_type && !posting_type
|
60
|
+
posting_type && !posting_type[posting_type]
|
64
61
|
|
65
62
|
q = where('created_dt <= ?', dt)
|
66
|
-
q = q.where(
|
63
|
+
q = q.where(posting_type: posting_type) if posting_type
|
67
64
|
q.order('created_dt DESC').first&.attributes
|
68
65
|
end
|
69
66
|
|
@@ -71,10 +68,11 @@ class Marty::Posting < Marty::Base
|
|
71
68
|
raise 'missing posting types list' unless posting_types
|
72
69
|
raise 'bad posting types list' unless posting_types.is_a?(Array)
|
73
70
|
|
74
|
-
q =
|
75
|
-
where(
|
71
|
+
q = where("created_dt <> 'infinity'").
|
72
|
+
where(posting_type: posting_types).
|
76
73
|
select(get_struct_attrs).
|
77
74
|
order('created_dt DESC').limit(limit || 1)
|
75
|
+
|
78
76
|
q.map(&:attributes)
|
79
77
|
end
|
80
78
|
end
|
data/app/models/marty/promise.rb
CHANGED
@@ -44,8 +44,12 @@ class Marty::Promise < Marty::Base
|
|
44
44
|
# log "SETRES #{Process.pid} #{self}"
|
45
45
|
|
46
46
|
reload
|
47
|
+
# If exception happened before the promise was started
|
48
|
+
# we should still update the record
|
49
|
+
if res['error'].present? && !start_dt
|
50
|
+
self.start_dt ||= DateTime.now
|
47
51
|
# promise must have been started and not yet ended
|
48
|
-
|
52
|
+
elsif !start_dt || end_dt || result != {}
|
49
53
|
# log "SETERR #{Process.pid} #{self}"
|
50
54
|
Marty::Util.logger.error("unexpected promise state: #{self}")
|
51
55
|
return
|
@@ -136,7 +140,10 @@ class Marty::Promise < Marty::Base
|
|
136
140
|
work_off_job(job)
|
137
141
|
rescue StandardError => e
|
138
142
|
# log "OFFERR #{exc}"
|
139
|
-
error = exception_to_result(
|
143
|
+
error = self.class.exception_to_result(
|
144
|
+
promise: self,
|
145
|
+
exception: e
|
146
|
+
)
|
140
147
|
last.set_result(error)
|
141
148
|
end
|
142
149
|
# log "OFF1 #{Process.pid} #{last}"
|
@@ -1,3 +1,5 @@
|
|
1
|
+
<% cookies[:dark_mode] ||= Rails.configuration.marty.dark_mode_default.to_s %>
|
2
|
+
|
1
3
|
<!DOCTYPE html>
|
2
4
|
<html>
|
3
5
|
<head>
|
@@ -10,6 +12,8 @@
|
|
10
12
|
<%= csrf_meta_tag %>
|
11
13
|
<%= javascript_include_tag 'marty/application' %>
|
12
14
|
<%= stylesheet_link_tag 'marty/application' %>
|
15
|
+
<%= javascript_include_tag 'application' if javascript_exists?('application') %>
|
16
|
+
<%= stylesheet_link_tag 'application' if stylesheet_exists?('application') %>
|
13
17
|
<% if cookies[:dark_mode] == 'true' %>
|
14
18
|
<%= stylesheet_link_tag 'marty/dark_mode', media: 'all', 'data-turbolinks-track': 'reload' %>
|
15
19
|
<% end %>
|
@@ -0,0 +1,61 @@
|
|
1
|
+
class UsePgEnumForPostingTypes < ActiveRecord::Migration[5.1]
|
2
|
+
include Marty::Migrations
|
3
|
+
|
4
|
+
def up
|
5
|
+
disable_triggers 'marty_postings' do
|
6
|
+
posting_types = Marty::PostingType.all.to_a
|
7
|
+
rename_table :marty_posting_types, :marty_posting_types_old
|
8
|
+
|
9
|
+
new_enum(Marty::PostingType, 'keep_marty_prefix_here')
|
10
|
+
add_column :marty_postings, :posting_type, :marty_posting_types
|
11
|
+
|
12
|
+
posting_types.each do |posting_type|
|
13
|
+
Marty::Posting.where(posting_type_id: posting_type.id).update_all(posting_type: posting_type.name)
|
14
|
+
end
|
15
|
+
|
16
|
+
update_views_up
|
17
|
+
remove_column :marty_postings, :posting_type_id
|
18
|
+
|
19
|
+
drop_table :marty_posting_types_old
|
20
|
+
change_column_null :marty_postings, :posting_type, false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def down
|
25
|
+
disable_triggers 'marty_postings' do
|
26
|
+
posting_types = Marty::Posting.pluck(:posting_type).uniq
|
27
|
+
|
28
|
+
execute <<-SQL
|
29
|
+
ALTER TYPE marty_posting_types RENAME TO marty_posting_types_old;
|
30
|
+
SQL
|
31
|
+
|
32
|
+
create_table :marty_posting_types do |t|
|
33
|
+
t.string :name, null: false, limit: 255
|
34
|
+
end
|
35
|
+
|
36
|
+
add_column :marty_postings, :posting_type_id, :integer
|
37
|
+
|
38
|
+
posting_types.each do |posting_type|
|
39
|
+
new_record = Marty::PostingType.create!(name: posting_type)
|
40
|
+
Marty::Posting.where('posting_type = ?', posting_type).update_all(posting_type_id: new_record.id)
|
41
|
+
end
|
42
|
+
|
43
|
+
update_views_down
|
44
|
+
remove_column :marty_postings, :posting_type
|
45
|
+
|
46
|
+
execute <<-SQL
|
47
|
+
DROP TYPE marty_posting_types_old
|
48
|
+
SQL
|
49
|
+
|
50
|
+
change_column_null :marty_postings, :posting_type_id, false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def update_views_up
|
55
|
+
# Add your code here
|
56
|
+
end
|
57
|
+
|
58
|
+
def update_views_down
|
59
|
+
# Add your code here
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
class ReplaceVarcharsWithText < ActiveRecord::Migration[5.1]
|
2
|
+
def up
|
3
|
+
drop_views
|
4
|
+
execute('
|
5
|
+
ALTER TABLE "delayed_jobs" ALTER COLUMN "locked_by" TYPE TEXT;
|
6
|
+
ALTER TABLE "delayed_jobs" ALTER COLUMN "queue" TYPE TEXT;
|
7
|
+
ALTER TABLE "delayed_jobs" ALTER COLUMN "cron" TYPE TEXT;
|
8
|
+
ALTER TABLE "marty_api_auths" ALTER COLUMN "app_name" TYPE TEXT;
|
9
|
+
ALTER TABLE "marty_api_auths" ALTER COLUMN "api_key" TYPE TEXT;
|
10
|
+
ALTER TABLE "marty_api_auths" ALTER COLUMN "script_name" TYPE TEXT;
|
11
|
+
ALTER TABLE "marty_api_configs" ALTER COLUMN "script" TYPE TEXT;
|
12
|
+
ALTER TABLE "marty_api_configs" ALTER COLUMN "node" TYPE TEXT;
|
13
|
+
ALTER TABLE "marty_api_configs" ALTER COLUMN "attr" TYPE TEXT;
|
14
|
+
ALTER TABLE "marty_api_configs" ALTER COLUMN "api_class" TYPE TEXT;
|
15
|
+
ALTER TABLE "marty_background_job_logs" ALTER COLUMN "job_class" TYPE TEXT;
|
16
|
+
ALTER TABLE "marty_background_job_logs" ALTER COLUMN "status" TYPE TEXT;
|
17
|
+
ALTER TABLE "marty_background_job_schedules" ALTER COLUMN "job_class" TYPE TEXT;
|
18
|
+
ALTER TABLE "marty_background_job_schedules" ALTER COLUMN "cron" TYPE TEXT;
|
19
|
+
ALTER TABLE "marty_background_job_schedules" ALTER COLUMN "state" TYPE TEXT;
|
20
|
+
ALTER TABLE "marty_configs" ALTER COLUMN "key" TYPE TEXT;
|
21
|
+
ALTER TABLE "marty_data_grids" ALTER COLUMN "name" TYPE TEXT;
|
22
|
+
ALTER TABLE "marty_data_grids" ALTER COLUMN "data_type" TYPE TEXT;
|
23
|
+
ALTER TABLE "marty_data_grids" ALTER COLUMN "constraint" TYPE TEXT;
|
24
|
+
ALTER TABLE "marty_grid_index_booleans" ALTER COLUMN "attr" TYPE TEXT;
|
25
|
+
ALTER TABLE "marty_grid_index_int4ranges" ALTER COLUMN "attr" TYPE TEXT;
|
26
|
+
ALTER TABLE "marty_grid_index_integers" ALTER COLUMN "attr" TYPE TEXT;
|
27
|
+
ALTER TABLE "marty_grid_index_numranges" ALTER COLUMN "attr" TYPE TEXT;
|
28
|
+
ALTER TABLE "marty_grid_index_strings" ALTER COLUMN "attr" TYPE TEXT;
|
29
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "name" TYPE TEXT;
|
30
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "db_model_name" TYPE TEXT;
|
31
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "synonym_fields" TYPE TEXT;
|
32
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "cleaner_function" TYPE TEXT;
|
33
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "validation_function" TYPE TEXT;
|
34
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "preprocess_function" TYPE TEXT;
|
35
|
+
ALTER TABLE "marty_logs" ALTER COLUMN "message_type" TYPE TEXT;
|
36
|
+
ALTER TABLE "marty_logs" ALTER COLUMN "message" TYPE TEXT;
|
37
|
+
ALTER TABLE "marty_notifications" ALTER COLUMN "state" TYPE TEXT;
|
38
|
+
ALTER TABLE "marty_notifications_configs" ALTER COLUMN "delivery_type" TYPE TEXT;
|
39
|
+
ALTER TABLE "marty_notifications_configs" ALTER COLUMN "state" TYPE TEXT;
|
40
|
+
ALTER TABLE "marty_notifications_deliveries" ALTER COLUMN "delivery_type" TYPE TEXT;
|
41
|
+
ALTER TABLE "marty_notifications_deliveries" ALTER COLUMN "state" TYPE TEXT;
|
42
|
+
ALTER TABLE "marty_notifications_deliveries" ALTER COLUMN "error_text" TYPE TEXT;
|
43
|
+
ALTER TABLE "marty_postings" ALTER COLUMN "name" TYPE TEXT;
|
44
|
+
ALTER TABLE "marty_postings" ALTER COLUMN "comment" TYPE TEXT;
|
45
|
+
ALTER TABLE "marty_promises" ALTER COLUMN "title" TYPE TEXT;
|
46
|
+
ALTER TABLE "marty_promises" ALTER COLUMN "cformat" TYPE TEXT;
|
47
|
+
ALTER TABLE "marty_scripts" ALTER COLUMN "name" TYPE TEXT;
|
48
|
+
ALTER TABLE "marty_tags" ALTER COLUMN "name" TYPE TEXT;
|
49
|
+
ALTER TABLE "marty_tags" ALTER COLUMN "comment" TYPE TEXT;
|
50
|
+
ALTER TABLE "marty_tokens" ALTER COLUMN "value" TYPE TEXT;
|
51
|
+
ALTER TABLE "marty_users" ALTER COLUMN "login" TYPE TEXT;
|
52
|
+
ALTER TABLE "marty_users" ALTER COLUMN "firstname" TYPE TEXT;
|
53
|
+
ALTER TABLE "marty_users" ALTER COLUMN "lastname" TYPE TEXT;
|
54
|
+
')
|
55
|
+
recreate_views
|
56
|
+
end
|
57
|
+
|
58
|
+
def down
|
59
|
+
announce("No-op on ReplaceVarcharsWithText.down")
|
60
|
+
end
|
61
|
+
|
62
|
+
def drop_views
|
63
|
+
execute <<SQL
|
64
|
+
DROP VIEW IF EXISTS marty_vw_promises;
|
65
|
+
SQL
|
66
|
+
end
|
67
|
+
|
68
|
+
def recreate_views
|
69
|
+
execute <<SQL
|
70
|
+
CREATE OR REPLACE VIEW marty_vw_promises
|
71
|
+
AS
|
72
|
+
SELECT
|
73
|
+
id,
|
74
|
+
title,
|
75
|
+
user_id,
|
76
|
+
cformat,
|
77
|
+
parent_id,
|
78
|
+
job_id,
|
79
|
+
status,
|
80
|
+
start_dt,
|
81
|
+
end_dt,
|
82
|
+
priority,
|
83
|
+
timeout
|
84
|
+
FROM marty_promises;
|
85
|
+
|
86
|
+
GRANT SELECT ON marty_vw_promises TO public;
|
87
|
+
SQL
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
class ReplaceTextWithVarcharsWithoutSizeLimit < ActiveRecord::Migration[5.1]
|
2
|
+
def up
|
3
|
+
drop_views
|
4
|
+
execute <<SQL
|
5
|
+
ALTER TABLE "delayed_jobs" ALTER COLUMN "locked_by" TYPE VARCHAR;
|
6
|
+
ALTER TABLE "delayed_jobs" ALTER COLUMN "queue" TYPE VARCHAR;
|
7
|
+
ALTER TABLE "delayed_jobs" ALTER COLUMN "cron" TYPE VARCHAR;
|
8
|
+
ALTER TABLE "marty_api_auths" ALTER COLUMN "app_name" TYPE VARCHAR;
|
9
|
+
ALTER TABLE "marty_api_auths" ALTER COLUMN "api_key" TYPE VARCHAR;
|
10
|
+
ALTER TABLE "marty_api_auths" ALTER COLUMN "script_name" TYPE VARCHAR;
|
11
|
+
ALTER TABLE "marty_api_configs" ALTER COLUMN "script" TYPE VARCHAR;
|
12
|
+
ALTER TABLE "marty_api_configs" ALTER COLUMN "node" TYPE VARCHAR;
|
13
|
+
ALTER TABLE "marty_api_configs" ALTER COLUMN "attr" TYPE VARCHAR;
|
14
|
+
ALTER TABLE "marty_api_configs" ALTER COLUMN "api_class" TYPE VARCHAR;
|
15
|
+
ALTER TABLE "marty_background_job_logs" ALTER COLUMN "job_class" TYPE VARCHAR;
|
16
|
+
ALTER TABLE "marty_background_job_logs" ALTER COLUMN "status" TYPE VARCHAR;
|
17
|
+
ALTER TABLE "marty_background_job_schedules" ALTER COLUMN "job_class" TYPE VARCHAR;
|
18
|
+
ALTER TABLE "marty_background_job_schedules" ALTER COLUMN "cron" TYPE VARCHAR;
|
19
|
+
ALTER TABLE "marty_background_job_schedules" ALTER COLUMN "state" TYPE VARCHAR;
|
20
|
+
ALTER TABLE "marty_configs" ALTER COLUMN "key" TYPE VARCHAR;
|
21
|
+
ALTER TABLE "marty_data_grids" ALTER COLUMN "name" TYPE VARCHAR;
|
22
|
+
ALTER TABLE "marty_data_grids" ALTER COLUMN "data_type" TYPE VARCHAR;
|
23
|
+
ALTER TABLE "marty_data_grids" ALTER COLUMN "constraint" TYPE VARCHAR;
|
24
|
+
ALTER TABLE "marty_grid_index_booleans" ALTER COLUMN "attr" TYPE VARCHAR;
|
25
|
+
ALTER TABLE "marty_grid_index_int4ranges" ALTER COLUMN "attr" TYPE VARCHAR;
|
26
|
+
ALTER TABLE "marty_grid_index_integers" ALTER COLUMN "attr" TYPE VARCHAR;
|
27
|
+
ALTER TABLE "marty_grid_index_numranges" ALTER COLUMN "attr" TYPE VARCHAR;
|
28
|
+
ALTER TABLE "marty_grid_index_strings" ALTER COLUMN "attr" TYPE VARCHAR;
|
29
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "name" TYPE VARCHAR;
|
30
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "db_model_name" TYPE VARCHAR;
|
31
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "synonym_fields" TYPE VARCHAR;
|
32
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "cleaner_function" TYPE VARCHAR;
|
33
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "validation_function" TYPE VARCHAR;
|
34
|
+
ALTER TABLE "marty_import_types" ALTER COLUMN "preprocess_function" TYPE VARCHAR;
|
35
|
+
ALTER TABLE "marty_logs" ALTER COLUMN "message_type" TYPE VARCHAR;
|
36
|
+
ALTER TABLE "marty_logs" ALTER COLUMN "message" TYPE VARCHAR;
|
37
|
+
ALTER TABLE "marty_notifications" ALTER COLUMN "state" TYPE VARCHAR;
|
38
|
+
ALTER TABLE "marty_notifications_configs" ALTER COLUMN "delivery_type" TYPE VARCHAR;
|
39
|
+
ALTER TABLE "marty_notifications_configs" ALTER COLUMN "state" TYPE VARCHAR;
|
40
|
+
ALTER TABLE "marty_notifications_deliveries" ALTER COLUMN "delivery_type" TYPE VARCHAR;
|
41
|
+
ALTER TABLE "marty_notifications_deliveries" ALTER COLUMN "state" TYPE VARCHAR;
|
42
|
+
ALTER TABLE "marty_notifications_deliveries" ALTER COLUMN "error_text" TYPE VARCHAR;
|
43
|
+
ALTER TABLE "marty_postings" ALTER COLUMN "name" TYPE VARCHAR;
|
44
|
+
ALTER TABLE "marty_postings" ALTER COLUMN "comment" TYPE VARCHAR;
|
45
|
+
ALTER TABLE "marty_promises" ALTER COLUMN "title" TYPE VARCHAR;
|
46
|
+
ALTER TABLE "marty_promises" ALTER COLUMN "cformat" TYPE VARCHAR;
|
47
|
+
ALTER TABLE "marty_scripts" ALTER COLUMN "name" TYPE VARCHAR;
|
48
|
+
ALTER TABLE "marty_tags" ALTER COLUMN "name" TYPE VARCHAR;
|
49
|
+
ALTER TABLE "marty_tags" ALTER COLUMN "comment" TYPE VARCHAR;
|
50
|
+
ALTER TABLE "marty_tokens" ALTER COLUMN "value" TYPE VARCHAR;
|
51
|
+
ALTER TABLE "marty_users" ALTER COLUMN "login" TYPE VARCHAR;
|
52
|
+
ALTER TABLE "marty_users" ALTER COLUMN "firstname" TYPE VARCHAR;
|
53
|
+
ALTER TABLE "marty_users" ALTER COLUMN "lastname" TYPE VARCHAR;
|
54
|
+
SQL
|
55
|
+
recreate_views
|
56
|
+
end
|
57
|
+
|
58
|
+
def down
|
59
|
+
announce("No-op on ReplaceVarcharsWithText.down")
|
60
|
+
end
|
61
|
+
|
62
|
+
def drop_views
|
63
|
+
execute <<SQL
|
64
|
+
DROP VIEW IF EXISTS marty_vw_promises;
|
65
|
+
SQL
|
66
|
+
end
|
67
|
+
|
68
|
+
def recreate_views
|
69
|
+
execute <<SQL
|
70
|
+
CREATE OR REPLACE VIEW marty_vw_promises
|
71
|
+
AS
|
72
|
+
SELECT
|
73
|
+
id,
|
74
|
+
title,
|
75
|
+
user_id,
|
76
|
+
cformat,
|
77
|
+
parent_id,
|
78
|
+
job_id,
|
79
|
+
status,
|
80
|
+
start_dt,
|
81
|
+
end_dt,
|
82
|
+
priority,
|
83
|
+
timeout
|
84
|
+
FROM marty_promises;
|
85
|
+
|
86
|
+
GRANT SELECT ON marty_vw_promises TO public;
|
87
|
+
SQL
|
88
|
+
end
|
89
|
+
end
|
data/db/seeds.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# create system account if not there
|
2
2
|
system_login = Rails.configuration.marty.system_account || 'marty'
|
3
|
+
|
3
4
|
unless Marty::User.find_by_login(system_login)
|
4
5
|
user = Marty::User.new
|
5
6
|
user.login = system_login
|
@@ -13,22 +14,20 @@ end
|
|
13
14
|
Mcfly.whodunnit = Marty::User.find_by_login(system_login)
|
14
15
|
|
15
16
|
# Give system account all roles
|
16
|
-
Marty::RoleType.get_all.map
|
17
|
+
Marty::RoleType.get_all.map do |role|
|
17
18
|
ur = Marty::UserRole.new
|
18
19
|
ur.user = Mcfly.whodunnit
|
19
20
|
ur.role = role
|
20
21
|
ur.save
|
21
|
-
|
22
|
+
end
|
22
23
|
|
23
24
|
# Create default PostingType from configuration
|
24
25
|
default_p_type = Rails.configuration.marty.default_posting_type
|
25
26
|
|
26
|
-
Marty::PostingType.create(name: default_p_type)
|
27
|
-
|
28
27
|
# Create NOW posting
|
29
28
|
unless Marty::Posting.find_by_name('NOW')
|
30
29
|
sn = Marty::Posting.new
|
31
|
-
sn.
|
30
|
+
sn.posting_type = Marty::PostingType[default_p_type]
|
32
31
|
sn.comment = '---'
|
33
32
|
sn.created_dt = 'infinity'
|
34
33
|
sn.save!
|
data/docker-compose.dummy.yml
CHANGED
data/lib/marty/aws/request.rb
CHANGED
@@ -16,11 +16,13 @@ class Marty::Aws::Request < Marty::Aws::Base
|
|
16
16
|
url += '?' + (default + params).map { |a, v| "#{a}=#{v}" }.join('&') unless
|
17
17
|
params.empty?
|
18
18
|
|
19
|
-
sig = Aws::Sigv4::Signer.new(
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
sig = ::Aws::Sigv4::Signer.new(
|
20
|
+
service: @service,
|
21
|
+
region: @doc[:region],
|
22
|
+
access_key_id: @creds[:access_key_id],
|
23
|
+
secret_access_key: @creds[:secret_access_key],
|
24
|
+
session_token: @creds[:token]
|
25
|
+
)
|
24
26
|
signed_url = sig.presign_url(http_method: 'GET', url: url)
|
25
27
|
|
26
28
|
http = Net::HTTP.new(host, 443)
|
@@ -11,8 +11,9 @@ module Marty::Diagnostic
|
|
11
11
|
}
|
12
12
|
end.reduce(&:merge) || {}
|
13
13
|
|
14
|
-
git_tag = `cd #{Rails.root}; git describe --tags --always;`.strip
|
15
|
-
|
14
|
+
git_tag = `cd #{Rails.root}; git describe --tags --always --abbrev=7;`.strip
|
15
|
+
git_datetime = `cd #{Rails.root}; git log -1 --format=%cd;`.strip
|
16
|
+
git = { 'Root Git' => "#{git_tag} (#{git_datetime})" }.merge(submodules)
|
16
17
|
rescue StandardError
|
17
18
|
git = { 'Root Git' => error('Failed accessing git') }
|
18
19
|
end
|
data/lib/marty/migrations.rb
CHANGED
@@ -304,6 +304,16 @@ OUT
|
|
304
304
|
end.map(&:to_sym)
|
305
305
|
end
|
306
306
|
|
307
|
+
def disable_triggers(table_name)
|
308
|
+
ActiveRecord::Base.connection.
|
309
|
+
execute("ALTER TABLE #{table_name} DISABLE TRIGGER USER;")
|
310
|
+
|
311
|
+
yield
|
312
|
+
ensure
|
313
|
+
ActiveRecord::Base.connection.
|
314
|
+
execute("ALTER TABLE #{table_name} ENABLE TRIGGER USER;")
|
315
|
+
end
|
316
|
+
|
307
317
|
def self.get_plv8_migration(file)
|
308
318
|
fnname = %r(/([^/]+)_v[0-9]+\.js\z).match(file)[1]
|
309
319
|
lines = File.readlines(file)
|
data/lib/marty/version.rb
CHANGED
data/make-lint.mk
CHANGED
data/package.json
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
{
|
2
2
|
"private": true,
|
3
3
|
"scripts": {
|
4
|
-
"
|
5
|
-
"
|
6
|
-
|
7
|
-
|
4
|
+
"eslint-check": "eslint 'app/**/*.{js,jsx}' ./.schemalintrc.js ./.eslintrc.js ./prettier.config.js",
|
5
|
+
"eslint-write": "eslint --fix 'app/**/*.{js,jsx}' ./.schemalintrc.js ./.eslintrc.js ./prettier.config.js",
|
6
|
+
"prettier-check": "prettier --check \"app/**/*.{js,jsx,css,scss}\" ./.schemalintrc.js ./.eslintrc.js ./prettier.config.js",
|
7
|
+
"prettier-write": "prettier --write \"app/**/*.{js,jsx,css,scss}\" ./.schemalintrc.js ./.eslintrc.js ./prettier.config.js",
|
8
|
+
"lint": "yarn run eslint-check && yarn run prettier-check",
|
9
|
+
"lint-fix": "yarn run eslint-write && yarn run prettier-write",
|
10
|
+
"lint-schema": "schemalint"
|
8
11
|
},
|
12
|
+
"dependencies": {},
|
9
13
|
"devDependencies": {
|
10
14
|
"babel-eslint": "^10.0.1",
|
11
15
|
"eslint": "^6.0.0",
|
12
16
|
"eslint-config-prettier": "^6.0.0",
|
13
17
|
"eslint-plugin-prettier": "^3.1.0",
|
14
|
-
"prettier": "^1.17.1"
|
18
|
+
"prettier": "^1.17.1",
|
19
|
+
"schemalint": "^0.2.2"
|
15
20
|
}
|
16
21
|
}
|
@@ -14,8 +14,12 @@ module Marty::Diagnostic
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def git
|
17
|
-
`cd #{Rails.root}; git describe --tags --always;`.
|
18
|
-
|
17
|
+
tag = `cd #{Rails.root}; git describe --tags --always;`.strip
|
18
|
+
git_datetime = `cd #{Rails.root}; git log -1 --format=%cd;`.strip
|
19
|
+
|
20
|
+
"#{tag} (#{git_datetime})"
|
21
|
+
rescue StandardError
|
22
|
+
'Failed accessing git'
|
19
23
|
end
|
20
24
|
|
21
25
|
describe 'GET #op' do
|
@@ -0,0 +1 @@
|
|
1
|
+
// = link_directory ../javascripts .js
|
@@ -0,0 +1,14 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
|
5
|
+
// vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require rails-ujs
|
14
|
+
//= require_tree .
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class AddPostingTypes < ActiveRecord::Migration[5.2]
|
2
|
+
include Marty::Migrations
|
3
|
+
|
4
|
+
disable_ddl_transaction!
|
5
|
+
|
6
|
+
def up
|
7
|
+
Marty::PostingType::VALUES += [
|
8
|
+
'OTHER',
|
9
|
+
'SNAPSHOT'
|
10
|
+
]
|
11
|
+
|
12
|
+
update_enum(Marty::PostingType, 'do_not_override_prefix')
|
13
|
+
end
|
14
|
+
end
|
@@ -14,11 +14,9 @@ select
|
|
14
14
|
main.created_dt,
|
15
15
|
main.obsoleted_dt,
|
16
16
|
main.name,
|
17
|
-
|
18
|
-
marty_posting_types1.id as post_type_id
|
17
|
+
main.posting_type
|
19
18
|
from marty_postings main
|
20
19
|
join marty_users u on main.user_id = u.id
|
21
|
-
left join marty_users ou on main.o_user_id = ou.id
|
22
|
-
left join marty_posting_types marty_posting_types1 on main.posting_type_id = marty_posting_types1.id;
|
20
|
+
left join marty_users ou on main.o_user_id = ou.id;
|
23
21
|
|
24
22
|
grant select on vw_marty_postings to public;
|
data/spec/models/posting_spec.rb
CHANGED
@@ -42,8 +42,6 @@ module Marty
|
|
42
42
|
|
43
43
|
context 'when valid parameters are supplied' do
|
44
44
|
before do
|
45
|
-
PostingType.create(name: 'SNAPSHOT')
|
46
|
-
PostingType.create(name: 'OTHER')
|
47
45
|
Posting.do_create('BASE', 0.days.from_now, 'base posting')
|
48
46
|
Posting.do_create('SNAPSHOT', 1.day.from_now, 'snapshot1 posting')
|
49
47
|
Posting.do_create('SNAPSHOT', 2.days.from_now, 'snapshot2 posting')
|
data/spec/models/promise_spec.rb
CHANGED
@@ -362,6 +362,39 @@ describe Marty::Promise, slow: true, retry: 3 do
|
|
362
362
|
expect(promise.result['error']).to eq 'Something went wrong'
|
363
363
|
expect(promise.result['backtrace']).to_not be_empty
|
364
364
|
end
|
365
|
+
|
366
|
+
describe 'without DJs' do
|
367
|
+
before do
|
368
|
+
stop_delayed_job
|
369
|
+
end
|
370
|
+
|
371
|
+
after do
|
372
|
+
start_delayed_job
|
373
|
+
end
|
374
|
+
|
375
|
+
it 'fails on exception' do
|
376
|
+
Marty::Promises::Ruby::Create.call(
|
377
|
+
module_name: 'Gemini::BudCategory',
|
378
|
+
method_name: 'create_from_promise_error',
|
379
|
+
method_args: [],
|
380
|
+
params: {
|
381
|
+
_user_id: user.id,
|
382
|
+
}
|
383
|
+
)
|
384
|
+
|
385
|
+
promise = Marty::Promise.where(promise_type: 'ruby').last
|
386
|
+
# Simulate exception outside of the job
|
387
|
+
expect(promise).to receive(:work_off_job).once.and_raise 'Test exception'
|
388
|
+
|
389
|
+
promise.wait_for_result(Marty::Promise::DEFAULT_PROMISE_TIMEOUT)
|
390
|
+
promise.reload
|
391
|
+
|
392
|
+
expect(promise.status).to be false
|
393
|
+
expect(promise.promise_type).to eq 'ruby'
|
394
|
+
expect(promise.result['error']).to eq 'Test exception'
|
395
|
+
expect(promise.result['backtrace']).to_not be_empty
|
396
|
+
end
|
397
|
+
end
|
365
398
|
end
|
366
399
|
|
367
400
|
describe 'priority' do
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Marty
|
4
|
+
describe BackgroundJob::UpdateSchedule do
|
5
|
+
before(:each) do
|
6
|
+
@schedule = Marty::BackgroundJob::Schedule.create!(
|
7
|
+
job_class: 'TestJob',
|
8
|
+
cron: '0 0 * * *',
|
9
|
+
state: 'on'
|
10
|
+
)
|
11
|
+
Marty::Jobs::Schedule.call
|
12
|
+
end
|
13
|
+
context '.call' do
|
14
|
+
let(:new_cron) { '1 0 * * *' }
|
15
|
+
it 'updates a Delayed::Job cron when cron is updated to on' do
|
16
|
+
@schedule.update(cron: new_cron)
|
17
|
+
described_class.call(
|
18
|
+
id: @schedule.id,
|
19
|
+
job_class: @schedule.job_class
|
20
|
+
)
|
21
|
+
expect(@schedule.reload.delayed_job.cron).to eq(new_cron)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'does not update Delayed::Job cron when cron is updated to off' do
|
25
|
+
@schedule.update(cron: new_cron, state: 'off')
|
26
|
+
described_class.call(
|
27
|
+
id: @schedule.id,
|
28
|
+
job_class: @schedule.job_class
|
29
|
+
)
|
30
|
+
expect(@schedule.reload.delayed_job).to be_nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
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:
|
4
|
+
version: 13.0.2
|
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: 2020-
|
17
|
+
date: 2020-04-14 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: actioncable
|
@@ -283,8 +283,10 @@ files:
|
|
283
283
|
- ".rspec"
|
284
284
|
- ".rubocop.yml"
|
285
285
|
- ".rubocop_todo.yml"
|
286
|
+
- ".schemalintrc.js"
|
286
287
|
- ".ssh-docker/.keep"
|
287
288
|
- ".travis.yml"
|
289
|
+
- CHANGELOG.md
|
288
290
|
- Dockerfile.dummy
|
289
291
|
- Gemfile
|
290
292
|
- INDEPENDENCE_ISSUES.md
|
@@ -521,6 +523,10 @@ files:
|
|
521
523
|
- db/migrate/524_add_timeout_to_promise_view.rb
|
522
524
|
- db/migrate/525_add_arguments_to_jobs_schedules.rb
|
523
525
|
- db/migrate/526_add_schedule_id_to_delayed_jobs.rb
|
526
|
+
- db/migrate/527_use_pg_enum_for_posting_types.rb
|
527
|
+
- db/migrate/600_replace_varchars_with_text.rb
|
528
|
+
- db/migrate/601_add_posting_type_index_to_postings.rb
|
529
|
+
- db/migrate/602_replace_text_with_varchars_without_size_limit.rb
|
524
530
|
- db/seeds.rb
|
525
531
|
- db/sql/lookup_grid_distinct_v1.sql
|
526
532
|
- db/sql/query_grid_dir_v1.sql
|
@@ -609,6 +615,7 @@ files:
|
|
609
615
|
- spec/dummy/README.rdoc
|
610
616
|
- spec/dummy/Rakefile
|
611
617
|
- spec/dummy/app/assets/config/manifest.js
|
618
|
+
- spec/dummy/app/assets/javascripts/application.js
|
612
619
|
- spec/dummy/app/components/gemini/cm_auth_app.rb
|
613
620
|
- spec/dummy/app/components/gemini/loan_program_view.rb
|
614
621
|
- spec/dummy/app/components/gemini/my_rule_view.rb
|
@@ -689,6 +696,7 @@ files:
|
|
689
696
|
- spec/dummy/db/migrate/20190702115241_add_simple_guards_options_to_rules.rb
|
690
697
|
- spec/dummy/db/migrate/20191101132729_add_activity_flag_to_simple.rb
|
691
698
|
- spec/dummy/db/migrate/20191206132729_add_default_true_column_to_simple.rb
|
699
|
+
- spec/dummy/db/migrate/20200402150405_add_posting_types.rb
|
692
700
|
- spec/dummy/db/seeds.rb
|
693
701
|
- spec/dummy/delorean/base_code.dl
|
694
702
|
- spec/dummy/delorean/blame_report.dl
|
@@ -1801,6 +1809,7 @@ files:
|
|
1801
1809
|
- spec/performance/caching_spec.rb
|
1802
1810
|
- spec/requests/routes_spec.rb
|
1803
1811
|
- spec/services/background_job/fetch_missing_in_schedule_cron_jobs_spec.rb
|
1812
|
+
- spec/services/background_job/update_schedule_spec.rb
|
1804
1813
|
- spec/services/jobs/schedule_spec.rb
|
1805
1814
|
- spec/services/notifications/create_spec.rb
|
1806
1815
|
- spec/spec_helper.rb
|