stenographer-rails 0.6.5 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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