bastion 2.0.4 → 2.1.0
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 -13
- data/app/assets/javascripts/bastion/components/bst-bookmark.directive.js +62 -0
- data/app/assets/javascripts/bastion/components/bst-bookmark.factory.js +19 -0
- data/app/assets/javascripts/bastion/components/bst-modal.directive.js +35 -33
- data/app/assets/javascripts/bastion/components/views/bst-bookmark.html +46 -0
- data/app/assets/javascripts/bastion/layouts/nutupane.html +9 -2
- data/lib/bastion/version.rb +1 -1
- data/test/components/bst-bookmark.directive.test.js +145 -0
- data/test/components/bst-bookmark.factory.test.js +31 -0
- metadata +37 -29
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
             | 
| 5 | 
            -
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                OGUyMzQ1ZWQxODI1NTE0MmQ2YWY0N2Q3YmJiM2E3OWI5MjcyMmRhYQ==
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 2b5c8f13cfb5327ac09ecd123a93eafd564affa1
         | 
| 4 | 
            +
              data.tar.gz: 1e385621752b7030f54cc6883237c9b891c5e1cc
         | 
| 7 5 | 
             
            SHA512:
         | 
| 8 | 
            -
              metadata.gz:  | 
| 9 | 
            -
             | 
| 10 | 
            -
                NTNhODE3MGY1ZDJiOTUxYWQ1YTY5MWQxMGM3NDU0YWY3NTg1YjgyYzk4Zjc0
         | 
| 11 | 
            -
                MTQyNzYzNTk3ZDFhMmRiMTcwZDU3MjQ2YTE2OGFhMWU3MDIzNTY=
         | 
| 12 | 
            -
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                NjlkZDg2Y2IwMzM4YmQ1N2IwMTI4MzJhNmVhOGJhYzVjNzEzYzQ5M2JmYjc1
         | 
| 14 | 
            -
                ODUxNDY4MTVjMjVlNThhOWEyYmVjNzViMjQ1NTViNjkxN2ZiOTQ4YjQyMjg0
         | 
| 15 | 
            -
                YzA2MDFlY2IzNTY4YWY2ZjI2YmU1YTJjMmVlZjMxYTBkMjAzZGY=
         | 
| 6 | 
            +
              metadata.gz: d45c125536689e914b9669634864ecf76b610adbea30f68a93c24856dd3e179ee590fad0edd58167d786734391b64e122b9e40ba9917a715270e141326b20a4e
         | 
| 7 | 
            +
              data.tar.gz: 39f6aaec0260871e53a94350f22cb0097e7fd0b6a9cbed0831283b1a4e13839985cc09cab5db0a436ff9fc8341bdf651b2d8236e35207d7ac0705cb2434bddfe
         | 
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            /**
         | 
| 2 | 
            +
            * @ngdoc directive
         | 
| 3 | 
            +
            * @name Bastion.components.directive:bookmark
         | 
| 4 | 
            +
            *
         | 
| 5 | 
            +
            * @requires BstBookmark
         | 
| 6 | 
            +
            *
         | 
| 7 | 
            +
            * @description
         | 
| 8 | 
            +
            * Provides the bookmarked items for a dropdown menu
         | 
| 9 | 
            +
            */
         | 
