stenographer-rails 0.6.5 → 0.7.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.
Files changed (241) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/stenographer/admin/links_controller.rb +64 -0
  3. data/app/controllers/stenographer/admin_controller.rb +1 -0
  4. data/app/models/stenographer/change.rb +0 -2
  5. data/app/models/stenographer/link.rb +7 -0
  6. data/app/views/stenographer/admin/index.html.erb +7 -0
  7. data/app/views/stenographer/admin/links/edit.html.erb +38 -0
  8. data/app/views/stenographer/admin/links/index.html.erb +38 -0
  9. data/app/views/stenographer/admin/links/new.html.erb +32 -0
  10. data/app/views/stenographer/admin/links/show.html.erb +32 -0
  11. data/app/views/stenographer/changes/index.html.erb +15 -2
  12. data/config/routes.rb +2 -0
  13. data/db/migrate/20181204190243_create_stenographer_links.rb +10 -0
  14. data/lib/generators/stenographer/templates/config/initializers/stenographer.rb +6 -0
  15. data/lib/stenographer-rails.rb +2 -0
  16. data/lib/stenographer/outputs/base_output.rb +1 -0
  17. data/lib/stenographer/version.rb +1 -1
  18. data/spec/controllers/stenographer/admin/authentications_controller_spec.rb +2 -2
  19. data/spec/controllers/stenographer/admin/changes_controller_spec.rb +5 -5
  20. data/spec/controllers/stenographer/admin/links_controller_spec.rb +173 -0
  21. data/spec/controllers/stenographer/admin/outputs_controller_spec.rb +5 -5
  22. data/spec/controllers/stenographer/admin_controller_spec.rb +8 -3
  23. data/spec/controllers/stenographer/authentications_controller_spec.rb +7 -0
  24. data/spec/controllers/stenographer/changes_controller_spec.rb +4 -4
  25. data/spec/dummy/db/development.sqlite3 +0 -0
  26. data/spec/dummy/db/schema.rb +8 -1
  27. data/spec/dummy/db/test.sqlite3 +0 -0
  28. data/spec/dummy/log/development.log +5302 -0
  29. data/spec/dummy/log/test.log +77853 -0
  30. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-N/-NJzBVdgeX19yMifVfZU4LtMI2TGeJ9TkurzQM2HXug.cache +0 -0
  31. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-x/-xNnp6j_VEwrjCRU-hnLmUvGPqApK2VfXv-Up6R2tYo.cache +1 -0
  32. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0-/0-kzlBt9RD7hQYw3VEC-Wi2eB5FD3_SgMg0RSnjXWGQ.cache +0 -0
  33. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0o/0oS3Au2Xq6WP3Zn7HgW9gIy_4TY0bqhGJXx3CKXsuDQ.cache +1 -0
  34. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1U/1U3ekVoGdHXDYyeUnmk944CHeQKeslt_C0CG269KWj8.cache +1 -0
  35. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1w/1wnX0K0zk0on8q4emQYf3rBHjp4tgf3wsuAnQG51GvM.cache +3 -0
  36. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2B/2B5uwIRf1Fso4dLbSAq5Sdyvgj4A0cevOCUFBLwo0gM.cache +1 -0
  37. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2s/2st8v4TDq62lxdSNuGz_iaqh2iW6F0kUsJG0hPvWj2Q.cache +1 -0
  38. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2w/2wGVTVFMa4bt9U_iR4eKsRFzWuHwyutCzD6Ld19QdQw.cache +1 -0
  39. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/32/3201WG-bEgcptSslglD0M7Nl4luqk66HYBy3n5J0rnU.cache +1 -0
  40. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3H/3HlIgEKbFV0UBp3_XkJn6264ePCpSVHOxoj5N1bcZLQ.cache +0 -0
  41. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3K/3KXE6baGmtTa3Hmf6RzKOf5FHqZvUUv6DaOHTLB_b9k.cache +1 -0
  42. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4R/4RMOqnmEAE-PtnZoWKHKHDd8yAni_hmYQMHRwSq-uZ0.cache +0 -0
  43. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4U/4Uw8wZbDte0QyT7MjshIBU_9ECnFXu6c_vbYEAR4M2c.cache +0 -0
  44. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4_/4_UTzAJHyHT0WBxpt445HGX7RP1ptKvynLIWEFdaeHk.cache +1 -0
  45. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5Y/5Y3mCuZtMgVcuh8wmwRoh4i2iwuQjfQQiLiMCnMHpXg.cache +1 -0
  46. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5d/5d6TuZ5_yTWG35Vb7syy92du0O5XlC_zW-BLV1ZI3Ww.cache +1 -0
  47. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6d/6dJren9KGhdXxqSIBHto4s6qoonz4e55G9p5_6uJA7w.cache +0 -0
  48. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6i/6IvOSdEuvGgol8DnUVtMT1s4IdxlsceyHndbebYriZc.cache +1 -0
  49. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6k/6khgfXRd7jHnsBJdxbl5lNIo9J0udS3cs_VI0QKpfoo.cache +1 -0
  50. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6w/6wKmJqcHjBsl9YZp6MECj68XIOOJ7R770cEZ-iwqdi8.cache +0 -0
  51. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6y/6y3w3nk0J_hD8AQZoPACGi3QWe89XcQZJ-liHBQMrH0.cache +1 -0
  52. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7y/7yuXKZu-1F0d1qKHGKus2VgzEDOf8tBEX6qdtzOjh2A.cache +1 -0
  53. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7z/7zvU5MEok9MnXCyM_e0icay22pkO1LVwSh8SiGMim4Q.cache +1 -0
  54. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/85/85gq-ETvmz5K6rX1ILFtV9IoDz-Z_wQqvtL5aJzg8Kc.cache +0 -0
  55. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8b/8b_zPrGQgHaPZZnaEyHEF0tQRv03X02BQMnAdqXKV20.cache +0 -0
  56. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8e/8e1840KshWeyU6Q5fgSoaTQQEdm6WWtK87N_Rf8ZvKo.cache +3 -0
  57. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8g/8g7w6Xg80wTa6H1XvYNUGvywTAC2-8JiJp7yKFftYZo.cache +0 -0
  58. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8i/8i2lKjLN5z2a_-FxHIRujIugQ_nX-Nz_5nFIhrpIHD8.cache +0 -0
  59. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9D/9DM5TVfvwLWWTiOPN2hEfg8xWfH46uPZ_voF7QOAfkw.cache +0 -0
  60. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9S/9Surlmbs84jPg9eZeFchblETbbSUJIlEAtMxz_t_h-o.cache +0 -0
  61. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9e/9EbIvGIgB0Xjq8_SAGOMQw3w2wjC7MAft1IUrfFMQh8.cache +0 -0
  62. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AD/AD6HFzVIDGLR9qdwMw312XNGlCvCgySD85BDBbSKHpw.cache +0 -0
  63. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AP/APQcJdq3VoNbo8xRgg2hc6rsyq2694Jn08_YSFvD1TI.cache +0 -0
  64. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ag/aG04dSNldD_3oyXF2gKPyvKwiwruBI7SdHoW_i6YBc4.cache +1 -0
  65. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ar/ARjrQ7AgXFKZgjQc7slG6bLenSR_be_E6eyWPJhiW3o.cache +0 -0
  66. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ar/ArVNvzZVWwDLDi1bm0jjYll1adcM1Z5auK4bznXWKgM.cache +1 -0
  67. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bd/bDf105jw4qsBCy6LEZYY7MYifFKnjnWrh4yTgn49fk8.cache +1 -0
  68. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bd/bDmgD2lqBMEHQ22tB2_dTgAj4pM1E2g9VxSp8uiU6mg.cache +1 -0
  69. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Be/be7UdEDkS6THiko76eKZdb8h9pR25bf82lRVy3AJeRI.cache +1 -0
  70. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cq/Cqrx1RYZtDaT0aLTGo46w7drof5CI1xAAL4NS64z9Ig.cache +1 -0
  71. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cu/CuCZyvQOc_O_Mna5VVNMfM3aDuFkPtaCWEI6QKShA54.cache +1 -0
  72. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DQ/DQE1OHSJGGwW2CcImPks6H_nfgY85ykGLgF0pQu2o4M.cache +1 -0
  73. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dr/Drhlnxk5piASfMOrgsqglgYx12aluIPH1rWyHeiSdIM.cache +1 -0
  74. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EP/EPqM-0EnW5olg9jidQPr41Usw5c7GAQ2narcneLLNkI.cache +0 -0
  75. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/El/El8DR6YJKHo_6a7uVWaZGpfagyxItMbq10Y3r0zG19I.cache +0 -0
  76. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Eo/EojMquJwOBmoatkiCJkARpnKmgvLlpfjnG0PtdFnOdc.cache +0 -0
  77. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F2/F2fL1Tu_c0A8C7rmOa06x__AgpuU_jazNCM6bUqavKQ.cache +1 -0
  78. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FX/FXNmfjghzhYM6NWY9tXv3Q0nUSX-Ym6jJjcC0Kfgtb0.cache +0 -0
  79. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Fe/FeoK_HXgz9XQ9QzcnT6f8E6QHE40iEOO5Q1xhmOAe64.cache +0 -0
  80. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Fm/Fm-g3a-oZYM64P3Wgtq13EnMJJxuDqPP2pustHKhXj0.cache +0 -0
  81. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Fm/fmNgQe_EYt_RrRIBVm1rIrqRj2wOiKXEmaxY_is6k7w.cache +1 -0
  82. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ge/GeqokwiUkRgNOFa7vPhON4rAOezo8VXcQqpr2Ma3lM0.cache +1 -0
  83. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HC/HCDOUd7-S45aJ_PjVAC_Vmjyud3i1aQv4cE3t9_Z3Dw.cache +0 -0
  84. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HF/HF73Vpxn93qBBTUObphLrADq4trz13nNCwWYIplkHb8.cache +1 -0
  85. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HG/HGPvpqJH96Kvx2DF8wkkuqhSUzsqBQ1mIE-AyteNmI8.cache +0 -0
  86. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hr/Hr6IWZlvMj_OqZDH4U1zBLOvFAbE9gGeVsyuZwaVaGs.cache +0 -0
  87. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ht/HT23gstm0l1qloUREYd4pbtPvBHV9_l20NNXhJoheeo.cache +1 -0
  88. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ht/HtUBi_Q98sZ4EJVThLKOlj-S9nZsZ4x9HbvEXIODtHw.cache +0 -0
  89. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hy/HyzQWd4FQ-zvAUB2WQmwRndxOhLiWgjumqonKkkdkB4.cache +1 -0
  90. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IU/IUbsNcPeaCQT-nbMId9lCA2uFovnwjVA6CAZjN_o5Ro.cache +0 -0
  91. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IU/iu0MM_-XCpsS2KlfuHIKlX8WKLkgOHGblMAf0Fp7gy4.cache +0 -0
  92. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IW/IWJaM3ZKNwBz0WV7Gaae0gapb5z0BWmpnjNoj7u2tNY.cache +0 -0
  93. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Im/iM5JaONDs_bFhfuewT8JT87KboLLY6Mw-QwvU1lz95w.cache +0 -0
  94. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ip/IPv7l3BsvV_PBAoDUJuP5b6Lf6mxemdCviN5-2BrPO0.cache +1 -0
  95. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Iv/ivMhbm1phjvFldJPovWpyISH1vrzTHRK4hw_EGXyyLA.cache +0 -0
  96. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Jk/JkGeHAxLw8bmqt2jwhsc_Ojxzu8aGKxNt5ZsK-ZJZ8U.cache +1 -0
  97. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Kx/KXoBQ7MvFdFLMTVGbgyp3RgOQ6zwB9cFrzRqKFdplGc.cache +0 -0
  98. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LI/lIFqY_l_MA5v-BDzhGJNIH4-cReE7_DFdW0IgqnMaek.cache +0 -0
  99. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LJ/Lj3YLMqLI6h4ZUObv5FlPfDjyOho5APrMetItBnPkwY.cache +0 -0
  100. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LY/LYKeT7VwcCCvGQ7ByIRA1MG3Tk0GP_IIQptf0Gc1l1E.cache +0 -0
  101. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/M7/M7VbEL7yv0oRtRd_fNS7QPqTZn0lUuvTvl546gYKhvA.cache +1 -0
  102. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MA/MAqyobNGZdW6E7Zhx8ioJ3oRZL3jPPtXJPqkUqrYpB8.cache +1 -0
  103. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MS/MS0NKXPSnMSDNWwZMCSNyPp2mW5twRMkgz0WyPZMavw.cache +0 -0
  104. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MU/MUSVvSkjXNa6kO3u0cyG13FYIU3OMKN49w5dBFBKnR8.cache +1 -0
  105. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NC/NCz7OTlbVUGGaLbsQNmCClvfKVhrCdG7Kg3IwkdkmMQ.cache +1 -0
  106. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NV/NvBbJtU9p2ruUSDHS4DvjyIYoAKWeMiHwBtXnwRFC-g.cache +0 -0
  107. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Nl/nLiw9DJC-uIHE5OIs0inmbkOeRvbCBzF3PrEMXDEhZU.cache +0 -0
  108. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OT/OTpqZb-eWBVl8CVlioDr5eHkr5ATNBoALeA8P1DC7xA.cache +0 -0
  109. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Oa/OAKEYc0PVj9QdQlgzNGHYJOstVjxTMgjwmoYAHVFiUI.cache +0 -0
  110. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Om/oMD1x_v6mLtgkOTZJqX0vi_oy1O8uAueE0NuocbwV2I.cache +1 -0
  111. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PP/PPkQtFBVScijLllHAQ54QbBGTGMPD2Mex1WlA2WDYMc.cache +1 -0
  112. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ph/PhjQoKc065DOibXsUB6YacDh88WYeRbgtQMxZNCNH34.cache +0 -0
  113. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Po/PoGdDBvYlxXK8vThUtfu51od89X9MN8WZ_w2mV7WkVM.cache +0 -0
  114. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Pw/pWf_3op53LccOYkKEpLx3RKatQpPWEDG3wbVLzcFvQQ.cache +1 -0
  115. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QT/qt6L3SFmxOEX_2NHVbcyzSESyBfgtMQVWjSbMcMarfw.cache +1 -0
  116. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Qs/Qsnkjr28NxlpfV-pm7RSCUpo_sJjGVhYu_hza4xAFrQ.cache +0 -0
  117. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Qv/QvipndC9gyFQctrj2PaUCZz-gbyZb4iKY4y8PjQMjq8.cache +0 -0
  118. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RQ/RQxCsTSEo5Man6mBL_YrrTLYmBeQtzabnaH0lVLsueY.cache +0 -0
  119. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rj/Rjzp4wQ6OGyxkhQ1h5tY0-SApKcdPlknjQre0GSypOw.cache +0 -0
  120. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SD/SDdgCZWuPZGrHyVCE1-_I2svvtHYhkwl09aaByIvHE0.cache +1 -0
  121. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Sp/SppldlBIGAhZWFolg3RUTQeqUHCzcFTnuGkJJm7P-Ww.cache +0 -0
  122. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TP/TP8qJaCZazHSP04zcIfmcl1fiAj5Ir0k5ieh3KbW0z0.cache +0 -0
  123. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TP/tpjceDw69YoXZSP_aWWBs7iNUc3r19fdH1kTeo2ZWO4.cache +1 -0
  124. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TQ/TQ2QHdC_MxZEAeSvUlXn1GyQI-5ORLZ3Ii61HxJr12k.cache +0 -0
  125. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/T_/T_NKFz9Eo-Iv6IIuruh5tBc8jwaxTIw4xmL9A7OgXjg.cache +1 -0
  126. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tr/TREMo1l-a_F26N8FfHvT07B6QWzAmrW3m2fOpZLZoJw.cache +0 -0
  127. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tr/TrQxz3A2KH7EV_xDjLmm5aDlJZuXHZ2c79Wr00Gorms.cache +0 -0
  128. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ts/TsGqImoSxqGgBkvRlCGWdoyxcYlmoidBfGSAxbov5TI.cache +1 -0
  129. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ts/tsotrxnfjhOkszeaC2b945--xuiaB6l5XnnExwxY-3g.cache +1 -0
  130. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tt/tTthSuikRHoGMkok_Z7ywjuhIBT8kDbo-D8AwY1Uhpk.cache +1 -0
  131. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ud/UDaCOfUIbV1LKHaq_eD7E8HFy4u8gX6z1_4sRnDFeAU.cache +1 -0
  132. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ud/UdvDAb75IWUMTS5JJ9CCeY3PPCID1_uac2GGKzmIfnQ.cache +0 -0
  133. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Um/UmszeUx5I89fG8EJ0lodVEnRbPASW_7mnDniCLjGe7U.cache +0 -0
  134. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Um/uMqiviiuntbE6ldib6YQvwz2ScRl8VuBzpjM-dSAoEE.cache +0 -0
  135. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V_/v_Q44QfWtfFUNrJi0lbA3h8f4CFQol5XlD1YW-jyaJQ.cache +1 -0
  136. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Va/VA7h0HmCB3QmRKhduAqgWlZfDFeAOOTXLJtAo5UqmYw.cache +0 -0
  137. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vs/VsWn8Db_n1AC7K3sU6IsbTss9bkL3LMBA6w-vrY1WIg.cache +1 -0
  138. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vy/Vy07J90LgLJbjJBRPi_UiUGO_kIpEUi8Zs15wQFKtKo.cache +0 -0
  139. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/W7/W7ho6sqtxm6N-7ygIzqyU-G1Aa6JCAacTQ2wnQecT1w.cache +0 -0
  140. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WL/WLe_Rgkeu_HthdBUfpw3vHUt_5CQ6owJMrpkz8tRp38.cache +0 -0
  141. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WL/wl5FMGHQBrAcwD2Qo4c8h16bktUz9tA0F_YiKyNHFQ8.cache +0 -0
  142. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WM/WM5Zlvi2-LpitmMnl805tvVjgF7N39ZzJpvTIxgJNFk.cache +0 -0
  143. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/We/wEr3XRUajmsB5psHLHeatm4ZB2HNAb_NyB32CYwytZk.cache +0 -0
  144. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XF/XFY4kND_VZCbw7ed6zRxKSkZOjLfUzqs6i5lFHJgFyA.cache +0 -0
  145. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xe/Xe167vqCtDOT_tYTfk4BpYNr9-KI9dAF3RoGPlD1jHo.cache +1 -0
  146. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xx/XxxhwqaLpCOzOa0ZRf9Habg5zJxdCPBgOGxCcrTLq8U.cache +1 -0
  147. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yc/YcZZVuTV-mMyrPvQgt4ZeIQ3WpGIO1wOAwuai7C5llM.cache +0 -0
  148. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yr/YrIMJQQa_i-vd8lvmqooJBi1hdZwSLz7K3oLr_y1I4Y.cache +0 -0
  149. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yt/YtLa0Rs7w7dBTfgbUFRB37ag-V2uLErwnG-CyTKJ8xI.cache +0 -0
  150. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yu/Yu47tM6NFYqebO7-nQ2xzfH0JL8T4URbgw0CyT1-C0U.cache +0 -0
  151. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Zn/ZnM67LM3I-vm7e8xTTtC58Z4pGCPNSV_qyvE7lMNe_Q.cache +1 -0
  152. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_S/_SUAxZReuOtor3EWSerH7tLkiIq-dZW7barL5Zknmmg.cache +0 -0
  153. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/a7/a7QVH4vJDdReMyJZQlTeWHSnN1ebgNv7yYo9SFmz2Ws.cache +1 -0
  154. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aI/aI-pwpVduvbZnIDoZozWq2FjbWF9aKfMkX92k-KBFzA.cache +3 -0
  155. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aT/aTMLT63xWDAtej-RkV3-1Hfj0GVQll5sPI6a32gVXbQ.cache +0 -0
  156. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bV/bVNyFwEVhVCs2j92-7uNzsItQC1uQoirg-dUCbBD86Y.cache +0 -0
  157. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bo/bo-5EqLnedZZVyL4O5L2-2wVvQxageShYJlaD389fmk.cache +0 -0
  158. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cw/cwKiskAvKdyIAnphhcR76jympE7nq2nCkDmhNXc7sq4.cache +1 -0
  159. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dE/dE92zRWfWZM7GM_tRX2uz1vgXvH9ypUU5mYpq85Krbs.cache +0 -0
  160. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dM/dMxpyeeVHGNwa5_fkMZtG06ALwiLXZjSgL90a9tubds.cache +1 -0
  161. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ez/ezwpbWpEZp8yzIHi1R_PGQhx7o_LL2g1cOk2C_hCWXE.cache +1 -0
  162. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/f0/f0PHIYqWlfobuBGuR81kqFEA6_y2dPV3C4DjRRSbmmc.cache +1 -0
  163. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/f1/F1z5Q2qEBeEWVQhYIHZdrdZqw10Te0zrQYb1ZJ8vt7g.cache +1 -0
  164. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fB/fBypBap2YI5i-5tfJGA9VA5ENj6Z3Eo_xxY8PZol__U.cache +0 -0
  165. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fJ/FjXKsCtXF0Flg0gTsc-t_ijhnRofpDXm2wjLXCiPLeA.cache +1 -0
  166. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gQ/gQ5arm9fAn1c3dDI7fTwmJKlONCeOAT9SY5K9VwYe5E.cache +0 -0
  167. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gm/gmqUlHjHyH4cdIVkOf1LgQr32LjIbwSKserZPG68Jxc.cache +0 -0
  168. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/h1/h14p7xKbgMg4oqYsqEWcZtCXjyOdzFSYuWIAMpCL_XI.cache +1 -0
  169. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/h3/H3vpW_R34zC9tiYDdxAvfRIalORwK1fzclmHpVtyuas.cache +0 -0
  170. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/h8/h8UDAz9rZPc5RWDvANx6qO06q8kwEHOYy_GsbR_5LlU.cache +0 -0
  171. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hX/hXaYiGmhCsMJvVcbq9fL2JIkvCgcPRRPslqnqOOdrr4.cache +1 -0
  172. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/he/hePaQ-bNurFgpMqL94nKNiPmtFiYrOac7qVsfGYehaE.cache +1 -0
  173. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hp/hpq6l25IAOm-1pCB4VzAii-sUSRXN_k2YMUnrBIsVdU.cache +0 -0
  174. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iK/iKqqwfRne46--SCWDhjfpIh81M57EvEKk_SusDozJC4.cache +1 -0
  175. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jB/Jbd4yIHCoo4YcDipE4SBYr1chsse5SsHiOgoX_FFqJs.cache +1 -0
  176. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jO/JoaTIYztvMBDo-52WV6FpByFjZ95X2iak9cVSs2gCDs.cache +1 -0
  177. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jY/jYH4TfuQNIW4_e4mkDZZez2kWHzx2_1DFFDzWrrL5LQ.cache +1 -0
  178. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jf/jfNiIeMqJV2Da1o-dDDmhtI_PC8jO4QiSUe86KsFv10.cache +0 -0
  179. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kD/kDDhVcwnbmuJTQqGTMOpDetyAw_y2rS94UqlKvm8nPI.cache +1 -0
  180. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/l3/l3oHA25y1HRHvYXJD9Qa4YN4L9ukd7966POKnU4zOII.cache +0 -0
  181. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/l6/l6R2UaWanwV8TLPIus9rAsz5giFhN9YooEqEkATbwfo.cache +0 -0
  182. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lS/lStvx9Beg2l4s8L-QdTSKuc5_qQPQAZPnIcRI7JkpPE.cache +0 -0
  183. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lV/LVG4TP2eHnmZUTQ4MapERX5EpdkSN23PEfOlCtkxhgI.cache +0 -0
  184. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lX/lXobljUdyKvSCQFBkWsg0HqNN13K1KK6Phu7R6zXnfc.cache +1 -0
  185. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lX/lXuTDiiLhYx549EiG8VaTztJL99Kn0b3wzXzxU8l-bg.cache +0 -0
  186. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lZ/LZsYy-IJEKyv1nTkheOZFRXF2gJdcqeHqQs-Cf4br28.cache +1 -0
  187. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lm/lm_GASxLrvnbcQig3PG9pckUDYwTmp2pXpgMlEhaY0M.cache +1 -0
  188. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/md/mDTuU6cjv5pbP7ktdHbyI_C7Pgr-T_keshIiZC9lF3k.cache +1 -0
  189. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/md/mdIglFm_MzxL3T_krilZkuPt3KxaObEtQa5dMPkap5c.cache +0 -0
  190. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mf/mfTz86G82BhzXNafz1dOYueTZ-26jwzhe1ru-FBoFI4.cache +1 -0
  191. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mj/mjCpqS2i9mcS_TVE7XUuKUfw45erKNA-N8JCwxwt2ZY.cache +1 -0
  192. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mr/MRl7hFVnlcLPoGXlWHTyamyR4zteOsoYP6-5ywvgB24.cache +0 -0
  193. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mr/mrunwIcu_UWEF9tGLjeJf-o-7AhdFNYD2EVk9DYJtPs.cache +3 -0
  194. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mt/mth9Zth9IC1MA3HpdVpn1abuarlrbELBqEnoSVmpVPI.cache +0 -0
  195. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/n5/N5WJIrYQOLDWZtKM6xVOMZNWI31j8Y8JvspHQ0HnYvg.cache +1 -0
  196. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/n_/n_xYqQYhwEMQknb3jFQnjlxxBE9TzMNHCdJ-bEyZFIw.cache +0 -0
  197. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nn/nn-GFyLDFDfh5fTtlzd80qUZ_fC8bnNPQ0ATfhgYJoI.cache +1 -0
  198. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nx/nxTv3sKVUQZADJyM3dPaVmUA78MIsMLD_K279yN_GsI.cache +0 -0
  199. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oG/OGp1HLzJUvRXOPvxFtBXi159SvIQSOnxKbPM-QI_kMs.cache +0 -0
  200. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oH/oH8hZuBcabqmmBKN7K4ZXD0C_RBgnpcLVd-qYOzkHtk.cache +0 -0
  201. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/o_/o_updb8j2R7alRH5xqFqCOhu0NTi7s_TB9oGI2LwjdY.cache +0 -0
  202. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oq/OQxewUCjiAzkB_XVxqI7PMweczG-4269kN2gECTb7g4.cache +3 -0
  203. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pD/pdIaOd2GrAZm9iH3NwhSjVmiTeiUadOdyZ67PqsAxl4.cache +0 -0
  204. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pD/pdcAoYttYLH9Ytx2HpDc0oykQXSwcWUv-jYiADRpPLI.cache +3 -0
  205. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pR/PrmKhf1EgyJ0dB54-jQJMVX1OAbEVVyNjxH01pXKORI.cache +0 -0
  206. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pn/pn92PluSw2sBs_xY_eVNqze30vjvT8-vlKtKIwyatQE.cache +0 -0
  207. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ru/ru8C9lwCwd5P580s3UzYpzzCuFUwK4nvEzO2eN5WSBk.cache +0 -0
  208. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/sL/sL1Wbjgdwzedv8DLnC_jcjoex2VP8lOXOPmTSKVO6Yc.cache +1 -0
  209. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/sW/Swv1AgTWwNGQ3ufZvC0O-Dve_GxZ1dwX6FndhT5GUbY.cache +0 -0
  210. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/sW/sWrq8Ez3eBuUERekFfm2dswP4Dqc9suWsS0FW_Zw53c.cache +0 -0
  211. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uG/uGvQ4KO33vMprvgq8QCqaSfGMaRr-MGPnaSx5utJQ2E.cache +0 -0
  212. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uJ/uJGiAOHiB-gWWh5E8Fzes_PeN6_Fo9N8nig2doZuym8.cache +0 -0
  213. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uR/uRcccU9h7MarNKZtHrVppJdGLIqZQSBTGy5t_TF85MM.cache +0 -0
  214. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uY/Uy7SOKocTxdGQLmDj2EJ6aMeYmuEyIo0Ku-qBUl4C4Q.cache +0 -0
  215. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uZ/UzmOni_z0UgZF7cq3LY3MMtgg_JYFLc9mNNPqmwqpk8.cache +1 -0
  216. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v6/v6bbSLGLStc9RBGhtWK3e0wrL9RHwVzFqLHM6m95g1g.cache +0 -0
  217. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v9/v9TaEIxU84P63ZdrnLjVhqPLcHHAN8Cs5EBPa14BM6I.cache +1 -0
  218. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vq/vqJHJ4uAvnk2fIQ4yx46UC2otLEcKJ-OaT_tHtsNHSM.cache +1 -0
  219. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/w4/w4ixYiCZ2aA_eI42mGcl3edOU0ck9FZLsMCtLTRss9A.cache +0 -0
  220. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wh/whb90Kc7rs06I8wgE4IjKh3jdCV7SXszZoD-kEKD1AA.cache +1 -0
  221. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/win_v0ZNu-l7AoRx8w3ls1xcy0mUExLBVMCSr5oaJFc.cache +0 -0
  222. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/x1/X1XET6WWshO5-8RFuTK6NKUvbAx7WFxCbQlSw4qAEOc.cache +1 -0
  223. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xW/xWiYvQWsq7HdKpbj5B0h7clRICkyLFvgcm1y60h5eMo.cache +0 -0
  224. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xa/xAKg9YCt4VDiDN51kXIyIbyGhWSzyhQQPqRnkpJyNVs.cache +1 -0
  225. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xl/xlTdB6VSfCTlDnXPfEAMSxibWDXdmp9O9CFAviFl2JQ.cache +0 -0
  226. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/y5/y5cHf4KuUwoeBb4LupHm6J0shxN4nS4I0q_sA-0GMrg.cache +1 -0
  227. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yS/YsfaJuW2OobGLIgilo9TbCueeXfzSY1n4Fk7uDHIlwM.cache +2 -0
  228. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yS/yS_JjkODUpvC2p-_pGS5zYTcv5E1eF776rlwOrHmFx8.cache +0 -0
  229. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zo/zosgkqrG3B3VVb8DZflJGaujiqnINs7W1wmqWna5RYI.cache +2 -0
  230. data/spec/factories/stenographer/authentication_factory.rb +2 -2
  231. data/spec/factories/stenographer/change_factory.rb +6 -6
  232. data/spec/factories/stenographer/link_factory.rb +8 -0
  233. data/spec/factories/stenographer/output_factory.rb +1 -1
  234. data/spec/lib/stenographer/inputs/github_input_spec.rb +3 -3
  235. data/spec/lib/stenographer/outputs/slack_output_spec.rb +3 -3
  236. data/spec/models/stenographer/authentication_spec.rb +2 -2
  237. data/spec/models/stenographer/change_spec.rb +33 -33
  238. data/spec/models/stenographer/link_spec.rb +13 -0
  239. data/spec/models/stenographer/output_spec.rb +4 -4
  240. metadata +342 -13
  241. data/spec/controllers/stenographer/application_controller_spec.rb +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44f6a0e4fe7106a40fcd994f15d5864d60643c123fb197b06ac2b208080a4c21
