help_kit 0.0.4 → 0.0.5

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.
Files changed (228) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/help_kit/application.scss +1 -0
  3. data/app/assets/stylesheets/help_kit/article.scss +0 -1
  4. data/app/assets/stylesheets/help_kit/flash.scss +25 -0
  5. data/app/controllers/help_kit/admin/categories_controller.rb +9 -0
  6. data/app/controllers/help_kit/application_controller.rb +0 -7
  7. data/app/controllers/help_kit/articles_controller.rb +41 -10
  8. data/app/models/help_kit/article.rb +14 -1
  9. data/app/views/help_kit/admin/landing/land.html.slim +8 -0
  10. data/app/views/help_kit/articles/_form.html.slim +3 -0
  11. data/app/views/help_kit/articles/show.html.slim +20 -3
  12. data/app/views/layouts/help_kit/admin.html.slim +6 -3
  13. data/app/views/layouts/help_kit/minimal.html.slim +3 -1
  14. data/config/routes.rb +4 -0
  15. data/lib/help_kit.rb +3 -0
  16. data/lib/help_kit/version.rb +1 -1
  17. data/spec/controllers/help_kit/admin/categories_controller_spec.rb +108 -61
  18. data/spec/controllers/help_kit/articles_controller_spec.rb +119 -38
  19. data/spec/dummy/db/development.sqlite3 +0 -0
  20. data/spec/dummy/db/test.sqlite3 +0 -0
  21. data/spec/dummy/log/development.log +7576 -0
  22. data/spec/dummy/log/test.log +70706 -0
  23. data/spec/dummy/tmp/cache/assets/development/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/application.scssc +0 -0
  24. data/spec/dummy/tmp/cache/assets/development/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/article.scssc +0 -0
  25. data/spec/dummy/tmp/cache/assets/development/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/flash.scssc +0 -0
  26. data/spec/dummy/tmp/cache/assets/development/sprockets/63b79bd2b49acba39e87e5419f5ffbee +0 -0
  27. data/spec/dummy/tmp/cache/assets/development/sprockets/8e9170ff4a2be091fa213edae95756fa +0 -0
  28. data/spec/dummy/tmp/cache/assets/development/sprockets/ac3cbb82e36a366b69c942cb88280fba +0 -0
  29. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_assign-inputs.scssc +0 -0
  30. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_contains-falsy.scssc +0 -0
  31. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_contains.scssc +0 -0
  32. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_is-length.scssc +0 -0
  33. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_is-light.scssc +0 -0
  34. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_is-number.scssc +0 -0
  35. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_is-size.scssc +0 -0
  36. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_modular-scale.scssc +0 -0
  37. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_px-to-em.scssc +0 -0
  38. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_px-to-rem.scssc +0 -0
  39. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_shade.scssc +0 -0
  40. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_strip-units.scssc +0 -0
  41. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_tint.scssc +0 -0
  42. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_transition-property-name.scssc +0 -0
  43. data/spec/dummy/tmp/cache/assets/test/sass/06f577817a2b3c485f1f04e2cfc2a156b9df5857/_unpack.scssc +0 -0
  44. data/spec/dummy/tmp/cache/assets/test/sass/0d3bb099e8e0056ccac56c343fb7341c91e9c992/categories.scssc +0 -0
  45. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/application.scssc +0 -0
  46. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/article.scssc +0 -0
  47. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/editor.scssc +0 -0
  48. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/flash.scssc +0 -0
  49. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/footer.scssc +0 -0
  50. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/grid-list.scssc +0 -0
  51. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/header.scssc +0 -0
  52. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/landing.scssc +0 -0
  53. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/letters.scssc +0 -0
  54. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/mce.scssc +0 -0
  55. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/page-container.scssc +0 -0
  56. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/panel.scssc +0 -0
  57. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/search.scssc +0 -0
  58. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/select-style.scssc +0 -0
  59. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/split-view.scssc +0 -0
  60. data/spec/dummy/tmp/cache/assets/test/sass/11f412754660a6bb45a0dbc44b48d29f3848c9d4/syntax.scssc +0 -0
  61. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_border-color.scssc +0 -0
  62. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_border-radius.scssc +0 -0
  63. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_border-style.scssc +0 -0
  64. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_border-width.scssc +0 -0
  65. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_buttons.scssc +0 -0
  66. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_clearfix.scssc +0 -0
  67. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_ellipsis.scssc +0 -0
  68. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_font-stacks.scssc +0 -0
  69. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_hide-text.scssc +0 -0
  70. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_margin.scssc +0 -0
  71. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_padding.scssc +0 -0
  72. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_position.scssc +0 -0
  73. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_prefixer.scssc +0 -0
  74. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_retina-image.scssc +0 -0
  75. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_size.scssc +0 -0
  76. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_text-inputs.scssc +0 -0
  77. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_timing-functions.scssc +0 -0
  78. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_triangle.scssc +0 -0
  79. data/spec/dummy/tmp/cache/assets/test/sass/3c0430d6440019b5eeb5285c80d7e9878ef01748/_word-wrap.scssc +0 -0
  80. data/spec/dummy/tmp/cache/assets/test/sass/4fde2a2066018d97e8118d0177bd15bcb068e75b/_button.scssc +0 -0
  81. data/spec/dummy/tmp/cache/assets/test/sass/4fde2a2066018d97e8118d0177bd15bcb068e75b/_clearfix.scssc +0 -0
  82. data/spec/dummy/tmp/cache/assets/test/sass/4fde2a2066018d97e8118d0177bd15bcb068e75b/_errors.scssc +0 -0
  83. data/spec/dummy/tmp/cache/assets/test/sass/4fde2a2066018d97e8118d0177bd15bcb068e75b/_flashes.scssc +0 -0
  84. data/spec/dummy/tmp/cache/assets/test/sass/4fde2a2066018d97e8118d0177bd15bcb068e75b/_hide-text.scssc +0 -0
  85. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_box-sizing.scssc +0 -0
  86. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_direction-context.scssc +0 -0
  87. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_display-context.scssc +0 -0
  88. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_fill-parent.scssc +0 -0
  89. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_media.scssc +0 -0
  90. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_omega.scssc +0 -0
  91. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_outer-container.scssc +0 -0
  92. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_pad.scssc +0 -0
  93. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_private.scssc +0 -0
  94. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_row.scssc +0 -0
  95. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_shift.scssc +0 -0
  96. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_span-columns.scssc +0 -0
  97. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_to-deprecate.scssc +0 -0
  98. data/spec/dummy/tmp/cache/assets/test/sass/514fcf3422fd03a7dcba00abf68f4edf84785b89/_visual-grid.scssc +0 -0
  99. data/spec/dummy/tmp/cache/assets/test/sass/5f072aa349cba3af993607d769833b63b75d973f/_neat-helpers.scssc +0 -0
  100. data/spec/dummy/tmp/cache/assets/test/sass/5f072aa349cba3af993607d769833b63b75d973f/_neat.scssc +0 -0
  101. data/spec/dummy/tmp/cache/assets/test/sass/6cf3c9bfbeeda44d5bbbea70270333f40cd7d29e/select2.scssc +0 -0
  102. data/spec/dummy/tmp/cache/assets/test/sass/88e55f3e587ae8257f2cff446ef32a0f2210e129/_bourbon-deprecated-upcoming.scssc +0 -0
  103. data/spec/dummy/tmp/cache/assets/test/sass/88e55f3e587ae8257f2cff446ef32a0f2210e129/_bourbon.scssc +0 -0
  104. data/spec/dummy/tmp/cache/assets/test/sass/8a03b442b42d5298f476bcae4beccb785e81343f/_base.scssc +0 -0
  105. data/spec/dummy/tmp/cache/assets/test/sass/8a03b442b42d5298f476bcae4beccb785e81343f/_buttons.scssc +0 -0
  106. data/spec/dummy/tmp/cache/assets/test/sass/8a03b442b42d5298f476bcae4beccb785e81343f/_forms.scssc +0 -0
  107. data/spec/dummy/tmp/cache/assets/test/sass/8a03b442b42d5298f476bcae4beccb785e81343f/_lists.scssc +0 -0
  108. data/spec/dummy/tmp/cache/assets/test/sass/8a03b442b42d5298f476bcae4beccb785e81343f/_tables.scssc +0 -0
  109. data/spec/dummy/tmp/cache/assets/test/sass/8a03b442b42d5298f476bcae4beccb785e81343f/_typography.scssc +0 -0
  110. data/spec/dummy/tmp/cache/assets/test/sass/8a03b442b42d5298f476bcae4beccb785e81343f/_variables.scssc +0 -0
  111. data/spec/dummy/tmp/cache/assets/test/sass/9b642801a2da4c7ab1c832c5ab5767a20d51cc9c/_font-awesome-sprockets.scssc +0 -0
  112. data/spec/dummy/tmp/cache/assets/test/sass/9b642801a2da4c7ab1c832c5ab5767a20d51cc9c/font-awesome.scssc +0 -0
  113. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_animation.scssc +0 -0
  114. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_appearance.scssc +0 -0
  115. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_backface-visibility.scssc +0 -0
  116. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_background-image.scssc +0 -0
  117. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_background.scssc +0 -0
  118. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_border-image.scssc +0 -0
  119. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_calc.scssc +0 -0
  120. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_columns.scssc +0 -0
  121. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_filter.scssc +0 -0
  122. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_flex-box.scssc +0 -0
  123. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_font-face.scssc +0 -0
  124. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_font-feature-settings.scssc +0 -0
  125. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_hidpi-media-query.scssc +0 -0
  126. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_hyphens.scssc +0 -0
  127. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_image-rendering.scssc +0 -0
  128. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_keyframes.scssc +0 -0
  129. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_linear-gradient.scssc +0 -0
  130. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_perspective.scssc +0 -0
  131. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_placeholder.scssc +0 -0
  132. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_radial-gradient.scssc +0 -0
  133. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_selection.scssc +0 -0
  134. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_text-decoration.scssc +0 -0
  135. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_transform.scssc +0 -0
  136. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_transition.scssc +0 -0
  137. data/spec/dummy/tmp/cache/assets/test/sass/a9d7ca6997cb96c9736db4316cbec3b38ab8da9c/_user-select.scssc +0 -0
  138. data/spec/dummy/tmp/cache/assets/test/sass/acf62079a9b2c9823139dffb3357ffed508cbdca/_asset-pipeline.scssc +0 -0
  139. data/spec/dummy/tmp/cache/assets/test/sass/acf62079a9b2c9823139dffb3357ffed508cbdca/_prefixer.scssc +0 -0
  140. data/spec/dummy/tmp/cache/assets/test/sass/acf62079a9b2c9823139dffb3357ffed508cbdca/_px-to-em.scssc +0 -0
  141. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_animated.scssc +0 -0
  142. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_bordered-pulled.scssc +0 -0
  143. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_core.scssc +0 -0
  144. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_fixed-width.scssc +0 -0
  145. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_icons.scssc +0 -0
  146. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_larger.scssc +0 -0
  147. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_list.scssc +0 -0
  148. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_mixins.scssc +0 -0
  149. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_path.scssc +0 -0
  150. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_rotated-flipped.scssc +0 -0
  151. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_stacked.scssc +0 -0
  152. data/spec/dummy/tmp/cache/assets/test/sass/beae860475d839dcc41b7b4429159ed1c2abae8b/_variables.scssc +0 -0
  153. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_convert-units.scssc +0 -0
  154. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_directional-values.scssc +0 -0
  155. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_font-source-declaration.scssc +0 -0
  156. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_gradient-positions-parser.scssc +0 -0
  157. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_linear-angle-parser.scssc +0 -0
  158. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_linear-gradient-parser.scssc +0 -0
  159. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_linear-positions-parser.scssc +0 -0
  160. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_linear-side-corner-parser.scssc +0 -0
  161. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_radial-arg-parser.scssc +0 -0
  162. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_radial-gradient-parser.scssc +0 -0
  163. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_radial-positions-parser.scssc +0 -0
  164. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_render-gradients.scssc +0 -0
  165. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_shape-size-stripper.scssc +0 -0
  166. data/spec/dummy/tmp/cache/assets/test/sass/d4a645d2a434ce6f877cd1329a02892ff494d4de/_str-to-num.scssc +0 -0
  167. data/spec/dummy/tmp/cache/assets/test/sass/e59ef1973131d8342e52dc165d6e4d0bdaa69ace/_disable-warnings.scssc +0 -0
  168. data/spec/dummy/tmp/cache/assets/test/sass/e59ef1973131d8342e52dc165d6e4d0bdaa69ace/_grid.scssc +0 -0
  169. data/spec/dummy/tmp/cache/assets/test/sass/e59ef1973131d8342e52dc165d6e4d0bdaa69ace/_visual-grid.scssc +0 -0
  170. data/spec/dummy/tmp/cache/assets/test/sass/ee9bebb508864c86a7d2ff5dda1e1d579851f483/_new-breakpoint.scssc +0 -0
  171. data/spec/dummy/tmp/cache/assets/test/sass/ee9bebb508864c86a7d2ff5dda1e1d579851f483/_private.scssc +0 -0
  172. data/spec/dummy/tmp/cache/assets/test/sprockets/00e5c5ca7ac9a38c58d1c0e4c7ce9c30 +0 -0
  173. data/spec/dummy/tmp/cache/assets/test/sprockets/019aeb3134fdd78de698ede9adfbfbdc +0 -0
  174. data/spec/dummy/tmp/cache/assets/test/sprockets/03101dacc7eccff540d7f72fb4be638f +0 -0
  175. data/spec/dummy/tmp/cache/assets/test/sprockets/06da227cc1c25663eb74e1e35aa3fb6e +0 -0
  176. data/spec/dummy/tmp/cache/assets/test/sprockets/0b291a4cfb857826c597c18f3aa49295 +0 -0
  177. data/spec/dummy/tmp/cache/assets/test/sprockets/1b67088b959af18bc232c3e3d6850ef9 +0 -0
  178. data/spec/dummy/tmp/cache/assets/test/sprockets/1d523040a77dfe22c768f233561edf8f +0 -0
  179. data/spec/dummy/tmp/cache/assets/test/sprockets/264e71bf76a50b9362d8bf42789e5d0d +0 -0
  180. data/spec/dummy/tmp/cache/assets/test/sprockets/2e1262ae3ba35e01c70f93bce83c5347 +0 -0
  181. data/spec/dummy/tmp/cache/assets/test/sprockets/300b831c8a14f24dac7463b049c06f72 +0 -0
  182. data/spec/dummy/tmp/cache/assets/test/sprockets/354d6200e21c3793f86b90d4c98351f5 +0 -0
  183. data/spec/dummy/tmp/cache/assets/test/sprockets/3999f4540d91ed538a88d5dc8a1342f1 +0 -0
  184. data/spec/dummy/tmp/cache/assets/test/sprockets/3c9fbaf04e641786796fa4fff1b8540c +0 -0
  185. data/spec/dummy/tmp/cache/assets/test/sprockets/3e888d798a764bd0e17b804d3fb624c2 +0 -0
  186. data/spec/dummy/tmp/cache/assets/test/sprockets/4016d0f2e2f7e95f143a7e40ef14aa05 +0 -0
  187. data/spec/dummy/tmp/cache/assets/test/sprockets/4424bfaa2e5cbb11bccf1b0572b0d07b +0 -0
  188. data/spec/dummy/tmp/cache/assets/test/sprockets/4981b0c6d578a5e5fe3eabb1265bc748 +0 -0
  189. data/spec/dummy/tmp/cache/assets/test/sprockets/4b0d6741b951a2b0e7fc4a8f98d9bfbe +0 -0
  190. data/spec/dummy/tmp/cache/assets/test/sprockets/4b7be30785b65c5a14a8272696c3002e +0 -0
  191. data/spec/dummy/tmp/cache/assets/test/sprockets/4cef583f1088b87ef2f438c921bec38b +0 -0
  192. data/spec/dummy/tmp/cache/assets/test/sprockets/52036693d79c59051871d1937493d038 +0 -0
  193. data/spec/dummy/tmp/cache/assets/test/sprockets/63b79bd2b49acba39e87e5419f5ffbee +0 -0
  194. data/spec/dummy/tmp/cache/assets/test/sprockets/64ecd5e12ba375f943811887a960a5a6 +0 -0
  195. data/spec/dummy/tmp/cache/assets/test/sprockets/6e649d16501ac129192d95d8c3e6cf92 +0 -0
  196. data/spec/dummy/tmp/cache/assets/test/sprockets/6e94dd36b26d1cae7804c84cafcab5f1 +0 -0
  197. data/spec/dummy/tmp/cache/assets/test/sprockets/6f82cc626c6a6de929b2215d1a7ce98d +0 -0
  198. data/spec/dummy/tmp/cache/assets/test/sprockets/704212efb036d08253b3e40b3ff6d9f6 +0 -0
  199. data/spec/dummy/tmp/cache/assets/test/sprockets/753cd25f4ff4721c3ec0da73aab8c2c7 +0 -0
  200. data/spec/dummy/tmp/cache/assets/test/sprockets/82c9dfbf50b8bc44b155af7e0b36989b +0 -0
  201. data/spec/dummy/tmp/cache/assets/test/sprockets/89783db9cc774b18da07a5a18f185ecb +0 -0
  202. data/spec/dummy/tmp/cache/assets/test/sprockets/89786ddea68f492e7b932dc8903c073f +0 -0
  203. data/spec/dummy/tmp/cache/assets/test/sprockets/8e9170ff4a2be091fa213edae95756fa +0 -0
  204. data/spec/dummy/tmp/cache/assets/test/sprockets/91133e15d88a7a0b850ca8d0b7573ea7 +0 -0
  205. data/spec/dummy/tmp/cache/assets/test/sprockets/947d965b51971837cc4e6e9b44a11433 +0 -0
  206. data/spec/dummy/tmp/cache/assets/test/sprockets/97facb749457ae635640f9639dc589c6 +0 -0
  207. data/spec/dummy/tmp/cache/assets/test/sprockets/99b6263202477054d378d1bd55ade025 +0 -0
  208. data/spec/dummy/tmp/cache/assets/test/sprockets/9f901d29334fc2b815bf10639fcc8bb4 +0 -0
  209. data/spec/dummy/tmp/cache/assets/test/sprockets/a254711aa22c317fd6a1c60f5208ce67 +0 -0
  210. data/spec/dummy/tmp/cache/assets/test/sprockets/ac3cbb82e36a366b69c942cb88280fba +0 -0
  211. data/spec/dummy/tmp/cache/assets/test/sprockets/b307359cf1391d4878940a127fc0b997 +0 -0
  212. data/spec/dummy/tmp/cache/assets/test/sprockets/bd7b50d32b72f25de513ac8c81d4bfe3 +0 -0
  213. data/spec/dummy/tmp/cache/assets/test/sprockets/bfaaed33c2fe23615b6578c5ab0748a5 +0 -0
  214. data/spec/dummy/tmp/cache/assets/test/sprockets/bfe7693e2d5aa37cd327b549206c714f +0 -0
  215. data/spec/dummy/tmp/cache/assets/test/sprockets/caf69a39dec4d229d1bdaad625487b5e +0 -0
  216. data/spec/dummy/tmp/cache/assets/test/sprockets/cbcf7e7f3bec36b328cbeb2c83342118 +0 -0
  217. data/spec/dummy/tmp/cache/assets/test/sprockets/ce465218d9f05e5b09585fa03e6c1b56 +0 -0
  218. data/spec/dummy/tmp/cache/assets/test/sprockets/d5f9f8afd70529ab6af5632cf5c883e9 +0 -0
  219. data/spec/dummy/tmp/cache/assets/test/sprockets/e3bf541ec834dfe9d35a27b3920f67e0 +0 -0
  220. data/spec/dummy/tmp/cache/assets/test/sprockets/fb5a75810bdc7f107cfcc321793d4774 +0 -0
  221. data/spec/dummy/tmp/cache/assets/test/sprockets/fcdaa92fdd9d4c003066272860956584 +0 -0
  222. data/spec/dummy/tmp/capybara/capybara-201504061231202855778997.html +10 -0
  223. data/spec/dummy/tmp/capybara/capybara-201504061232399986972856.html +10 -0
  224. data/spec/dummy/tmp/capybara/capybara-201504061344436146962829.html +10 -0
  225. data/spec/dummy/tmp/pids/server.pid +1 -1
  226. data/spec/models/help_kit/article_spec.rb +43 -0
  227. data/spec/views/help_kit/articles/show.html.slim_spec.rb +60 -7
  228. metadata +299 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7084e32bbb5f95b81127ad18e8f2cf09e6bcf500
