marty 0.5.15 → 0.5.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +27 -0
- data/.rspec +3 -0
- data/.travis.yml +23 -0
- data/Gemfile +23 -0
- data/INDEPENDENCE_ISSUES.md +23 -0
- data/app/assets/images/marty/.gitkeep +0 -0
- data/app/components/marty/report_form.rb +9 -4
- data/gemini_deprecations.md +6 -0
- data/lib/marty/data_change.rb +99 -0
- data/lib/marty/data_conversion.rb +11 -3
- data/lib/marty/data_exporter.rb +9 -0
- data/lib/marty/version.rb +1 -1
- data/marty.gemspec +35 -0
- data/script/rails +8 -0
- data/spec/controllers/application_controller_spec.rb +52 -0
- data/spec/controllers/job_controller_spec.rb +226 -0
- data/spec/controllers/rpc_controller_spec.rb +379 -0
- data/spec/controllers/rpc_import_spec.rb +45 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/components_controller.rb +7 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/models/gemini/amortization_type.rb +5 -0
- data/spec/dummy/app/models/gemini/bud_category.rb +7 -0
- data/spec/dummy/app/models/gemini/entity.rb +2 -0
- data/spec/dummy/app/models/gemini/extras/data_import.rb +5 -0
- data/spec/dummy/app/models/gemini/extras/settlement_import.rb +28 -0
- data/spec/dummy/app/models/gemini/fannie_bup.rb +29 -0
- data/spec/dummy/app/models/gemini/grouping.rb +8 -0
- data/spec/dummy/app/models/gemini/grouping_head_version.rb +14 -0
- data/spec/dummy/app/models/gemini/head.rb +7 -0
- data/spec/dummy/app/models/gemini/head_version.rb +14 -0
- data/spec/dummy/app/models/gemini/helper.rb +44 -0
- data/spec/dummy/app/models/gemini/loan_program.rb +11 -0
- data/spec/dummy/app/models/gemini/mortgage_type.rb +5 -0
- data/spec/dummy/app/models/gemini/simple.rb +6 -0
- data/spec/dummy/app/models/gemini/streamline_type.rb +16 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +82 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml.example +10 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +35 -0
- data/spec/dummy/config/environments/production.rb +69 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/delayed_job.rb +5 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +12 -0
- data/spec/dummy/db/migrate/20140801000000_create_groupings.rb +11 -0
- data/spec/dummy/db/migrate/20150406171536_create_categories.rb +27 -0
- data/spec/dummy/db/migrate/20150408200916_create_loan_programs.rb +26 -0
- data/spec/dummy/db/migrate/20150408201429_create_types.rb +21 -0
- data/spec/dummy/db/migrate/20150420000001_create_heads.rb +14 -0
- data/spec/dummy/db/migrate/20150420000002_create_head_versions.rb +15 -0
- data/spec/dummy/db/migrate/20150420000003_create_grouping_head_versions.rb +12 -0
- data/spec/dummy/db/migrate/20151023000001_create_simple.rb +12 -0
- data/spec/dummy/db/seeds.rb +8 -0
- data/spec/dummy/delorean/blame_report.dl +171 -0
- data/spec/dummy/delorean/data_report.dl +105 -0
- data/spec/dummy/delorean/fields.dl +52 -0
- data/spec/dummy/delorean/styles.dl +134 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/lib/class_list.rb +3 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/icons/READ.txt +3 -0
- data/spec/dummy/public/icons/application_cascade.png +0 -0
- data/spec/dummy/public/icons/application_delete.png +0 -0
- data/spec/dummy/public/icons/application_put.png +0 -0
- data/spec/dummy/public/icons/application_view_detail.png +0 -0
- data/spec/dummy/public/icons/arrow_in.png +0 -0
- data/spec/dummy/public/icons/arrow_refresh.png +0 -0
- data/spec/dummy/public/icons/database_save.png +0 -0
- data/spec/dummy/public/icons/door_in.png +0 -0
- data/spec/dummy/public/icons/door_out.png +0 -0
- data/spec/dummy/public/icons/group.png +0 -0
- data/spec/dummy/public/icons/page_lightning.png +0 -0
- data/spec/dummy/public/icons/printer.png +0 -0
- data/spec/dummy/public/icons/report_disk.png +0 -0
- data/spec/dummy/public/icons/report_go.png +0 -0
- data/spec/dummy/public/icons/report_magnify.png +0 -0
- data/spec/dummy/public/icons/script.png +0 -0
- data/spec/dummy/public/icons/script_add.png +0 -0
- data/spec/dummy/public/icons/script_go.png +0 -0
- data/spec/dummy/public/icons/script_key.png +0 -0
- data/spec/dummy/public/icons/table_go.png +0 -0
- data/spec/dummy/public/icons/time.png +0 -0
- data/spec/dummy/public/icons/time_add.png +0 -0
- data/spec/dummy/public/icons/time_go.png +0 -0
- data/spec/dummy/public/icons/timeline_marker.png +0 -0
- data/spec/dummy/public/icons/user_add.png +0 -0
- data/spec/dummy/public/icons/user_delete.png +0 -0
- data/spec/dummy/public/icons/user_edit.png +0 -0
- data/spec/dummy/public/icons/wrench.png +0 -0
- data/spec/dummy/script/delayed_job +6 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/features/javascripts/job_dashboard_live_search.js.coffee +8 -0
- data/spec/features/javascripts/login.js.coffee +8 -0
- data/spec/features/jobs_dashboard_netzke_spec.rb +24 -0
- data/spec/features/jobs_dashboard_spec.rb +49 -0
- data/spec/fixtures/scripts/load_tests/script1.dl +2 -0
- data/spec/fixtures/scripts/load_tests/script2.dl +2 -0
- data/spec/job_helper.rb +102 -0
- data/spec/lib/data_exporter_spec.rb +71 -0
- data/spec/lib/data_importer_spec.rb +461 -0
- data/spec/lib/xl_spec.rb +198 -0
- data/spec/lib/xl_styles_spec.rb +115 -0
- data/spec/models/api_auth_spec.rb +187 -0
- data/spec/models/posting_spec.rb +107 -0
- data/spec/models/promise_spec.rb +65 -0
- data/spec/models/script_spec.rb +187 -0
- data/spec/models/user_spec.rb +68 -0
- data/spec/requests/routes_spec.rb +12 -0
- data/spec/spec_helper.rb +61 -0
- data/spec/support/clean_db_helpers.rb +18 -0
- data/spec/support/delayed_job_helpers.rb +12 -0
- data/spec/support/user_helpers.rb +12 -0
- metadata +139 -89
- data/app/components/marty/auth_app.rb~ +0 -51
- data/app/components/marty/auth_app/javascripts/auth_app.js~ +0 -91
- data/app/components/marty/cm_form_panel.rb~ +0 -5
- data/app/components/marty/cm_grid_panel.rb~ +0 -35
- data/app/components/marty/data_import_view.rb~ +0 -142
- data/app/components/marty/extras/layout.rb~ +0 -46
- data/app/components/marty/live_search_grid_panel.rb~ +0 -49
- data/app/components/marty/main_auth_app.rb~ +0 -238
- data/app/components/marty/mcfly_grid_panel.rb~ +0 -80
- data/app/components/marty/new_posting_form.rb~ +0 -46
- data/app/components/marty/new_posting_window.rb~ +0 -21
- data/app/components/marty/pivot_grid.rb +0 -52
- data/app/components/marty/pivot_grid/endpoints.rb +0 -45
- data/app/components/marty/pivot_grid/javascripts/extensions.js +0 -150
- data/app/components/marty/pivot_grid/javascripts/pivot_grid.js +0 -86
- data/app/components/marty/pivot_grid/services.rb +0 -44
- data/app/components/marty/posting_grid.rb~ +0 -140
- data/app/components/marty/promise_view.rb~ +0 -157
- data/app/components/marty/promise_view/stylesheets/promise_view.css~ +0 -15
- data/app/components/marty/report_form.rb~ +0 -217
- data/app/components/marty/report_select.rb~ +0 -133
- data/app/components/marty/reporting.rb~ +0 -39
- data/app/components/marty/script_detail.rb~ +0 -430
- data/app/components/marty/script_form.rb~ +0 -233
- data/app/components/marty/script_form/javascripts/Ext.ux.form.field.CodeMirror.js~ +0 -909
- data/app/components/marty/script_grid.rb~ +0 -99
- data/app/components/marty/script_tester.rb~ +0 -213
- data/app/components/marty/scripting.rb~ +0 -124
- data/app/components/marty/select_report.rb~ +0 -143
- data/app/components/marty/simple_app.rb~ +0 -101
- data/app/components/marty/tag_grid.rb~ +0 -89
- data/app/components/marty/tree_panel.rb~ +0 -256
- data/app/components/marty/tree_panel/javascripts/tree_panel.js~ +0 -317
- data/app/components/marty/user_pivot.rb +0 -128
- data/app/components/marty/user_view.rb~ +0 -188
- data/app/controllers/marty/application_controller.rb~ +0 -133
- data/app/controllers/marty/components_controller.rb~ +0 -37
- data/app/controllers/marty/job_controller.rb~ +0 -28
- data/app/controllers/marty/rpc_controller.rb~ +0 -61
- data/app/helpers/marty/script_set.rb~ +0 -59
- data/app/models/marty/api_auth.rb~ +0 -48
- data/app/models/marty/data_change.rb~ +0 -141
- data/app/models/marty/enum.rb~ +0 -16
- data/app/models/marty/import_type.rb~ +0 -48
- data/app/models/marty/poop.rb~ +0 -169
- data/app/models/marty/posting.rb~ +0 -86
- data/app/models/marty/posting_type.rb~ +0 -21
- data/app/models/marty/promise.rb~ +0 -196
- data/app/models/marty/role.rb~ +0 -10
- data/app/models/marty/script.rb~ +0 -62
- data/app/models/marty/tag.rb~ +0 -91
- data/app/models/marty/user.rb~ +0 -148
- data/app/models/marty/user_role.rb~ +0 -13
- data/app/views/layouts/marty/application.html.erb~ +0 -11
- data/config/routes.rb~ +0 -10
- data/db/migrate/019_create_marty_postings.rb~ +0 -19
- data/db/migrate/095_create_marty_tags.rb~ +0 -19
- data/lib/marty.rb~ +0 -13
- data/lib/marty/content_handler.rb~ +0 -93
- data/lib/marty/data_exporter.rb~ +0 -137
- data/lib/marty/data_importer.rb~ +0 -114
- data/lib/marty/data_row_processor.rb~ +0 -206
- data/lib/marty/drop_folder_hook.rb~ +0 -17
- data/lib/marty/folder_hook.rb~ +0 -9
- data/lib/marty/lazy_column_loader.rb~ +0 -47
- data/lib/marty/mcfly_query.rb~ +0 -188
- data/lib/marty/migrations.rb~ +0 -65
- data/lib/marty/monkey.rb~ +0 -160
- data/lib/marty/permissions.rb~ +0 -69
- data/lib/marty/promise.rb~ +0 -41
- data/lib/marty/promise_job.rb~ +0 -121
- data/lib/marty/promise_proxy.rb~ +0 -69
- data/lib/marty/util.rb~ +0 -80
- data/lib/marty/version.rb~ +0 -3
- data/lib/marty/xl.rb~ +0 -526
- data/lib/pyxll/README.txt~ +0 -16
- data/lib/pyxll/gemini.py~ +0 -110
- data/lib/pyxll/pyxll.cfg~ +0 -12
@@ -1,133 +0,0 @@
|
|
1
|
-
class Marty::SelectReport < Marty::CmFormPanel
|
2
|
-
include Marty::Extras::Layout
|
3
|
-
|
4
|
-
component :tag_grid do |c|
|
5
|
-
c.klass = Marty::TagGrid
|
6
|
-
c.height = 200
|
7
|
-
c.load_inline_data = false
|
8
|
-
c.title = I18n.t("script.selection_history")
|
9
|
-
c.columns = [:name, :created_dt, :comment]
|
10
|
-
c.bbar = []
|
11
|
-
end
|
12
|
-
|
13
|
-
component :script_grid do |c|
|
14
|
-
c.height = 300
|
15
|
-
c.klass = Marty::ScriptGrid
|
16
|
-
c.title = I18n.t("script.selection_list")
|
17
|
-
c.bbar = []
|
18
|
-
c.columns = [:name, :tag]
|
19
|
-
c.scope = ["name like '%Report'"]
|
20
|
-
end
|
21
|
-
|
22
|
-
######################################################################
|
23
|
-
|
24
|
-
def configure(c)
|
25
|
-
super
|
26
|
-
|
27
|
-
c.items =
|
28
|
-
[
|
29
|
-
:tag_grid,
|
30
|
-
:script_grid,
|
31
|
-
fieldset(I18n.t("reporting.select_report"),
|
32
|
-
{
|
33
|
-
xtype: :netzkeremotecombo,
|
34
|
-
name: "nodename",
|
35
|
-
attr_type: :string,
|
36
|
-
virtual: true,
|
37
|
-
hide_label: true,
|
38
|
-
width: 200,
|
39
|
-
},
|
40
|
-
{},
|
41
|
-
),
|
42
|
-
]
|
43
|
-
c.bbar = []
|
44
|
-
end
|
45
|
-
|
46
|
-
js_configure do |c|
|
47
|
-
c.header = false
|
48
|
-
|
49
|
-
c.init_component = <<-JS
|
50
|
-
function() {
|
51
|
-
var me = this;
|
52
|
-
me.callParent();
|
53
|
-
|
54
|
-
var tag_grid = me.netzkeGetComponent('tag_grid').getView();
|
55
|
-
var script_grid = me.netzkeGetComponent('script_grid').getView();
|
56
|
-
var form = me.getForm();
|
57
|
-
var nodename = form.findField('nodename');
|
58
|
-
|
59
|
-
tag_grid.on('itemclick', function(tag_grid, record) {
|
60
|
-
var tag_id = record.get('id');
|
61
|
-
me.selectTag({tag_id: tag_id});
|
62
|
-
script_grid.getStore().load();
|
63
|
-
}, me);
|
64
|
-
|
65
|
-
script_grid.on('itemclick', function(script_grid, record) {
|
66
|
-
var script_name = record.get('name');
|
67
|
-
me.selectScript({script_name: script_name});
|
68
|
-
nodename.reset();
|
69
|
-
nodename.store.load({params: {}});
|
70
|
-
}, me);
|
71
|
-
|
72
|
-
nodename.on('select', function(combo, record) {
|
73
|
-
var data = record[0] && record[0].data;
|
74
|
-
me.selectNode({node: data.value});
|
75
|
-
});
|
76
|
-
}
|
77
|
-
JS
|
78
|
-
|
79
|
-
c.parent_select_report = <<-JS
|
80
|
-
function() {
|
81
|
-
this.netzkeGetParentComponent().selectReport();
|
82
|
-
}
|
83
|
-
JS
|
84
|
-
end
|
85
|
-
|
86
|
-
# FIXME: should be in a library
|
87
|
-
REPORT_ATTR_SET = Set["title", "form", "result", "format"]
|
88
|
-
|
89
|
-
def node_list
|
90
|
-
sset = Marty::ScriptSet.new root_sess[:selected_tag_id]
|
91
|
-
engine = sset.get_engine(root_sess[:selected_script_name])
|
92
|
-
|
93
|
-
return [] unless engine
|
94
|
-
|
95
|
-
nodes = engine.enumerate_nodes.select { |n|
|
96
|
-
attrs = Set.new(engine.enumerate_attrs_by_node(n))
|
97
|
-
attrs.superset? REPORT_ATTR_SET
|
98
|
-
}
|
99
|
-
|
100
|
-
nodes.map { |node|
|
101
|
-
begin
|
102
|
-
title, format = engine.evaluate_attrs(node, ["title", "format"])
|
103
|
-
format ? [node, "#{title} (#{format})"] : nil
|
104
|
-
rescue
|
105
|
-
[node, node]
|
106
|
-
end
|
107
|
-
}.compact.sort{ |a,b| a[1] <=> b[1]}
|
108
|
-
end
|
109
|
-
|
110
|
-
endpoint :get_combobox_options do |params, this|
|
111
|
-
this.data = node_list if params["attr"] == "nodename"
|
112
|
-
end
|
113
|
-
|
114
|
-
######################################################################
|
115
|
-
|
116
|
-
endpoint :select_tag do |params, this|
|
117
|
-
root_sess[:selected_tag_id] = params[:tag_id]
|
118
|
-
root_sess[:selected_script_name] = nil
|
119
|
-
root_sess[:selected_node] = nil
|
120
|
-
end
|
121
|
-
|
122
|
-
endpoint :select_script do |params, this|
|
123
|
-
root_sess[:selected_script_name] = params[:script_name]
|
124
|
-
root_sess[:selected_node] = nil
|
125
|
-
end
|
126
|
-
|
127
|
-
endpoint :select_node do |params, this|
|
128
|
-
root_sess[:selected_node] = params[:node]
|
129
|
-
this.parent_select_report
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
SelectReport = Marty::SelectReport
|
@@ -1,39 +0,0 @@
|
|
1
|
-
class Marty::Reporting < Netzke::Base
|
2
|
-
def configure(c)
|
3
|
-
super
|
4
|
-
c.items = [
|
5
|
-
:select_report,
|
6
|
-
:report_form,
|
7
|
-
]
|
8
|
-
end
|
9
|
-
|
10
|
-
js_configure do |c|
|
11
|
-
c.header = false
|
12
|
-
c.layout = :border
|
13
|
-
c.defaults = {body_style: 'padding:0px'}
|
14
|
-
|
15
|
-
c.select_report = <<-JS
|
16
|
-
function() {
|
17
|
-
// this.netzkeGetComponent('report_form').netzkeLoad({});
|
18
|
-
// FIXME: NetzkeReload() doesn't work when performed on
|
19
|
-
// ReportForm. So, reload all of Reporting.
|
20
|
-
this.netzkeReload();
|
21
|
-
}
|
22
|
-
JS
|
23
|
-
end
|
24
|
-
|
25
|
-
component :report_form do |c|
|
26
|
-
c.klass = Marty::ReportForm
|
27
|
-
c.flex = 1
|
28
|
-
c.region = :center
|
29
|
-
end
|
30
|
-
|
31
|
-
component :select_report do |c|
|
32
|
-
c.klass = Marty::SelectReport
|
33
|
-
c.split = true
|
34
|
-
c.region = :west
|
35
|
-
c.width = 300
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
Reporting = Marty::Reporting
|
@@ -1,430 +0,0 @@
|
|
1
|
-
require 'delorean_lang'
|
2
|
-
require 'coderay'
|
3
|
-
|
4
|
-
class Marty::ScriptDetail < Marty::CmFormPanel
|
5
|
-
DASH = 0x2012.chr('utf-8')
|
6
|
-
|
7
|
-
css_configure do |c|
|
8
|
-
c.require :codemirror
|
9
|
-
c.require :delorean
|
10
|
-
end
|
11
|
-
|
12
|
-
js_configure do |c|
|
13
|
-
c.require :"Ext.ux.form.field.CodeMirror"
|
14
|
-
c.require :codemirror
|
15
|
-
c.require "#{File.dirname(__FILE__)}/script_detail/javascripts/mode/delorean/delorean.js"
|
16
|
-
|
17
|
-
c.set_action_modes = <<-JS
|
18
|
-
function(a) {
|
19
|
-
this.actions.apply.setDisabled(!a["save"]);
|
20
|
-
this.actions.checkin.setDisabled(!a["checkin"]);
|
21
|
-
this.actions.checkout.setDisabled(!a["checkout"]);
|
22
|
-
this.actions.discard.setDisabled(!a["discard"]);
|
23
|
-
// style input field text based on whether it is editable
|
24
|
-
this.getForm().findField('body').editor.setOption("readOnly", !a["save"]);
|
25
|
-
}
|
26
|
-
JS
|
27
|
-
|
28
|
-
c.get_script_id = <<-JS
|
29
|
-
function() {
|
30
|
-
return this.getForm().findField('id').getValue();
|
31
|
-
}
|
32
|
-
JS
|
33
|
-
|
34
|
-
c.get_script_body = <<-JS
|
35
|
-
function() {
|
36
|
-
return this.getForm().findField('body').getValue();
|
37
|
-
}
|
38
|
-
JS
|
39
|
-
|
40
|
-
# Sets an editor line class (unset any previous line class). For
|
41
|
-
# now, only one line is classed at a time.
|
42
|
-
c.set_line_error = <<-JS
|
43
|
-
function(line) {
|
44
|
-
line -= 1;
|
45
|
-
var editor = this.getForm().findField('body').editor;
|
46
|
-
if (editor.oldline) { editor.oldline.className = null; }
|
47
|
-
if (line > -1) {
|
48
|
-
editor.oldline = editor.setLineClass(line, "errorline");
|
49
|
-
}
|
50
|
-
editor.refresh();
|
51
|
-
}
|
52
|
-
JS
|
53
|
-
|
54
|
-
######################################################################
|
55
|
-
|
56
|
-
c.refresh_parent = <<-JS
|
57
|
-
function(script_id) {
|
58
|
-
this.netzkeGetParentComponent().scriptRefresh(script_id);
|
59
|
-
}
|
60
|
-
JS
|
61
|
-
|
62
|
-
######################################################################
|
63
|
-
|
64
|
-
c.on_checkin = <<-JS
|
65
|
-
function() {
|
66
|
-
var form_obj = this;
|
67
|
-
Ext.Msg.show({
|
68
|
-
title: 'Confirm Checkin',
|
69
|
-
msg: 'Enter a checkin message:',
|
70
|
-
width: 400,
|
71
|
-
buttons: Ext.MessageBox.OKCANCEL,
|
72
|
-
multiline: true,
|
73
|
-
fn: function (btn, value, cfg) {
|
74
|
-
(btn == "ok") && form_obj.serverCheckin(
|
75
|
-
{
|
76
|
-
body: form_obj.getScriptBody(),
|
77
|
-
logmsg: value,
|
78
|
-
script_id: form_obj.getScriptId(),
|
79
|
-
});
|
80
|
-
},
|
81
|
-
});
|
82
|
-
}
|
83
|
-
JS
|
84
|
-
|
85
|
-
c.on_discard = <<-JS
|
86
|
-
function() {
|
87
|
-
var form_obj = this;
|
88
|
-
Ext.Msg.confirm('Confirm',
|
89
|
-
'This action will remove the current DEV version.<br>' +
|
90
|
-
'All changes since the last checkin <b>will be lost</b>. <br>' +
|
91
|
-
'This action cannot be undone. Are you sure?',
|
92
|
-
function (btn, value, cfg) {
|
93
|
-
(btn == "yes") && form_obj.serverDiscard({script_id: form_obj.getScriptId()});
|
94
|
-
});
|
95
|
-
}
|
96
|
-
JS
|
97
|
-
|
98
|
-
c.on_checkout = <<-JS
|
99
|
-
function() {
|
100
|
-
this.serverCheckout({script_id: this.getScriptId()});
|
101
|
-
}
|
102
|
-
JS
|
103
|
-
|
104
|
-
c.on_print = <<-JS
|
105
|
-
function() {
|
106
|
-
window.open("/marty/components/#{self.name}.html?script_id=" + this.getScriptId(),
|
107
|
-
"printing", 'width=800,height=700,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,copyhistory=no,resizable=yes');
|
108
|
-
}
|
109
|
-
JS
|
110
|
-
end
|
111
|
-
|
112
|
-
######################################################################
|
113
|
-
|
114
|
-
def get_title
|
115
|
-
return unless @record
|
116
|
-
|
117
|
-
status = @record.isdev? ? "Checked out by #{@record.group_dscript.user}" :
|
118
|
-
"Checked in by #{@record.user}"
|
119
|
-
|
120
|
-
[@record.name, "Ver: #{@record.version}", status].
|
121
|
-
join(" #{Marty::ScriptDetail::DASH} ")
|
122
|
-
end
|
123
|
-
|
124
|
-
def isdev?
|
125
|
-
@record && @record.isdev?
|
126
|
-
end
|
127
|
-
|
128
|
-
def istip?
|
129
|
-
@record && @record.istip?
|
130
|
-
end
|
131
|
-
|
132
|
-
def ismodified?
|
133
|
-
@record && @record.differs_from_dscript?
|
134
|
-
end
|
135
|
-
|
136
|
-
######################################################################
|
137
|
-
|
138
|
-
def can_save?(ds)
|
139
|
-
self.class.has_admin_perm? || (ds.user == Mcfly.whodunnit)
|
140
|
-
end
|
141
|
-
|
142
|
-
def can_checkin?(ds)
|
143
|
-
ds.user == Mcfly.whodunnit
|
144
|
-
end
|
145
|
-
|
146
|
-
def can_discard?(ds)
|
147
|
-
self.class.has_admin_perm? || (ds.user == Mcfly.whodunnit)
|
148
|
-
end
|
149
|
-
|
150
|
-
def can_checkout?
|
151
|
-
config[:allow_edit]
|
152
|
-
end
|
153
|
-
|
154
|
-
######################################################################
|
155
|
-
|
156
|
-
endpoint :netzke_load do |params, this|
|
157
|
-
unless self.class.has_any_perm?
|
158
|
-
this.netzke_feedback "Permission Denied"
|
159
|
-
return
|
160
|
-
end
|
161
|
-
|
162
|
-
# logic copied from basepack's form_panel.service
|
163
|
-
@record = Marty::Script.find_by_id(params[:id])
|
164
|
-
|
165
|
-
this.set_form_values js_record_data
|
166
|
-
this.set_title get_title
|
167
|
-
this.set_readonly_mode !isdev?
|
168
|
-
|
169
|
-
modes = {
|
170
|
-
save: isdev? && can_save?(@record.group_dscript),
|
171
|
-
checkin: isdev? && ismodified? && can_checkin?(@record.group_dscript),
|
172
|
-
checkout: istip? && !@record.dscript && can_checkout?,
|
173
|
-
discard: isdev? && can_discard?(@record.group_dscript),
|
174
|
-
}
|
175
|
-
|
176
|
-
this.set_action_modes(modes)
|
177
|
-
end
|
178
|
-
|
179
|
-
######################################################################
|
180
|
-
|
181
|
-
action :apply do |a|
|
182
|
-
a.text = I18n.t("script_detail.save")
|
183
|
-
a.tooltip = I18n.t("script_detail.save")
|
184
|
-
a.icon = :database_save
|
185
|
-
a.disabled = true
|
186
|
-
end
|
187
|
-
|
188
|
-
endpoint :netzke_submit do |params, this|
|
189
|
-
unless self.class.has_any_perm?
|
190
|
-
this.netzke_feedback "Permission Denied"
|
191
|
-
return
|
192
|
-
end
|
193
|
-
|
194
|
-
# p 'X'*30, params
|
195
|
-
|
196
|
-
# copied from corresponding method in form_panel.services
|
197
|
-
data = ActiveSupport::JSON.decode(params[:data])
|
198
|
-
data.each_pair do |k,v|
|
199
|
-
data[k] = nil if v.blank? || v == "null"
|
200
|
-
end
|
201
|
-
|
202
|
-
@record = Marty::Script.find_by_id(data["id"])
|
203
|
-
|
204
|
-
# p 'd.'*30, data, @record
|
205
|
-
|
206
|
-
unless @record
|
207
|
-
this.netzke_feedback "no record"
|
208
|
-
return
|
209
|
-
end
|
210
|
-
|
211
|
-
ds = @record.group_dscript
|
212
|
-
|
213
|
-
unless ds
|
214
|
-
this.netzke_feedback "no dev record"
|
215
|
-
return
|
216
|
-
end
|
217
|
-
|
218
|
-
if ds.body == data["body"]
|
219
|
-
this.netzke_feedback "no save needed"
|
220
|
-
# clear the error line if any
|
221
|
-
this.set_line_error -1
|
222
|
-
return
|
223
|
-
end
|
224
|
-
|
225
|
-
unless can_save?(ds)
|
226
|
-
this.netzke_feedback "Permission denied"
|
227
|
-
return
|
228
|
-
end
|
229
|
-
|
230
|
-
begin
|
231
|
-
engine = Marty::ScriptSet.parse(@record.name, data["body"])
|
232
|
-
rescue Delorean::ParseError => exc
|
233
|
-
this.netzke_feedback exc.message
|
234
|
-
this.apply_form_errors({})
|
235
|
-
this.set_line_error(exc.line)
|
236
|
-
return
|
237
|
-
end
|
238
|
-
|
239
|
-
ds.body = data["body"]
|
240
|
-
|
241
|
-
if ds.save
|
242
|
-
this.set_form_values(js_record_data)
|
243
|
-
this.netzke_set_result(true)
|
244
|
-
this.refresh_parent(@record.id)
|
245
|
-
return
|
246
|
-
end
|
247
|
-
|
248
|
-
data_adapter.errors_array(ds).each do |error|
|
249
|
-
flash error: error
|
250
|
-
end
|
251
|
-
|
252
|
-
this.netzke_feedback @flash
|
253
|
-
this.apply_form_errors(build_form_errors(record))
|
254
|
-
end
|
255
|
-
|
256
|
-
######################################################################
|
257
|
-
|
258
|
-
action :checkin do |a|
|
259
|
-
a.text = I18n.t("script_detail.checkin")
|
260
|
-
a.tooltip = I18n.t("script_detail.checkin")
|
261
|
-
a.icon = :tag_blue_add
|
262
|
-
a.disabled = true
|
263
|
-
end
|
264
|
-
|
265
|
-
endpoint :server_checkin do |params, this|
|
266
|
-
@record = Marty::Script.find_by_id(params[:script_id])
|
267
|
-
|
268
|
-
unless @record
|
269
|
-
this.netzke_feedback "no record"
|
270
|
-
return
|
271
|
-
end
|
272
|
-
|
273
|
-
ds = @record.group_dscript
|
274
|
-
|
275
|
-
unless ds
|
276
|
-
this.netzke_feedback "no dev record"
|
277
|
-
return
|
278
|
-
end
|
279
|
-
|
280
|
-
if ds.body != params[:body]
|
281
|
-
this.netzke_feedback "Error: Unsaved changes. Save before checkin."
|
282
|
-
return
|
283
|
-
end
|
284
|
-
|
285
|
-
unless can_checkin?(ds)
|
286
|
-
this.netzke_feedback "Permission denied"
|
287
|
-
return
|
288
|
-
end
|
289
|
-
|
290
|
-
ds.checkin(params[:logmsg])
|
291
|
-
|
292
|
-
this.netzke_feedback "checkin done"
|
293
|
-
this.refresh_parent @record.group_id
|
294
|
-
end
|
295
|
-
|
296
|
-
######################################################################
|
297
|
-
|
298
|
-
action :checkout do |a|
|
299
|
-
a.text = I18n.t("script_detail.checkout")
|
300
|
-
a.tooltip = I18n.t("script_detail.checkout")
|
301
|
-
a.icon = :tag_blue_edit
|
302
|
-
a.disabled = true
|
303
|
-
end
|
304
|
-
|
305
|
-
endpoint :server_checkout do |params, this|
|
306
|
-
@record = Marty::Script.find_by_id(params[:script_id])
|
307
|
-
|
308
|
-
unless @record
|
309
|
-
this.netzke_feedback "no record"
|
310
|
-
return
|
311
|
-
end
|
312
|
-
|
313
|
-
unless can_checkout?
|
314
|
-
this.netzke_feedback "Permission denied"
|
315
|
-
return
|
316
|
-
end
|
317
|
-
|
318
|
-
begin
|
319
|
-
@record.checkout
|
320
|
-
rescue => exc
|
321
|
-
this.netzke_feedback exc.message
|
322
|
-
return
|
323
|
-
end
|
324
|
-
|
325
|
-
this.netzke_feedback I18n.t("script_detail.checked_out")
|
326
|
-
this.refresh_parent @record.dev_version.id
|
327
|
-
end
|
328
|
-
|
329
|
-
######################################################################
|
330
|
-
|
331
|
-
action :discard do |a|
|
332
|
-
a.text = I18n.t("script_detail.discard")
|
333
|
-
a.tooltip = I18n.t("script_detail.discard")
|
334
|
-
a.icon = :tag_blue_delete
|
335
|
-
a.disabled = true
|
336
|
-
end
|
337
|
-
|
338
|
-
endpoint :server_discard do |params, this|
|
339
|
-
r = Marty::Script.find_by_id(params[:script_id])
|
340
|
-
|
341
|
-
unless r
|
342
|
-
this.netzke_feedback "no record"
|
343
|
-
return
|
344
|
-
end
|
345
|
-
|
346
|
-
@record = r.last_version
|
347
|
-
|
348
|
-
unless @record.dscript
|
349
|
-
this.netzke_feedback "no dev record"
|
350
|
-
return
|
351
|
-
end
|
352
|
-
|
353
|
-
unless can_discard?(@record.dscript)
|
354
|
-
this.netzke_feedback "Permission denied"
|
355
|
-
return
|
356
|
-
end
|
357
|
-
|
358
|
-
@record.dscript.discard
|
359
|
-
|
360
|
-
this.netzke_feedback I18n.t("script_detail.discarded")
|
361
|
-
this.refresh_parent(@record.isdev? ? -1 : @record.group_id)
|
362
|
-
end
|
363
|
-
|
364
|
-
######################################################################
|
365
|
-
|
366
|
-
action :print do |a|
|
367
|
-
a.text = I18n.t("script_detail.print")
|
368
|
-
a.tooltip = I18n.t("script_detail.print")
|
369
|
-
a.icon = :printer
|
370
|
-
a.handler = :on_print
|
371
|
-
end
|
372
|
-
|
373
|
-
######################################################################
|
374
|
-
|
375
|
-
def configure_bbar(c)
|
376
|
-
c[:bbar] = [
|
377
|
-
:apply,
|
378
|
-
:checkin,
|
379
|
-
:checkout,
|
380
|
-
:discard,
|
381
|
-
:print,
|
382
|
-
]
|
383
|
-
end
|
384
|
-
|
385
|
-
######################################################################
|
386
|
-
|
387
|
-
# used for printing
|
388
|
-
def export_content(format, title, params={})
|
389
|
-
raise "unknown format: #{format}" unless format == "html"
|
390
|
-
|
391
|
-
r = Marty::Script.find_by_id(params[:script_id])
|
392
|
-
body = get_body(r)
|
393
|
-
res = CodeRay.scan(body, :ruby).div(line_numbers: :table)
|
394
|
-
|
395
|
-
[res, "text/html", "inline", "#{title}.html"]
|
396
|
-
end
|
397
|
-
|
398
|
-
def get_body(r)
|
399
|
-
r = r.group_dscript if r.isdev?
|
400
|
-
r ? r.body : "ERROR: NO BODY"
|
401
|
-
end
|
402
|
-
|
403
|
-
def configure(c)
|
404
|
-
super
|
405
|
-
|
406
|
-
# Hacky fix to allow for testing
|
407
|
-
c.allow_edit = true if c.allow_edit.nil? && ENV["RAILS_ENV"] == "test" &&
|
408
|
-
self.class.current_user_roles.include?(:dev)
|
409
|
-
|
410
|
-
c.title = "Script Detail"
|
411
|
-
c.model = "Marty::Script"
|
412
|
-
c.items = [
|
413
|
-
{
|
414
|
-
mode: "text/x-delorean",
|
415
|
-
line_numbers: true,
|
416
|
-
indent_unit: 4,
|
417
|
-
tab_mode: "shift",
|
418
|
-
match_brackets: true,
|
419
|
-
|
420
|
-
hide_label: true,
|
421
|
-
xtype: :codemirror,
|
422
|
-
name: :body,
|
423
|
-
empty_text: "No script selected.",
|
424
|
-
getter: lambda { |r| get_body(r) },
|
425
|
-
},
|
426
|
-
]
|
427
|
-
end
|
428
|
-
end
|
429
|
-
|
430
|
-
ScriptDetail = Marty::ScriptDetail
|