| 10 | 
            +
            angular.module('Bastion.components').directive('bstBookmark', ['BstBookmark', function (BstBookmark) {
         | 
| 11 | 
            +
                return {
         | 
| 12 | 
            +
                    scope: {
         | 
| 13 | 
            +
                        controllerName: '=',
         | 
| 14 | 
            +
                        query: '='
         | 
| 15 | 
            +
                    },
         | 
| 16 | 
            +
                    templateUrl: 'components/views/bst-bookmark.html',
         | 
| 17 | 
            +
                    controller: ['$scope', 'translate', function ($scope, translate) {
         | 
| 18 | 
            +
                        $scope.newBookmark = {};
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                        $scope.load = function () {
         | 
| 21 | 
            +
                            BstBookmark.queryPaged({search: 'controller=' + $scope.controllerName}, function (response) {
         | 
| 22 | 
            +
                                $scope.bookmarks = response.results;
         | 
| 23 | 
            +
                            });
         | 
| 24 | 
            +
                        };
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                        $scope.add = function () {
         | 
| 27 | 
            +
                            if (angular.isDefined($scope.query)) {
         | 
| 28 | 
            +
                                $scope.newBookmark.query = $scope.query.trim();
         | 
| 29 | 
            +
                            }
         | 
| 30 | 
            +
                            $scope.openModal();
         | 
| 31 | 
            +
                        };
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                        $scope.save = function () {
         | 
| 34 | 
            +
                            var params, success, error;
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                            params = {
         | 
| 37 | 
            +
                                name: $scope.newBookmark.name,
         | 
| 38 | 
            +
                                query: $scope.newBookmark.query,
         | 
| 39 | 
            +
                                public: $scope.newBookmark.public,
         | 
| 40 | 
            +
                                controller: $scope.controllerName
         | 
| 41 | 
            +
                            };
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                            success = function () {
         | 
| 44 | 
            +
                                $scope.bookmarks = $scope.load();
         | 
| 45 | 
            +
                                $scope.$parent.successMessages = [translate('Bookmark was successfully created.')];
         | 
| 46 | 
            +
                            };
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                            error = function (response) {
         | 
| 49 | 
            +
                                $scope.$parent.errorMessages = [response.data.error.full_messages];
         | 
| 50 | 
            +
                            };
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                            BstBookmark.create(params, success, error);
         | 
| 53 | 
            +
                        };
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                        $scope.setQuery = function (bookmark) {
         | 
| 56 | 
            +
                            $scope.query = bookmark.query;
         | 
| 57 | 
            +
                        };
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                        $scope.load();
         | 
| 60 | 
            +
                    }]
         | 
| 61 | 
            +
                };
         | 
| 62 | 
            +
            }]);
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            /**
         | 
| 2 | 
            +
             * @ngdoc service
         | 
| 3 | 
            +
             * @name  Bastion.components.service:BstBookmark
         | 
| 4 | 
            +
             *
         | 
| 5 | 
            +
             * @requires BastionResource
         | 
| 6 | 
            +
             *
         | 
| 7 | 
            +
             * @description
         | 
| 8 | 
            +
             *   Provides a BastionResource for bst-bookmarks.
         | 
| 9 | 
            +
             */
         | 
| 10 | 
            +
            angular.module('Bastion.components').factory('BstBookmark',
         | 
| 11 | 
            +
                ['BastionResource', function (BastionResource) {
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    return BastionResource('/api/v2/bookmarks', {id: '@id'},
         | 
| 14 | 
            +
                        {
         | 
| 15 | 
            +
                            create: { method: 'POST' }
         | 
| 16 | 
            +
                        }
         | 
| 17 | 
            +
                    );
         | 
| 18 | 
            +
                }]
         | 
| 19 | 
            +
            );
         | 