4
- data.tar.gz: f915d3084e372cb759c1e8774f6dd75e7fd614d136713a34e1b783c893b4af5a
3
+ metadata.gz: e1bc2c77c61de8c6c527defa8dd115feca280188b5930506fa4ca7a1efd357b6
4
+ data.tar.gz: 66610d82bfc775102e211715a9437ab8fb691a16d0d79afa96276e2746197fd3
5
5
  SHA512:
6
- metadata.gz: 9502dcbac8fcf9177557c98a0af798269139c49ec6310d6a7194d13e26cb93fe0b5f272a0f03af622107dd6ae911f0bebc054f0a6987d6f40de7268b81e0df46
7
- data.tar.gz: e6da83b7427b144a8e166c7f9fe06c1bd1d8d208842e88ebc619aaba5984fca8743b6d23c27edcd6474d949e0e34402f36ee5ed4b26a99a3689f0d6314bfae61
6
+ metadata.gz: 940704eada9b65c4fa5b3b7c6f05f658c98d208630ffa541d7000a9d76fb0d8a8771a3125b392721fe1e829836c59feef13611d831afbd49b5315521d1b18ff3
7
+ data.tar.gz: cb05f2bf0fbd31facc83019ca9d075317fd197b67b9c4668169a817543fdb68cff5dff44ad23db59f41eeedc4e299cd471a5080894c08c32ef9d5699f6f6e88d
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_dependency 'stenographer/application_controller'
4
+
5
+ module Stenographer
6
+ class Admin::LinksController < ApplicationController
7
+ before_action :assign_link, only: %i[show edit update destroy]
8
+
9
+ def new
10
+ @link = Link.new
11
+ end
12
+
13
+ def create
14
+ @link = Link.new(link_params)
15
+
16
+ if @link.save
17
+ redirect_to admin_link_path(@link), notice: 'Link Created'
18
+ else
19
+ flash.now[:alert] = @link.errors.full_messages.to_sentence
20
+ render :new
21
+ end
22
+ end
23
+
24
+ def index
25
+ page = params[:page] || 1
26
+ @links = Link.order(created_at: :desc).paginate(page: page, per_page: Stenographer.per_page)
27
+ end
28
+
29
+ def show; end
30
+
31
+ def edit; end
32
+
33
+ def update
34
+ message = {}
35
+
36
+ if @link.update(link_params)
37
+ message[:notice] = 'Link Updated'
38
+
39
+ redirect_to admin_link_path(@link), message
40
+ else
41
+ flash.now[:alert] = @link.errors.full_messages.to_sentence
42
+ render :edit
43
+ end
44
+ end
45
+
46
+ def destroy
47
+ if @link.destroy
48
+ redirect_to admin_links_path, notice: 'Link Destroyed'
49
+ else
50
+ redirect_to admin_link_path(@link), alert: @link.errors.full_messages.to_sentence
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def link_params
57
+ params.require(:link).permit(:url, :description)
58
+ end
59
+
60
+ def assign_link
61
+ @link = Link.find(params[:id])
62
+ end
63
+ end
64
+ end
@@ -8,6 +8,7 @@ module Stenographer
8
8
  @change_count = Change.count
