marty 0.5.38 → 0.5.39

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4d2c09a2a2c8901d33786fc13277047462dda37b
4
- data.tar.gz: df69eb54ada158f959330b96a2be3e6231a66b30
3
+ metadata.gz: 1c7c49130696eaee7cf90daac35a2e8f7de5b4d4
4
+ data.tar.gz: d9c02183be57f6889d9071b27461315571278226
5
5
  SHA512:
6
- metadata.gz: 824c8e5fe29067c3c9d5aa5093e01eb28c68acc22ac765d28283997db96fe08fb05f36dedf63974665b1be263c835e8afcbd284fb30090934d592ba5c3402cc4
7
- data.tar.gz: 46ba58c67bb858427506a2de15d35a5dadab42cdc63595dfb53967b341049d9e421ea4c006c6ef949df111cef5d197802cbf0c4dd5374f075d381fa18d750ac9
6
+ metadata.gz: 49df1bf75aac668d3e2e2431a38826a55f75bbf51a68194b7fee998f19bfa58f3e98cb63b724866d6764d7a0cc8d179bb00ed9a483f91acb606ba7fafd3d6ba1
7
+ data.tar.gz: 73d88973b75a3291f77db255243f99927e2ea8dd6d46d6f34bdc088e5d12799c9058d5219452721d231f7465202a62f4e63ca7c3cdb70b51f328beaf207e2034
@@ -0,0 +1,34 @@
1
+ body { margin: 0;
2
+ padding: 0;
3
+ border: 0;
4
+ background-color: #fff;
5
+ color: #333333;
6
+ text-align: left;
7
+ font-family: Arial, Helvetica, Verdana, sans-serif;
8
+ font-weight: normal;
9
+ font-size: 11pt; }
10
+ table { border-width: 0px;
11
+ margin-left: auto;
12
+ margin-right: auto;
13
+ border-spacing: 1px;
14
+ width: 75% }
15
+ th { padding: 9px;
16
+ background-color: #d6d6d6 }
17
+ td { padding: 9px;
18
+ -moz-border-radius: 5px;
19
+ border-radius: 5px;
20
+ -webkit-border-radius: 5px;
21
+ border-style: solid;
22
+ border-width: 1px;
23
+ border-color: #999999; }
24
+ tr.passed { background-color: #9ed515 }
25
+ tr.warning { background-color: #ffdb58 }
26
+ tr.failed { background-color: #ff5555 }
27
+ td.desc { font-size: 10pt; }
28
+ h1 { display: block;
29
+ margin: 0px auto 40px auto;
30
+ padding: 8px;
31
+ background-color: #3e2155;
32
+ font-size: 18pt;
33
+ color: #ffffff;
34
+ line-height: 1.5em; }
@@ -3,7 +3,7 @@ class Marty::ScriptGrid < Marty::Grid
3
3
  create: [:dev],
4
4
  read: :any,
5
5
  update: [:dev],
6
- delete: [] # [:dev]
6
+ delete: [:dev]
7
7
 
8
8
  def configure(c)
9
9
  super
@@ -29,7 +29,6 @@ class Marty::ScriptGrid < Marty::Grid
29
29
  # if there are no non-DEV tags we get an exception above
30
30
  ts = 'infinity'
31
31
  end
32
-
33
32
  tb = data_class.table_name
34
33
  data_class.where("#{tb}.obsoleted_dt >= ? AND #{tb}.created_dt < ?",
35
34
  ts, ts).scoping do
@@ -37,6 +36,25 @@ class Marty::ScriptGrid < Marty::Grid
37
36
  end
38
37
  end
39
38
 
39
+ action :del do |a|
40
+ a.text = I18n.t("script_grid.delete")
41
+ a.tooltip = I18n.t("script_grid.delete")
42
+ a.icon = :script_delete
43
+ a.disabled = config[:prohibit_delete]
44
+ end
45
+
46
+ endpoint :server_delete do |params, this|
47
+ return this.netzke_feedback("Permission Denied") if
48
+ config[:prohibit_delete]
49
+
50
+ tag = Marty::Tag.map_to_tag(root_sess[:selected_tag_id])
51
+
52
+ return this.netzke_feedback("Can only delete in DEV tag") unless
53
+ tag && tag.isdev?
54
+
55
+ super(params, this)
56
+ end
57
+
40
58
  # override the add_in_form endpoint. Script creation needs to use
41
59
  # the create_script method.
42
60
  endpoint :add_window__add_form__netzke_submit do |params, this|
@@ -72,7 +90,7 @@ class Marty::ScriptGrid < Marty::Grid
72
90
  end
73
91
 
74
92
  def default_bbar
75
- [:add_in_form]
93
+ [:add_in_form, :del]
76
94
  end
77
95
 
78
96
  def default_context_menu
@@ -0,0 +1,66 @@
1
+ module Marty
2
+ class DiagnosticController < ActionController::Base
3
+ layout 'marty/diagnostic'
4
+
5
+ def index
6
+ if action_methods.include?(params[:testop].to_s)
7
+ self.send(params[:testop])
8
+ else
9
+ render file: 'public/404', status: 404, layout: false
10
+ end
11
+ end
12
+
13
+ def version
14
+ diag_response git_details +
15
+ [Diagnostic.new('Marty Version', true, VERSION)]
16
+ end
17
+
18
+ private
19
+ def diag_response details
20
+ if @aggregate_diags
21
+ @aggregated_details += details
22
+ else
23
+ @details = details
24
+ respond_to do |format|
25
+ format.html { render 'diagnostic' }
26
+ format.json { render json: [{ error_count: error_count(details),
27
+ diag_count: details.count }] + details }
28
+ end
29
+ end
30
+ end
31
+
32
+ def aggregate_diags
33
+ begin
34
+ @aggregate_diags = true
35
+ @aggregated_details = []
36
+ yield
37
+ ensure
38
+ @aggregate_diags = false
39
+ diag_response @aggregated_details
40
+ end
41
+ end
42
+
43
+ def error_count details
44
+ details.count { |detail| !detail.status }
45
+ end
46
+
47
+ def git_details app_name = Rails.application.class.parent.to_s
48
+ [
49
+ Diagnostic.new("#{app_name} Git Version", true,
50
+ `git describe 2>&1`.strip),
51
+ Diagnostic.new("#{app_name} Git Details", true,
52
+ `git show --pretty=format:"sha: %h, %D" 2>&1`.strip)
53
+ ]
54
+ end
55
+
56
+ class Diagnostic < Struct.new(:name, :status, :description)
57
+ def status_css
58
+ status ? 'passed' : 'failed'
59
+ end
60
+
61
+ def status_text
62
+ status ? 'Passed' : 'Failed'
63
+ end
64
+ end
65
+ end
66
+ end
@@ -6,14 +6,9 @@ module Marty::Enum
6
6
 
7
7
  res = @LOOKUP_CACHE[index] ||= find_by_name(index)
8
8
 
9
- return res if res
9
+ raise "no such #{self.name}: '#{index}'" unless res
10
10
 
11
- raise "no such #{self.name}: '#{index}'"
12
- end
13
-
14
- def to_s
15
- # FIXME: hacky since not all enums have name
16
- self.name
11
+ res
17
12
  end
18
13
 
19
14
  def clear_lookup_cache!
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
5
+ <title><%= Rails.application.class.parent %></title>
6
+ <%= stylesheet_link_tag 'marty/diagnostic' %>
7
+ </head>
8
+ <body>
9
+ <%= yield %>
10
+ </body>
11
+ </html>
@@ -0,0 +1,15 @@
1
+ <h1><%= Rails.application.class.parent %> Diagnostics</h1>
2
+
3
+ <table>
4
+ <th width=20%>Diagnostic Name</th>
5
+ <th width=10%>Status</th>
6
+ <th width=70%>Description</th>
7
+ <% @details.each do |d| %>
8
+ <tr class="<%= d.status_css %>">
9
+ <td><%= d.name %></td>
10
+ <td><%= d.status_text %></td>
11
+ <td class="desc"><%= d.description %></td>
12
+ </tr>
13
+ <% end %>
14
+ </table>
15
+
@@ -43,6 +43,7 @@ en:
43
43
  name: Name
44
44
  tag: Associated Tag
45
45
  created_dt: Create Date/Time
46
+ delete: Delete Script
46
47
 
47
48
  user_grid:
48
49
  title: Users
@@ -64,6 +65,7 @@ en:
64
65
  discarded: Discarded
65
66
  checked_out: Checked out
66
67
  print: Print
68
+ delete: Delete
67
69
 
68
70
  script_tester:
69
71
  attributes: Compute Attributes
data/config/routes.rb CHANGED
@@ -2,4 +2,6 @@ Marty::Engine.routes.draw do
2
2
  match via: [:get, :post], "rpc/:action(.:format)" => "rpc", as: :rpc
3
3
  get "job/:action" => "job", as: :job
4
4
  match via: [:get, :post], "report(.:format)" => "report#index", as: :report
5
+ get 'diag/(:action)', controller: 'diagnostic'
6
+ get 'diagnostic/(:action)', controller: 'diagnostic'
5
7
  end
data/db/seeds.rb CHANGED
@@ -26,7 +26,8 @@ Marty::Role.all.map { |role|
26
26
  }
27
27
 
28
28
  # Create default PostingType from configuration
29
- default_p_type = Rails.configuration.marty.default_posting_type.to_s
29
+ default_p_type = Rails.configuration.marty.default_posting_type
30
+
30
31
  Marty::PostingType.create(name: default_p_type)
31
32
 
32
33
  # Create NOW posting
data/lib/marty/engine.rb CHANGED
@@ -9,5 +9,7 @@ module Marty
9
9
  config.generators do |g|
10
10
  g.test_framework :rspec, :view_specs => false
11
11
  end
12
+
13
+ config.assets.precompile << 'marty/diagnostic.css'
12
14
  end
13
15
  end
data/lib/marty/railtie.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  module Marty
2
2
  class Railtie < Rails::Railtie
3
3
  config.marty = ActiveSupport::OrderedOptions.new
4
+ config.marty.default_posting_type = 'BASE'
4
5
  end
5
6
  end
data/lib/marty/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "0.5.38"
2
+ VERSION = "0.5.39"
3
3
  end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ module Marty
4
+ RSpec.describe DiagnosticController, type: :controller do
5
+ before(:each) { @routes = Marty::Engine.routes }
6
+ let(:json_response) { JSON.parse(response.body) }
7
+
8
+ describe 'GET #index' do
9
+ it 'returns http success' do
10
+ get :index, testop: :version
11
+
12
+ expect(response).to have_http_status(:success)
13
+ end
14
+
15
+ it 'returns the current version' do
16
+ get :index, testop: :version
17
+
18
+ aggregate_failures do
19
+ expect(assigns('details').count).to eq(3)
20
+ expect(assigns('details').third.methods)
21
+ .to include(:name, :status, :description)
22
+ expect(assigns('details').third.description).to eq(Marty::VERSION)
23
+ end
24
+ end
25
+
26
+ it 'returns the appropriate json' do
27
+ get :index, {format: :json, testop: :version}
28
+
29
+ aggregate_failures do
30
+ expect(json_response.first['diag_count']).to eq(3)
31
+ expect(json_response.first['error_count']).to eq(0)
32
+ expect(json_response
33
+ .find { |d| d['name'] == 'Marty Version' }['description'])
34
+ .to eq(Marty::VERSION)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe 'GET #version' do
40
+ it 'returns http success' do
41
+ get :version
42
+
43
+ expect(response).to have_http_status(:success)
44
+ end
45
+
46
+ it 'returns the current version' do
47
+ get :version
48
+
49
+ aggregate_failures do
50
+ expect(assigns('details').count).to eq(3)
51
+ expect(assigns('details').third.methods)
52
+ .to include(:name, :status, :description)
53
+ expect(assigns('details').third.description).to eq(Marty::VERSION)
54
+ end
55
+ end
56
+
57
+ it 'returns the appropriate json' do
58
+ get :version, format: :json
59
+
60
+ aggregate_failures do
61
+ expect(json_response.first['diag_count']).to eq(3)
62
+ expect(json_response.first['error_count']).to eq(0)
63
+ expect(json_response
64
+ .find { |d| d['name'] == 'Marty Version' }['description'])
65
+ .to eq(Marty::VERSION)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -76,7 +76,7 @@ module Dummy
76
76
  :viewer,
77
77
  :user_manager,
78
78
  ]
79
- config.marty.default_posting_type = 'BASE'
79
+ #config.marty.default_posting_type = 'BASE'
80
80
  config.secret_key_base = "SECRET_KEY_BASE"
81
81
  end
82
82
  end
@@ -178,6 +178,7 @@ feature 'under Applications menu, Scripting workflows', js: true do
178
178
  expect(row_count(sg)).to eq 0
179
179
  expect(row_count(tg)).to eq 0
180
180
  expect(btn_disabled?('New Script', sg)).to be_truthy
181
+ expect(btn_disabled?('Delete Script', sg)).to be_truthy
181
182
  expect(btn_disabled?('New Tag', tg)).to be_truthy
182
183
  log_out
183
184
  end
@@ -193,6 +194,7 @@ feature 'under Applications menu, Scripting workflows', js: true do
193
194
  select_row(1, tg)
194
195
  wait_for_ajax
195
196
  expect(btn_disabled?('New Script', sg)).to be_truthy
197
+ expect(btn_disabled?('Delete Script', sg)).to be_truthy
196
198
  expect(btn_disabled?('New Tag', tg)).to be_truthy
197
199
  select_row(4, tg)
198
200
  wait_for_ajax
@@ -305,4 +307,46 @@ feature 'under Applications menu, Scripting workflows', js: true do
305
307
  expect(find(:msg)).to have_content 'no save needed'
306
308
  end
307
309
  end
310
+
311
+ it 'deletes a script' do
312
+ log_in_as('dev1')
313
+ go_to_scripting
314
+
315
+ by 'select DEV tag' do
316
+ wait_for_ajax
317
+ select_row(1, tg)
318
+ end
319
+
320
+ and_by 'delete script' do
321
+ select_row(1, sg)
322
+ press('Delete Script')
323
+ find(:xpath, "//div[text()='Confirmation']", wait: 5)
324
+ press('Yes')
325
+ end
326
+
327
+ and_by 'script is gone' do
328
+ expect(row_count(sg)).to eq 4
329
+ end
330
+ end
331
+
332
+ it 'only allows delete on DEV tag' do
333
+ log_in_as('dev1')
334
+ go_to_scripting
335
+
336
+ by 'select not DEV tag' do
337
+ wait_for_ajax
338
+ select_row(2, tg)
339
+ end
340
+
341
+ and_by 'delete script' do
342
+ select_row(1, sg)
343
+ press('Delete Script')
344
+ find(:xpath, "//div[text()='Confirmation']", wait: 5)
345
+ press('Yes')
346
+ end
347
+
348
+ and_by 'delete did not work' do
349
+ expect(find(:msg)).to have_content 'Can only delete in DEV tag'
350
+ end
351
+ end
308
352
  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: 0.5.38
4
+ version: 0.5.39
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: 2016-05-06 00:00:00.000000000 Z
17
+ date: 2016-06-03 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: pg
@@ -158,8 +158,8 @@ files:
158
158
  - README.md
159
159
  - Rakefile
160
160
  - app/assets/images/marty/.gitkeep
161
- - app/assets/javascripts/marty/application.js
162
161
  - app/assets/stylesheets/marty/application.css
162
+ - app/assets/stylesheets/marty/diagnostic.css
163
163
  - app/components/marty/api_auth_view.rb
164
164
  - app/components/marty/auth_app.rb
165
165
  - app/components/marty/auth_app/javascripts/auth_app.js
@@ -357,6 +357,7 @@ files:
357
357
  - app/components/marty/user_view.rb
358
358
  - app/controllers/marty/application_controller.rb
359
359
  - app/controllers/marty/components_controller.rb
360
+ - app/controllers/marty/diagnostic_controller.rb
360
361
  - app/controllers/marty/job_controller.rb
361
362
  - app/controllers/marty/report_controller.rb
362
363
  - app/controllers/marty/rpc_controller.rb
@@ -384,6 +385,8 @@ files:
384
385
  - app/models/marty/user.rb
385
386
  - app/models/marty/user_role.rb
386
387
  - app/views/layouts/marty/application.html.erb
388
+ - app/views/layouts/marty/diagnostic.html.erb
389
+ - app/views/marty/diagnostic/diagnostic.html.erb
387
390
  - config/database.yml.travis
388
391
  - config/locales/en.yml
389
392
  - config/routes.rb
@@ -442,12 +445,12 @@ files:
442
445
  - marty.gemspec
443
446
  - script/rails
444
447
  - spec/controllers/application_controller_spec.rb
448
+ - spec/controllers/diagnostic_controller_spec.rb
445
449
  - spec/controllers/job_controller_spec.rb
446
450
  - spec/controllers/rpc_controller_spec.rb
447
451
  - spec/controllers/rpc_import_spec.rb
448
452
  - spec/dummy/README.rdoc
449
453
  - spec/dummy/Rakefile
450
- - spec/dummy/app/assets/javascripts/application.js
451
454
  - spec/dummy/app/assets/stylesheets/application.css
452
455
  - spec/dummy/app/controllers/application_controller.rb
453
456
  - spec/dummy/app/controllers/components_controller.rb
@@ -1,15 +0,0 @@
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, vendor/assets/javascripts,
5
- // or vendor/assets/javascripts of plugins, if any, 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
- // the compiled file.
9
- //
10
- // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
- // GO AFTER THE REQUIRES BELOW.
12
- //
13
- //= require jquery
14
- //= require jquery_ujs
15
- //= require_tree .
@@ -1,15 +0,0 @@
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, vendor/assets/javascripts,
5
- // or vendor/assets/javascripts of plugins, if any, 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
- // the compiled file.
9
- //
10
- // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
- // GO AFTER THE REQUIRES BELOW.
12
- //
13
- //= require jquery
14
- //= require jquery_ujs
15
- //= require_tree .