| @@ -12,52 +12,54 @@ | |
| 12 12 | 
             
            angular.module('Bastion.components').directive('bstModal',
         | 
| 13 13 | 
             
                ['$templateCache', '$modal', function ($templateCache, $modal) {
         | 
| 14 14 | 
             
                return {
         | 
| 15 | 
            -
                    transclude: true,
         | 
| 16 15 | 
             
                    scope: {
         | 
| 17 16 | 
             
                        action: '&bstModal',
         | 
| 18 17 | 
             
                        modelName: '@model',
         | 
| 19 18 | 
             
                        model: '='
         | 
| 20 19 | 
             
                    },
         | 
| 21 | 
            -
                     | 
| 22 | 
            -
                        var  | 
| 20 | 
            +
                    compile: function(tElement) {
         | 
| 21 | 
            +
                        var template = angular.element('<div extend-template="components/views/bst-modal.html"></div>'), modalId;
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                        template.append(tElement.children());
         | 
| 24 | 
            +
                        tElement.html('');
         | 
| 25 | 
            +
                        tElement = angular.element(template);
         | 
| 23 26 |  | 
| 24 27 | 
             
                        modalId = 'bstModal%d.html'.replace('%d', Math.random().toString());
         | 
| 28 | 
            +
                        $templateCache.put(modalId, tElement);
         | 
| 25 29 |  | 
| 26 | 
            -
                         | 
| 27 | 
            -
                             | 
| 30 | 
            +
                        return function (scope) {
         | 
| 31 | 
            +
                            var modalInstance, modalController;
         | 
| 28 32 |  | 
| 29 | 
            -
                            $scope | 
| 30 | 
            -
                                $ | 
| 31 | 
            -
                            };
         | 
| 33 | 
            +
                            modalController = ['$scope', '$modalInstance', 'model', function ($scope, $modalInstance, model) {
         | 
| 34 | 
            +
                                $scope[scope.modelName] = model;
         | 
| 32 35 |  | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
                        }];
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                        scope.openModal = function () {
         | 
| 39 | 
            -
                            modalInstance = $modal.open({
         | 
| 40 | 
            -
                                templateUrl: modalId,
         | 
| 41 | 
            -
                                controller: modalController,
         | 
| 42 | 
            -
                                resolve: {
         | 
| 43 | 
            -
                                    model: function () {
         | 
| 44 | 
            -
                                        return scope[scope.modelName];
         | 
| 45 | 
            -
                                    }
         | 
| 46 | 
            -
                                }
         | 
| 47 | 
            -
                            });
         | 
| 36 | 
            +
                                $scope.ok = function () {
         | 
| 37 | 
            +
                                    $modalInstance.close();
         | 
| 38 | 
            +
                                };
         | 
| 48 39 |  | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 40 | 
            +
                                $scope.cancel = function () {
         | 
| 41 | 
            +
                                    $modalInstance.dismiss('cancel');
         | 
| 42 | 
            +
                                };
         | 
| 43 | 
            +
                            }];
         | 
| 53 44 |  | 
| 54 | 
            -
             | 
| 45 | 
            +
                            scope.openModal = function () {
         | 
| 46 | 
            +
                                modalInstance = $modal.open({
         | 
| 47 | 
            +
                                    templateUrl: modalId,
         | 
| 48 | 
            +
                                    controller: modalController,
         | 
| 49 | 
            +
                                    resolve: {
         | 
| 50 | 
            +
                                        model: function () {
         | 
| 51 | 
            +
                                            return scope.model;
         | 
| 52 | 
            +
                                        }
         | 
| 53 | 
            +
                                    }
         | 
| 54 | 
            +
                                });
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                                modalInstance.result.then(function () {
         | 
| 57 | 
            +
                                    scope.action();
         | 
| 58 | 
            +
                                });
         | 
| 59 | 
            +
                            };
         | 
| 55 60 |  | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
                            template.append(clone);
         | 
| 59 | 
            -
                            $templateCache.put(modalId, template);
         | 
| 60 | 
            -
                        });
         | 
| 61 | 
            +
                            scope.$parent.openModal = scope.openModal;
         | 
| 62 | 
            +
                        };
         | 
| 61 63 | 
             
                    }
         | 
| 62 64 | 
             
                };
         | 
| 63 65 | 
             
            }]);
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            <li ng-show="bookmarks.length === 0">
         | 
| 2 | 
            +
              <a translate>No Bookmarks</a>
         | 
| 3 | 
            +
            </li>
         | 
| 4 | 
            +
            <li ng-repeat="bookmark in bookmarks">
         | 
| 5 | 
            +
              <a ng-click="setQuery(bookmark)" class="ng-scope">{{ bookmark.name }}</a>
         | 
| 6 | 
            +
            </li>
         | 
| 7 | 
            +
            <li class="divider"></li>
         | 
| 8 | 
            +
            <li>
         | 
| 9 | 
            +
              <a ng-click="add()" translate class="ng-scope">Bookmark this search</a>
         | 
| 10 | 
            +
            </li>
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            <div bst-modal="save()" model="newBookmark">
         | 
| 13 | 
            +
              <span>{{ bookmark.query }}</span>
         | 
| 14 | 
            +
              <div data-block="modal-header" translate>Add Bookmark</div>
         | 
| 15 | 
            +
              <div data-block="modal-body">
         | 
| 16 | 
            +
                <form name="bookmarkForm" class="form-horizontal" novalidate role="form">
         | 
| 17 | 
            +
                  <div bst-form-group label="{{ 'Name' | translate }}">
         | 
| 18 | 
            +
                    <input id="name"
         | 
| 19 | 
            +
                           name="name"
         | 
| 20 | 
            +
                           ng-model="newBookmark.name"
         | 
| 21 | 
            +
                           type="text"
         | 
| 22 | 
            +
                           tabindex="1"
         | 
| 23 | 
            +
                           autofocus
         | 
| 24 | 
            +
                           required/>
         | 
| 25 | 
            +
                  </div>
         | 
| 26 | 
            +
                  <div bst-form-group label="{{ 'Search query' | translate }}">
         | 
| 27 | 
            +
                    <input id="query"
         | 
| 28 | 
            +
                           name="query"
         | 
| 29 | 
            +
                           ng-model="newBookmark.query"
         | 
| 30 | 
            +
                           type="text"
         | 
| 31 | 
            +
                           tabindex="1"
         | 