4
- data.tar.gz: 2da5fc2973e6bdf27669d0ad75d15adc0528fb6b
3
+ metadata.gz: 021c91d45805fdda1343e0a89777d15e0a6d3390
4
+ data.tar.gz: 4228d3820ed9b39bf2a6a918ffa91019ce7594a8
5
5
  SHA512:
6
- metadata.gz: 85267fc0953084589bea06b92d87d8168e134abb4aef3d957db2d7376fbdaf205a8a1beb30e8ead63e3151813a17823737f7f3bea51b3cdc0bd45d2bb542007f
7
- data.tar.gz: 293affd8f01969bc1555f0992c8f46b91034f4301f99633bcc5e69555b99eb5e4ffafa21f0ec58631839ee6a899fd7bebd0cfeb5a44651e4b8ec04cb36fb6a56
6
+ metadata.gz: f87e0b91e15b1433791b883256e16e2f3d72edf246ea1654e4d7bc10f8044af9b4b32de255d6a93a887a6a6fdc90708bfd6edfd40522eb58c9ea3bdeeb345756
7
+ data.tar.gz: bb96dd388b742aefe4d72b1568325e3797524dd01023f5f17f347743e85108cad3ae798a652aad37c9a089e0c619d9663987ab374235529f72fcecef85c801d5
@@ -16,6 +16,7 @@
16
16
  @import "header";