9
9
  @authentication_count = Authentication.count
10
10
  @output_count = Output.count
11
+ @link_count = Link.count
11
12
  end
12
13
  end
13
14
  end
@@ -18,8 +18,6 @@ module Stenographer
18
18
  end
19
19
  environments_array.uniq!
20
20
  environments_array.join(', ')
21
- else
22
- nil
23
21
  end
24
22
  end
25
23
 
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stenographer
4
+ class Link < ApplicationRecord
5
+ validates :url, presence: true
6
+ end
7
+ end
@@ -22,6 +22,13 @@
22
22
  <%= link_to 'Manage Outputs', admin_outputs_path, class: 'button' %>
23
23
  </div>
24
24
  </div>
25
+ <div class="tile is-parent">
26
+ <div class="tile is-child box notification is-warning">
27
+ <p class="title">Links</p>
28
+ <p class="subtitle"><%= pluralize(@link_count, 'Link') %></p>
29
+ <%= link_to 'Manage Links', admin_links_path, class: 'button' %>
30
+ </div>
31
+ </div>
25
32
  </div>
26
33
  </div>
27
34
  </section>
@@ -0,0 +1,38 @@
1
+ <section class="section">
2
+ <div class="container">
3
+ <h1 class="title">
4
+ Edit Link #<%= @link.id %>
5
+ </h1>
6
+
7
+ <h2 class="subtitle">
8
+ <%= link_to 'Show', admin_link_path(@link.id) %>
9
+ |
10
+ <%= link_to 'Delete', admin_link_path(@link), :method => :delete, :data => { :confirm => 'Are you sure you want to delete this Link?' } %>
11
+ </h2>
12
+
13
+ <%= form_for @link, url: admin_link_path(@link), method: :patch do |f| %>
14
+ <div class="field">
15
+ <div class="control">
16
+ <%= f.label :url, class: 'label' %>
17
+ <%= f.text_field :url, class: 'input' %>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="field">
22
+ <div class="control">
23
+ <%= f.label :description, class: 'label' %>
24
+ <%= f.text_field :description, class: 'input' %>
25
+ </div>
26
+ </div>
27
+
28
+ <div class="field is-grouped">
29
+ <div class="control">
30
+ <%= f.submit 'Update Link', class: 'button is-link' %>
31
+ </div>
32
+ <div class="control">
33
+ <%= link_to('Back', admin_link_path(@link.id), class: 'button is-text') %>
34
+ </div>
35
+ </div>
36
+ <% end %>
37
+ </div>
38
+ </section>
@@ -0,0 +1,38 @@
1
+ <section class="section">
2
+ <div class="container">
3
+ <h1 class="title">
4
+ Link Admin
5
+ </h1>
6
+
7
+ <h2 class="subtitle">
8
+ <%= link_to 'New Link', new_admin_link_path %>
9
+ </h2>
10
+
11
+ <table class="table is-fullwidth is-striped">
12
+ <thead>
13
+ <tr>
14
+ <th>ID</th>
15
+ <th>URL</th>
16
+ <th>Description</th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <% @links.each do |link| %>
21
+ <tr>
22
+ <td><%= link_to(link.id, admin_link_path(link.id)) %></td>
23
+ <td><%= link.url %></td>
24
+ <td>
25
+ <%= link_to 'View', admin_link_path(link.id), class: 'button is-small' %>
26
+ <%= link_to 'Edit', edit_admin_link_path(link.id), class: 'button is-small' %>
27
+ <%= link_to 'Delete', admin_link_path(link.id), class: 'button is-small is-danger', :method => :delete, :data => {:confirm => 'Are you sure you want to delete this Change?'} %>
28
+ </td>
29
+ </tr>
30
+ <% end %>
31
+ </tbody>
32
+ </table>
33
+
34
+ <div class="changes-pagination">
35
+ <%= will_paginate @links, renderer: BulmaPagination::Rails %>
36
+ </div>
37
+ </div>
38
+ </section>
@@ -0,0 +1,32 @@
1
+ <section class="section">
2
+ <div class="container">
3
+ <h1 class="title">
4
+ Admin New Link
5
+ </h1>
6
+
7
+ <%= form_for @link, url: admin_links_path(@link), method: :post do |f| %>
8
+ <div class="field">
9
+ <div class="control">
10
+ <%= f.label :url, class: 'label' %>
11
+ <%= f.text_field :url, class: 'input' %>
12
+ </div>
13
+ </div>
14
+
15
+ <div class="field">
16
+ <div class="control">
17
+ <%= f.label :description, class: 'label' %>
18
+ <%= f.text_field :description, class: 'input' %>
19
+ </div>
20
+ </div>
21
+
22
+ <div class="field is-grouped">
23
+ <div class="control">
24
+ <%= f.submit 'Create Link', class: 'button is-link' %>
25
+ </div>
26
+ <div class="control">
27
+ <%= link_to('Back', admin_links_path, class: 'button is-text') %>
28
+ </div>
29
+ </div>
30
+ <% end %>
31
+ </div>
32
+ </section>
@@ -0,0 +1,32 @@
1
+ <section class="section">
2
+ <div class="container">
3
+ <h1 class="title">
4
+ Link #<%= @link.id %>
5
+ </h1>
6
+
7
+ <h2 class="subtitle">
8
+ <%= link_to 'Edit', edit_admin_link_path(@link.id) %>
9
+ |
10
+ <%= link_to 'Delete', admin_link_path(@link), :method => :delete, :data => { :confirm => 'Are you sure you want to delete this Link?' } %>
11
+ </h2>
12
+
13
+ <div class="field">
14
+ <label class="label">Date</label>
15
+ <div><%= @link.created_at.strftime('%m/%d/%Y') %></div>
16
+ </div>
17
+
18
+ <div class="field">
19
+ <label class="label">URL</label>
20
+ <div><%= @link.url %></div>
21
+ </div>
22
+
23
+ <div class="field">
24
+ <label class="label">Description</label>
25
+ <div><%= @link.description %></div>
26
+ </div>
27
+
28
+ <div class="field">
29
+ <%= link_to('Back', admin_links_path, class: 'button is-link') %>
30
+ </div>
31
+ </div>
32
+ </section>
@@ -1,6 +1,18 @@
1
1
  <section class="section">