| 32 | 
            +
                           autofocus
         | 
| 33 | 
            +
                           required/>
         | 
| 34 | 
            +
                  </div>
         | 
| 35 | 
            +
                  <div bst-form-group label="{{ 'Public' | translate }}">
         | 
| 36 | 
            +
                    <input id="public"
         | 
| 37 | 
            +
                           name="public"
         | 
| 38 | 
            +
                           ng-model="newBookmark.public"
         | 
| 39 | 
            +
                           type="checkbox"
         | 
| 40 | 
            +
                           tabindex="1"
         | 
| 41 | 
            +
                           autofocus/>
         | 
| 42 | 
            +
                  </div>
         | 
| 43 | 
            +
                </form>
         | 
| 44 | 
            +
              </div>
         | 
| 45 | 
            +
              <div data-block="modal-confirm-button" translate>Save</div>
         | 
| 46 | 
            +
            </div>
         | 
| @@ -23,7 +23,7 @@ | |
| 23 23 | 
             
                  <div class="input-group input-group">
         | 
| 24 24 | 
             
                    <input type="text"
         | 
| 25 25 | 
             
                           class="form-control"
         | 
| 26 | 
            -
                           placeholder="{{ ' | 
| 26 | 
            +
                           placeholder="{{ 'Filter...' | translate }}"
         | 
| 27 27 | 
             
                           bst-on-enter="table.search(table.searchTerm)"
         | 
| 28 28 | 
             
                           ng-model="table.searchTerm"
         | 
| 29 29 | 
             
                           ng-trim="false"
         | 
| @@ -31,7 +31,14 @@ | |
| 31 31 | 
             
                           typeahead-empty
         | 
| 32 32 | 
             
                           typeahead-template-url="components/views/autocomplete-scoped-search.html"/>
         | 
| 33 33 | 
             
                    <span class="input-group-btn">
         | 
| 34 | 
            -
                      <button ng-click="table.search(table.searchTerm)" class="btn btn-default" type="button" | 
| 34 | 
            +
                      <button ng-click="table.search(table.searchTerm)" class="btn btn-default" type="button">
         | 
| 35 | 
            +
                        <i class="fa fa-search"></i>
         | 
| 36 | 
            +
                        <span translate>Search</span>
         | 
| 37 | 
            +
                      </button>
         | 
| 38 | 
            +
                      <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
         | 
| 39 | 
            +
                        <i class="fa fa-caret-down"></i>
         | 
| 40 | 
            +
                      </button>
         | 
| 41 | 
            +
                      <ul bst-bookmark controller-name="controllerName" query="table.searchTerm" class="dropdown-menu pull-right"></ul>
         | 
| 35 42 | 
             
                    </span>
         | 
| 36 43 | 
             
                  </div>
         | 
| 37 44 | 
             
                </div>
         | 
    
        data/lib/bastion/version.rb
    CHANGED
    
    