17
17
  @import "syntax";
18
18
  @import "search";
19
+ @import "flash";
19
20
 
20
21
  @import "admin/categories";
21
22
  @import "landing";
@@ -94,7 +94,6 @@
94
94
  }
95
95
  }
96
96
  .article {
97
-
98
97
  font-size: 0.9em;
99
98
  h1 {
100
99
  font-family: 'Open Sans', sans-serif;
@@ -0,0 +1,25 @@
1
+ .info {
2
+ text-align: right;
3
+ padding: 5px 8px;
4
+ font-weight: normal;
5
+ font-size: 0.8em;
6
+ margin-bottom: 10px;
7
+ border-radius: 4px;
8
+ &.warn {
9
+ $color: #F9F6CC;
10
+ color: darken($color, 60);
11
+ }
12
+ }
13
+ $flash-success-color: #DDF9DE;
14
+
15
+ .flash {
16
+ padding: 5px 8px;
17
+ font-weight: 600;
18
+ font-size: 0.8em;
19
+ border-bottom: 1px solid;
20
+ &.success {
21
+ background-color: $flash-success-color;
22
+ border-color: darken($flash-success-color, 20);
23
+ color: darken($flash-success-color, 70);
24
+ }
25
+ }
@@ -5,6 +5,8 @@ module HelpKit
5
5
  layout 'help_kit/admin'
6
6
  before_action :set_category, only: [:show, :edit, :update, :destroy]
7
7
 
8
+ before_action :check_authorization
9
+
8
10
  def index
9
11
  @categories = Category.roots
10
12
  end
@@ -46,5 +48,12 @@ module HelpKit
46
48
  def category_params
47
49
  params.require(:category).permit(:name, :parent_id, :header_content)
48
50
  end
51
+
52
+ def check_authorization
53
+ unless HelpKit.is_authorized?
54
+ redirect_to landing_path
55
+ return false
56
+ end
57
+ end
49
58
  end
50
59
  end
@@ -1,12 +1,5 @@
1
1
  module HelpKit
2
2
  class ApplicationController < ActionController::Base
3
-
4
-
5
3
  private
6
-
7
- def is_authorized?
8
- self.instance_exec(&HelpKit.authorization_method)
9
- end
10
- helper_method :is_authorized?
11
4
  end
12
5
  end
@@ -1,25 +1,27 @@
1
1
  require_dependency "help_kit/application_controller"
2
2
  module HelpKit
3
3
  class ArticlesController < ApplicationController
4
+
4
5
  rescue_from ActiveRecord::RecordNotFound, :with => :not_found
5
- before_action :set_article, only: [:show, :edit, :update]
6
+ before_action :set_article,
7
+ only: [:show, :edit, :update, :destroy, :publish, :unpublish]
8
+
9
+ before_action :check_authorization,
10
+ only: [ :new, :create, :edit, :update, :destroy, :publish, :unpublish]
6
11
 
7
12
  layout 'help_kit/minimal'
8
13
 
9
14
 
10
15
  def index_category
11
16
  @category = Category.friendly.find(params[:category])
12
- @articles = Article.for_category(@category)
17
+ @articles = Article.published.for_category(@category)
13
18
  end
14
19
 
15
20
  def search
16
21
  @articles = Article.search(params[:search][:query])
17
22
  end
18
23
 
19
-
20
- def show
21
- render 'show'
22
- end
24
+ def show; end
23
25
 
24
26
  def new
25
27
  @article = Article.new(title: params[:title])
@@ -34,9 +36,7 @@ module HelpKit
34
36
  end
35
37
  end
36
38
 
37
- def edit
38
- render 'edit'
39
- end
39
+ def edit; end
40
40
 
41
41
  def update
42
42
  if @article.update(article_params)
@@ -46,15 +46,39 @@ module HelpKit
46
46
  end
47
47
  end
48
48
 
49
+ def destroy
50
+ if @article.destroy
51
+ flash[:success] = "Article deleted."
52
+ redirect_to admin_landing_path
53
+ end
54
+ end
55
+
56
+ def publish
57
+ @article.publish!
58
+ flash[:success] = "Article published. It will now be viewable."
59
+ redirect_to article_path(@article)
60
+ end
61
+
62
+ def unpublish
63
+ @article.unpublish!
64
+ flash[:success] = "Article unpublished. This article will no longer be visible"
65
+ redirect_to article_path(@article)
66
+ end
67
+
49
68
  private
50
69
 
51
70
  def not_found
52
71
  @article = Article.new(title: params[:title])
53
72
  render 'not_found'
73
+ return false
54
74
  end
55
75
 
56
76
  def set_article
57
- @article = Article.friendly.find(params[:id])
77
+ if HelpKit.is_authorized?
78
+ @article = Article.friendly.find(params[:id])
79
+ else
80
+ @article = Article.published.friendly.find(params[:id])
81
+ end
58
82
  end
59
83
 
60
84
  def article_params
@@ -66,5 +90,12 @@ module HelpKit
66
90
  )
67
91
  end
68
92
 
93
+ def check_authorization
94
+ unless HelpKit.is_authorized?
95
+ redirect_to article_path(Article.friendly.find(params[:id]))
96
+ return false
97
+ end
98
+ end
99
+
69
100
  end
70
101
  end
@@ -12,7 +12,6 @@ module HelpKit
12
12
  validates :title, presence: true
13
13
  validates :content, presence: true
14
14
 
15
-
16
15
  scope :for_category, -> (category) {
17
16
  where(category: category.self_and_descendants.pluck(:id))
18
17
  }
@@ -23,9 +22,23 @@ module HelpKit
23
22
  where('title LIKE :q OR content LIKE :q OR description LIKE :q',
24
23
  q: "%#{query}%")
25
24
  }