2
2
  <div class="container">
3
- <h1 class="title"><%= Stenographer.app_name %></h1>
3
+ <nav class="panel">
4
+ <p class="panel-heading"><%= Stenographer.link_section_name %></p>
5
+
6
+ <div class="columns is-gapless is-multiline is-mobile">
7
+ <% Stenographer::Link.all.each do |link| %>
8
+ <div class="column is-one-third">
9
+ <span class="panel-block">
10
+ <%= link_to(link.description, link.url) %>
11
+ </span>
12
+ </div>
13
+ <% end %>
14
+ </div>
15
+ </nav>
4
16
 
5
17
  <% if @change_count.positive? %>
6
18
  <% date_groups = @changes.group_by_week { |change| change.created_at } %>
@@ -8,9 +20,10 @@
8
20
  <% date_groups.sort { |group1, group2| group2[0] <=> group1[0] }.each do |date_group| %>
9
21
  <article>
10
22
  <% date_group_date = date_group[0] %>
23
+ <% readable_group_date = date_group_date.strftime('%B %e, %Y') %>
11
24
  <% date_group_results = date_group[1] %>
12
25
 
13
- <p class="title is-4 has-text-centered">Week of <%= date_group_date %></p>
26
+ <p class="title is-4 has-text-centered">Week of <%= readable_group_date %></p>
14
27
  <div>