| @@ -0,0 +1,145 @@ | |
| 1 | 
            +
            describe('Directive: bstBookmark', function() {
         | 
| 2 | 
            +
                var scope,
         | 
| 3 | 
            +
                    compile,
         | 
| 4 | 
            +
                    compileDirective,
         | 
| 5 | 
            +
                    element,
         | 
| 6 | 
            +
                    elementScope,
         | 
| 7 | 
            +
                    BstBookmark,
         | 
| 8 | 
            +
                    bookmarks,
         | 
| 9 | 
            +
                    $modal;
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                compileDirective = function () {
         | 
| 12 | 
            +
                    compile(element)(scope);
         | 
| 13 | 
            +
                    scope.$digest();
         | 
| 14 | 
            +
                };
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                beforeEach(module('Bastion.test-mocks', 'Bastion.components', 'components/views/bst-bookmark.html'));
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                beforeEach(module(function($provide) {
         | 
| 19 | 
            +
                    var translate = function() {
         | 
| 20 | 
            +
                        this.$get = function() {
         | 
| 21 | 
            +
                            return function() {};
         | 
| 22 | 
            +
                        };
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                        return this;
         | 
| 25 | 
            +
                    };
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    $modal = {
         | 
| 28 | 
            +
                        $get: function() {
         | 
| 29 | 
            +
                            return this;
         | 
| 30 | 
            +
                        }
         | 
| 31 | 
            +
                    };
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    bookmarks = ['bookmark'];
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    BstBookmark = {
         | 
| 36 | 
            +
                        failed: false,
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                        $get: function() {
         | 
| 39 | 
            +
                            return this;
         | 
| 40 | 
            +
                        },
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                        queryPaged: function (params, callback) {
         | 
| 43 | 
            +
                            callback({results: bookmarks});
         | 
| 44 | 
            +
                        },
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                        create: function (params, success, error) {
         | 
| 47 | 
            +
                            if (this.failed) {
         | 
| 48 | 
            +
                                var response = {
         | 
| 49 | 
            +
                                    data: {
         | 
| 50 | 
            +
                                        error: {
         | 
| 51 | 
            +
                                            full_message: ''
         | 
| 52 | 
            +
                                        }
         | 
| 53 | 
            +
                                    }
         | 
| 54 | 
            +
                                };
         | 
| 55 | 
            +
                                error(response);
         | 
| 56 | 
            +
                            } else {
         | 
| 57 | 
            +
                                success();
         | 
| 58 | 
            +
                            }
         | 
| 59 | 
            +
                        }
         | 
| 60 | 
            +
                    };
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    $provide.provider('$modal', $modal);
         | 
| 63 | 
            +
                    $provide.provider('translate', translate);
         | 
| 64 | 
            +
                    $provide.provider('BstBookmark', BstBookmark);
         | 
| 65 | 
            +
                }));
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                beforeEach(inject(function(_$compile_, _$rootScope_) {
         | 
| 68 | 
            +
                    compile = _$compile_;
         | 
| 69 | 
            +
                    scope = _$rootScope_;
         | 
| 70 | 
            +
                }));
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                beforeEach(function() {
         | 
| 73 | 
            +
                    scope.controllerName = 'controller';
         | 
| 74 | 
            +
                    element = angular.element('<ul bst-bookmark controller-name="controllerName"></ul>');
         | 
| 75 | 
            +
                    compileDirective();
         | 
| 76 | 
            +
                    elementScope = element.isolateScope();
         | 
| 77 | 
            +
                });
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                it("should set bookmarks on the scope", function () {
         | 
| 80 | 
            +
                    spyOn(BstBookmark, 'queryPaged').andCallThrough();
         | 
| 81 | 
            +
                    compileDirective();
         | 
| 82 | 
            +
                    expect(BstBookmark.queryPaged).toHaveBeenCalled();
         | 
| 83 | 
            +
                    expect(elementScope.bookmarks).toEqual(['bookmark']);
         | 
| 84 | 
            +
                });
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                it("should display a <li>", function() {
         | 
| 87 | 
            +
                    expect(element.find('li').length).toBe(4);
         | 
| 88 | 
            +
                });
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                it("should open a modal upon triggering", function() {
         | 
| 91 | 
            +
                    spyOn(elementScope, 'openModal');
         | 
| 92 | 
            +
                    elementScope.add();
         | 
| 93 | 
            +
                    expect(elementScope.openModal).toHaveBeenCalled();
         | 
| 94 | 
            +
                });
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                describe("should save the bookmark", function () {
         | 
| 97 | 
            +
                    var expectedParams;
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                    beforeEach(function () {
         | 
| 100 | 
            +
                        var bookmark = {
         | 
| 101 | 
            +
                            name: 'a bookmark',
         | 
| 102 | 
            +
                            query: 'query',
         | 
| 103 | 
            +
                            public: true
         | 
| 104 | 
            +
                        };
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                        elementScope.newBookmark = bookmark;
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                        expectedParams = {
         | 
| 109 | 
            +
                            name: bookmark.name,
         | 
| 110 | 
            +
                            query: bookmark.query,
         | 
| 111 | 
            +
                            public: bookmark.public,
         | 
| 112 | 
            +
                            controller: scope.controllerName
         | 
| 113 | 
            +
                        };
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                        spyOn(BstBookmark, 'create').andCallThrough();
         | 
| 116 | 
            +
                        spyOn(BstBookmark, 'queryPaged');
         | 
| 117 | 
            +
                    });
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                    afterEach(function () {
         | 
| 120 | 
            +
                        expect(BstBookmark.create).toHaveBeenCalledWith(expectedParams, jasmine.any(Function), jasmine.any(Function));
         | 
| 121 | 
            +
                    });
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                    it("and succeed", function () {
         | 
| 124 | 
            +
                        elementScope.save();
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                        expect(BstBookmark.queryPaged).toHaveBeenCalled();
         | 
| 127 | 
            +
                        expect(elementScope.$parent.successMessages.length).toBe(1);
         | 
| 128 | 
            +
                    });
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                    it("and fail", function () {
         | 
| 131 | 
            +
                        BstBookmark.failed = true;
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                        elementScope.save();
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                        expect(BstBookmark.queryPaged).not.toHaveBeenCalled();
         | 
| 136 | 
            +
                        expect(elementScope.$parent.errorMessages.length).toBe(1);
         | 
| 137 | 
            +
                    });
         | 
| 138 | 
            +
                });
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                it("sets the query on bookmark selection", function () {
         | 
| 141 | 
            +
                    var bookmark = {query: 'blah'};
         | 
| 142 | 
            +
                    elementScope.setQuery(bookmark);
         | 
| 143 | 
            +
                    expect(elementScope.query).toBe(bookmark.query);
         | 
| 144 | 
            +
                });
         | 
| 145 | 
            +
            });
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            describe('Factory: BstBookmark', function() {
         | 
| 2 | 
            +
                var $httpBackend,
         | 
| 3 | 
            +
                    bookmarks,
         | 
| 4 | 
            +
                    BstBookmark;
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                beforeEach(module('Bastion', 'Bastion.components'));
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                beforeEach(module(function() {
         | 
| 9 | 
            +
                    bookmarks = {
         | 
| 10 | 
            +
                        results: [{name:"search1",
         | 
| 11 | 
            +
                                   controller:"controller1",
         | 
| 12 | 
            +
                                   query:"name  =  ak1",
         | 
| 13 | 
            +
                                   public:null}],
         | 
| 14 | 
            +
                        total: 1,
         | 
| 15 | 
            +
                        subtotal: 1
         | 
| 16 | 
            +
                    };
         | 
| 17 | 
            +
                }));
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                beforeEach(inject(function($injector) {
         | 
| 20 | 
            +
                    $httpBackend = $injector.get('$httpBackend');
         | 
| 21 | 
            +
                    BstBookmark = $injector.get('BstBookmark');
         | 
| 22 | 
            +
                }));
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                it('provides a way to create a bookmark', function() {
         | 
| 25 | 
            +
                    $httpBackend.expectPOST('/api/v2/bookmarks').respond(bookmarks.results[0]);
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    BstBookmark.create(function(bookmarks) {
         | 
| 28 | 
            +
                        expect(response).toBeDefined();
         | 
| 29 | 
            +
                    });
         | 
| 30 | 
            +
                });
         | 
| 31 | 
            +
            });
         | 
    
        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: 2.0 | 