25
+ scope :published, -> { where(published: true) }
26
+ scope :unpublished, -> { where(published: [false, nil]) }
26
27
 
27
28
  def should_generate_new_friendly_id?
28
29
  title_changed?
29
30
  end
31
+
32
+ def is_published?
33
+ published
34
+ end
35
+
36
+ def publish!
37
+ self.update(published:true, published_at: Time.current)
38
+ end
39
+
40
+ def unpublish!
41
+ self.update(published:false, published_at: nil)
42
+ end
30
43
  end
31
44
  end
@@ -1,15 +1,23 @@
1
+ h2 Unpublished articles
2
+ .article-list
3
+ = render HelpKit::Article.unpublished
4
+ hr/
5
+
1
6
  h2 Recently updated articles
2
7
  .article-list
3
8
  = render HelpKit::Article.recent(10)
4
9
  hr/
10
+
5
11
  h2 Unviewed articles
6
12
  .article-list
7
13
  = render HelpKit::Article.unviewed(10)
8
14
  hr/
15
+
9
16
  h2 Popular articles
10
17
  .article-list
11
18
  = render HelpKit::Article.popular(10)
12
19
  hr/
20
+
13
21
  h2 Empty categories
14
22
  -HelpKit::Category.no_articles.each do |category|
15
23
  .breadcrumb