15
28
  <% change_type_groups = date_group_results.group_by(&:change_type) %>
16
29
 
data/config/routes.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Stenographer::Engine.routes.draw do
4
+ resources :links
4
5
  resources :changes, only: %i[index show], constraints: Stenographer::RoutingConstraints::ViewerOnly.new
5
6
  resources :changes, only: %i[create] # Created separately because we don't want it behind the routing constraints
6
7
 
@@ -12,6 +13,7 @@ Stenographer::Engine.routes.draw do
12
13
  resources :authentications, only: %i[index show destroy], constraints: Stenographer::RoutingConstraints::ManagerOnly.new
13
14
  resources :changes, constraints: Stenographer::RoutingConstraints::ManagerOnly.new
14
15
  resources :outputs, constraints: Stenographer::RoutingConstraints::ManagerOnly.new
16
+ resources :links, constraints: Stenographer::RoutingConstraints::ManagerOnly.new
15
17
  end
16
18
 
17
19
  get '/auth/:provider', to: 'authentications#create', as: :authentication # Used so we can access authentication_path('provider')
@@ -0,0 +1,10 @@
1
+ class CreateStenographerLinks < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :stenographer_links do |t|
4
+ t.string :url
5
+ t.string :description
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -53,6 +53,12 @@ Stenographer.configure do |config|
53
53
  # config.parser = 'Stenographer::Inputs::GithubInput'