| 4 | 
            +
              version: 2.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Eric D Helms
         | 
| @@ -29,28 +29,28 @@ dependencies: | |
| 29 29 | 
             
              name: uglifier
         | 
| 30 30 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 31 31 | 
             
                requirements:
         | 
| 32 | 
            -
                - -  | 
| 32 | 
            +
                - - ">="
         | 
| 33 33 | 
             
                  - !ruby/object:Gem::Version
         | 
| 34 34 | 
             
                    version: '0'
         | 
| 35 35 | 
             
              type: :development
         | 
| 36 36 | 
             
              prerelease: false
         | 
| 37 37 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 38 38 | 
             
                requirements:
         | 
| 39 | 
            -
                - -  | 
| 39 | 
            +
                - - ">="
         | 
| 40 40 | 
             
                  - !ruby/object:Gem::Version
         | 
| 41 41 | 
             
                    version: '0'
         | 
| 42 42 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 43 43 | 
             
              name: less-rails
         | 
| 44 44 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 45 45 | 
             
                requirements:
         | 
| 46 | 
            -
                - - ~>
         | 
| 46 | 
            +
                - - "~>"
         | 
| 47 47 | 
             
                  - !ruby/object:Gem::Version
         | 
| 48 48 | 
             
                    version: 2.5.0
         | 
| 49 49 | 
             
              type: :development
         | 
| 50 50 | 
             
              prerelease: false
         | 
| 51 51 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 52 52 | 
             
                requirements:
         | 
| 53 | 
            -
                - - ~>
         | 
| 53 | 
            +
                - - "~>"
         | 
| 54 54 | 
             
                  - !ruby/object:Gem::Version
         | 
| 55 55 | 
             
                    version: 2.5.0
         | 
| 56 56 | 
             
            description: Bastion provides a UI library of AngularJS based components designed
         | 
| @@ -62,8 +62,8 @@ executables: [] | |
| 62 62 | 
             
            extensions: []
         | 
| 63 63 | 
             
            extra_rdoc_files: []
         | 