@@ -2,6 +2,9 @@
2
2
  =link_to icon('cog', 'Article Settings'), '#', class: 'article-details'
3
3
  =link_to icon('save', 'Save & Close'), "#", class: 'save-article'
4
4
  =link_to icon('power-off', 'Exit'), landing_path, class: 'admin-link'
5
+ -unless @article.new_record?
6
+ =link_to icon('trash', 'Delete'), article_path(@article),
7
+ method: 'delete', class: 'delete-article'
5
8
  =text_field_tag :article_title_temp, @article.title, class: 'article-title',
6
9
  placeholder: 'Article Title'
7
10
 
@@ -1,9 +1,22 @@
1
1
  -content_for :title, @article.title
2
2
  -content_for :submenu do
3
- =link_to icon('edit', 'Edit Article'), help_kit.edit_article_path(@article),
4
- class: 'edit-article'
3
+ -if HelpKit.is_authorized?
4
+ = link_to icon('edit', 'Edit Article'), help_kit.edit_article_path(@article),
5
+ class: 'edit-article'
6
+ - if @article.is_published?
7
+ = link_to icon('share', 'Unpublish'),
8
+ help_kit.unpublish_article_path(@article),
9
+ class: 'unpublish-article'
10
+ - else
11
+ = link_to icon('share', 'Publish'),
12
+ help_kit.publish_article_path(@article),
13
+ class: 'publish-article'
14
+
5
15
  .page-container