54
54
  config.parser = 'Stenographer::Inputs::GithubInput'
55
55
 
56
+ # Display name for the links section on the index
57
+ #
58
+ # Example:
59
+ # config.link_section_name = 'Useful Links'
60
+ config.link_section_name = 'Useful Links'
61
+
56
62
  # ====================================================================================================================
57
63
  #
58
64
  # GitHub Parser Configuration
@@ -31,6 +31,7 @@ module Stenographer
31
31
  mattr_accessor :parser
32
32
  mattr_accessor :tracked_branches
33
33
  mattr_accessor :branch_mapping
34
+ mattr_accessor :link_section_name
34
35
 
35
36
  self.app_name = 'Stenographer'
36
37
  self.app_icon = nil
@@ -49,6 +50,7 @@ module Stenographer
49
50
  self.parser = 'Stenographer::Inputs::GithubInput'
50
51
  self.tracked_branches = %w[master work]
51
52
  self.branch_mapping = { master: 'production', work: 'staging' }
53
+ self.link_section_name = 'Useful Links'
52
54
  end
53
55
 
54
56
  def self.configure(&block)
@@ -5,6 +5,7 @@ module Stenographer
5
5
  class BaseOutput
6
6
  def initialize(change: nil, output: nil)
7
7
  raise StandardError, 'you must pass the Output' if output.blank?