| 64 64 | 
             
            files:
         | 
| 65 | 
            -
            - .eslintignore
         | 
| 66 | 
            -
            - .jshintrc
         | 
| 65 | 
            +
            - ".eslintignore"
         | 
| 66 | 
            +
            - ".jshintrc"
         | 
| 67 67 | 
             
            - Gruntfile.js
         | 
| 68 68 | 
             
            - LICENSE
         | 
| 69 69 | 
             
            - README.md
         | 
| @@ -76,6 +76,8 @@ files: | |
| 76 76 | 
             
            - app/assets/javascripts/bastion/bastion.module.js
         | 
| 77 77 | 
             
            - app/assets/javascripts/bastion/components/bst-alert.directive.js
         | 
| 78 78 | 
             
            - app/assets/javascripts/bastion/components/bst-alerts.directive.js
         | 
| 79 | 
            +
            - app/assets/javascripts/bastion/components/bst-bookmark.directive.js
         | 
| 80 | 
            +
            - app/assets/javascripts/bastion/components/bst-bookmark.factory.js
         | 
| 79 81 | 
             
            - app/assets/javascripts/bastion/components/bst-container-scroll.directive.js
         | 
| 80 82 | 
             
            - app/assets/javascripts/bastion/components/bst-dropdown.directive.js
         | 
| 81 83 | 
             
            - app/assets/javascripts/bastion/components/bst-edit.directive.js
         | 
| @@ -104,6 +106,7 @@ files: | |
| 104 106 | 
             
            - app/assets/javascripts/bastion/components/views/autocomplete-scoped-search.html
         | 
| 105 107 | 
             
            - app/assets/javascripts/bastion/components/views/bst-alert.html
         | 
| 106 108 | 
             
            - app/assets/javascripts/bastion/components/views/bst-alerts.html
         | 
| 109 | 
            +
            - app/assets/javascripts/bastion/components/views/bst-bookmark.html
         | 
| 107 110 | 
             
            - app/assets/javascripts/bastion/components/views/bst-dropdown.html
         | 
| 108 111 | 
             
            - app/assets/javascripts/bastion/components/views/bst-edit-add-item.html
         | 
| 109 112 | 
             
            - app/assets/javascripts/bastion/components/views/bst-edit-add-remove-cancel.html
         | 
| @@ -186,6 +189,8 @@ files: | |
| 186 189 | 
             
            - test/bastion/test-constants.js
         | 
| 187 190 | 
             
            - test/components/bst-alert.directive.test.js
         | 
| 188 191 | 
             
            - test/components/bst-alerts.directive.test.js
         | 
| 192 | 
            +
            - test/components/bst-bookmark.directive.test.js
         | 
| 193 | 
            +
            - test/components/bst-bookmark.factory.test.js
         | 
| 189 194 | 
             
            - test/components/bst-container-scroll.directive.test.js
         | 
| 190 195 | 
             
            - test/components/bst-dropdown.directive.test.js
         | 
| 191 196 | 
             
            - test/components/bst-edit.directive.test.js
         | 
| @@ -1146,50 +1151,53 @@ require_paths: | |
| 1146 1151 | 
             
            - lib
         | 
| 1147 1152 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 1148 1153 | 
             
              requirements:
         | 
| 1149 | 
            -
              - -  | 
| 1154 | 
            +
              - - ">="
         | 
| 1150 1155 | 
             
                - !ruby/object:Gem::Version
         | 
| 1151 1156 | 
             
                  version: '0'
         | 
| 1152 1157 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 1153 1158 | 
             
              requirements:
         | 
| 1154 | 
            -
              - -  | 
| 1159 | 
            +
              - - ">="
         | 
| 1155 1160 | 
             
                - !ruby/object:Gem::Version
         | 
| 1156 1161 | 
             
                  version: '0'
         | 
| 1157 1162 | 
             
            requirements: []
         | 
| 1158 1163 | 
             
            rubyforge_project: 
         | 
| 1159 | 
            -
            rubygems_version: 2.4. | 
| 1164 | 
            +
            rubygems_version: 2.4.6
         | 
| 1160 1165 | 
             
            signing_key: 
         | 
| 1161 1166 | 
             
            specification_version: 4
         | 
| 1162 1167 | 
             
            summary: UI library of AngularJS based components for Foreman
         | 
| 1163 1168 | 
             
            test_files:
         | 
| 1164 | 
            -
            - test/bastion/bastion-resource.factory.test.js
         | 