6
16
  .article-container
17
+ - unless @article.is_published?
18
+ .info.warn
19
+ = icon('info', 'This article has not been published')
7
20
  .article-header
8
21
  -if @article.category
9
22
  .breadcrumb
@@ -21,4 +34,8 @@
21
34
  .tag =link_to tag.name, ''
22
35
  .inline-detail
23
36
  .inline-title last updated
24
- span =time_ago_in_words @article.updated_at.to_s(:short)
37
+ span =time_ago_in_words @article.updated_at
38
+ -if HelpKit.is_authorized? && @article.is_published?
39
+ .inline-detail
40
+ .inline-title published at
41
+ span =time_ago_in_words @article.published_at
@@ -8,11 +8,14 @@ html
8
8
  body
9
9
  = render 'help_kit/admin/nav'
10
10
  .submenu =yield :submenu
11
-
11
+ - if flash[:success].present?
12
+ .flash.success =flash[:success]
12
13
  .split-view
13
14
  .menu
14
15
  .menu-item
15
- =split_view_menu_item(icon('home','Welcome'), admin_landing_path, 'landing')
16
- =split_view_menu_item(icon('list','Categories'), admin_categories_path, 'categories')
16
+ =split_view_menu_item(icon('home','Welcome'),
17
+ admin_landing_path, 'landing')
18
+ =split_view_menu_item(icon('list','Categories'),
19
+ admin_categories_path, 'categories')
17
20
  .content