8
+
8
9
  @change = change
9
10
  @output = output
10
11
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Stenographer
4
- VERSION = '0.6.5'
4
+ VERSION = '0.7.0'
5
5
  end
@@ -12,7 +12,7 @@ describe Stenographer::Admin::AuthenticationsController, type: :controller do
12
12
  end
13
13
 
14
14
  describe 'individual behaviors' do
15
- before :each do
15
+ before do
16
16
  index_action
17
17
  end
18
18
 
@@ -44,7 +44,7 @@ describe Stenographer::Admin::AuthenticationsController, type: :controller do
44
44
  end
45
45
 
46
46
  describe 'individual behaviors' do
47
- before :each do
47
+ before do
48
48
  show_action
49
49
  end
50
50
 
@@ -13,7 +13,7 @@ describe Stenographer::Admin::ChangesController, type: :controller do
13
13
  end
14
14
 
15
15
  describe 'individual behaviors' do
16
- before :each do
16
+ before do
17
17
  new_action
18
18
  end
19
19
 
@@ -75,7 +75,7 @@ describe Stenographer::Admin::ChangesController, type: :controller do
75
75
  end
76
76
 
77
77
  describe 'individual behaviors' do
78
- before :each do
78
+ before do
79
79
  index_action
80
80
  end
81
81
 
