kms 0.9.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{vendor/assets/bower_components/Responsive-Dashboard/src/img → app/assets/images}/avatar.jpg +0 -0
- data/app/assets/javascripts/kms/application.js +3 -0
- data/app/assets/javascripts/kms/application/controllers/assets_controller.coffee.erb +14 -7
- data/app/assets/javascripts/kms/application/controllers/pages_controller.coffee.erb +11 -3
- data/app/assets/javascripts/kms/application/controllers/snippets_controller.coffee.erb +3 -0
- data/app/assets/javascripts/kms/application/controllers/templates_controller.coffee.erb +3 -0
- data/app/assets/javascripts/kms/application/controllers/users_controller.coffee +4 -4
- data/app/assets/javascripts/kms/application/routes.coffee.erb +1 -1
- data/app/assets/javascripts/kms/application/services/transliteration_service.js +160 -0
- data/app/assets/javascripts/templates/assets/edit.html.slim +24 -2
- data/app/assets/javascripts/templates/assets/form.html.slim +23 -0
- data/app/assets/javascripts/templates/assets/index.html.slim +13 -12
- data/app/assets/javascripts/templates/assets/new.html.slim +1 -15
- data/app/assets/javascripts/templates/help.html.slim +1 -1
- data/app/assets/javascripts/templates/pages/index.html.slim +16 -5
- data/app/assets/javascripts/templates/snippets/index.html.slim +16 -5
- data/app/assets/javascripts/templates/templates/index.html.slim +16 -6
- data/app/assets/stylesheets/kms/application.css +2 -2
- data/app/assets/stylesheets/kms/custom.css.scss +38 -0
- data/app/controllers/kms/assets_controller.rb +8 -9
- data/app/controllers/kms/pages_controller.rb +10 -11
- data/app/controllers/kms/public/pages_controller.rb +5 -4
- data/app/controllers/kms/public/search_controller.rb +2 -0
- data/app/controllers/kms/settings_controller.rb +1 -1
- data/app/controllers/kms/snippets_controller.rb +2 -1
- data/app/controllers/kms/templates_controller.rb +6 -5
- data/app/controllers/kms/users_controller.rb +11 -8
- data/app/models/ability.rb +1 -0
- data/app/models/concerns/kms/permalinkable.rb +1 -1
- data/app/models/kms/page.rb +13 -4
- data/app/serializers/kms/asset_serializer.rb +6 -0
- data/app/serializers/kms/page_serializer.rb +5 -0
- data/app/serializers/kms/template_serializer.rb +5 -0
- data/app/serializers/kms/user_serializer.rb +5 -0
- data/app/services/kms/page_fetcher.rb +30 -0
- data/app/services/kms/search_service.rb +28 -3
- data/app/services/kms/template_processor.rb +19 -0
- data/app/views/devise/passwords/edit.html.erb +1 -1
- data/app/views/devise/passwords/new.html.erb +1 -1
- data/app/views/devise/registrations/new.html.erb +1 -1
- data/app/views/devise/sessions/new.html.erb +1 -1
- data/app/views/layouts/kms/devise.html.erb +1 -1
- data/app/views/layouts/kms/kms.html.erb +47 -18
- data/config/initializers/externals.rb +6 -32
- data/config/initializers/search.rb +1 -0
- data/config/locales/en.yml +17 -1
- data/config/locales/ru.yml +17 -1
- data/config/routes.rb +7 -6
- data/lib/kms/dependencies.rb +1 -4
- data/lib/kms/engine.rb +1 -2
- data/lib/kms/search_item.rb +18 -0
- data/lib/kms/version.rb +1 -1
- data/spec/controllers/kms/assets_controller_spec.rb +51 -0
- data/spec/controllers/kms/pages_controller_spec.rb +82 -0
- data/spec/controllers/kms/public/pages_controller_spec.rb +30 -0
- data/spec/controllers/kms/snippets_controller_spec.rb +61 -47
- data/spec/controllers/kms/templates_controller_spec.rb +51 -0
- data/spec/controllers/kms/users_controller_spec.rb +56 -0
- data/spec/factories/assets.rb +8 -0
- data/spec/factories/pages.rb +33 -0
- data/spec/factories/templates.rb +20 -0
- data/spec/factories/users.rb +9 -4
- data/spec/internal/config/routes.rb +12 -1
- data/spec/internal/log/test.log +81239 -0
- data/spec/internal/public/404.html +67 -0
- data/spec/internal/public/avatar.jpg +0 -0
- data/spec/internal/public/style.css +1 -0
- data/spec/internal/public/uploads/kms/asset/file/1/avatar.jpg +0 -0
- data/spec/internal/public/uploads/kms/asset/file/2/avatar.jpg +0 -0
- data/spec/internal/public/uploads/kms/asset/file/2/style.css +1 -0
- data/spec/internal/public/uploads/kms/asset/file/3/style.css +1 -0
- data/spec/internal/public/uploads/kms/asset/file/4/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500976987-41025-0002-0883/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977082-41195-0002-6495/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977109-41364-0002-4518/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977152-41405-0002-2345/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977327-41694-0002-5448/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977376-41732-0002-7916/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977392-41759-0002-7593/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977410-42259-0002-7527/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977429-42306-0002-5937/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500977437-42324-0002-5880/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500983228-53594-0002-4559/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500983284-53632-0002-6590/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500983360-53784-0002-7289/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500983469-54321-0002-0386/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500983469-54321-0004-5691/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500983511-54352-0002-5720/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500983511-54352-0004-1399/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500983610-54507-0002-4280/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500983610-54507-0004-9758/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500984466-57012-0002-4146/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500984466-57012-0004-5895/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500984509-57158-0002-9657/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500984509-57158-0004-5003/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500984616-57697-0002-7201/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500984616-57697-0004-6255/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500985257-58947-0002-3629/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500985257-58947-0004-5338/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500985407-58947-0006-5929/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500985473-59264-0002-0397/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500985473-59264-0004-6493/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500985475-59264-0007-8674/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500985538-59468-0002-9206/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500985538-59468-0004-2586/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500985538-59468-0007-6200/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988358-65877-0002-4528/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500988358-65877-0004-5904/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988358-65877-0007-7320/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988407-65916-0002-3138/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500988407-65916-0004-5400/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988407-65916-0007-1655/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988421-65950-0002-9415/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500988421-65950-0004-7130/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988421-65950-0007-9886/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988435-65981-0002-3228/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500988435-65981-0004-3682/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988435-65981-0007-1582/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988475-66122-0002-9516/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500988475-66122-0004-5634/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988530-66122-0007-2272/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988554-66315-0002-6262/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500988554-66315-0004-6099/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500988554-66315-0007-1632/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500991751-73722-0002-9937/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1500991751-73722-0004-8034/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1500991751-73722-0007-7763/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1501233238-34385-0002-3210/avatar.jpg +0 -0
- data/spec/internal/public/uploads/tmp/1501233238-34385-0004-5881/style.css +1 -0
- data/spec/internal/public/uploads/tmp/1501233238-34385-0007-6280/style.css +1 -0
- data/spec/models/kms/page_spec.rb +31 -0
- data/spec/models/kms/template_spec.rb +15 -0
- data/spec/services/kms/page_fetcher_spec.rb +36 -0
- data/spec/services/kms/search_service_spec.rb +53 -0
- data/spec/services/kms/template_processor_spec.rb +20 -0
- data/spec/support/controller_macros.rb +9 -1
- data/vendor/assets/bower.json +3 -2
- data/vendor/assets/bower_components/angular-ui-select/CHANGELOG.md +169 -0
- data/vendor/assets/bower_components/angular-ui-select/CONTRIBUTING.md +161 -0
- data/vendor/assets/bower_components/angular-ui-select/README.md +27 -13
- data/vendor/assets/bower_components/angular-ui-select/bower.json +6 -3
- data/vendor/assets/bower_components/angular-ui-select/composer.json +29 -0
- data/vendor/assets/bower_components/angular-ui-select/deploy-docs.sh +31 -0
- data/vendor/assets/bower_components/angular-ui-select/dist/select.css +48 -2
- data/vendor/assets/bower_components/angular-ui-select/dist/select.js +454 -111
- data/vendor/assets/bower_components/angular-ui-select/dist/select.min.css +2 -2
- data/vendor/assets/bower_components/angular-ui-select/dist/select.min.js +2 -2
- data/vendor/assets/bower_components/angular-ui-select/docs/assets/app.js +1 -0
- data/vendor/assets/bower_components/angular-ui-select/docs/assets/demo.js +461 -0
- data/vendor/assets/bower_components/angular-ui-select/docs/assets/docs.css +339 -0
- data/vendor/assets/bower_components/angular-ui-select/docs/assets/plunkr.js +110 -0
- data/vendor/assets/bower_components/angular-ui-select/docs/index.html +191 -0
- data/vendor/assets/bower_components/angular-ui-select/docs/partials/_footer.html +2 -0
- data/vendor/assets/bower_components/angular-ui-select/docs/partials/_header.html +64 -0
- data/vendor/assets/bower_components/angular-ui-select/index.js +2 -0
- data/vendor/assets/bower_components/angular-ui-select/package.json +36 -15
- data/vendor/assets/bower_components/bootstrap/CHANGELOG.md +5 -0
- data/vendor/assets/bower_components/bootstrap/Gemfile +6 -0
- data/vendor/assets/bower_components/bootstrap/Gemfile.lock +43 -0
- data/vendor/assets/bower_components/bootstrap/Gruntfile.js +176 -145
- data/vendor/assets/bower_components/bootstrap/ISSUE_TEMPLATE.md +22 -0
- data/vendor/assets/bower_components/bootstrap/LICENSE +1 -1
- data/vendor/assets/bower_components/bootstrap/README.md +55 -40
- data/vendor/assets/bower_components/bootstrap/bower.json +5 -9
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css +204 -59
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css.map +1 -1
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +4 -3
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map +1 -0
- data/vendor/assets/bower_components/bootstrap/dist/css/{bootstrap.less → bootstrap.css} +881 -327
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css.map +1 -1
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css +6 -0
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css.map +1 -0
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +272 -213
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.js +549 -286
- data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.min.js +5 -4
- data/vendor/assets/bower_components/bootstrap/dist/js/npm.js +13 -0
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg +272 -213
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/vendor/assets/bower_components/bootstrap/grunt/bs-commonjs-generator.js +30 -0
- data/vendor/assets/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js +5 -4
- data/vendor/assets/bower_components/bootstrap/grunt/bs-lessdoc-parser.js +13 -12
- data/vendor/assets/bower_components/bootstrap/grunt/bs-raw-files-generator.js +6 -8
- data/vendor/assets/bower_components/bootstrap/grunt/change-version.js +109 -0
- data/vendor/assets/bower_components/bootstrap/grunt/configBridge.json +46 -0
- data/vendor/assets/bower_components/bootstrap/grunt/npm-shrinkwrap.json +2679 -0
- data/vendor/assets/bower_components/bootstrap/grunt/sauce_browsers.yml +5 -5
- data/vendor/assets/bower_components/bootstrap/js/affix.js +46 -26
- data/vendor/assets/bower_components/bootstrap/js/alert.js +8 -6
- data/vendor/assets/bower_components/bootstrap/js/button.js +34 -19
- data/vendor/assets/bower_components/bootstrap/js/carousel.js +35 -21
- data/vendor/assets/bower_components/bootstrap/js/collapse.js +69 -27
- data/vendor/assets/bower_components/bootstrap/js/dropdown.js +55 -41
- data/vendor/assets/bower_components/bootstrap/js/modal.js +91 -32
- data/vendor/assets/bower_components/bootstrap/js/popover.js +5 -10
- data/vendor/assets/bower_components/bootstrap/js/scrollspy.js +28 -26
- data/vendor/assets/bower_components/bootstrap/js/tab.js +45 -18
- data/vendor/assets/bower_components/bootstrap/js/tooltip.js +117 -54
- data/vendor/assets/bower_components/bootstrap/js/transition.js +2 -2
- data/vendor/assets/bower_components/bootstrap/less/alerts.less +5 -0
- data/vendor/assets/bower_components/bootstrap/less/badges.less +14 -3
- data/vendor/assets/bower_components/bootstrap/less/bootstrap.less +6 -0
- data/vendor/assets/bower_components/bootstrap/less/button-groups.less +22 -18
- data/vendor/assets/bower_components/bootstrap/less/buttons.less +19 -10
- data/vendor/assets/bower_components/bootstrap/less/carousel.less +34 -7
- data/vendor/assets/bower_components/bootstrap/less/close.less +1 -0
- data/vendor/assets/bower_components/bootstrap/less/code.less +1 -0
- data/vendor/assets/bower_components/bootstrap/less/component-animations.less +3 -1
- data/vendor/assets/bower_components/bootstrap/less/dropdowns.less +9 -8
- data/vendor/assets/bower_components/bootstrap/less/forms.less +123 -50
- data/vendor/assets/bower_components/bootstrap/less/glyphicons.less +75 -3
- data/vendor/assets/bower_components/bootstrap/less/input-groups.less +8 -3
- data/vendor/assets/bower_components/bootstrap/less/jumbotron.less +10 -4
- data/vendor/assets/bower_components/bootstrap/less/list-group.less +10 -11
- data/vendor/assets/bower_components/bootstrap/less/media.less +40 -30
- data/vendor/assets/bower_components/bootstrap/less/mixins.less +1 -0
- data/vendor/assets/bower_components/bootstrap/less/mixins/background-variant.less +2 -1
- data/vendor/assets/bower_components/bootstrap/less/mixins/buttons.less +19 -4
- data/vendor/assets/bower_components/bootstrap/less/mixins/forms.less +5 -1
- data/vendor/assets/bower_components/bootstrap/less/mixins/grid-framework.less +4 -4
- data/vendor/assets/bower_components/bootstrap/less/mixins/grid.less +4 -4
- data/vendor/assets/bower_components/bootstrap/less/mixins/hide-text.less +2 -2
- data/vendor/assets/bower_components/bootstrap/less/mixins/image.less +0 -1
- data/vendor/assets/bower_components/bootstrap/less/mixins/labels.less +1 -1
- data/vendor/assets/bower_components/bootstrap/less/mixins/list-group.less +2 -1
- data/vendor/assets/bower_components/bootstrap/less/mixins/pagination.less +2 -1
- data/vendor/assets/bower_components/bootstrap/less/mixins/reset-text.less +18 -0
- data/vendor/assets/bower_components/bootstrap/less/mixins/responsive-visibility.less +1 -1
- data/vendor/assets/bower_components/bootstrap/less/mixins/tab-focus.less +3 -3
- data/vendor/assets/bower_components/bootstrap/less/mixins/text-emphasis.less +2 -1
- data/vendor/assets/bower_components/bootstrap/less/mixins/vendor-prefixes.less +8 -5
- data/vendor/assets/bower_components/bootstrap/less/modals.less +3 -3
- data/vendor/assets/bower_components/bootstrap/less/navbar.less +30 -25
- data/vendor/assets/bower_components/bootstrap/less/navs.less +1 -1
- data/vendor/assets/bower_components/bootstrap/less/normalize.less +12 -13
- data/vendor/assets/bower_components/bootstrap/less/pager.less +1 -2
- data/vendor/assets/bower_components/bootstrap/less/pagination.less +5 -4
- data/vendor/assets/bower_components/bootstrap/less/panels.less +33 -5
- data/vendor/assets/bower_components/bootstrap/less/popovers.less +5 -7
- data/vendor/assets/bower_components/bootstrap/less/print.less +96 -96
- data/vendor/assets/bower_components/bootstrap/less/progress-bars.less +1 -19
- data/vendor/assets/bower_components/bootstrap/less/responsive-embed.less +10 -9
- data/vendor/assets/bower_components/bootstrap/less/scaffolding.less +13 -2
- data/vendor/assets/bower_components/bootstrap/less/tables.less +14 -13
- data/vendor/assets/bower_components/bootstrap/less/theme.less +49 -16
- data/vendor/assets/bower_components/bootstrap/less/thumbnails.less +1 -1
- data/vendor/assets/bower_components/bootstrap/less/tooltip.less +13 -7
- data/vendor/assets/bower_components/bootstrap/less/type.less +2 -13
- data/vendor/assets/bower_components/bootstrap/less/utilities.less +0 -2
- data/vendor/assets/bower_components/bootstrap/less/variables.less +45 -22
- data/vendor/assets/bower_components/bootstrap/nuget/MyGet.ps1 +8 -0
- data/vendor/assets/bower_components/bootstrap/nuget/bootstrap.less.nuspec +28 -0
- data/vendor/assets/bower_components/bootstrap/nuget/bootstrap.nuspec +28 -0
- data/vendor/assets/bower_components/bootstrap/package.js +32 -0
- data/vendor/assets/bower_components/bootstrap/package.json +49 -41
- data/vendor/assets/bower_components/flow.js/README.md +79 -64
- data/vendor/assets/bower_components/flow.js/bower.json +6 -2
- data/vendor/assets/bower_components/flow.js/dist/flow.js +1635 -1532
- data/vendor/assets/bower_components/flow.js/dist/flow.min.js +2 -2
- data/vendor/assets/bower_components/flow.js/package.js +24 -0
- data/vendor/assets/bower_components/flow.js/travis.sh +19 -0
- data/vendor/assets/bower_components/font-awesome/scss/_path.scss +5 -5
- data/vendor/assets/bower_components/font-awesome/scss/_variables.scss +1 -2
- data/vendor/assets/bower_components/ng-flow/bower.json +1 -1
- data/vendor/assets/bower_components/ng-flow/dist/ng-flow-standalone.js +1655 -1542
- data/vendor/assets/bower_components/ng-flow/dist/ng-flow-standalone.min.js +2 -2
- data/vendor/assets/bower_components/ng-flow/dist/ng-flow.js +19 -9
- data/vendor/assets/bower_components/ng-flow/dist/ng-flow.min.js +2 -2
- data/vendor/assets/bower_components/ng-flow/index.js +3 -0
- data/vendor/assets/bower_components/ng-flow/package.js +25 -0
- data/vendor/assets/bower_components/ng-flow/src/directives/drag-events.js +2 -1
- data/vendor/assets/bower_components/ng-flow/src/directives/events.js +2 -1
- data/vendor/assets/bower_components/ng-flow/src/directives/init.js +7 -1
- data/vendor/assets/bower_components/ng-flow/travis.sh +19 -0
- data/vendor/assets/bower_components/{Responsive-Dashboard → rdash-ui}/LICENSE +21 -21
- data/vendor/assets/bower_components/rdash-ui/README.md +55 -0
- data/vendor/assets/bower_components/rdash-ui/bower.json +33 -0
- data/vendor/assets/bower_components/rdash-ui/dist/css/rdash.min.css +1 -0
- data/vendor/assets/bower_components/rdash-ui/dist/css/rdash.scss +489 -0
- data/vendor/assets/bower_components/{Responsive-Dashboard/src → rdash-ui/dist}/fonts/montserrat-regular-webfont.eot +0 -0
- data/vendor/assets/bower_components/{Responsive-Dashboard/src → rdash-ui/dist}/fonts/montserrat-regular-webfont.svg +1316 -1316
- data/vendor/assets/bower_components/{Responsive-Dashboard/src → rdash-ui/dist}/fonts/montserrat-regular-webfont.ttf +0 -0
- data/vendor/assets/bower_components/{Responsive-Dashboard/src → rdash-ui/dist}/fonts/montserrat-regular-webfont.woff +0 -0
- metadata +227 -180
- data/config/initializers/bower_rails.rb +0 -16
- data/vendor/assets/bower_components/Responsive-Dashboard/CONTRIBUTING.md +0 -21
- data/vendor/assets/bower_components/Responsive-Dashboard/README.md +0 -119
- data/vendor/assets/bower_components/Responsive-Dashboard/bower.json +0 -32
- data/vendor/assets/bower_components/Responsive-Dashboard/gulpfile.js +0 -81
- data/vendor/assets/bower_components/Responsive-Dashboard/package.json +0 -21
- data/vendor/assets/bower_components/Responsive-Dashboard/src/index.html +0 -413
- data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/controllers/alerts-ctrl.js +0 -19
- data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/controllers/master-ctrl.js +0 -51
- data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/loading.js +0 -13
- data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget-body.js +0 -16
- data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget-header.js +0 -17
- data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget.js +0 -16
- data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/module.js +0 -1
- data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/routes.js +0 -22
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/content.less +0 -19
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/hamburg.less +0 -29
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/header.less +0 -92
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/loading.less +0 -40
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/main.less +0 -73
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/mixins.less +0 -5
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/sidebar.less +0 -122
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/variables.less +0 -10
- data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/widgets.less +0 -95
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css.erb +0 -5
- data/vendor/assets/bower_components/flow.js/CHANGELOG.md +0 -37
- data/vendor/assets/bower_components/flow.js/Gruntfile.js +0 -132
- data/vendor/assets/bower_components/flow.js/karma.conf.js +0 -114
- data/vendor/assets/bower_components/flow.js/package.json +0 -50
- data/vendor/assets/bower_components/flow.js/src/flow.js +0 -1532
- data/vendor/assets/bower_components/jquery/MIT-LICENSE.txt +0 -21
- data/vendor/assets/bower_components/jquery/bower.json +0 -27
- data/vendor/assets/bower_components/jquery/dist/jquery.js +0 -9190
- data/vendor/assets/bower_components/jquery/dist/jquery.min.js +0 -5
- data/vendor/assets/bower_components/jquery/dist/jquery.min.map +0 -1
- data/vendor/assets/bower_components/jquery/src/ajax.js +0 -806
- data/vendor/assets/bower_components/jquery/src/ajax/jsonp.js +0 -89
- data/vendor/assets/bower_components/jquery/src/ajax/load.js +0 -75
- data/vendor/assets/bower_components/jquery/src/ajax/parseJSON.js +0 -13
- data/vendor/assets/bower_components/jquery/src/ajax/parseXML.js +0 -28
- data/vendor/assets/bower_components/jquery/src/ajax/script.js +0 -64
- data/vendor/assets/bower_components/jquery/src/ajax/var/nonce.js +0 -5
- data/vendor/assets/bower_components/jquery/src/ajax/var/rquery.js +0 -3
- data/vendor/assets/bower_components/jquery/src/ajax/xhr.js +0 -135
- data/vendor/assets/bower_components/jquery/src/attributes.js +0 -11
- data/vendor/assets/bower_components/jquery/src/attributes/attr.js +0 -143
- data/vendor/assets/bower_components/jquery/src/attributes/classes.js +0 -158
- data/vendor/assets/bower_components/jquery/src/attributes/prop.js +0 -96
- data/vendor/assets/bower_components/jquery/src/attributes/support.js +0 -35
- data/vendor/assets/bower_components/jquery/src/attributes/val.js +0 -163
- data/vendor/assets/bower_components/jquery/src/callbacks.js +0 -205
- data/vendor/assets/bower_components/jquery/src/core.js +0 -498
- data/vendor/assets/bower_components/jquery/src/core/access.js +0 -60
- data/vendor/assets/bower_components/jquery/src/core/init.js +0 -123
- data/vendor/assets/bower_components/jquery/src/core/parseHTML.js +0 -39
- data/vendor/assets/bower_components/jquery/src/core/ready.js +0 -97
- data/vendor/assets/bower_components/jquery/src/core/var/rsingleTag.js +0 -4
- data/vendor/assets/bower_components/jquery/src/css.js +0 -451
- data/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +0 -24
- data/vendor/assets/bower_components/jquery/src/css/curCSS.js +0 -57
- data/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +0 -70
- data/vendor/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js +0 -15
- data/vendor/assets/bower_components/jquery/src/css/support.js +0 -91
- data/vendor/assets/bower_components/jquery/src/css/swap.js +0 -28
- data/vendor/assets/bower_components/jquery/src/css/var/cssExpand.js +0 -3
- data/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +0 -5
- data/vendor/assets/bower_components/jquery/src/css/var/isHidden.js +0 -13
- data/vendor/assets/bower_components/jquery/src/css/var/rmargin.js +0 -3
- data/vendor/assets/bower_components/jquery/src/css/var/rnumnonpx.js +0 -5
- data/vendor/assets/bower_components/jquery/src/data.js +0 -179
- data/vendor/assets/bower_components/jquery/src/data/Data.js +0 -181
- data/vendor/assets/bower_components/jquery/src/data/accepts.js +0 -20
- data/vendor/assets/bower_components/jquery/src/data/var/data_priv.js +0 -5
- data/vendor/assets/bower_components/jquery/src/data/var/data_user.js +0 -5
- data/vendor/assets/bower_components/jquery/src/deferred.js +0 -149
- data/vendor/assets/bower_components/jquery/src/deprecated.js +0 -13
- data/vendor/assets/bower_components/jquery/src/dimensions.js +0 -50
- data/vendor/assets/bower_components/jquery/src/effects.js +0 -649
- data/vendor/assets/bower_components/jquery/src/effects/Tween.js +0 -114
- data/vendor/assets/bower_components/jquery/src/effects/animatedSelector.js +0 -13
- data/vendor/assets/bower_components/jquery/src/event.js +0 -868
- data/vendor/assets/bower_components/jquery/src/event/alias.js +0 -39
- data/vendor/assets/bower_components/jquery/src/event/support.js +0 -9
- data/vendor/assets/bower_components/jquery/src/exports/amd.js +0 -24
- data/vendor/assets/bower_components/jquery/src/exports/global.js +0 -32
- data/vendor/assets/bower_components/jquery/src/intro.js +0 -44
- data/vendor/assets/bower_components/jquery/src/jquery.js +0 -36
- data/vendor/assets/bower_components/jquery/src/manipulation.js +0 -582
- data/vendor/assets/bower_components/jquery/src/manipulation/_evalUrl.js +0 -18
- data/vendor/assets/bower_components/jquery/src/manipulation/support.js +0 -31
- data/vendor/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js +0 -3
- data/vendor/assets/bower_components/jquery/src/offset.js +0 -204
- data/vendor/assets/bower_components/jquery/src/outro.js +0 -1
- data/vendor/assets/bower_components/jquery/src/queue.js +0 -142
- data/vendor/assets/bower_components/jquery/src/queue/delay.js +0 -22
- data/vendor/assets/bower_components/jquery/src/selector-native.js +0 -172
- data/vendor/assets/bower_components/jquery/src/selector-sizzle.js +0 -14
- data/vendor/assets/bower_components/jquery/src/selector.js +0 -1
- data/vendor/assets/bower_components/jquery/src/serialize.js +0 -111
- data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.js +0 -2044
- data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.js +0 -3
- data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.map +0 -1
- data/vendor/assets/bower_components/jquery/src/traversing.js +0 -200
- data/vendor/assets/bower_components/jquery/src/traversing/findFilter.js +0 -100
- data/vendor/assets/bower_components/jquery/src/traversing/var/rneedsContext.js +0 -6
- data/vendor/assets/bower_components/jquery/src/var/arr.js +0 -3
- data/vendor/assets/bower_components/jquery/src/var/class2type.js +0 -4
- data/vendor/assets/bower_components/jquery/src/var/concat.js +0 -5
- data/vendor/assets/bower_components/jquery/src/var/hasOwn.js +0 -5
- data/vendor/assets/bower_components/jquery/src/var/indexOf.js +0 -5
- data/vendor/assets/bower_components/jquery/src/var/pnum.js +0 -3
- data/vendor/assets/bower_components/jquery/src/var/push.js +0 -5
- data/vendor/assets/bower_components/jquery/src/var/rnotwhite.js +0 -3
- data/vendor/assets/bower_components/jquery/src/var/slice.js +0 -5
- data/vendor/assets/bower_components/jquery/src/var/strundefined.js +0 -3
- data/vendor/assets/bower_components/jquery/src/var/support.js +0 -4
- data/vendor/assets/bower_components/jquery/src/var/toString.js +0 -5
- data/vendor/assets/bower_components/jquery/src/wrap.js +0 -78
data/config/routes.rb
CHANGED
@@ -5,19 +5,20 @@ Kms::Engine.routes.draw do
|
|
5
5
|
module: :devise,
|
6
6
|
controllers: { registrations: "users/registrations" }
|
7
7
|
constraints(format: "json") do
|
8
|
-
resources :templates, format: true
|
8
|
+
resources :templates, except: [:new, :edit], format: true
|
9
9
|
resources :snippets, except: [:new, :edit], format: true
|
10
|
-
resources :pages, format: true do
|
10
|
+
resources :pages, except: [:new, :edit], format: true do
|
11
11
|
collection do
|
12
12
|
post 'sorting'
|
13
13
|
end
|
14
14
|
end
|
15
|
-
resources :assets, format: true, as: :kms_assets
|
16
|
-
resources :users, only: [:index, :destroy], format: true
|
15
|
+
resources :assets, except: [:new, :edit], format: true, as: :kms_assets
|
16
|
+
resources :users, only: [:index, :destroy], format: true do
|
17
|
+
post :from_kms, on: :collection, action: :create
|
18
|
+
get :kms_user, on: :collection
|
19
|
+
end
|
17
20
|
resources :resources, only: :index, format: true
|
18
21
|
resource :settings, only: [:show, :update], format: true
|
19
|
-
get '/users/kms_user' => "users#kms_user", format: true
|
20
|
-
post "/users/from_kms" => "users#create", format: true
|
21
22
|
end
|
22
23
|
post "/assets/ckeditor" => "assets#ckeditor"
|
23
24
|
constraints(format: "html") do
|
data/lib/kms/dependencies.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
|
-
require 'bower-rails'
|
2
1
|
require "slim-rails"
|
3
|
-
require "less-rails"
|
4
2
|
require 'russian'
|
5
3
|
require 'angular-rails-templates'
|
6
|
-
require 'liquor'
|
4
|
+
require 'liquor'
|
7
5
|
require 'fog/aws'
|
8
6
|
require 'carrierwave'
|
9
7
|
require 'carrierwave/orm/activerecord'
|
@@ -12,7 +10,6 @@ require 'active_model_serializers'
|
|
12
10
|
require 'ancestry'
|
13
11
|
require 'devise'
|
14
12
|
require 'devise/orm/active_record'
|
15
|
-
#require 'evil-front'
|
16
13
|
require 'cancancan'
|
17
14
|
require 'dragonfly'
|
18
15
|
require 'textacular'
|
data/lib/kms/engine.rb
CHANGED
@@ -27,10 +27,9 @@ module Kms
|
|
27
27
|
end
|
28
28
|
|
29
29
|
initializer "kms.assets" do |app|
|
30
|
-
app.config.less.paths << File.join(Rails.root,'vendor', 'assets', 'bower_components')
|
31
30
|
app.config.assets.paths << Rails.root.join('vendor', 'assets', 'bower_components')
|
32
31
|
app.config.assets.precompile += %w(kms/application.js kms/application.css)
|
33
|
-
app.config.assets.precompile += %w(
|
32
|
+
app.config.assets.precompile += %w( avatar.jpg )
|
34
33
|
app.config.assets.precompile += %w( **/*.svg **/*.eot **/*.woff **/*.ttf )
|
35
34
|
app.config.assets.precompile += %w( ng-ckeditor/libs/ckeditor/** )
|
36
35
|
end
|
data/lib/kms/search_item.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
module Kms
|
2
2
|
class SearchItem
|
3
|
+
extend ActionView::Helpers::TextHelper
|
3
4
|
include Liquor::Dropable
|
4
5
|
include Liquor::External
|
6
|
+
|
5
7
|
attr_reader :title, :content, :link
|
8
|
+
|
9
|
+
HIGHLIGHTER = '<mark class="highlight">\1</mark>'.freeze
|
10
|
+
|
6
11
|
def initialize opts
|
7
12
|
@title = opts[:title]
|
8
13
|
@link = opts[:link]
|
@@ -24,5 +29,18 @@ module Kms
|
|
24
29
|
def content
|
25
30
|
@content
|
26
31
|
end
|
32
|
+
|
33
|
+
# attributes_map for Kms::Page is:
|
34
|
+
# {title: :title, link: :fullpath, content: :content}
|
35
|
+
def self.item_for_searchable(searchable, keywords, attributes_map)
|
36
|
+
sanitized_title = ActionController::Base.helpers.sanitize(searchable[attributes_map[:title]])
|
37
|
+
sanitized_content = ActionController::Base.helpers.sanitize(searchable[attributes_map[:content]])
|
38
|
+
Kms::SearchItem.new(
|
39
|
+
title: highlight(sanitized_title, keywords, highlighter: HIGHLIGHTER, sanitize: false),
|
40
|
+
link: searchable[attributes_map[:link]],
|
41
|
+
content: highlight(sanitized_content, keywords, highlighter: HIGHLIGHTER, sanitize: false)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
27
45
|
end
|
28
46
|
end
|
data/lib/kms/version.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Kms::AssetsController, type: :controller do
|
4
|
+
login_user
|
5
|
+
describe 'GET index' do
|
6
|
+
it 'returns assets json representation' do
|
7
|
+
FactoryGirl.create(:asset)
|
8
|
+
get :index, format: :json
|
9
|
+
|
10
|
+
expect(response).to be_success
|
11
|
+
expect(json.length).to eq(1)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'POST create' do
|
16
|
+
it 'returns 200 status and creates asset' do
|
17
|
+
asset_params = FactoryGirl.attributes_for(:asset)
|
18
|
+
post :create, params: { asset: asset_params }, format: :json
|
19
|
+
expect(response).to be_success
|
20
|
+
expect(Kms::Asset.count).to eq(1)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'PUT update' do
|
25
|
+
it 'returns 200 status and updates asset' do
|
26
|
+
css_asset = FactoryGirl.create(:css_asset)
|
27
|
+
put :update, params: { id: css_asset.id, asset: {performing_plain_text: true, text: 'h1 {}'} }, format: :json
|
28
|
+
expect(response).to be_success
|
29
|
+
expect(Kms::Asset.find(css_asset.id).text).to be_eql('h1 {}')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'GET show' do
|
34
|
+
it 'returns asset json representation' do
|
35
|
+
css_asset = FactoryGirl.create(:css_asset)
|
36
|
+
get :index, params: { id: css_asset.id }, format: :json
|
37
|
+
|
38
|
+
expect(response).to be_success
|
39
|
+
expect(json[0]['text']).to eq(css_asset.text)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'DELETE destroy' do
|
44
|
+
it "deletes asset" do
|
45
|
+
asset = FactoryGirl.create(:asset)
|
46
|
+
delete :destroy, params: { id: asset.id }, format: :json
|
47
|
+
expect(response).to have_http_status(204)
|
48
|
+
expect { Kms::Asset.find(asset.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Kms::PagesController, type: :controller do
|
4
|
+
login_user
|
5
|
+
|
6
|
+
describe 'GET index' do
|
7
|
+
it 'returns pages json representation' do
|
8
|
+
FactoryGirl.create(:page)
|
9
|
+
get :index, format: :json
|
10
|
+
|
11
|
+
expect(response).to be_success
|
12
|
+
expect(json.length).to eq(1)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'POST create' do
|
17
|
+
context 'when save failed' do
|
18
|
+
it "returns errors" do
|
19
|
+
post :create, params: { page: FactoryGirl.attributes_for(:invalid_page) }, format: :json
|
20
|
+
expect(response.unprocessable?).to be true
|
21
|
+
expect(json['errors']).to_not be nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
context 'when save successful' do
|
25
|
+
let(:page_params) { FactoryGirl.attributes_for(:page) }
|
26
|
+
it "returns 204 status" do
|
27
|
+
post :create, params: { page: page_params }, format: :json
|
28
|
+
expect(response).to have_http_status(204)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'PUT update' do
|
34
|
+
let(:page) { FactoryGirl.create(:page) }
|
35
|
+
context 'when update failed' do
|
36
|
+
it "returns errors" do
|
37
|
+
put :update, params: { id: page.id, page: FactoryGirl.attributes_for(:invalid_page) }, format: :json
|
38
|
+
expect(response.unprocessable?).to be true
|
39
|
+
expect(json['errors']).to_not be nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
context 'when update successful' do
|
43
|
+
let(:page_params) { FactoryGirl.attributes_for(:page) }
|
44
|
+
it "returns 204 status" do
|
45
|
+
put :update, params: { id: page.id, page: page_params }, format: :json
|
46
|
+
expect(response).to have_http_status(204)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'GET show' do
|
52
|
+
let(:page) { FactoryGirl.create(:page) }
|
53
|
+
it "returns page json representation" do
|
54
|
+
get :show, params: { id: page.id }, format: :json
|
55
|
+
expect(response).to be_success
|
56
|
+
expect(json['title']).to eq(page.title)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'DELETE destroy' do
|
61
|
+
let(:page) { FactoryGirl.create(:page) }
|
62
|
+
it "deletes page" do
|
63
|
+
delete :destroy, params: { id: page.id }, format: :json
|
64
|
+
expect(response).to have_http_status(204)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe 'POST sorting' do
|
69
|
+
it "sorts pages according to updated order" do
|
70
|
+
page1 = FactoryGirl.create(:page)
|
71
|
+
page2 = FactoryGirl.create(:page, parent: Kms::Page.where(slug: 'index').first)
|
72
|
+
pages_tree = Kms::Page.arrange_serializable(order: :position)
|
73
|
+
# reorder here
|
74
|
+
pages_tree[0]['children'].sort! {|a,b| b['position'] <=> a['position'] }
|
75
|
+
post :sorting, params: { '_json' => [pages_tree]}, format: :json
|
76
|
+
expect(response).to be_success
|
77
|
+
expect(json[0]['children'][0]['slug']).to eq(page2.slug)
|
78
|
+
expect(json[0]['children'][-1]['slug']).to eq(page1.slug)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Kms::Public::PagesController, type: :controller do
|
4
|
+
|
5
|
+
describe 'GET show' do
|
6
|
+
context 'when page was found' do
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'when page not found' do
|
11
|
+
context 'when special 404 page exists' do
|
12
|
+
it 'returns 404 page content' do
|
13
|
+
page_404 = FactoryGirl.create(:page_404)
|
14
|
+
get :show, params: { path: 'blabla' }
|
15
|
+
expect(response.status).to eq(404)
|
16
|
+
expect(response.body).to include('Not Found')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
context 'when no special 404 page' do
|
20
|
+
it 'returns 404.html from public folder' do
|
21
|
+
get :show, params: { path: '/blabla' }
|
22
|
+
expect(response.status).to eq(404)
|
23
|
+
expect(response.body).to eq(File.read(File.join(Rails.root, 'public/404.html')))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -1,69 +1,83 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Kms::SnippetsController, type: :controller do
|
4
|
-
|
5
|
-
|
6
|
-
it 'returns snippets json representation' do
|
7
|
-
FactoryGirl.create(:snippet)
|
8
|
-
get :index, format: :json
|
4
|
+
context 'when user/content manager' do
|
5
|
+
login_user
|
9
6
|
|
10
|
-
|
11
|
-
|
7
|
+
describe 'GET index' do
|
8
|
+
it 'raises AccessDenied exception' do
|
9
|
+
FactoryGirl.create(:snippet)
|
10
|
+
expect { get :index, format: :json }.to raise_error(CanCan::AccessDenied)
|
11
|
+
end
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
context 'when admin' do
|
16
|
+
login_admin
|
17
|
+
|
18
|
+
describe 'GET index' do
|
19
|
+
it 'returns snippets json representation' do
|
20
|
+
FactoryGirl.create(:snippet)
|
21
|
+
get :index, format: :json
|
22
|
+
|
23
|
+
expect(response).to be_success
|
24
|
+
expect(json.length).to eq(1)
|
21
25
|
end
|
22
26
|
end
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
|
28
|
+
describe 'POST create' do
|
29
|
+
context 'when save failed' do
|
30
|
+
it "returns errors" do
|
31
|
+
post :create, params: { snippet: FactoryGirl.attributes_for(:invalid_snippet) }, format: :json
|
32
|
+
expect(response.unprocessable?).to be true
|
33
|
+
expect(json['errors']).to_not be nil
|
34
|
+
end
|
28
35
|
end
|
36
|
+
context 'when save successful' do
|
37
|
+
it "returns 204 status" do
|
38
|
+
snippet_params = FactoryGirl.attributes_for(:snippet)
|
39
|
+
post :create, params: { snippet: snippet_params }, format: :json
|
40
|
+
expect(response).to have_http_status(204)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
29
44
|
end
|
30
45
|
|
31
|
-
|
46
|
+
describe 'PUT update' do
|
47
|
+
context 'when update failed' do
|
48
|
+
it "returns errors" do
|
49
|
+
snippet = FactoryGirl.create(:snippet)
|
50
|
+
put :update, params: { id: snippet.id, snippet: {slug: nil} }, format: :json
|
51
|
+
expect(response.unprocessable?).to be true
|
52
|
+
expect(json['errors']).to_not be nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
context 'when update successful' do
|
56
|
+
it "returns 204 status" do
|
57
|
+
snippet = FactoryGirl.create(:snippet)
|
58
|
+
put :update, params: { id: snippet.id, snippet: {slug: 'new-slug'} }, format: :json
|
59
|
+
expect(response).to have_http_status(204)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
32
63
|
|
33
|
-
|
34
|
-
|
35
|
-
it "returns errors" do
|
64
|
+
describe 'GET snippet' do
|
65
|
+
it "returns snippet object" do
|
36
66
|
snippet = FactoryGirl.create(:snippet)
|
37
|
-
|
38
|
-
expect(response
|
39
|
-
expect(json['
|
67
|
+
get :show, params: { id: snippet.id }, format: :json
|
68
|
+
expect(response).to be_success
|
69
|
+
expect(json['name']).to eq(snippet.name)
|
70
|
+
expect(json['slug']).to eq(snippet.slug)
|
71
|
+
expect(json['content']).to eq(snippet.content)
|
40
72
|
end
|
41
73
|
end
|
42
|
-
|
43
|
-
|
74
|
+
|
75
|
+
describe 'DELETE snippet' do
|
76
|
+
it 'deletes snippet and returns no content' do
|
44
77
|
snippet = FactoryGirl.create(:snippet)
|
45
|
-
|
78
|
+
delete :destroy, params: { id: snippet.id }, format: :json
|
46
79
|
expect(response).to have_http_status(204)
|
47
80
|
end
|
48
81
|
end
|
49
82
|
end
|
50
|
-
|
51
|
-
describe 'GET snippet' do
|
52
|
-
it "returns snippet object" do
|
53
|
-
snippet = FactoryGirl.create(:snippet)
|
54
|
-
get :show, params: { id: snippet.id }, format: :json
|
55
|
-
expect(response).to be_success
|
56
|
-
expect(json['name']).to eq(snippet.name)
|
57
|
-
expect(json['slug']).to eq(snippet.slug)
|
58
|
-
expect(json['content']).to eq(snippet.content)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe 'DELETE snippet' do
|
63
|
-
it 'deletes snippet and returns no content' do
|
64
|
-
snippet = FactoryGirl.create(:snippet)
|
65
|
-
delete :destroy, params: { id: snippet.id }, format: :json
|
66
|
-
expect(response).to have_http_status(204)
|
67
|
-
end
|
68
|
-
end
|
69
83
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Kms::TemplatesController, type: :controller do
|
4
|
+
context 'when user/content manager' do
|
5
|
+
login_user
|
6
|
+
|
7
|
+
describe 'GET index' do
|
8
|
+
it 'returns templates json representation' do
|
9
|
+
FactoryGirl.create(:template)
|
10
|
+
get :index, format: :json
|
11
|
+
|
12
|
+
expect(response).to be_success
|
13
|
+
expect(json.length).to eq(1)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when admin' do
|
20
|
+
login_admin
|
21
|
+
|
22
|
+
describe 'POST create' do
|
23
|
+
context 'when save failed' do
|
24
|
+
it "returns errors" do
|
25
|
+
post :create, params: { template: FactoryGirl.attributes_for(:invalid_template) }, format: :json
|
26
|
+
expect(response.unprocessable?).to be true
|
27
|
+
expect(json['errors']).to_not be nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
context 'when save successful' do
|
31
|
+
let(:template_params) { FactoryGirl.attributes_for(:template) }
|
32
|
+
it "returns 204 status" do
|
33
|
+
post :create, params: { template: template_params }, format: :json
|
34
|
+
expect(response).to have_http_status(204)
|
35
|
+
end
|
36
|
+
it "substitutes <script> and <link> tags with asset_tag helper in template content" do
|
37
|
+
post :create, params: { template: template_params }, format: :json
|
38
|
+
template = Kms::Template.find_by(name: template_params[:name])
|
39
|
+
expect(template.content).to include("{{ 'compressed.js' | asset_tag }}")
|
40
|
+
expect(template.content).to include("{{ 'fonts.css' | asset_tag }}")
|
41
|
+
end
|
42
|
+
it "substitutes <img src..> with <img src='{{ ... | asset_path }}' helper in template content" do
|
43
|
+
post :create, params: { template: template_params }, format: :json
|
44
|
+
template = Kms::Template.find_by(name: template_params[:name])
|
45
|
+
expect(template.content).to include("{{ 'slide.jpg' | asset_path }}")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|