18
21
  = yield
@@ -10,10 +10,12 @@ html
10
10
  = csrf_meta_tags
11
11
  body.minimal
12
12
  = render 'help_kit/nav'
13
- - if is_authorized?
13
+ - if HelpKit.is_authorized?
14
14
  .submenu
15
15
  =yield :submenu
16
16
  =link_to icon('plus', 'New Article'), new_article_path
17
17
  =link_to icon('cog', 'Settings'), admin_landing_path
18
+ - if flash[:success].present?
19
+ .flash.success =flash[:success]
18
20
  = yield
19
21
  .site-footer powered by HelpKit
@@ -15,7 +15,11 @@ HelpKit::Engine.routes.draw do
15
15
  get 'new' => 'articles#new', :as => :new_article
16
16
  post 'new' => 'articles#create'
17
17
  get 'edit/:id' => 'articles#edit', :as => :edit_article
18
+ get 'publish/:id' => 'articles#publish', :as => :publish_article
19
+ get 'unpublish/:id' => 'articles#unpublish', :as => :unpublish_article
18
20
  get ':id' => 'articles#show', :as => :article
19
21
  patch ':id' => 'articles#update'
22
+ delete ':id' => 'articles#destroy'
23
+
20
24
 
21
25
  end
@@ -15,4 +15,7 @@ require 'pygmentize'
15
15
  require 'help_kit/configuration.rb'
16
16
 
17
17
  module HelpKit
18
+ def self.is_authorized?
19
+ self.instance_exec(&HelpKit.authorization_method)
20
+ end
18
21
  end
@@ -1,3 +1,3 @@
1
1
  module HelpKit
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -2,87 +2,134 @@ require 'rails_helper'
2
2
 
3
3
  module HelpKit
4
4
  RSpec.describe Admin::CategoriesController, :type => :controller do
5
-
6
- describe "#index" do
7
- let(:category) { create(:category) }
5
+ let(:category) { create(:category) }
6
+ context "authorized" do
8
7
  before {
9
- create(:category, parent_id:category.id)
10
- get :index
8
+ allow(HelpKit).to receive(:is_authorized?)
9
+ .and_return(true)
11
10
  }
12
- it "should assing @categories" do
13
- expect(assigns(:categories)).to eq([category])
11
+ describe "#index" do
12
+ before {
13
+ create(:category, parent_id:category.id)
14
+ get :index
15
+ }
16
+ it "should assing @categories" do
17
+ expect(assigns(:categories)).to eq([category])
18
+ end
19
+ it "should not contain sub category" do
20
+ expect(assigns(:categories).count).to eq(1)
21
+ end
22
+ it { should render_template('index') }
14
23
  end
15
- it "should not contain sub category" do
16
- expect(assigns(:categories).count).to eq(1)
24
+
25
+ describe "#new" do
26
+ before { get :new }
27
+ it "should assing @categories" do
28
+ expect(assigns(:category)).to be_a_new(Category)
29
+ end
30
+ it { should render_template('new') }
17
31
  end
18
- it { should render_template('index') }
19
- end
20
32
 