@@ -104,7 +104,7 @@ describe Stenographer::Admin::ChangesController, type: :controller do
104
104
  end
105
105
 
106
106
  describe 'individual behaviors' do
107
- before :each do
107
+ before do
108
108
  show_action
109
109
  end
110
110
 
@@ -124,7 +124,7 @@ describe Stenographer::Admin::ChangesController, type: :controller do
124
124
  end
125
125
 
126
126
  describe 'individual behaviors' do
127
- before :each do
127
+ before do
128
128
  edit_action
129
129
  end
130
130
 
@@ -144,7 +144,7 @@ describe Stenographer::Admin::ChangesController, type: :controller do
144
144
  end
145
145
 
146
146
  describe 'individual behaviors' do
147
- before :each do
147
+ before do
148
148
  update_action
149
149
  end
150
150
 
@@ -0,0 +1,173 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Stenographer::Admin::LinksController, type: :controller do
4
+ routes { Stenographer::Engine.routes }
5
+
6
+ let!(:first_link) { create(:link, created_at: 2.weeks.ago) }
7
+ let!(:newer_link) { create(:link, created_at: 1.week.ago) }
8
+
9
+ describe '#new' do
10
+ def new_action(opts = {})
11
+ get :new, params: { }.merge(opts)
12
+ end
13
+
14
+ describe 'individual behaviors' do
15
+ before do
16
+ new_action
17
+ end
18
+
19
+ it 'assigns @link' do
20
+ expect(assigns(:link)).not_to be_nil
21
+ end
22
+
23
+ it 'renders the new page' do
24
+ expect(response).to render_template(:new)
25
+ end
26
+ end
27
+ end
28
+
29
+ describe '#create' do
30
+ def create_action(opts = {})
31
+ post :create, params: { link: { url: 'https://catchandrelease.com', description: 'Clearances and Licensing' } }.merge(opts)
32
+ end
33
+
34
+ describe 'individual behaviors' do
35
+ describe 'success' do
36
+ it 'creates the record' do
37
+ expect do
38
+ create_action
39
+ end.to change(Stenographer::Link, :count).by(1)
40
+ end
41
+
42
+ it 'redirects to the admin path' do
43
+ create_action
44
+
45
+ expect(response).to redirect_to(admin_link_path(Stenographer::Link.last))
46
+ end
47
+ end
48
+
49
+ describe 'failure' do
50
+ it 'does not create the record' do
51
+ expect do
52
+ create_action(link: { url: nil })
53
+ end.not_to change(Stenographer::Link, :count)
54
+ end
55
+
56
+ it 'redirects to the admin path' do
57
+ create_action(link: { url: nil })
58
+
59
+ expect(response).to render_template(:new)
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ describe '#index' do
66
+ def index_action(opts = {})
67
+ get :index, params: {}.merge(opts)
68
+ end
69
+
70
+ describe 'individual behaviors' do
71
+ before do
72
+ index_action
73
+ end
74
+
75
+ describe 'links' do
76
+ it 'assigns @links' do
77
+ expect(assigns(:links)).not_to be_nil
78
+ end
79
+
80
+ it 'includes all links' do
81
+ expect(assigns(:links)).to include(first_link)
82
+ expect(assigns(:links)).to include(newer_link)
83
+ end
84
+ end
85
+
86
+ describe 'order' do
87
+ it 'created at desc' do
88
+ expect(assigns(:links)).to match_array([newer_link, first_link])
89
+ end
90
+ end
91
+ end
92
+ end
93
+
94
+ describe '#show' do
95
+ def show_action(opts = {})
96
+ get :show, params: { id: first_link.id }.merge(opts)
97
+ end
98
+
99
+ describe 'individual behaviors' do
100
+ before do
101
+ show_action
102
+ end
103
+
104
+ it 'assigns @change' do
105
+ expect(assigns(:link)).to eq(first_link)
106
+ end
107
+
108
+ it 'renders the show page' do
109
+ expect(response).to render_template(:show)
110
+ end
111
+ end
112
+ end
113
+
114
+ describe '#edit' do
115
+ def edit_action(opts = {})
116
+ get :edit, params: { id: first_link.id }.merge(opts)
117
+ end
118
+
119
+ describe 'individual behaviors' do
120
+ before do
121
+ edit_action
122
+ end
123
+
124
+ it 'assigns @link' do
125
+ expect(assigns(:link)).to eq(first_link)
126
+ end
127
+
128
+ it 'renders the edit page' do
129
+ expect(response).to render_template(:edit)
130
+ end
131
+ end
132
+ end
133
+
134
+ describe '#update' do
135
+ def update_action(opts = {})
136
+ patch :update, params: { id: first_link.id, link: { description: 'GitHub' } }.merge(opts)
137
+ end
138
+
139
+ describe 'individual behaviors' do
140
+ before do
141
+ update_action
142
+ end
143
+
144
+ it 'updates the record' do
145
+ expect(first_link.reload.description).to eq('GitHub')
146
+ end
147
+
148
+ it 'redirects to the admin change path' do
149
+ expect(response).to redirect_to(admin_link_path(first_link))
150
+ end
151
+ end
152
+ end
153
+
154
+ describe '#destroy' do
155
+ def destroy_action(opts = {})
156
+ delete :destroy, params: { id: first_link.id }.merge(opts)
157
+ end
158
+
159
+ describe 'individual behaviors' do
160
+ it 'destroys the record' do
161
+ expect do
162
+ destroy_action
163
+ end.to change(Stenographer::Link, :count).by(-1)
164
+ end
165
+
166
+ it 'redirects to the admin path' do
167
+ destroy_action
168
+
169
+ expect(response).to redirect_to(admin_links_path)
170
+ end
171
+ end
172
+ end
173
+ end