bastion 5.0.6 → 5.0.7
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 +4 -4
- data/app/assets/javascripts/bastion/components/nutupane.factory.js +14 -3
- data/app/assets/javascripts/bastion/layouts/partials/table.html +2 -2
- data/app/assets/stylesheets/bastion/forms.scss +2 -0
- data/app/assets/stylesheets/bastion/nutupane.scss +5 -0
- data/lib/bastion/engine.rb +7 -0
- data/lib/bastion/version.rb +1 -1
- data/test/components/nutupane.factory.test.js +71 -17
- metadata +28 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a7c9431ed0078114c6e171f08c6235a6aee2c1a
|
4
|
+
data.tar.gz: 607f23ed40b6038579e001f4e7e42012756b0359
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cae3c0c52a6875f8af22f7f328b66dfc81cfc08565066e808f4143906b7fe1a7c6ea6b6ad90ea92442d235a569441551e9973a03aea724d6b44a5742d90f1c56
|
7
|
+
data.tar.gz: b8fa098368c81edc55caf68cf30a97d64c3ece7dba71135ca783e0dc0e7fdcb7e9ac5fc3794dd26ad5aac90f60a8134532383e7926a7e525a35d6cf0b0c0c32f
|
@@ -31,7 +31,7 @@
|
|
31
31
|
*/
|
32
32
|
angular.module('Bastion.components').factory('Nutupane',
|
33
33
|
['$location', '$q', 'entriesPerPage', 'TableCache', 'GlobalNotification', function ($location, $q, entriesPerPage, TableCache, GlobalNotification) {
|
34
|
-
var Nutupane = function (resource, params, action) {
|
34
|
+
var Nutupane = function (resource, params, action, nutupaneParams) {
|
35
35
|
var self = this;
|
36
36
|
|
37
37
|
function getTableName() {
|
@@ -62,6 +62,8 @@ angular.module('Bastion.components').factory('Nutupane',
|
|
62
62
|
params.page = $location.search().page || 1;
|
63
63
|
params['per_page'] = $location.search()['per_page'] || entriesPerPage;
|
64
64
|
|
65
|
+
nutupaneParams = nutupaneParams || {};
|
66
|
+
self.disableAutoLoad = nutupaneParams.disableAutoLoad || false;
|
65
67
|
self.searchKey = action ? action + 'Search' : 'search';
|
66
68
|
|
67
69
|
self.table = {
|
@@ -138,6 +140,9 @@ angular.module('Bastion.components').factory('Nutupane',
|
|
138
140
|
table.working = false;
|
139
141
|
table.refreshing = false;
|
140
142
|
table.initialLoad = false;
|
143
|
+
}).$promise.catch(function() {
|
144
|
+
table.working = false;
|
145
|
+
table.refreshing = false;
|
141
146
|
});
|
142
147
|
|
143
148
|
return deferred.promise;
|
@@ -341,6 +346,11 @@ angular.module('Bastion.components').factory('Nutupane',
|
|
341
346
|
self.table.resource.total += 1;
|
342
347
|
};
|
343
348
|
|
349
|
+
self.table.hasPagination = function () {
|
350
|
+
return self.table.resource && self.table.resource.subtotal && self.table.resource.page &&
|
351
|
+
self.table.resource.per_page && self.table.resource.offset;
|
352
|
+
};
|
353
|
+
|
344
354
|
self.table.onFirstPage = function () {
|
345
355
|
return self.table.resource.page === 1;
|
346
356
|
};
|
@@ -464,8 +474,9 @@ angular.module('Bastion.components').factory('Nutupane',
|
|
464
474
|
self.table.searchTerm = $location.search()[self.searchKey];
|
465
475
|
};
|
466
476
|
|
467
|
-
|
468
|
-
|
477
|
+
if (!self.disableAutoLoad) {
|
478
|
+
self.load();
|
479
|
+
}
|
469
480
|
};
|
470
481
|
|
471
482
|
return Nutupane;
|
@@ -70,7 +70,7 @@
|
|
70
70
|
<div data-block="table"></div>
|
71
71
|
|
72
72
|
<form class="content-view-pf-pagination table-view-pf-pagination clearfix">
|
73
|
-
<div class="form-group">
|
73
|
+
<div class="form-group" ng-show="table.hasPagination()">
|
74
74
|
<div class="pagination-pf-pagesize">
|
75
75
|
<select class="form-control" ng-model="table.params.per_page" ng-change="table.updatePageSize()"
|
76
76
|
ng-options="value for value in table.pageSizes">
|
@@ -78,7 +78,7 @@
|
|
78
78
|
</div>
|
79
79
|
<span translate>per page</span>
|
80
80
|
</div>
|
81
|
-
<div class="form-group">
|
81
|
+
<div class="form-group" ng-show="table.hasPagination()">
|
82
82
|
<span>
|
83
83
|
<span class="pagination-pf-items-current" translate>Showing {{ table.getPageStart() }} - {{ table.getPageEnd() }}</span>
|
84
84
|
<span translate>of </span>
|
data/lib/bastion/engine.rb
CHANGED
@@ -20,6 +20,7 @@ module Bastion
|
|
20
20
|
|
21
21
|
initializer "bastion.configure_assets", :group => :all do |app|
|
22
22
|
SETTINGS[:bastion] = {:assets => {}} if SETTINGS[:bastion].nil?
|
23
|
+
SETTINGS[:bastion][:assets] = {} if SETTINGS[:bastion][:assets].nil?
|
23
24
|
|
24
25
|
SETTINGS[:bastion][:assets][:precompile] = [
|
25
26
|
'bastion/bastion.css',
|
@@ -42,6 +43,12 @@ module Bastion
|
|
42
43
|
app.config.angular_templates.ignore_prefix = %w([bastion]*\/+)
|
43
44
|
end
|
44
45
|
|
46
|
+
initializer 'bastion.register_plugin', :before => :finisher_hook do
|
47
|
+
Foreman::Plugin.register :bastion do
|
48
|
+
requires_foreman '>= 1.16'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
45
52
|
rake_tasks do
|
46
53
|
load "#{Bastion::Engine.root}/Rakefile"
|
47
54
|
end
|
data/lib/bastion/version.rb
CHANGED
@@ -2,6 +2,7 @@ describe('Factory: Nutupane', function() {
|
|
2
2
|
var $timeout,
|
3
3
|
$location,
|
4
4
|
$rootScope,
|
5
|
+
$q,
|
5
6
|
Resource,
|
6
7
|
TableCache,
|
7
8
|
entriesPerPage,
|
@@ -26,18 +27,32 @@ describe('Factory: Nutupane', function() {
|
|
26
27
|
$provide.value('TableCache', TableCache);
|
27
28
|
}));
|
28
29
|
|
29
|
-
beforeEach(
|
30
|
+
beforeEach(inject(function(_$location_, _$timeout_, _Nutupane_, _$rootScope_, _$q_) {
|
31
|
+
$location = _$location_;
|
32
|
+
$timeout = _$timeout_;
|
33
|
+
Nutupane = _Nutupane_;
|
34
|
+
$rootScope = _$rootScope_;
|
35
|
+
$q = _$q_;
|
36
|
+
|
30
37
|
expectedResult = [{id: 2, value: "value2"}, {id:3, value: "value3"},
|
31
38
|
{id: 4, value: "value4"}, {id:5, value: "value5"}];
|
32
39
|
Resource = {
|
33
40
|
queryPaged: function(params, callback) {
|
34
|
-
var result = {
|
41
|
+
var result = {
|
42
|
+
page: 1,
|
43
|
+
results: expectedResult,
|
44
|
+
subtotal: 8,
|
45
|
+
per_page: 2,
|
46
|
+
$promise: $q.resolve()
|
47
|
+
};
|
35
48
|
if (callback) {
|
36
49
|
callback(result);
|
37
50
|
}
|
38
51
|
return result;
|
39
52
|
},
|
40
|
-
customAction: function() {
|
53
|
+
customAction: function(params, callback) {
|
54
|
+
return {$promise: $q.resolve()};
|
55
|
+
},
|
41
56
|
page: 1,
|
42
57
|
per_page: 2,
|
43
58
|
total: 10,
|
@@ -50,13 +65,6 @@ describe('Factory: Nutupane', function() {
|
|
50
65
|
};
|
51
66
|
}));
|
52
67
|
|
53
|
-
beforeEach(inject(function(_$location_, _$timeout_, _Nutupane_, _$rootScope_) {
|
54
|
-
$location = _$location_;
|
55
|
-
$timeout = _$timeout_;
|
56
|
-
Nutupane = _Nutupane_;
|
57
|
-
$rootScope = _$rootScope_;
|
58
|
-
}));
|
59
|
-
|
60
68
|
describe("adds additional functionality to the Nutupane table by", function() {
|
61
69
|
var nutupane;
|
62
70
|
|
@@ -144,7 +152,7 @@ describe('Factory: Nutupane', function() {
|
|
144
152
|
});
|
145
153
|
|
146
154
|
it("providing a method to perform a search", function() {
|
147
|
-
spyOn(Resource, 'queryPaged');
|
155
|
+
spyOn(Resource, 'queryPaged').and.callThrough();
|
148
156
|
|
149
157
|
nutupane.table.search();
|
150
158
|
|
@@ -203,6 +211,12 @@ describe('Factory: Nutupane', function() {
|
|
203
211
|
expect(nutupane.table.numSelected).toBe(0);
|
204
212
|
});
|
205
213
|
|
214
|
+
it("provides a way to check if the table supports pagination", function () {
|
215
|
+
expect(nutupane.table.hasPagination()).toBeTruthy();
|
216
|
+
nutupane.table.resource.subtotal = null;
|
217
|
+
expect(nutupane.table.hasPagination()).toBeFalsy();
|
218
|
+
});
|
219
|
+
|
206
220
|
it("provides a way to tell if on the first page", function () {
|
207
221
|
nutupane.table.firstPage();
|
208
222
|
expect(nutupane.table.onFirstPage()).toBe(true);
|
@@ -391,11 +405,11 @@ describe('Factory: Nutupane', function() {
|
|
391
405
|
});
|
392
406
|
|
393
407
|
describe("provides a way to sort the table", function() {
|
394
|
-
it
|
408
|
+
it("defaults the sort to ascending if the previous sort does not match the new sort.", function() {
|
395
409
|
var expectedParams = {sort_by: 'name', sort_order: 'ASC', search: '', paged: true, page: 1, per_page: entriesPerPage};
|
396
410
|
nutupane.table.resource.sort = {};
|
397
411
|
|
398
|
-
spyOn(Resource, 'queryPaged');
|
412
|
+
spyOn(Resource, 'queryPaged').and.callThrough();
|
399
413
|
nutupane.table.sortBy({id: "name"});
|
400
414
|
|
401
415
|
expect(Resource.queryPaged).toHaveBeenCalledWith(expectedParams, jasmine.any(Function));
|
@@ -408,7 +422,7 @@ describe('Factory: Nutupane', function() {
|
|
408
422
|
order: 'ASC'
|
409
423
|
};
|
410
424
|
|
411
|
-
spyOn(Resource, 'queryPaged');
|
425
|
+
spyOn(Resource, 'queryPaged').and.callThrough();
|
412
426
|
nutupane.table.sortBy({id: "name"});
|
413
427
|
|
414
428
|
expect(Resource.queryPaged).toHaveBeenCalledWith(expectedParams, jasmine.any(Function));
|
@@ -439,14 +453,13 @@ describe('Factory: Nutupane', function() {
|
|
439
453
|
});
|
440
454
|
|
441
455
|
it("provide a method to fetch records for the table via a custom action", function() {
|
442
|
-
spyOn(Resource, 'customAction');
|
456
|
+
spyOn(Resource, 'customAction').and.callThrough();
|
443
457
|
nutupane.query();
|
444
458
|
|
445
459
|
expect(Resource.customAction).toHaveBeenCalled();
|
446
460
|
});
|
447
461
|
|
448
462
|
it("naming the URL search field based off the action", function() {
|
449
|
-
spyOn(Resource, 'customAction');
|
450
463
|
nutupane.table.search('*');
|
451
464
|
|
452
465
|
expect($location.search()['customActionSearch']).toBe('*');
|
@@ -457,7 +470,48 @@ describe('Factory: Nutupane', function() {
|
|
457
470
|
|
458
471
|
expect(nutupane.getParams()['test']).toBe('ABC');
|
459
472
|
});
|
460
|
-
});
|
461
473
|
|
474
|
+
it("be able to disable auto-load", function() {
|
475
|
+
spyOn(Resource, 'customAction')
|
476
|
+
nutupane = new Nutupane(Resource, {}, 'customAction', {'disableAutoLoad': true});
|
477
|
+
expect(nutupane.disableAutoLoad).toBe(true);
|
478
|
+
expect(Resource.customAction).not.toHaveBeenCalled();
|
479
|
+
});
|
480
|
+
|
481
|
+
it("be able to load results after initialization", function() {
|
482
|
+
spyOn(Resource, 'customAction').and.callThrough();
|
483
|
+
nutupane = new Nutupane(Resource, {}, 'customAction', {'disableAutoLoad': true});
|
484
|
+
expect(nutupane.disableAutoLoad).toBe(true);
|
485
|
+
nutupane.refresh();
|
486
|
+
expect(Resource.customAction).toHaveBeenCalled();
|
487
|
+
});
|
488
|
+
|
489
|
+
it("be able to enable autoload", function() {
|
490
|
+
spyOn(Resource, 'customAction').and.callThrough();
|
491
|
+
nutupane = new Nutupane(Resource, {}, 'customAction', {'disableAutoLoad': false});
|
492
|
+
expect(nutupane.disableAutoLoad).toBe(false);
|
493
|
+
expect(Resource.customAction).toHaveBeenCalled();
|
494
|
+
});
|
495
|
+
|
496
|
+
describe("when there was an error loading the resource", function() {
|
497
|
+
beforeEach(function() {
|
498
|
+
spyOn(Resource, 'customAction').and.callFake(function() {
|
499
|
+
return {
|
500
|
+
$promise: $q.reject('internal server error')
|
501
|
+
};
|
502
|
+
});
|
503
|
+
nutupane.load();
|
504
|
+
$rootScope.$apply();
|
505
|
+
});
|
506
|
+
|
507
|
+
it("ensures the table is not in 'refreshing' state", function() {
|
508
|
+
expect(nutupane.table.refreshing).toBe(false);
|
509
|
+
});
|
510
|
+
|
511
|
+
it("ensures the table is not in 'working' state", function() {
|
512
|
+
expect(nutupane.table.working).toBe(false);
|
513
|
+
});
|
514
|
+
});
|
515
|
+
});
|
462
516
|
});
|
463
517
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bastion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric D Helms
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: angular-rails-templates
|
@@ -1760,47 +1760,47 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1760
1760
|
version: '0'
|
1761
1761
|
requirements: []
|
1762
1762
|
rubyforge_project:
|
1763
|
-
rubygems_version: 2.
|
1763
|
+
rubygems_version: 2.6.11
|
1764
1764
|
signing_key:
|
1765
1765
|
specification_version: 4
|
1766
1766
|
summary: UI library of AngularJS based components for Foreman
|
1767
1767
|
test_files:
|
1768
|
-
- test/features/bst-feature-flag.directive.test.js
|
1769
|
-
- test/features/feature-flag.service.test.js
|
1770
1768
|
- test/auth/authorization.service.test.js
|
1769
|
+
- test/bastion/test-constants.js
|
1770
|
+
- test/components/bst-alert.directive.test.js
|
1771
|
+
- test/components/bst-alerts.directive.test.js
|
1772
|
+
- test/components/bst-bookmark.directive.test.js
|
1773
|
+
- test/components/bst-bookmark.factory.test.js
|
1774
|
+
- test/components/bst-dropdown.directive.test.js
|
1775
|
+
- test/components/bst-edit.directive.test.js
|
1776
|
+
- test/components/bst-flyout.directive.test.js
|
1777
|
+
- test/components/bst-form-buttons.directive.test.js
|
1771
1778
|
- test/components/bst-form-group.directive.test.js
|
1772
|
-
- test/components/bst-
|
1773
|
-
- test/components/page-title.directive.test.js
|
1779
|
+
- test/components/bst-global-notification.directive.test.js
|
1774
1780
|
- test/components/bst-menu.directive.test.js
|
1775
|
-
- test/components/bst-
|
1776
|
-
- test/components/
|
1777
|
-
- test/components/path-selector.directive.test.js
|
1781
|
+
- test/components/bst-modal.directive.test.js
|
1782
|
+
- test/components/bst-table.directive.test.js
|
1778
1783
|
- test/components/formatters/array-to-string.filter.test.js
|
1779
|
-
- test/components/formatters/
|
1784
|
+
- test/components/formatters/boolean-to-yes-no.filter.test.js
|
1780
1785
|
- test/components/formatters/capitalize.filter.test.js
|
1781
1786
|
- test/components/formatters/key-value-to-string.filter.test.js
|
1782
|
-
- test/components/formatters/
|
1787
|
+
- test/components/formatters/unlimited-filter.filter.test.js
|
1788
|
+
- test/components/global-notification.service.test.js
|
1789
|
+
- test/components/nutupane.factory.test.js
|
1790
|
+
- test/components/page-title.directive.test.js
|
1783
1791
|
- test/components/page-title.service.test.js
|
1784
|
-
- test/components/
|
1785
|
-
- test/components/bst-alert.directive.test.js
|
1786
|
-
- test/components/bst-bookmark.directive.test.js
|
1787
|
-
- test/components/bst-global-notification.directive.test.js
|
1788
|
-
- test/components/bst-flyout.directive.test.js
|
1792
|
+
- test/components/path-selector.directive.test.js
|
1789
1793
|
- test/components/table-cache.service.test.js
|
1790
|
-
- test/components/bst-dropdown.directive.test.js
|
1791
1794
|
- test/components/typeahead-empty.directive.test.js
|
1792
|
-
- test/
|
1793
|
-
- test/
|
1794
|
-
- test/
|
1795
|
-
- test/
|
1795
|
+
- test/features/bst-feature-flag.directive.test.js
|
1796
|
+
- test/features/feature-flag.service.test.js
|
1797
|
+
- test/i18n/translate.service.test.js
|
1798
|
+
- test/menu/menu-expander.service.test.js
|
1796
1799
|
- test/routing.module.test.js
|
1797
1800
|
- test/test-mocks.module.js
|
1798
|
-
- test/
|
1799
|
-
- test/i18n/translate.service.test.js
|
1800
|
-
- test/bastion/test-constants.js
|
1801
|
-
- test/utils/form-utils.service.test.js
|
1801
|
+
- test/utils/bastion-resource.factory.test.js
|
1802
1802
|
- test/utils/disable-link.directive.test.js
|
1803
|
+
- test/utils/form-utils.service.test.js
|
1804
|
+
- test/utils/round-up.filter.test.js
|
1803
1805
|
- test/utils/stop-event.directive.test.js
|
1804
|
-
- test/utils/bastion-resource.factory.test.js
|
1805
1806
|
- test/utils/urlencode.filter.test.js
|
1806
|
-
- test/utils/round-up.filter.test.js
|