21
- describe "#new" do
22
- before {get :new}
23
- it "should assing @categories" do
24
- expect(assigns(:category)).to be_a_new(Category)
33
+ describe "#create" do
34
+ let(:attributes) {{ category: attributes_for(:category) }}
35
+ context "with valid attributes" do
36
+ it "should redirect to category list" do
37
+ post :create, attributes
38
+ expect(response).to redirect_to(admin_categories_path)
39
+ end
40
+ it "should create category record" do
41
+ expect {
42
+ post :create, attributes
43
+ }.to change(Category, :count).by(1)
44
+ end
45
+ end
46
+ context "with invalid attributes" do
47
+ before do
48
+ expect_any_instance_of(Category).to receive(:save) { false }
49
+ end
50
+ it "should render new template" do
51
+ post :create, attributes
52
+ expect(response).to render_template('new')
53
+ end
54
+ it "should assign @category" do
55
+ post :create, attributes
56
+ expect(assigns(:category)).to be_a_new(Category)
57
+ end
58
+ it "should not create database record" do
59
+ expect {
60
+ post :create, attributes
61
+ }.to change(Category, :count).by(0)
62
+ end
63
+ end
25
64
  end
26
- it { should render_template('new') }
27
- end
28
65
 
29
- describe "#create" do
30
- let(:attributes) {{ category: attributes_for(:category) }}
31
- context "with valid attributes" do
32
- before do
33
- post :create, attributes
66
+ describe "#edit" do
67
+ before { get :edit, id: category.id }
68
+ it { should render_template('edit') }
69
+ it "should assing @category" do
70
+ expect(assigns(:category)).to eq(category)
34
71
  end
35
- it { should redirect_to admin_categories_path }
36
72
  end
37
- context "with invalid attributes" do
38
- before do
39
- expect_any_instance_of(Category).to receive(:save) { false }
40
- post :create, attributes
73
+
74
+ describe "#update" do
75
+ let(:attributes) {{ category: attributes_for(:category), id: category.id}}
76
+ context "with valid attributes" do
77
+ it "should call update on record" do
78
+ expect_any_instance_of(Category).to receive(:update) {true}
79
+ patch :update, attributes
80
+ end
81
+ it "should redirect to index" do
82
+ patch :update, attributes
83
+ expect(response).to redirect_to(admin_categories_path)
84
+ end
41
85
  end
42
- it { should render_template('new') }
43
- it "should assign @category" do
44
- expect(assigns(:category)).to be_a_new(Category)
86
+ context "with invalid attributes do" do
87
+ before do
88
+ expect_any_instance_of(Category).to receive(:update) {false}
89
+ patch :update, attributes
90
+ end
91
+ it { should render_template('edit') }
45
92
  end
46
93
  end
47
- end
48
94
 
49
- describe "#edit" do
50
- let(:category) { create(:category) }
51
- before { get :edit, id: category.id }
52
- it { should render_template('edit') }
53
- it "should assing @category" do
54
- expect(assigns(:category)).to eq(category)
55
- end
56
- end
57
- describe "#update" do
58
- let(:category) { create :category }
59
- let(:attributes) {{ category: attributes_for(:category), id: category.id}}
60
- context "with valid attributes" do
61
- it "should call update on record" do
62
- expect_any_instance_of(Category).to receive(:update) {true}
63
- patch :update, attributes
95
+ describe "#destroy" do
96
+ it "should receive #destroy" do
97
+ expect_any_instance_of(Category).to receive(:destroy) { true }
98
+ delete :destroy, id: category.id
64
99
  end
65
- it "should redirect to index" do
66
- patch :update, attributes
100
+ it "should redirect to category list" do
101
+ delete :destroy, id: category.id
67
102
  expect(response).to redirect_to(admin_categories_path)
68
103
  end
69
104
  end
70
- context "with invalid attributes do" do
71
- before do
72
- expect_any_instance_of(Category).to receive(:update) {false}
73
- patch :update, attributes
74
- end
75
- it { should render_template('edit') }
76
- end
105
+
77
106
  end
78
107
 
79
- describe "#destroy" do
80
- let(:category) { create :category }
81
- it "should receive #destroy" do
82
- expect_any_instance_of(Category).to receive(:destroy) { true }
83
- delete :destroy, id: category.id
108
+ context "unauthorized" do
109
+ before {
110
+ allow(HelpKit).to receive(:is_authorized?)
111
+ .and_return(false)
112
+ }
113
+ let(:attributes) {{
114
+ id: category.id,
115
+ category: attributes_for(:category)
116
+ }}
117
+ %w{index edit update new create destroy}.each do |action|
118
+ describe "##{action}" do
119
+ before {
120
+ if %w{index edit new}.include? action
121
+ get action.to_sym, attributes
122
+ end
123
+ if %w{update create}.include? action
124
+ post action.to_sym, attributes
125
+ end
126
+ if action == 'destroy'
127
+ delete :destroy, attributes
128
+ end
129
+ }
130
+ it { should redirect_to landing_path }
131
+ end
84
132
  end
85
133
  end
86
-
87
134
  end
88
135
  end