marty 0.5.15 → 0.5.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (212) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +27 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +23 -0
  5. data/Gemfile +23 -0
  6. data/INDEPENDENCE_ISSUES.md +23 -0
  7. data/app/assets/images/marty/.gitkeep +0 -0
  8. data/app/components/marty/report_form.rb +9 -4
  9. data/gemini_deprecations.md +6 -0
  10. data/lib/marty/data_change.rb +99 -0
  11. data/lib/marty/data_conversion.rb +11 -3
  12. data/lib/marty/data_exporter.rb +9 -0
  13. data/lib/marty/version.rb +1 -1
  14. data/marty.gemspec +35 -0
  15. data/script/rails +8 -0
  16. data/spec/controllers/application_controller_spec.rb +52 -0
  17. data/spec/controllers/job_controller_spec.rb +226 -0
  18. data/spec/controllers/rpc_controller_spec.rb +379 -0
  19. data/spec/controllers/rpc_import_spec.rb +45 -0
  20. data/spec/dummy/README.rdoc +261 -0
  21. data/spec/dummy/Rakefile +7 -0
  22. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  23. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  24. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  25. data/spec/dummy/app/controllers/components_controller.rb +7 -0
  26. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  27. data/spec/dummy/app/mailers/.gitkeep +0 -0
  28. data/spec/dummy/app/models/.gitkeep +0 -0
  29. data/spec/dummy/app/models/gemini/amortization_type.rb +5 -0
  30. data/spec/dummy/app/models/gemini/bud_category.rb +7 -0
  31. data/spec/dummy/app/models/gemini/entity.rb +2 -0
  32. data/spec/dummy/app/models/gemini/extras/data_import.rb +5 -0
  33. data/spec/dummy/app/models/gemini/extras/settlement_import.rb +28 -0
  34. data/spec/dummy/app/models/gemini/fannie_bup.rb +29 -0
  35. data/spec/dummy/app/models/gemini/grouping.rb +8 -0
  36. data/spec/dummy/app/models/gemini/grouping_head_version.rb +14 -0
  37. data/spec/dummy/app/models/gemini/head.rb +7 -0
  38. data/spec/dummy/app/models/gemini/head_version.rb +14 -0
  39. data/spec/dummy/app/models/gemini/helper.rb +44 -0
  40. data/spec/dummy/app/models/gemini/loan_program.rb +11 -0
  41. data/spec/dummy/app/models/gemini/mortgage_type.rb +5 -0
  42. data/spec/dummy/app/models/gemini/simple.rb +6 -0
  43. data/spec/dummy/app/models/gemini/streamline_type.rb +16 -0
  44. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  45. data/spec/dummy/config.ru +4 -0
  46. data/spec/dummy/config/application.rb +82 -0
  47. data/spec/dummy/config/boot.rb +10 -0
  48. data/spec/dummy/config/database.yml.example +10 -0
  49. data/spec/dummy/config/environment.rb +5 -0
  50. data/spec/dummy/config/environments/development.rb +35 -0
  51. data/spec/dummy/config/environments/production.rb +69 -0
  52. data/spec/dummy/config/environments/test.rb +39 -0
  53. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  54. data/spec/dummy/config/initializers/delayed_job.rb +5 -0
  55. data/spec/dummy/config/initializers/inflections.rb +15 -0
  56. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  57. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  58. data/spec/dummy/config/initializers/session_store.rb +8 -0
  59. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  60. data/spec/dummy/config/locales/en.yml +5 -0
  61. data/spec/dummy/config/routes.rb +12 -0
  62. data/spec/dummy/db/migrate/20140801000000_create_groupings.rb +11 -0
  63. data/spec/dummy/db/migrate/20150406171536_create_categories.rb +27 -0
  64. data/spec/dummy/db/migrate/20150408200916_create_loan_programs.rb +26 -0
  65. data/spec/dummy/db/migrate/20150408201429_create_types.rb +21 -0
  66. data/spec/dummy/db/migrate/20150420000001_create_heads.rb +14 -0
  67. data/spec/dummy/db/migrate/20150420000002_create_head_versions.rb +15 -0
  68. data/spec/dummy/db/migrate/20150420000003_create_grouping_head_versions.rb +12 -0
  69. data/spec/dummy/db/migrate/20151023000001_create_simple.rb +12 -0
  70. data/spec/dummy/db/seeds.rb +8 -0
  71. data/spec/dummy/delorean/blame_report.dl +171 -0
  72. data/spec/dummy/delorean/data_report.dl +105 -0
  73. data/spec/dummy/delorean/fields.dl +52 -0
  74. data/spec/dummy/delorean/styles.dl +134 -0
  75. data/spec/dummy/lib/assets/.gitkeep +0 -0
  76. data/spec/dummy/lib/class_list.rb +3 -0
  77. data/spec/dummy/log/.gitkeep +0 -0
  78. data/spec/dummy/public/404.html +26 -0
  79. data/spec/dummy/public/422.html +26 -0
  80. data/spec/dummy/public/500.html +25 -0
  81. data/spec/dummy/public/favicon.ico +0 -0
  82. data/spec/dummy/public/icons/READ.txt +3 -0
  83. data/spec/dummy/public/icons/application_cascade.png +0 -0
  84. data/spec/dummy/public/icons/application_delete.png +0 -0
  85. data/spec/dummy/public/icons/application_put.png +0 -0
  86. data/spec/dummy/public/icons/application_view_detail.png +0 -0
  87. data/spec/dummy/public/icons/arrow_in.png +0 -0
  88. data/spec/dummy/public/icons/arrow_refresh.png +0 -0
  89. data/spec/dummy/public/icons/database_save.png +0 -0
  90. data/spec/dummy/public/icons/door_in.png +0 -0
  91. data/spec/dummy/public/icons/door_out.png +0 -0
  92. data/spec/dummy/public/icons/group.png +0 -0
  93. data/spec/dummy/public/icons/page_lightning.png +0 -0
  94. data/spec/dummy/public/icons/printer.png +0 -0
  95. data/spec/dummy/public/icons/report_disk.png +0 -0
  96. data/spec/dummy/public/icons/report_go.png +0 -0
  97. data/spec/dummy/public/icons/report_magnify.png +0 -0
  98. data/spec/dummy/public/icons/script.png +0 -0
  99. data/spec/dummy/public/icons/script_add.png +0 -0
  100. data/spec/dummy/public/icons/script_go.png +0 -0
  101. data/spec/dummy/public/icons/script_key.png +0 -0
  102. data/spec/dummy/public/icons/table_go.png +0 -0
  103. data/spec/dummy/public/icons/time.png +0 -0
  104. data/spec/dummy/public/icons/time_add.png +0 -0
  105. data/spec/dummy/public/icons/time_go.png +0 -0
  106. data/spec/dummy/public/icons/timeline_marker.png +0 -0
  107. data/spec/dummy/public/icons/user_add.png +0 -0
  108. data/spec/dummy/public/icons/user_delete.png +0 -0
  109. data/spec/dummy/public/icons/user_edit.png +0 -0
  110. data/spec/dummy/public/icons/wrench.png +0 -0
  111. data/spec/dummy/script/delayed_job +6 -0
  112. data/spec/dummy/script/rails +6 -0
  113. data/spec/features/javascripts/job_dashboard_live_search.js.coffee +8 -0
  114. data/spec/features/javascripts/login.js.coffee +8 -0
  115. data/spec/features/jobs_dashboard_netzke_spec.rb +24 -0
  116. data/spec/features/jobs_dashboard_spec.rb +49 -0
  117. data/spec/fixtures/scripts/load_tests/script1.dl +2 -0
  118. data/spec/fixtures/scripts/load_tests/script2.dl +2 -0
  119. data/spec/job_helper.rb +102 -0
  120. data/spec/lib/data_exporter_spec.rb +71 -0
  121. data/spec/lib/data_importer_spec.rb +461 -0
  122. data/spec/lib/xl_spec.rb +198 -0
  123. data/spec/lib/xl_styles_spec.rb +115 -0
  124. data/spec/models/api_auth_spec.rb +187 -0
  125. data/spec/models/posting_spec.rb +107 -0
  126. data/spec/models/promise_spec.rb +65 -0
  127. data/spec/models/script_spec.rb +187 -0
  128. data/spec/models/user_spec.rb +68 -0
  129. data/spec/requests/routes_spec.rb +12 -0
  130. data/spec/spec_helper.rb +61 -0
  131. data/spec/support/clean_db_helpers.rb +18 -0
  132. data/spec/support/delayed_job_helpers.rb +12 -0
  133. data/spec/support/user_helpers.rb +12 -0
  134. metadata +139 -89
  135. data/app/components/marty/auth_app.rb~ +0 -51
  136. data/app/components/marty/auth_app/javascripts/auth_app.js~ +0 -91
  137. data/app/components/marty/cm_form_panel.rb~ +0 -5
  138. data/app/components/marty/cm_grid_panel.rb~ +0 -35
  139. data/app/components/marty/data_import_view.rb~ +0 -142
  140. data/app/components/marty/extras/layout.rb~ +0 -46
  141. data/app/components/marty/live_search_grid_panel.rb~ +0 -49
  142. data/app/components/marty/main_auth_app.rb~ +0 -238
  143. data/app/components/marty/mcfly_grid_panel.rb~ +0 -80
  144. data/app/components/marty/new_posting_form.rb~ +0 -46
  145. data/app/components/marty/new_posting_window.rb~ +0 -21
  146. data/app/components/marty/pivot_grid.rb +0 -52
  147. data/app/components/marty/pivot_grid/endpoints.rb +0 -45
  148. data/app/components/marty/pivot_grid/javascripts/extensions.js +0 -150
  149. data/app/components/marty/pivot_grid/javascripts/pivot_grid.js +0 -86
  150. data/app/components/marty/pivot_grid/services.rb +0 -44
  151. data/app/components/marty/posting_grid.rb~ +0 -140
  152. data/app/components/marty/promise_view.rb~ +0 -157
  153. data/app/components/marty/promise_view/stylesheets/promise_view.css~ +0 -15
  154. data/app/components/marty/report_form.rb~ +0 -217
  155. data/app/components/marty/report_select.rb~ +0 -133
  156. data/app/components/marty/reporting.rb~ +0 -39
  157. data/app/components/marty/script_detail.rb~ +0 -430
  158. data/app/components/marty/script_form.rb~ +0 -233
  159. data/app/components/marty/script_form/javascripts/Ext.ux.form.field.CodeMirror.js~ +0 -909
  160. data/app/components/marty/script_grid.rb~ +0 -99
  161. data/app/components/marty/script_tester.rb~ +0 -213
  162. data/app/components/marty/scripting.rb~ +0 -124
  163. data/app/components/marty/select_report.rb~ +0 -143
  164. data/app/components/marty/simple_app.rb~ +0 -101
  165. data/app/components/marty/tag_grid.rb~ +0 -89
  166. data/app/components/marty/tree_panel.rb~ +0 -256
  167. data/app/components/marty/tree_panel/javascripts/tree_panel.js~ +0 -317
  168. data/app/components/marty/user_pivot.rb +0 -128
  169. data/app/components/marty/user_view.rb~ +0 -188
  170. data/app/controllers/marty/application_controller.rb~ +0 -133
  171. data/app/controllers/marty/components_controller.rb~ +0 -37
  172. data/app/controllers/marty/job_controller.rb~ +0 -28
  173. data/app/controllers/marty/rpc_controller.rb~ +0 -61
  174. data/app/helpers/marty/script_set.rb~ +0 -59
  175. data/app/models/marty/api_auth.rb~ +0 -48
  176. data/app/models/marty/data_change.rb~ +0 -141
  177. data/app/models/marty/enum.rb~ +0 -16
  178. data/app/models/marty/import_type.rb~ +0 -48
  179. data/app/models/marty/poop.rb~ +0 -169
  180. data/app/models/marty/posting.rb~ +0 -86
  181. data/app/models/marty/posting_type.rb~ +0 -21
  182. data/app/models/marty/promise.rb~ +0 -196
  183. data/app/models/marty/role.rb~ +0 -10
  184. data/app/models/marty/script.rb~ +0 -62
  185. data/app/models/marty/tag.rb~ +0 -91
  186. data/app/models/marty/user.rb~ +0 -148
  187. data/app/models/marty/user_role.rb~ +0 -13
  188. data/app/views/layouts/marty/application.html.erb~ +0 -11
  189. data/config/routes.rb~ +0 -10
  190. data/db/migrate/019_create_marty_postings.rb~ +0 -19
  191. data/db/migrate/095_create_marty_tags.rb~ +0 -19
  192. data/lib/marty.rb~ +0 -13
  193. data/lib/marty/content_handler.rb~ +0 -93
  194. data/lib/marty/data_exporter.rb~ +0 -137
  195. data/lib/marty/data_importer.rb~ +0 -114
  196. data/lib/marty/data_row_processor.rb~ +0 -206
  197. data/lib/marty/drop_folder_hook.rb~ +0 -17
  198. data/lib/marty/folder_hook.rb~ +0 -9
  199. data/lib/marty/lazy_column_loader.rb~ +0 -47
  200. data/lib/marty/mcfly_query.rb~ +0 -188
  201. data/lib/marty/migrations.rb~ +0 -65
  202. data/lib/marty/monkey.rb~ +0 -160
  203. data/lib/marty/permissions.rb~ +0 -69
  204. data/lib/marty/promise.rb~ +0 -41
  205. data/lib/marty/promise_job.rb~ +0 -121
  206. data/lib/marty/promise_proxy.rb~ +0 -69
  207. data/lib/marty/util.rb~ +0 -80
  208. data/lib/marty/version.rb~ +0 -3
  209. data/lib/marty/xl.rb~ +0 -526
  210. data/lib/pyxll/README.txt~ +0 -16
  211. data/lib/pyxll/gemini.py~ +0 -110
  212. 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