| 1165 | 
            -
            - test/bastion/test-constants.js
         | 
| 1166 1169 | 
             
            - test/features/bst-feature-flag.directive.test.js
         | 
| 1167 1170 | 
             
            - test/features/feature-flag.service.test.js
         | 
| 1168 1171 | 
             
            - test/auth/authorization.service.test.js
         | 
| 1169 | 
            -
            - test/ | 
| 1172 | 
            +
            - test/components/bst-form-group.directive.test.js
         | 
| 1173 | 
            +
            - test/components/bst-table.directive.test.js
         | 
| 1174 | 
            +
            - test/components/page-title.directive.test.js
         | 
| 1170 1175 | 
             
            - test/components/bst-nutupane-table.directive.test.js
         | 
| 1171 | 
            -
            - test/components/bst- | 
| 1172 | 
            -
            - test/components/bst-form-buttons.directive.test.js
         | 
| 1173 | 
            -
            - test/components/typeahead-empty.directive.test.js
         | 
| 1176 | 
            +
            - test/components/bst-menu.directive.test.js
         | 
| 1174 1177 | 
             
            - test/components/bst-alerts.directive.test.js
         | 
| 1175 1178 | 
             
            - test/components/nutupane.factory.test.js
         | 
| 1176 | 
            -
            - test/components/ | 
| 1177 | 
            -
            - test/components/bst-table.directive.test.js
         | 
| 1178 | 
            -
            - test/components/bst-container-scroll.directive.test.js
         | 
| 1179 | 
            -
            - test/components/formatters/capitalize.filter.test.js
         | 
| 1179 | 
            +
            - test/components/path-selector.directive.test.js
         | 
| 1180 1180 | 
             
            - test/components/formatters/array-to-string.filter.test.js
         | 
| 1181 | 
            -
            - test/components/formatters/boolean-to-yes-no.filter.test.js
         | 
| 1182 1181 | 
             
            - test/components/formatters/unlimited-filter.filter.test.js
         | 
| 1182 | 
            +
            - test/components/formatters/capitalize.filter.test.js
         | 
| 1183 1183 | 
             
            - test/components/formatters/key-value-to-string.filter.test.js
         | 
| 1184 | 
            -
            - test/components/ | 
| 1185 | 
            -
            - test/components/bst-edit.directive.test.js
         | 
| 1186 | 
            -
            - test/components/bst-modal.directive.test.js
         | 
| 1187 | 
            -
            - test/components/bst-form-group.directive.test.js
         | 
| 1188 | 
            -
            - test/components/bst-flyout.directive.test.js
         | 
| 1184 | 
            +
            - test/components/formatters/boolean-to-yes-no.filter.test.js
         | 
| 1189 1185 | 
             
            - test/components/page-title.service.test.js
         | 
| 1186 | 
            +
            - test/components/bst-bookmark.factory.test.js
         | 
| 1190 1187 | 
             
            - test/components/bst-alert.directive.test.js
         | 
| 1191 | 
            -
            - test/components/ | 
| 1192 | 
            -
            - test/ | 
| 1193 | 
            -
            - test/ | 
| 1188 | 
            +
            - test/components/bst-container-scroll.directive.test.js
         | 
| 1189 | 
            +
            - test/components/bst-bookmark.directive.test.js
         | 
| 1190 | 
            +
            - test/components/bst-flyout.directive.test.js
         | 
| 1191 | 
            +
            - test/components/bst-dropdown.directive.test.js
         | 
| 1192 | 
            +
            - test/components/typeahead-empty.directive.test.js
         | 
| 1193 | 
            +
            - test/components/bst-form-buttons.directive.test.js
         | 
| 1194 | 
            +
            - test/components/bst-edit.directive.test.js
         | 
| 1195 | 
            +
            - test/components/bst-modal.directive.test.js
         | 
| 1194 1196 | 
             
            - test/test-mocks.module.js
         | 
| 1195 1197 | 
             
            - test/menu/menu-expander.service.test.js
         | 
| 1198 | 
            +
            - test/i18n/translate.service.test.js
         | 
| 1199 | 
            +
            - test/bastion/test-constants.js
         | 
| 1200 | 
            +
            - test/bastion/bastion-resource.factory.test.js
         | 
| 1201 | 
            +
            - test/utils/form-utils.service.test.js
         | 
| 1202 | 
            +
            - test/utils/as.filter.test.js
         | 
| 1203 | 
            +
            has_rdoc: 
         |