marty 2.5.2 → 2.5.4
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/.gitignore +4 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +11 -589
- data/Gemfile +9 -9
- data/Gemfile.lock +1 -1
- data/Rakefile +1 -3
- data/app/components/marty/api_auth_view.rb +3 -3
- data/app/components/marty/api_config_view.rb +8 -8
- data/app/components/marty/api_log_view.rb +16 -20
- data/app/components/marty/auth_app.rb +6 -6
- data/app/components/marty/base_rule_view.rb +27 -19
- data/app/components/marty/config_view.rb +12 -9
- data/app/components/marty/data_grid_view.rb +26 -26
- data/app/components/marty/delorean_rule_view.rb +0 -1
- data/app/components/marty/event_view.rb +27 -27
- data/app/components/marty/extras/layout.rb +26 -26
- data/app/components/marty/extras/misc.rb +2 -2
- data/app/components/marty/grid.rb +13 -13
- data/app/components/marty/grid_append_only.rb +0 -1
- data/app/components/marty/import_type_view.rb +13 -13
- data/app/components/marty/import_view.rb +17 -16
- data/app/components/marty/log_view.rb +16 -14
- data/app/components/marty/main_auth_app.rb +59 -59
- data/app/components/marty/main_auth_app/client/main_auth_app.js +3 -3
- data/app/components/marty/mcfly_grid_panel.rb +10 -10
- data/app/components/marty/new_posting_form.rb +11 -11
- data/app/components/marty/new_posting_window.rb +0 -1
- data/app/components/marty/posting_grid.rb +12 -13
- data/app/components/marty/promise_view.rb +6 -6
- data/app/components/marty/report_form.rb +50 -53
- data/app/components/marty/report_select.rb +27 -27
- data/app/components/marty/reporting.rb +4 -4
- data/app/components/marty/script_form.rb +40 -42
- data/app/components/marty/script_grid.rb +24 -24
- data/app/components/marty/script_tester.rb +40 -42
- data/app/components/marty/scripting.rb +25 -27
- data/app/components/marty/simple_app.rb +24 -9
- data/app/components/marty/tag_grid.rb +12 -13
- data/app/components/marty/user_view.rb +35 -35
- data/app/controllers/marty/application_controller.rb +3 -4
- data/app/controllers/marty/components_controller.rb +1 -1
- data/app/controllers/marty/delayed_job_controller.rb +1 -0
- data/app/controllers/marty/diagnostic/controller.rb +4 -6
- data/app/controllers/marty/job_controller.rb +6 -6
- data/app/controllers/marty/report_controller.rb +11 -11
- data/app/controllers/marty/rpc_controller.rb +15 -16
- data/app/helpers/marty/script_set.rb +4 -4
- data/app/models/marty/api_auth.rb +4 -5
- data/app/models/marty/api_config.rb +1 -1
- data/app/models/marty/base.rb +9 -8
- data/app/models/marty/base_rule.rb +18 -13
- data/app/models/marty/config.rb +4 -5
- data/app/models/marty/data_grid.rb +157 -181
- data/app/models/marty/delorean_rule.rb +63 -62
- data/app/models/marty/enum.rb +1 -1
- data/app/models/marty/event.rb +56 -59
- data/app/models/marty/helper.rb +38 -6
- data/app/models/marty/import_type.rb +6 -6
- data/app/models/marty/log.rb +3 -2
- data/app/models/marty/name_validator.rb +3 -2
- data/app/models/marty/pg_enum.rb +3 -4
- data/app/models/marty/posting.rb +20 -24
- data/app/models/marty/promise.rb +28 -30
- data/app/models/marty/script.rb +30 -28
- data/app/models/marty/tag.rb +8 -8
- data/app/models/marty/token.rb +2 -2
- data/app/models/marty/user.rb +24 -23
- data/app/models/marty/vw_promise.rb +10 -11
- data/config/routes.rb +2 -2
- data/delorean/blame_report.dl +268 -0
- data/{spec/dummy/delorean/fields.dl → delorean/marty_fields.dl} +8 -0
- data/delorean/table_report.dl +34 -0
- data/docker-compose.dummy.yml +2 -3
- data/lib/marty/aws/base.rb +8 -8
- data/lib/marty/aws/request.rb +4 -4
- data/lib/marty/cache_adapters/mcfly_ruby_cache.rb +1 -0
- data/lib/marty/content_handler.rb +25 -25
- data/lib/marty/data_change.rb +49 -71
- data/lib/marty/data_conversion.rb +20 -28
- data/lib/marty/data_exporter.rb +25 -28
- data/lib/marty/data_importer.rb +25 -27
- data/lib/marty/engine.rb +1 -2
- data/lib/marty/json_schema.rb +22 -24
- data/lib/marty/logger.rb +6 -9
- data/lib/marty/mcfly_model.rb +20 -24
- data/lib/marty/migrations.rb +37 -35
- data/lib/marty/monkey.rb +33 -33
- data/lib/marty/permissions.rb +18 -18
- data/lib/marty/promise_job.rb +17 -17
- data/lib/marty/promise_proxy.rb +6 -6
- data/lib/marty/relation.rb +6 -7
- data/lib/marty/rpc_call.rb +13 -12
- data/lib/marty/rule_script_set.rb +32 -28
- data/lib/marty/schema_helper.rb +37 -51
- data/lib/marty/util.rb +25 -24
- data/lib/marty/version.rb +1 -1
- data/lib/marty/xl.rb +121 -115
- data/make-dummy.mk +3 -0
- data/marty.gemspec +21 -21
- data/other/marty/api/base.rb +34 -35
- data/other/marty/diagnostic/aws/ec2_instance.rb +8 -8
- data/other/marty/diagnostic/base.rb +13 -14
- data/other/marty/diagnostic/collection.rb +2 -1
- data/other/marty/diagnostic/connections.rb +8 -6
- data/other/marty/diagnostic/database.rb +1 -0
- data/other/marty/diagnostic/delayed_job_version.rb +7 -9
- data/other/marty/diagnostic/delayed_job_worker_total_count.rb +1 -1
- data/other/marty/diagnostic/delayed_job_workers.rb +1 -1
- data/other/marty/diagnostic/environment_variables.rb +17 -15
- data/other/marty/diagnostic/fatal.rb +1 -1
- data/other/marty/diagnostic/node.rb +5 -9
- data/other/marty/diagnostic/nodes.rb +7 -5
- data/other/marty/diagnostic/packer.rb +7 -7
- data/other/marty/diagnostic/reporter.rb +24 -27
- data/other/marty/diagnostic/version.rb +3 -5
- data/script/rails +2 -1
- data/spec/controllers/application_controller_spec.rb +6 -6
- data/spec/controllers/delayed_job_controller_spec.rb +4 -4
- data/spec/controllers/diagnostic/controller_spec.rb +59 -60
- data/spec/controllers/job_controller_spec.rb +68 -69
- data/spec/controllers/rpc_controller_spec.rb +353 -359
- data/spec/controllers/rpc_import_spec.rb +15 -16
- data/spec/dummy/delorean/blame_report.dl +110 -15
- data/spec/dummy/delorean/data_report.dl +4 -4
- data/spec/dummy/delorean/marty_fields.dl +63 -0
- data/spec/dummy/delorean/table_report.dl +34 -0
- data/spec/features/auth_app_spec.rb +1 -2
- data/spec/features/data_import_spec.rb +2 -3
- data/spec/features/enum_spec.rb +42 -46
- data/spec/features/jobs_dashboard_spec.rb +14 -8
- data/spec/features/log_view_spec.rb +40 -43
- data/spec/features/reporting_spec.rb +15 -15
- data/spec/features/rule_spec.rb +195 -190
- data/spec/features/scripting_spec.rb +17 -20
- data/spec/features/scripting_test_spec.rb +32 -33
- data/spec/features/user_view_spec.rb +15 -17
- data/spec/job_helper.rb +11 -11
- data/spec/lib/data_blame_spec.rb +82 -0
- data/spec/lib/data_exporter_spec.rb +31 -32
- data/spec/lib/data_importer_spec.rb +382 -395
- data/spec/lib/delorean_query_spec.rb +117 -119
- data/spec/lib/json_schema_spec.rb +382 -392
- data/spec/lib/logger_spec.rb +23 -24
- data/spec/lib/mcfly_model_spec.rb +112 -109
- data/spec/lib/migrations_spec.rb +10 -10
- data/spec/lib/struct_compare_spec.rb +6 -6
- data/spec/lib/table_report_spec.rb +90 -0
- data/spec/lib/xl_spec.rb +63 -65
- data/spec/lib/xl_styles_spec.rb +16 -19
- data/spec/models/api_auth_spec.rb +30 -30
- data/spec/models/config_spec.rb +32 -32
- data/spec/models/data_grid_spec.rb +642 -655
- data/spec/models/event_spec.rb +96 -88
- data/spec/models/import_type_spec.rb +20 -20
- data/spec/models/posting_spec.rb +35 -35
- data/spec/models/promise_spec.rb +5 -5
- data/spec/models/rule_spec.rb +280 -269
- data/spec/models/script_spec.rb +27 -18
- data/spec/models/user_spec.rb +9 -9
- data/spec/other/diagnostic/base_spec.rb +20 -19
- data/spec/other/diagnostic/collection_spec.rb +6 -5
- data/spec/other/diagnostic/delayed_job_version_spec.rb +1 -1
- data/spec/other/diagnostic/delayed_job_workers_spec.rb +8 -8
- data/spec/other/diagnostic/reporter_spec.rb +31 -33
- data/spec/spec_helper.rb +5 -5
- data/spec/support/chromedriver.rb +3 -5
- data/spec/support/components/netzke_combobox.rb +1 -1
- data/spec/support/components/netzke_grid.rb +17 -17
- data/spec/support/custom_matchers.rb +2 -2
- data/spec/support/download_helper.rb +1 -1
- data/spec/support/helper.rb +1 -2
- data/spec/support/netzke.rb +31 -31
- data/spec/support/performance_helper.rb +8 -8
- data/spec/support/post_run_logger.rb +1 -2
- data/spec/support/setup.rb +1 -4
- data/spec/support/shared_connection.rb +2 -2
- data/spec/support/structure_compare.rb +21 -22
- data/spec/support/suite.rb +1 -2
- data/spec/support/users.rb +5 -6
- metadata +32 -26
|
@@ -3,43 +3,42 @@ require 'spec_helper'
|
|
|
3
3
|
describe Marty::RpcController do
|
|
4
4
|
before(:each) { @routes = Marty::Engine.routes }
|
|
5
5
|
|
|
6
|
-
before(:each)
|
|
6
|
+
before(:each) do
|
|
7
7
|
@tags = []
|
|
8
8
|
@tags << Marty::Script.load_script_bodies({
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
'A' => "A:\n a = 1\n",
|
|
10
|
+
'B' => "B:\n b = 0\n",
|
|
11
11
|
}, Date.today)
|
|
12
12
|
|
|
13
13
|
@tags << Marty::Script.load_script_bodies({
|
|
14
|
-
|
|
14
|
+
'B' => "import A\nB:\n b = A::A().a\n",
|
|
15
15
|
}, Date.today + 1.minute)
|
|
16
16
|
|
|
17
17
|
@tags << Marty::Script.load_script_bodies({
|
|
18
|
-
|
|
18
|
+
'A' => "A:\n a = 2\n",
|
|
19
19
|
}, Date.today + 2.minute)
|
|
20
20
|
|
|
21
|
-
|
|
22
21
|
# create an untagged version for DEV
|
|
23
|
-
s = Marty::Script.find_by(obsoleted_dt: 'infinity', name:
|
|
22
|
+
s = Marty::Script.find_by(obsoleted_dt: 'infinity', name: 'A')
|
|
24
23
|
s.body = "A:\n a = 3\n"
|
|
25
24
|
s.save!
|
|
26
|
-
|
|
25
|
+
end
|
|
27
26
|
|
|
28
27
|
let(:tags) { @tags }
|
|
29
28
|
|
|
30
|
-
it
|
|
29
|
+
it 'should properly import different versions of a script' do
|
|
31
30
|
# try the test 3 times for fun
|
|
32
|
-
(0..2).each
|
|
33
|
-
tags.each_with_index
|
|
31
|
+
(0..2).each do
|
|
32
|
+
tags.each_with_index do |t, i|
|
|
34
33
|
get 'evaluate', params: {
|
|
35
34
|
format: :json,
|
|
36
|
-
script:
|
|
37
|
-
node:
|
|
38
|
-
attrs:
|
|
35
|
+
script: 'B',
|
|
36
|
+
node: 'B',
|
|
37
|
+
attrs: 'b',
|
|
39
38
|
tag: t.name,
|
|
40
39
|
}
|
|
41
40
|
response.body.should == i.to_json
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
end
|
|
42
|
+
end
|
|
44
43
|
end
|
|
45
44
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import MartyFields
|
|
2
2
|
import Styles
|
|
3
3
|
|
|
4
|
-
PostingField2:
|
|
5
|
-
store = ["NOW"] +
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
PostingField2: MartyFields::PostingField2
|
|
5
|
+
store = [ ["NOW", "NOW"] ] + [ [ lp.name, lp.name + ' (' + lp.comment + ')']
|
|
6
|
+
for lp in Marty::Posting.get_latest_by_type(
|
|
7
|
+
20, ['BASE', 'INTRA', 'CLOSE'])]
|
|
8
8
|
|
|
9
9
|
StyleRow:
|
|
10
10
|
profile =?
|
|
@@ -59,8 +59,9 @@ ModelRows:
|
|
|
59
59
|
klass =?
|
|
60
60
|
t1 =?
|
|
61
61
|
t2 =?
|
|
62
|
+
ids =?
|
|
62
63
|
|
|
63
|
-
groups = Marty::DataChange.changes(t1, t2, klass)
|
|
64
|
+
groups = Marty::DataChange.changes(t1, t2, klass, ids)
|
|
64
65
|
|
|
65
66
|
headers = ["Group ID", "Created", "By", "Deleted", "By"] +
|
|
66
67
|
Marty::DataChange.class_headers(klass)
|
|
@@ -83,6 +84,10 @@ ModelRows:
|
|
|
83
84
|
count = row_groups.length
|
|
84
85
|
ws = if count > 0 then [klass, rows] else nil
|
|
85
86
|
|
|
87
|
+
OptionalIDsField: MartyFields::TextField
|
|
88
|
+
field_label = "Group IDs (optional)"
|
|
89
|
+
name = "restrict_to_ids"
|
|
90
|
+
|
|
86
91
|
DataBlameReport:
|
|
87
92
|
title = "Data Blame Report"
|
|
88
93
|
|
|
@@ -95,16 +100,18 @@ DataBlameReport:
|
|
|
95
100
|
t2 = posting2.created_dt
|
|
96
101
|
|
|
97
102
|
class_list =? false
|
|
103
|
+
restrict_to_ids =? nil
|
|
98
104
|
|
|
99
105
|
form = [
|
|
100
|
-
|
|
106
|
+
MartyFields::PostingField1,
|
|
101
107
|
PostingField2,
|
|
102
|
-
|
|
108
|
+
MartyFields::ClassListField,
|
|
109
|
+
OptionalIDsField
|
|
103
110
|
]
|
|
104
111
|
|
|
105
|
-
ts = if
|
|
112
|
+
ts = if Marty::Helper.infinity_dt(t1)
|
|
106
113
|
then [t2, t1]
|
|
107
|
-
else if
|
|
114
|
+
else if Marty::Helper.infinity_dt(t2)
|
|
108
115
|
then [t1, t2]
|
|
109
116
|
else [t1, t2].sort
|
|
110
117
|
|
|
@@ -112,8 +119,17 @@ DataBlameReport:
|
|
|
112
119
|
then Marty::DataChange.sanitize_classes(class_list)
|
|
113
120
|
else Marty::DataChange.class_list
|
|
114
121
|
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
ids = if restrict_to_ids
|
|
123
|
+
then [ idstr.to_i for idstr in restrict_to_ids.split(',') ]
|
|
124
|
+
else nil
|
|
125
|
+
|
|
126
|
+
ids_check = if ids && ids.length > 0 && sanitized.length > 1
|
|
127
|
+
then ERR("Can't specify Group IDs if more than one class selected")
|
|
128
|
+
else true
|
|
129
|
+
|
|
130
|
+
result = ids_check && [
|
|
131
|
+
ModelRows(t1 = ts[0], t2 = ts[1], klass = klass,
|
|
132
|
+
ids = ids).ws
|
|
117
133
|
for klass in sanitized
|
|
118
134
|
].compact
|
|
119
135
|
|
|
@@ -143,7 +159,7 @@ DataBlameReportSummary:
|
|
|
143
159
|
t2 = posting2.created_dt
|
|
144
160
|
|
|
145
161
|
form = [
|
|
146
|
-
|
|
162
|
+
MartyFields::PostingField1,
|
|
147
163
|
PostingField2,
|
|
148
164
|
]
|
|
149
165
|
|
|
@@ -157,9 +173,9 @@ DataBlameReportSummary:
|
|
|
157
173
|
Styles::Style.m_hdr_style0,
|
|
158
174
|
]
|
|
159
175
|
|
|
160
|
-
ts = if
|
|
176
|
+
ts = if Marty::Helper.infinity_dt(t1)
|
|
161
177
|
then [t2, t1]
|
|
162
|
-
else if
|
|
178
|
+
else if Marty::Helper.infinity_dt(t2)
|
|
163
179
|
then [t1, t2]
|
|
164
180
|
else [t1, t2].sort
|
|
165
181
|
|
|
@@ -171,3 +187,82 @@ DataBlameReportSummary:
|
|
|
171
187
|
header = [["row", r, {"style" : [Styles::Style.s_hdr]}] for r in postings]
|
|
172
188
|
result = [[title,[hrow] + rows, {"widths" : [30]}], ["Parameters", header]]
|
|
173
189
|
format = "xlsx"
|
|
190
|
+
|
|
191
|
+
DeadReferenceReport:
|
|
192
|
+
title = "Dead Reference Report"
|
|
193
|
+
|
|
194
|
+
class_list =? false
|
|
195
|
+
pt_name =?
|
|
196
|
+
posting =? Marty::Posting.lookup(pt_name)
|
|
197
|
+
|
|
198
|
+
sanitized = if class_list
|
|
199
|
+
then Marty::DataChange.sanitize_classes(class_list)
|
|
200
|
+
else Marty::DataChange.class_list
|
|
201
|
+
|
|
202
|
+
form = [
|
|
203
|
+
MartyFields::PostingField,
|
|
204
|
+
MartyFields::ClassListField,
|
|
205
|
+
]
|
|
206
|
+
|
|
207
|
+
result = [
|
|
208
|
+
[[[klass, attr, obj].flatten for obj in list]
|
|
209
|
+
for attr, list in Marty::DataChange.dead_refs(posting.created_dt,
|
|
210
|
+
klass)].flatten(1)
|
|
211
|
+
for klass in sanitized
|
|
212
|
+
].flatten(1)
|
|
213
|
+
|
|
214
|
+
format = "csv"
|
|
215
|
+
|
|
216
|
+
######################################################################
|
|
217
|
+
|
|
218
|
+
DataImportParam:
|
|
219
|
+
field_label = "Input Rows"
|
|
220
|
+
name = "data_import_field"
|
|
221
|
+
xtype = ":textareafield"
|
|
222
|
+
scrollable = true
|
|
223
|
+
field_style = {
|
|
224
|
+
"font_family": 'courier new',
|
|
225
|
+
"font_size": '12px',
|
|
226
|
+
}
|
|
227
|
+
height = 600
|
|
228
|
+
|
|
229
|
+
CommaSepField: MartyFields::CheckboxField
|
|
230
|
+
name = "comma_sep"
|
|
231
|
+
field_label = "Comma Separated"
|
|
232
|
+
|
|
233
|
+
DiffReport:
|
|
234
|
+
title = "Diff Report"
|
|
235
|
+
|
|
236
|
+
class_name =? false
|
|
237
|
+
data_import_field =?
|
|
238
|
+
comma_sep =? false
|
|
239
|
+
|
|
240
|
+
klass = Marty::Helper.constantize(class_name)
|
|
241
|
+
|
|
242
|
+
col_types = Marty::Helper.get_column_types(klass)
|
|
243
|
+
data = Marty::Helper.parse_csv_to_hash(
|
|
244
|
+
data_import_field, comma_sep, col_types)
|
|
245
|
+
|
|
246
|
+
diff = Marty::DataChange.diff(klass, data)
|
|
247
|
+
|
|
248
|
+
result = [{"title" : "different",
|
|
249
|
+
"format" : "csv",
|
|
250
|
+
"result" : diff["different"].flatten},
|
|
251
|
+
{"title" : "same",
|
|
252
|
+
"format" : "csv",
|
|
253
|
+
"result" : diff["same"]},
|
|
254
|
+
{"title" : "only_input",
|
|
255
|
+
"format" : "csv",
|
|
256
|
+
"result" : diff["only_input"]},
|
|
257
|
+
{"title" : "only_source",
|
|
258
|
+
"format" : "csv",
|
|
259
|
+
"result" : diff["only_source"]},
|
|
260
|
+
]
|
|
261
|
+
|
|
262
|
+
form = [
|
|
263
|
+
MartyFields::ClassField,
|
|
264
|
+
DataImportParam,
|
|
265
|
+
CommaSepField,
|
|
266
|
+
]
|
|
267
|
+
|
|
268
|
+
format = "zip"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import MartyFields
|
|
2
2
|
import Styles
|
|
3
3
|
|
|
4
4
|
######################################################################
|
|
@@ -23,8 +23,8 @@ TableReport:
|
|
|
23
23
|
row_count = result_raw.length
|
|
24
24
|
result = Gemini::Helper.to_csv(result_raw)
|
|
25
25
|
form = [
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
MartyFields::PostingField,
|
|
27
|
+
MartyFields::ClassField,
|
|
28
28
|
]
|
|
29
29
|
format = "csv"
|
|
30
30
|
|
|
@@ -61,7 +61,7 @@ EnumReport:
|
|
|
61
61
|
|
|
62
62
|
#####################################################################
|
|
63
63
|
|
|
64
|
-
DataImportParam:
|
|
64
|
+
DataImportParam: MartyFields::CsvField
|
|
65
65
|
field_label = "Import Text"
|
|
66
66
|
name = "data_import_field"
|
|
67
67
|
height = 600
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
PostingField:
|
|
2
|
+
field_label = "Posting"
|
|
3
|
+
xtype = ":combo"
|
|
4
|
+
name = "pt_name"
|
|
5
|
+
store = Marty::Posting.
|
|
6
|
+
where("created_dt <> 'infinity'").
|
|
7
|
+
order("created_dt DESC").limit(10).pluck("name")
|
|
8
|
+
value = store[0]
|
|
9
|
+
|
|
10
|
+
######################################################################
|
|
11
|
+
|
|
12
|
+
PostingField1: PostingField
|
|
13
|
+
field_label = "Posting 1"
|
|
14
|
+
name = "pt_name1"
|
|
15
|
+
|
|
16
|
+
PostingField2: PostingField
|
|
17
|
+
field_label = "Posting 2"
|
|
18
|
+
name = "pt_name2"
|
|
19
|
+
|
|
20
|
+
######################################################################
|
|
21
|
+
|
|
22
|
+
ClassListField:
|
|
23
|
+
field_label = "Tables"
|
|
24
|
+
xtype = ":multiselectcombo"
|
|
25
|
+
name = "class_list"
|
|
26
|
+
store = Marty::DataChange.class_list
|
|
27
|
+
|
|
28
|
+
ClassField: ClassListField
|
|
29
|
+
xtype = ":combo"
|
|
30
|
+
name = "class_name"
|
|
31
|
+
store = Marty::DataChange.class_list
|
|
32
|
+
|
|
33
|
+
######################################################################
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
CheckboxField:
|
|
37
|
+
xtype = ":checkboxfield"
|
|
38
|
+
checked = false
|
|
39
|
+
input_value = true
|
|
40
|
+
unchecked_value = false
|
|
41
|
+
|
|
42
|
+
######################################################################
|
|
43
|
+
|
|
44
|
+
JsonField:
|
|
45
|
+
xtype = ":textareafield"
|
|
46
|
+
name = "json_field"
|
|
47
|
+
field_label = "JSON"
|
|
48
|
+
auto_scroll = true
|
|
49
|
+
spellcheck = false
|
|
50
|
+
field_style = {
|
|
51
|
+
"font_family": 'courier new',
|
|
52
|
+
"font_size": '12px'
|
|
53
|
+
}
|
|
54
|
+
height = 400
|
|
55
|
+
|
|
56
|
+
CsvField: JsonField
|
|
57
|
+
field_label = "CSV"
|
|
58
|
+
name = "csv_field"
|
|
59
|
+
|
|
60
|
+
TextField:
|
|
61
|
+
xtype = ":textfield"
|
|
62
|
+
field_label = "Text"
|
|
63
|
+
name = "text_field"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import MartyFields
|
|
2
|
+
import Styles
|
|
3
|
+
|
|
4
|
+
ReadableField: MartyFields::CheckboxField
|
|
5
|
+
name = "readable"
|
|
6
|
+
field_label = "Disable Encoding"
|
|
7
|
+
|
|
8
|
+
TableReport:
|
|
9
|
+
readable =? nil
|
|
10
|
+
pt_name =? nil
|
|
11
|
+
posting = Marty::Posting.lookup(pt_name)
|
|
12
|
+
pt = posting.created_dt
|
|
13
|
+
module_name =? nil
|
|
14
|
+
class_name =? nil
|
|
15
|
+
title =? (class_name || "Table Report") + (
|
|
16
|
+
if pt_name then "_" + pt_name else "")
|
|
17
|
+
sort_field =? nil
|
|
18
|
+
exclude_attrs =? nil
|
|
19
|
+
|
|
20
|
+
result_raw = Marty::DataChange.do_export(
|
|
21
|
+
pt,
|
|
22
|
+
if module_name then module_name + '::' + class_name else class_name,
|
|
23
|
+
sort_field,
|
|
24
|
+
exclude_attrs || [],
|
|
25
|
+
)
|
|
26
|
+
row_count = result_raw.length
|
|
27
|
+
result = Marty::Helper.to_csv(result_raw, {'readable' : readable})
|
|
28
|
+
form = [
|
|
29
|
+
MartyFields::PostingField,
|
|
30
|
+
MartyFields::ClassField,
|
|
31
|
+
ReadableField,
|
|
32
|
+
]
|
|
33
|
+
format = "csv"
|
|
34
|
+
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
feature 'Posting workflows', js: true do
|
|
4
|
-
|
|
5
4
|
before(:all) do
|
|
6
5
|
@clean_file = "/tmp/clean_#{Process.pid}.psql"
|
|
7
6
|
save_clean_db(@clean_file)
|
|
@@ -56,7 +55,7 @@ feature 'Posting workflows', js: true do
|
|
|
56
55
|
end
|
|
57
56
|
|
|
58
57
|
and_by 'can see that we are time warped' do
|
|
59
|
-
expect(page).to have_content
|
|
58
|
+
expect(page).to have_content 'TIME WARPED'
|
|
60
59
|
end
|
|
61
60
|
end
|
|
62
61
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
feature 'under Applications menu, Reports using Data Import', js: true do
|
|
4
|
-
|
|
5
4
|
before(:all) do
|
|
6
5
|
marty_whodunnit
|
|
7
6
|
@clean_file = "/tmp/clean_#{Process.pid}.psql"
|
|
@@ -67,7 +66,7 @@ feature 'under Applications menu, Reports using Data Import', js: true do
|
|
|
67
66
|
and_by 'select Data Import node' do
|
|
68
67
|
wait_for_ajax
|
|
69
68
|
|
|
70
|
-
#hacky: assumes only 1 combobox without label
|
|
69
|
+
# hacky: assumes only 1 combobox without label
|
|
71
70
|
within(:gridpanel, 'report_select', match: :first, wait: 5) do
|
|
72
71
|
# hacky, hardcoding netzkecombobox dropdown arrow name
|
|
73
72
|
arrow = find(:input, 'nodename')['data-componentid'] + '-trigger-picker'
|
|
@@ -136,7 +135,7 @@ feature 'under Applications menu, Reports using Data Import', js: true do
|
|
|
136
135
|
and_by 'select Data Import node' do
|
|
137
136
|
wait_for_ajax
|
|
138
137
|
|
|
139
|
-
#hacky: assumes only 1 combobox without label
|
|
138
|
+
# hacky: assumes only 1 combobox without label
|
|
140
139
|
within(:gridpanel, 'report_select', match: :first) do
|
|
141
140
|
# hacky, hardcoding netzkecombobox dropdown arrow name
|
|
142
141
|
arrow = find(:input, 'nodename')['data-componentid'] + '-trigger-picker'
|
data/spec/features/enum_spec.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
feature 'test netzke + pg_enum compatibility', js: true do
|
|
4
|
-
|
|
5
4
|
before(:all) do
|
|
6
5
|
@clean_file = "/tmp/clean_#{Process.pid}.psql"
|
|
7
6
|
save_clean_db(@clean_file)
|
|
@@ -14,7 +13,6 @@ feature 'test netzke + pg_enum compatibility', js: true do
|
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
it 'shows netzke grid combobox works w pg_enums' do
|
|
17
|
-
|
|
18
16
|
lp_grid = netzke_find('loan_program_view')
|
|
19
17
|
@amort_combo = netzke_find('amortization_type__name', 'combobox')
|
|
20
18
|
@mortgage_combo = netzke_find('mortgage_type__name', 'combobox')
|
|
@@ -42,14 +40,13 @@ feature 'test netzke + pg_enum compatibility', js: true do
|
|
|
42
40
|
press('Loan Programs')
|
|
43
41
|
end
|
|
44
42
|
|
|
45
|
-
|
|
46
43
|
and_by 'bring up new window' do
|
|
47
44
|
press('Add')
|
|
48
45
|
end
|
|
49
46
|
|
|
50
47
|
and_by 'fill form minus enum value' do
|
|
51
48
|
within(:gridpanel, 'add_window', match: :first) do
|
|
52
|
-
fill_in(
|
|
49
|
+
fill_in('Name', with: 'a_l_p')
|
|
53
50
|
|
|
54
51
|
@amort_combo.click
|
|
55
52
|
@amort_combo.select_values('Fixed')
|
|
@@ -73,20 +70,20 @@ feature 'test netzke + pg_enum compatibility', js: true do
|
|
|
73
70
|
|
|
74
71
|
and_by 'fill form w enum value & duplicated name (error), then fix' do
|
|
75
72
|
within(:gridpanel, 'add_window', match: :first) do
|
|
76
|
-
fill_in(
|
|
77
|
-
setup_enum_form(
|
|
73
|
+
fill_in('Name', with: 'a_l_p')
|
|
74
|
+
setup_enum_form('CA')
|
|
78
75
|
press('OK')
|
|
79
76
|
|
|
80
77
|
expect(find(:msg)).to have_content 'Name - record must be unique'
|
|
81
78
|
|
|
82
|
-
fill_in(
|
|
79
|
+
fill_in('Name', with: 'a_l_p_2')
|
|
83
80
|
press('OK')
|
|
84
81
|
end
|
|
85
82
|
|
|
86
83
|
wait_for_ajax
|
|
87
84
|
aggregate_failures do
|
|
88
85
|
expect(lp_grid.row_count).to eq(2)
|
|
89
|
-
expect(lp_grid.get_row_vals(2)).to netzke_include(
|
|
86
|
+
expect(lp_grid.get_row_vals(2)).to netzke_include(enum_state: 'CA')
|
|
90
87
|
end
|
|
91
88
|
end
|
|
92
89
|
|
|
@@ -104,15 +101,15 @@ feature 'test netzke + pg_enum compatibility', js: true do
|
|
|
104
101
|
|
|
105
102
|
and_by 'fill form w --- for enum value' do
|
|
106
103
|
within(:gridpanel, 'add_window', match: :first) do
|
|
107
|
-
fill_in(
|
|
108
|
-
setup_enum_form(
|
|
104
|
+
fill_in('Name', with: 'a_l_p')
|
|
105
|
+
setup_enum_form('---')
|
|
109
106
|
press('OK')
|
|
110
107
|
end
|
|
111
108
|
|
|
112
109
|
wait_for_ajax
|
|
113
110
|
aggregate_failures do
|
|
114
111
|
expect(lp_grid.row_count).to eq(2)
|
|
115
|
-
expect(lp_grid.get_row_vals(1)).to netzke_include(
|
|
112
|
+
expect(lp_grid.get_row_vals(1)).to netzke_include(enum_state: nil)
|
|
116
113
|
end
|
|
117
114
|
end
|
|
118
115
|
|
|
@@ -128,63 +125,62 @@ feature 'test netzke + pg_enum compatibility', js: true do
|
|
|
128
125
|
expect(lp_grid.row_count).to eq(0)
|
|
129
126
|
end
|
|
130
127
|
|
|
131
|
-
and_by
|
|
132
|
-
press(
|
|
128
|
+
and_by 'bring up new window' do
|
|
129
|
+
press('Add')
|
|
133
130
|
end
|
|
134
131
|
|
|
135
|
-
and_by
|
|
136
|
-
within(:gridpanel,
|
|
137
|
-
fill_in(
|
|
138
|
-
setup_enum_form(
|
|
139
|
-
press(
|
|
132
|
+
and_by 'fill form with state_enum DC' do
|
|
133
|
+
within(:gridpanel, 'add_window', match: :first) do
|
|
134
|
+
fill_in('Name', with: 'DC Row')
|
|
135
|
+
setup_enum_form('DC')
|
|
136
|
+
press('OK')
|
|
140
137
|
end
|
|
141
138
|
end
|
|
142
139
|
|
|
143
|
-
and_by
|
|
144
|
-
press(
|
|
140
|
+
and_by 'bring up new window' do
|
|
141
|
+
press('Add')
|
|
145
142
|
end
|
|
146
143
|
|
|
147
|
-
and_by
|
|
148
|
-
within(:gridpanel,
|
|
149
|
-
fill_in(
|
|
150
|
-
setup_enum_form(
|
|
151
|
-
press(
|
|
144
|
+
and_by 'fill form with state_enum AS' do
|
|
145
|
+
within(:gridpanel, 'add_window', match: :first) do
|
|
146
|
+
fill_in('Name', with: 'AS Row')
|
|
147
|
+
setup_enum_form('AS')
|
|
148
|
+
press('OK')
|
|
152
149
|
end
|
|
153
150
|
end
|
|
154
151
|
|
|
155
|
-
and_by
|
|
156
|
-
press(
|
|
152
|
+
and_by 'bring up new window' do
|
|
153
|
+
press('Add')
|
|
157
154
|
end
|
|
158
155
|
|
|
159
|
-
and_by
|
|
160
|
-
within(:gridpanel,
|
|
161
|
-
fill_in(
|
|
162
|
-
setup_enum_form(
|
|
163
|
-
press(
|
|
156
|
+
and_by 'fill form with state_enum WA' do
|
|
157
|
+
within(:gridpanel, 'add_window', match: :first) do
|
|
158
|
+
fill_in('Name', with: 'WA Row')
|
|
159
|
+
setup_enum_form('WA')
|
|
160
|
+
press('OK')
|
|
164
161
|
end
|
|
165
162
|
end
|
|
166
163
|
|
|
167
|
-
and_by
|
|
168
|
-
press(
|
|
164
|
+
and_by 'bring up new window' do
|
|
165
|
+
press('Add')
|
|
169
166
|
end
|
|
170
167
|
|
|
171
|
-
and_by
|
|
172
|
-
within(:gridpanel,
|
|
173
|
-
fill_in(
|
|
174
|
-
setup_enum_form(
|
|
175
|
-
press(
|
|
168
|
+
and_by 'fill form with state_enum AZ' do
|
|
169
|
+
within(:gridpanel, 'add_window', match: :first) do
|
|
170
|
+
fill_in('Name', with: 'AZ Row')
|
|
171
|
+
setup_enum_form('AZ')
|
|
172
|
+
press('OK')
|
|
176
173
|
end
|
|
177
174
|
end
|
|
178
175
|
|
|
179
|
-
and_by
|
|
180
|
-
press(
|
|
181
|
-
expect(lp_grid.get_col_vals(:enum_state)).to eq([
|
|
176
|
+
and_by 'filter form by state_enum ASCENDING' do
|
|
177
|
+
press('Enum state')
|
|
178
|
+
expect(lp_grid.get_col_vals(:enum_state)).to eq(['AS', 'AZ', 'DC', 'WA'])
|
|
182
179
|
end
|
|
183
180
|
|
|
184
|
-
and_by
|
|
185
|
-
press(
|
|
186
|
-
expect(lp_grid.get_col_vals(:enum_state)).to eq([
|
|
181
|
+
and_by 'filter form by state_enum DESCENDING' do
|
|
182
|
+
press('Enum state')
|
|
183
|
+
expect(lp_grid.get_col_vals(:enum_state)).to eq(['WA', 'DC', 'AZ', 'AS'])
|
|
187
184
|
end
|
|
188
|
-
|
|
189
185
|
end
|
|
190
186
|
end
|