notee 0.4.0 → 1.0.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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/notee/application.js +19539 -17294
  3. data/app/controllers/notee/application_controller.rb +5 -0
  4. data/app/controllers/notee/categories_controller.rb +7 -3
  5. data/app/controllers/notee/comments_controller.rb +9 -4
  6. data/app/controllers/notee/images_controller.rb +2 -2
  7. data/app/controllers/notee/posts_controller.rb +11 -4
  8. data/app/controllers/notee/roles_controller.rb +1 -1
  9. data/app/controllers/notee/tokens_controller.rb +9 -15
  10. data/app/controllers/notee/trashes_controller.rb +60 -0
  11. data/app/controllers/notee/users_controller.rb +26 -6
  12. data/app/models/notee/application_record.rb +27 -0
  13. data/app/models/notee/authority.rb +377 -0
  14. data/app/models/notee/category.rb +15 -2
  15. data/app/models/notee/comment.rb +6 -0
  16. data/app/models/notee/image.rb +2 -2
  17. data/app/models/notee/post.rb +7 -5
  18. data/app/models/notee/user.rb +97 -41
  19. data/app/views/layouts/notee/application.html.erb +3 -1
  20. data/config/routes.rb +19 -9
  21. data/db/migrate/20160605141437_create_notee_posts.rb +1 -0
  22. data/db/migrate/20160605141510_create_notee_categories.rb +4 -1
  23. data/db/migrate/20160605141547_create_notee_images.rb +4 -2
  24. data/db/migrate/20160803154954_create_notee_comments.rb +2 -1
  25. data/db/migrate/20160809145754_create_notee_users.rb +1 -0
  26. data/lib/notee/helpers/notee_helper.rb +65 -46
  27. data/lib/notee/helpers/view_helper.rb +10 -2
  28. data/lib/notee/status.rb +1 -2
  29. data/lib/notee/version.rb +1 -1
  30. data/lib/tasks/config/notee.rb +26 -0
  31. data/lib/tasks/config/schedule.rb +7 -0
  32. data/lib/tasks/controllers/notee_controller.rb +65 -0
  33. data/lib/tasks/javascripts/notee/highlight.pack.js +2 -0
  34. data/lib/tasks/notee_tasks.rake +105 -51
  35. data/lib/tasks/stylesheets/notee/highlight/agate.css +108 -0
  36. data/lib/tasks/stylesheets/notee/highlight/androidstudio.css +66 -0
  37. data/lib/tasks/stylesheets/notee/highlight/arduino-light.css +88 -0
  38. data/lib/tasks/stylesheets/notee/highlight/arta.css +73 -0
  39. data/lib/tasks/stylesheets/notee/highlight/ascetic.css +45 -0
  40. data/lib/tasks/stylesheets/notee/highlight/atelier-cave-dark.css +83 -0
  41. data/lib/tasks/stylesheets/notee/highlight/atelier-cave-light.css +85 -0
  42. data/lib/tasks/stylesheets/notee/highlight/atelier-dune-dark.css +69 -0
  43. data/lib/tasks/stylesheets/notee/highlight/atelier-dune-light.css +69 -0
  44. data/lib/tasks/stylesheets/notee/highlight/atelier-estuary-dark.css +84 -0
  45. data/lib/tasks/stylesheets/notee/highlight/atelier-estuary-light.css +84 -0
  46. data/lib/tasks/stylesheets/notee/highlight/atelier-forest-dark.css +69 -0
  47. data/lib/tasks/stylesheets/notee/highlight/atelier-forest-light.css +69 -0
  48. data/lib/tasks/stylesheets/notee/highlight/atelier-heath-dark.css +69 -0
  49. data/lib/tasks/stylesheets/notee/highlight/atelier-heath-light.css +69 -0
  50. data/lib/tasks/stylesheets/notee/highlight/atelier-lakeside-dark.css +69 -0
  51. data/lib/tasks/stylesheets/notee/highlight/atelier-lakeside-light.css +69 -0
  52. data/lib/tasks/stylesheets/notee/highlight/atelier-plateau-dark.css +84 -0
  53. data/lib/tasks/stylesheets/notee/highlight/atelier-plateau-light.css +84 -0
  54. data/lib/tasks/stylesheets/notee/highlight/atelier-savanna-dark.css +84 -0
  55. data/lib/tasks/stylesheets/notee/highlight/atelier-savanna-light.css +84 -0
  56. data/lib/tasks/stylesheets/notee/highlight/atelier-seaside-dark.css +69 -0
  57. data/lib/tasks/stylesheets/notee/highlight/atelier-seaside-light.css +69 -0
  58. data/lib/tasks/stylesheets/notee/highlight/atelier-sulphurpool-dark.css +69 -0
  59. data/lib/tasks/stylesheets/notee/highlight/atelier-sulphurpool-light.css +69 -0
  60. data/lib/tasks/stylesheets/notee/highlight/atom-one-dark.css +96 -0
  61. data/lib/tasks/stylesheets/notee/highlight/atom-one-light.css +96 -0
  62. data/lib/tasks/stylesheets/notee/highlight/brown-paper.css +64 -0
  63. data/lib/tasks/stylesheets/notee/highlight/brown-papersq.png +0 -0
  64. data/lib/tasks/stylesheets/notee/highlight/codepen-embed.css +60 -0
  65. data/lib/tasks/stylesheets/notee/highlight/color-brewer.css +71 -0
  66. data/lib/tasks/stylesheets/notee/highlight/darcula.css +77 -0
  67. data/lib/tasks/stylesheets/notee/highlight/dark.css +63 -0
  68. data/lib/tasks/stylesheets/notee/highlight/darkula.css +6 -0
  69. data/lib/tasks/stylesheets/notee/highlight/default.css +99 -0
  70. data/lib/tasks/stylesheets/notee/highlight/docco.css +97 -0
  71. data/lib/tasks/stylesheets/notee/highlight/dracula.css +76 -0
  72. data/lib/tasks/stylesheets/notee/highlight/far.css +71 -0
  73. data/lib/tasks/stylesheets/notee/highlight/foundation.css +88 -0
  74. data/lib/tasks/stylesheets/notee/highlight/github-gist.css +71 -0
  75. data/lib/tasks/stylesheets/notee/highlight/github.css +99 -0
  76. data/lib/tasks/stylesheets/notee/highlight/googlecode.css +89 -0
  77. data/lib/tasks/stylesheets/notee/highlight/grayscale.css +101 -0
  78. data/lib/tasks/stylesheets/notee/highlight/gruvbox-dark.css +108 -0
  79. data/lib/tasks/stylesheets/notee/highlight/gruvbox-light.css +108 -0
  80. data/lib/tasks/stylesheets/notee/highlight/hopscotch.css +83 -0
  81. data/lib/tasks/stylesheets/notee/highlight/hybrid.css +102 -0
  82. data/lib/tasks/stylesheets/notee/highlight/idea.css +97 -0
  83. data/lib/tasks/stylesheets/notee/highlight/ir-black.css +73 -0
  84. data/lib/tasks/stylesheets/notee/highlight/kimbie.dark.css +74 -0
  85. data/lib/tasks/stylesheets/notee/highlight/kimbie.light.css +74 -0
  86. data/lib/tasks/stylesheets/notee/highlight/magula.css +70 -0
  87. data/lib/tasks/stylesheets/notee/highlight/mono-blue.css +59 -0
  88. data/lib/tasks/stylesheets/notee/highlight/monokai-sublime.css +83 -0
  89. data/lib/tasks/stylesheets/notee/highlight/monokai.css +70 -0
  90. data/lib/tasks/stylesheets/notee/highlight/obsidian.css +88 -0
  91. data/lib/tasks/stylesheets/notee/highlight/ocean.css +74 -0
  92. data/lib/tasks/stylesheets/notee/highlight/paraiso-dark.css +72 -0
  93. data/lib/tasks/stylesheets/notee/highlight/paraiso-light.css +72 -0
  94. data/lib/tasks/stylesheets/notee/highlight/pojoaque.css +83 -0
  95. data/lib/tasks/stylesheets/notee/highlight/pojoaque.jpg +0 -0
  96. data/lib/tasks/stylesheets/notee/highlight/purebasic.css +96 -0
  97. data/lib/tasks/stylesheets/notee/highlight/qtcreator_dark.css +83 -0
  98. data/lib/tasks/stylesheets/notee/highlight/qtcreator_light.css +83 -0
  99. data/lib/tasks/stylesheets/notee/highlight/railscasts.css +106 -0
  100. data/lib/tasks/stylesheets/notee/highlight/rainbow.css +85 -0
  101. data/lib/tasks/stylesheets/notee/highlight/school-book.css +72 -0
  102. data/lib/tasks/stylesheets/notee/highlight/school-book.png +0 -0
  103. data/lib/tasks/stylesheets/notee/highlight/solarized-dark.css +84 -0
  104. data/lib/tasks/stylesheets/notee/highlight/solarized-light.css +84 -0
  105. data/lib/tasks/stylesheets/notee/highlight/sunburst.css +102 -0
  106. data/lib/tasks/stylesheets/notee/highlight/tomorrow-night-blue.css +75 -0
  107. data/lib/tasks/stylesheets/notee/highlight/tomorrow-night-bright.css +74 -0
  108. data/lib/tasks/stylesheets/notee/highlight/tomorrow-night-eighties.css +74 -0
  109. data/lib/tasks/stylesheets/notee/highlight/tomorrow-night.css +75 -0
  110. data/lib/tasks/stylesheets/notee/highlight/tomorrow.css +72 -0
  111. data/lib/tasks/stylesheets/notee/highlight/vs.css +68 -0
  112. data/lib/tasks/stylesheets/notee/highlight/xcode.css +93 -0
  113. data/lib/tasks/stylesheets/notee/highlight/xt256.css +92 -0
  114. data/lib/tasks/stylesheets/notee/highlight/zenburn.css +80 -0
  115. data/lib/tasks/stylesheets/notee/normalize.css +427 -0
  116. data/lib/tasks/stylesheets/notee/notee_default.css +386 -0
  117. data/lib/tasks/views/notee/about.html.erb +43 -0
  118. data/lib/tasks/views/notee/archives.html.erb +16 -0
  119. data/lib/tasks/views/notee/categories.html.erb +15 -0
  120. data/lib/tasks/views/notee/partials/_foote.html.erb +3 -0
  121. data/lib/tasks/views/notee/partials/_header.html.erb +17 -0
  122. data/lib/tasks/views/notee/partials/_profile.html.erb +9 -0
  123. data/lib/tasks/views/notee/partials/_sidebar.html.erb +23 -0
  124. data/lib/tasks/views/notee/posts.html.erb +53 -0
  125. data/lib/tasks/views/notee/show.html.erb +42 -0
  126. data/lib/tasks/views/notee/writers.html.erb +11 -0
  127. metadata +115 -240
  128. data/lib/tasks/css/notee_default.css +0 -59
  129. data/test/dummy/db/development.sqlite3 +0 -0
  130. data/test/dummy/db/test.sqlite3 +0 -0
  131. data/test/dummy/log/development.log +0 -3087
  132. data/test/dummy/log/test.log +0 -872
  133. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-t/-tdJTrCcY92VpiO_z6SIt_iHkHDtn1-8Vf__p-Ve9lU.cache +0 -1
  134. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0K/0KQJQyRy3gQkymW0xnPhM4_OpLtoTcw9Rutx4F4IajE.cache +0 -1
  135. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1B/1Bb2_fhXoTmM27WcuQJ2sr0UCMHh6TjrBIwd6Ks8qJ0.cache +0 -1
  136. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1N/1NYje2ld9grEMpvxBFjocEWWMPi4jNPuPLdlkV1Wq5A.cache +0 -0
  137. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1s/1sPuKGE0jImBtnCnczIk6NpOn9cYeyBZsXHvpXJ1tGA.cache +0 -2
  138. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1s/1sRxHck-81_JSGvEidXPx2S86Cbe0UjizohTg5lkd-U.cache +0 -0
  139. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3d/3dw9fS6dak9HSgJqviXZ6CCibFx8--QDKyWjrqKqraI.cache +0 -0
  140. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4S/4SCYKO2aAiXfZPZF1vTYeIQegrrqvH-2jlfGl1I6juQ.cache +0 -1
  141. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4z/4zE2reLAwChLIBivfo5JfQjRwOM2sBvlDLXftsA772o.cache +0 -1
  142. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5L/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +0 -0
  143. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5p/5pDjSjY69Pd-A64UKCqQ_yxQouHkmBElVBKf1IZT2HM.cache +0 -1
  144. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5p/5pnvfhvSgahCnLPLbhB7dM8lSEhk2w39UTDXe83gYng.cache +0 -0
  145. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5r/5r2K8e-LRVnmo3VUaNdNx3K1b_BgFMOboxlnTQC_Ckk.cache +0 -1
  146. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5u/5ue4ZdF425UevYa9Danha84KDME2s4InW-zR-y-Y0SM.cache +0 -2
  147. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6Q/6Qq8Rnvquz8oH8ojJlj79pSAhSHH_VoWRS0Cn-d-yLQ.cache +0 -1
  148. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6Y/6Y--Gdy-iDkVFcgE3j660zOA3sf_osOedfJpeV_Kxh4.cache +0 -0
  149. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7G/7GrmDrSvjAFvLUcaRN95cQLmvkzf8D_cvGlhRyL01HA.cache +0 -1
  150. data/test/dummy/tmp/cache/assets/sprockets/v3.0/83/83mXRYYdvGZS4tNS_IFZLa5P6e-fg9MSMqWG4MJ-Jks.cache +0 -1
  151. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8H/8HKewCH2XL9errlVDVPK8QZg0LoH-_Q3zqQ1pjCYBEU.cache +0 -1
  152. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8v/8vJIODLLCFZwV8yIF98dlb5_CQZlgBdCLiM8UA6WiSA.cache +0 -1
  153. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9W/9WtQTxW8TE4CQvkem1QkHVjZFB93XAJo3ioPSt6U5wM.cache +0 -0
  154. data/test/dummy/tmp/cache/assets/sprockets/v3.0/AH/AHLaBPz-xNABgeh1V66iU7wJ6FCxvFIie5V05wRvI84.cache +0 -1
  155. data/test/dummy/tmp/cache/assets/sprockets/v3.0/C1/C1S3q8MtvUImrUe70fZPf9wxMfxdcWPSRXRrv4H6_lo.cache +0 -1
  156. data/test/dummy/tmp/cache/assets/sprockets/v3.0/D4/D4ftsVSRtZadejqqBmur8bfiHLhZFCaIjpsAdJT28Iw.cache +0 -1
  157. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DS/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +0 -2
  158. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fr/FrWiXIfDo2-fsKFSgef9Bs-0HjC7dOgBY8IVBLCq9ag.cache +0 -1
  159. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fz/FzjTR8U_FOgMIbfYBgJfzujyNBozRZd-3YYTkiAQTOg.cache +0 -1
  160. data/test/dummy/tmp/cache/assets/sprockets/v3.0/G6/G6nKI6E9cfkIZqH5EnbMJtS4DKHApFlNTKh__ZuK774.cache +0 -2
  161. data/test/dummy/tmp/cache/assets/sprockets/v3.0/HH/HHQp4rqJ3kx9sfFo3AAW2DS6zHl28lCqALB5YnKXeG8.cache +0 -0
  162. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IN/INpQmG9J4AOUCg2YWypvnwq9ce01SFPnDGidI2qcU_8.cache +0 -1
  163. data/test/dummy/tmp/cache/assets/sprockets/v3.0/J0/J038M_TjhJBb-678LCin4jaJSkSaaXy7XHJbEp1Bo5I.cache +0 -2
  164. data/test/dummy/tmp/cache/assets/sprockets/v3.0/JI/JIHr2A9bWoln5XahhS15lRxvHSXdQZ7OrlbAW1IzayM.cache +0 -1
  165. data/test/dummy/tmp/cache/assets/sprockets/v3.0/JI/JId5JhtAhhN90V7z1OSItT9m4n4H_Nfk3IGtOW0mA_s.cache +0 -3
  166. data/test/dummy/tmp/cache/assets/sprockets/v3.0/JP/JPylOhsUjr9NtL1AViDe-Sz0-iLPZGPww463ChRqhEw.cache +0 -0
  167. data/test/dummy/tmp/cache/assets/sprockets/v3.0/JU/JUdbchVNMjz67zIvPztSzFfpU_VO4Rl9V86GzJH28_A.cache +0 -2
  168. data/test/dummy/tmp/cache/assets/sprockets/v3.0/K0/K0Ou5PNqxeODBFSEnIeg7EaidQVBRvPH-SPrTF1tRVA.cache +0 -1
  169. data/test/dummy/tmp/cache/assets/sprockets/v3.0/KS/KSTuVqjLw0xUGYH5WcnAloHDphCDQr4cFjXKKl5vW7M.cache +0 -0
  170. data/test/dummy/tmp/cache/assets/sprockets/v3.0/L-/L--JLWiCS6RZ0l_EciZOoY0eTEs6BGBED1YZ7hj13vQ.cache +0 -1
  171. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ME/META30ksADpNoAnM_vlhKhlLOfxBlo5uJjJKSJa264o.cache +0 -1
  172. data/test/dummy/tmp/cache/assets/sprockets/v3.0/MH/MHQULHaqwmMfm67LLiF_ZDlM6Zix3aPput7pxTViWQ0.cache +0 -1
  173. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NK/NKXg7894FsAVQJxXzYkUOgd131zYAeWOIxmegdT-LFk.cache +0 -2
  174. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NW/NWx4g28WkpCPeRLdgMDaUuLO2e4UIw2bs-HKy-ixIlU.cache +0 -1
  175. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Nj/NjPNj--fkweGPvPTHkDlefKtB5bpFaGG9X60M_goNUo.cache +0 -2
  176. data/test/dummy/tmp/cache/assets/sprockets/v3.0/OI/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +0 -0
  177. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Oh/Ohok7uysixzjxK1FE7m-KJv6gqYQH4svN8nZyRBOgwA.cache +0 -1
  178. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ot/Ot7COhZjTueyAONhzjXiOOwv0uTS9EtXGgxYznVMIvs.cache +0 -3
  179. data/test/dummy/tmp/cache/assets/sprockets/v3.0/P4/P4KZGx6J2yGIq1PMq13fnsaXrS47R-S_sYrQrcUL59I.cache +0 -3
  180. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Pn/Pn9eXmle4fRjakm_xgwyXs5YzlWELSuhbi3nnV2-Ink.cache +0 -0
  181. data/test/dummy/tmp/cache/assets/sprockets/v3.0/QY/QYNLSW9XctrfttzhOfkik5INswRo-qBjjwQvA7S_lyc.cache +0 -1
  182. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Qb/Qbb4ATlvuCS0fudaTweqJoma2S99Mr2Q6ISbIpDoMso.cache +0 -0
  183. data/test/dummy/tmp/cache/assets/sprockets/v3.0/R6/R6E4Q8O1upT5p_U-ySDbO3dFY6SMeSwmubqJUfSJedo.cache +0 -0
  184. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Rv/RvcRQ_I7meCLqBRooErlcPwcbH0tdDuvO5SQ_Xy45Qk.cache +0 -2
  185. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Sz/SzRmx7uSmniNAGO1zMPd4qzEgM8eAaWBqaxestc32Jg.cache +0 -0
  186. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Tk/TkRyIpbn-1DcVexPTWUljWQOek0D_q6yO_jYNGwKM_o.cache +0 -0
  187. data/test/dummy/tmp/cache/assets/sprockets/v3.0/U1/U1E_3Z4bItTBl9s8aX6O2rceqAD5GfoNzF8AqYs9Hig.cache +0 -0
  188. data/test/dummy/tmp/cache/assets/sprockets/v3.0/UC/UCe1qLwGTD6W2etoFOMln6E2DgTq8Xnm7eGvCs6YGEE.cache +0 -1
  189. data/test/dummy/tmp/cache/assets/sprockets/v3.0/UZ/UZhrzLOgNG132Xf1yJ7H7lSq4S3TyDoPphdzwKU8fqQ.cache +0 -3
  190. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ud/UdBXq-s3u32R-gjMCYZv9RJH4n1xSt8PnBpWxg-JzGE.cache +0 -1
  191. data/test/dummy/tmp/cache/assets/sprockets/v3.0/VD/VDaYJQJdErZ0zVg9KgvidORf7a13jqM72Uk97zzuUZU.cache +0 -2
  192. data/test/dummy/tmp/cache/assets/sprockets/v3.0/WT/WTExV_4iBOBS-SWMh6jqm61uSp83ezH5DPIkjfktls4.cache +0 -3
  193. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wi/Wia5tzg4hJNhNhKWgY7pkrxWbvr6n0YaKXl80wh6qPg.cache +0 -1
  194. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wl/WldqQqssrkJedTdiFt86Y6FDn5ww1MirVAAnOpRqeCE.cache +0 -3
  195. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wv/WvAZ72pGsB5VpmTmGBucm1eztH129yQ1YmrRMy-yS4g.cache +0 -0
  196. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wz/WzSkff9VUQsb0DJ5RB3m3SfxRTMU97qhyNCqiIHlJPw.cache +0 -1
  197. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Yx/Yx6fZ9ju2qCb4Ps_0iEzNR7KgDNTE2gIRjcdOMFXNlo.cache +0 -2
  198. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ZO/ZOUPFk5_ZB8Wtn42g9PiY6Qu7KSbipNG04Qa5YSP6sw.cache +0 -0
  199. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ZT/ZT-4a7lIKMm0Swxyt7MdXMz5v6r5MaVvtHvqAT6T8Ts.cache +0 -0
  200. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Zb/ZbvOW6HdEiql0zdGkCPG-EK8beJAmp1ovBR1Oy1V6Fw.cache +0 -1
  201. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Zu/ZuAoFB2A_kFOIb19dNUzEU5jP-SzQLmauPCURINz2Fo.cache +0 -0
  202. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_r/_rmEe1ir-igQN0twVhxrxngbLIFJkINITWVGNye4-MM.cache +0 -2
  203. data/test/dummy/tmp/cache/assets/sprockets/v3.0/aE/aEQNT9eY4cAc2ACQnD35BkLV5dEezB-drcCoF1SzjAc.cache +0 -0
  204. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bK/bKPdLlYXb5ZZU8vrzCdKqLgCXyeiXHExSl9lwGIofU0.cache +0 -0
  205. data/test/dummy/tmp/cache/assets/sprockets/v3.0/br/brGLDCuoxhnIrvwsuWmzjnwDV7Bn_nezqOrXiI0oco0.cache +0 -3
  206. data/test/dummy/tmp/cache/assets/sprockets/v3.0/c3/c3Jo7UkNggNJH21U9HD-Y5Lipd68yZXcl6FGMbzFEeM.cache +0 -0
  207. data/test/dummy/tmp/cache/assets/sprockets/v3.0/c4/c4YjuvK4zQOjr5Q6N7A_-NHM59NF0kGApLBxSZ5JgqA.cache +0 -1
  208. data/test/dummy/tmp/cache/assets/sprockets/v3.0/c9/c9B4H9i5OvdAnZpel-KocssCcsd3TS2Gqe4uKAFjiKQ.cache +0 -1
  209. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dM/dMJ_N4wD6R1wforGNMdyz6wec-5a7_H03vxu0pgPhLc.cache +0 -0
  210. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dr/drYndmRIbBKroImntO4XhUYV5kqxE2q2qE_aYRwYj4Q.cache +0 -0
  211. data/test/dummy/tmp/cache/assets/sprockets/v3.0/du/dumQ6K8NP4rz74ofF4DxxFRetR-K07c75MhZrUQDbqY.cache +0 -3
  212. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fn/fns6a_EwXvrlRyeQjB9lcYXHfIZi0guP75oUWPuz4Z0.cache +0 -0
  213. data/test/dummy/tmp/cache/assets/sprockets/v3.0/g3/g3NfArxOfOGHlWIGK-Znm2-gh1Oyud_f5ZEFuGrOv2g.cache +0 -0
  214. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gF/gFErWaVWbjefUiSe3yI-bWCrUD3SsMHomSjTacMlSDM.cache +0 -2
  215. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gG/gGCsoohK0vflREMUeOrfW4KZeI73jU9ld5t0pzfjh4U.cache +0 -0
  216. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gZ/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +0 -2
  217. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hZ/Hz6pNt28QsuyrFcIx0afHONIVEGdLBEC64cV2zh2xAM.cache +0 -2
  218. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hZ/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +0 -0
  219. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hv/hvw4qAvufcLTOeT9ie13DTIDt3SOLih2iH9P603ZOFQ.cache +0 -0
  220. data/test/dummy/tmp/cache/assets/sprockets/v3.0/iZ/iZGxFM6U5PSEZmHGlksi8vAVBMlMiyjOBaL8HIGcOPE.cache +0 -0
  221. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ig/iguUMDAVIm9pfM52njpM4hqpnNYkwKTWvNXQyolgR74.cache +0 -0
  222. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jJ/jJTo0slnuZqKDbuFGjyBEkenWViH1MiTvb7gNjc4SL4.cache +0 -1
  223. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jN/jNM9mSzc6sg9yU7srXH0l2_bPIXbqLtJVBML2umXb9w.cache +0 -0
  224. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jh/jhx8TAOiUaenqesmOiahNzaVcnpiciOE8VKZdrxGerc.cache +0 -1
  225. data/test/dummy/tmp/cache/assets/sprockets/v3.0/kT/kTif4yPNd0vB6fWie0kxsN5Gwubl8sqAOyydwpiyHzo.cache +0 -1
  226. data/test/dummy/tmp/cache/assets/sprockets/v3.0/m3/m3lSeIbfcyVVkENoCOiz_6LvNubosVesCJBkdI88aNk.cache +0 -1
  227. data/test/dummy/tmp/cache/assets/sprockets/v3.0/m6/m6kJHQNOyyMHxod8TObJKAp8iV_noMwYPWsBh-CCG0k.cache +0 -1
  228. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mX/mXJ655Gxgvg2C08jNcMFB9OQ2G6HrtGc_MfVIpYycsg.cache +0 -3
  229. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mr/MrG8zKUbpqoyxO2GdEOuWmFBUIpOKL3upEtfOWsYluQ.cache +0 -0
  230. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mr/mr-hjupF6Lf8wABiaoi8L9823j20yjhhTnrn4FNsEZI.cache +0 -1
  231. data/test/dummy/tmp/cache/assets/sprockets/v3.0/n2/n2T4JbhKpnbSE5uhnXyPzu4WnDOkMu78BrJ-Huhn7YU.cache +0 -2
  232. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nC/nCuKY2iJdzgSyWS09dThZ5T57F8vGBo0w-ycyuEidUk.cache +0 -1
  233. data/test/dummy/tmp/cache/assets/sprockets/v3.0/og/ogVEMp7SPQ-wAJz4mNXdRrx52GXFvHKpSx3bS7dr_t8.cache +0 -1
  234. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pE/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +0 -0
  235. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pO/pOOGu7nAdun08PmdiHZas85h5Kqbgs6_M5vHQQKJgW8.cache +0 -1
  236. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pX/pXIDW5zCrR8MxxTON9elPRDkMBEefpa-fWViSmyJGns.cache +0 -2
  237. data/test/dummy/tmp/cache/assets/sprockets/v3.0/qF/qFG1ZnUOHTHsxMxvN1iTKNCA05nrecKPlygtJzvMdSs.cache +0 -2
  238. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sS/sS00IDFTJ19zoTjrB2-Sypybo0I1qXoTtW8JabBMoAo.cache +0 -0
  239. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sb/sbB7Wbcww5hxA8e-5K0oBKQDnlNNnY90t0YUIdYE138.cache +0 -1
  240. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xX/xXo4fouecqy2oZpxsgtkqL6uyIDuKLwBUwmzddno9hw.cache +0 -0
  241. data/test/dummy/tmp/cache/assets/sprockets/v3.0/x_/x_WcnsWyMV1QzLUnFW5J4gZHs0gACREYGaSom7xcaBQ.cache +0 -1
  242. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yC/yCp-2wuXWORHGqxfwG37-mb00X8GpHiRjrlo2QQX3lU.cache +0 -1
  243. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yW/yWtPpcB-kB8_hw5k0prtaOvTW5A5PaCT0ZaJSdh8Zkw.cache +0 -0
  244. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ys/ysFM6FIJniGme1T62LOmRFt3h7g0scd6o6BFIjS5Ppg.cache +0 -0
  245. data/test/dummy/tmp/cache/assets/sprockets/v3.0/z4/z4i9WzpZRzFXynWsqewNMikNdcZ9f9mGFdlrIP5N6Gs.cache +0 -1
  246. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zN/zNfQXfFXMTyOoz3HbVM-_4m-46rWO7XrZPvGs4aJCQc.cache +0 -2
@@ -1,6 +1,11 @@
1
1
  module Notee
2
2
  class ApplicationController < ActionController::Base
3
3
  before_action :restrict_access_json
4
+ before_filter :set_request_filter
5
+
6
+ def set_request_filter
7
+ Thread.current[:request] = request
8
+ end
4
9
 
5
10
  def restrict_access_json
6
11
  return redirect_to new_token_path unless confirm_exist_token
@@ -6,7 +6,7 @@ module Notee
6
6
  before_action :set_category, only: [:show, :update, :destroy]
7
7
 
8
8
  def index
9
- @categories = Category.all
9
+ @categories = Category.where(is_deleted: false)
10
10
  render json: { status: 'success', categories: @categories }
11
11
  end
12
12
 
@@ -27,9 +27,12 @@ module Notee
27
27
 
28
28
  def update
29
29
  respond_to do |format|
30
+ Category.skip_callback(:save, :before, :set_slug)
30
31
  if @category.update(category_params)
32
+ Category.set_callback(:save, :before, :set_slug)
31
33
  format.json { render json: @category, status: 200 }
32
34
  else
35
+ Category.set_callback(:save, :before, :set_slug)
33
36
  format.json { render json: @category.errors, status: :unprocessable_entity }
34
37
  end
35
38
  end
@@ -37,10 +40,11 @@ module Notee
37
40
 
38
41
  def destroy
39
42
  respond_to do |format|
40
- if @category.destroy
43
+ if @category.update(slug: nil, is_deleted: true)
44
+ Category.before_destroy_parent(@category.id)
41
45
  format.json { render json: @category, status: 200 }
42
46
  else
43
- format.json { render json: @category.errors, status: :internal_server_error }
47
+ format.json { render json: @category.errors, status: :unprocessable_entity }
44
48
  end
45
49
  end
46
50
  end
@@ -5,7 +5,7 @@ module Notee
5
5
  before_action :set_comment, only: [:update, :destroy]
6
6
 
7
7
  def index
8
- comments = Comment.all.order(updated_at: :desc)
8
+ comments = Comment.where(is_deleted: false).order(updated_at: :desc)
9
9
  render json: { status: 'success', comments: comments }
10
10
  end
11
11
 
@@ -25,7 +25,7 @@ module Notee
25
25
 
26
26
  def update
27
27
  respond_to do |format|
28
- if @comment.update(post_params)
28
+ if @comment.update(is_hidden: !@comment.is_hidden)
29
29
  format.json { render json: @comment, status: 200 }
30
30
  else
31
31
  format.json { render json: @comment.errors, status: :unprocessable_entity }
@@ -34,8 +34,13 @@ module Notee
34
34
  end
35
35
 
36
36
  def destroy
37
- @comment.destroy
38
- render json: { status: 'success' }
37
+ respond_to do |format|
38
+ if @comment.update(is_deleted: true)
39
+ format.json { render json: @comment, status: 200 }
40
+ else
41
+ format.json { render json: @comment.errors, status: :internal_server_error }
42
+ end
43
+ end
39
44
  end
40
45
 
41
46
  private
@@ -5,7 +5,7 @@ module Notee
5
5
  class ImagesController < ApplicationController
6
6
 
7
7
  def index
8
- @images = Image.all.order(updated_at: :desc)
8
+ @images = Image.where(is_deleted: false).order(updated_at: :desc)
9
9
  render json: { status: 'success', images: @images }
10
10
  end
11
11
 
@@ -31,7 +31,7 @@ module Notee
31
31
  return unless @del_img = Image.find_by(content: params[:name])
32
32
 
33
33
  respond_to do |format|
34
- if @del_img.destroy
34
+ if @del_img.update(is_deleted: true)
35
35
  format.json { render json: @del_img, status: 200 }
36
36
  else
37
37
  format.json { render json: @del_img.errors, status: :internal_server_error }
@@ -7,7 +7,7 @@ module Notee
7
7
 
8
8
  # GET /posts
9
9
  def index
10
- @posts = Post.all.order(updated_at: :desc)
10
+ @posts = Post.where(is_deleted: false).order(updated_at: :desc)
11
11
  render json: { status: 'success', posts: @posts }
12
12
  end
13
13
 
@@ -19,6 +19,7 @@ module Notee
19
19
  # POST /posts
20
20
  def create
21
21
  @post = Post.new(post_params)
22
+ @post.set_user_id
22
23
  respond_to do |format|
23
24
  if @post.save
24
25
  format.json { render json: @post, status: 200 }
@@ -30,6 +31,7 @@ module Notee
30
31
 
31
32
  # PATCH/PUT /posts/1
32
33
  def update
34
+ post_params[:user_id] = @post.user_id
33
35
  respond_to do |format|
34
36
  if @post.update(post_params)
35
37
  format.json { render json: @post, status: 200 }
@@ -41,8 +43,13 @@ module Notee
41
43
 
42
44
  # DELETE /posts/1
43
45
  def destroy
44
- @post.destroy
45
- render json: { status: 'success' }
46
+ respond_to do |format|
47
+ if @post.update(is_deleted: true)
48
+ format.json { render json: @post, status: 200 }
49
+ else
50
+ format.json { render json: @post.errors, status: :internal_server_error }
51
+ end
52
+ end
46
53
  end
47
54
 
48
55
  private
@@ -53,7 +60,7 @@ module Notee
53
60
 
54
61
  # Only allow a trusted parameter "white list" through.
55
62
  def post_params
56
- params.require(:post).permit(:title, :content, :slug, :status, :category_id, :thumbnail_id, :published_at, :seo_keyword, :seo_description, :secret_published_password)
63
+ params.require(:post).permit(:title, :content, :slug, :status, :user_id, :category_id, :thumbnail_id, :published_at, :seo_keyword, :seo_description, :secret_published_password)
57
64
  end
58
65
  end
59
66
  end
@@ -11,7 +11,7 @@ module Notee
11
11
  user = find_user_by_access_token
12
12
 
13
13
  if user
14
- render json: { status: 'success', user: user }
14
+ render json: { status: 'success', role: user.role }
15
15
  else
16
16
  render json: { status: 'failed' }
17
17
  end
@@ -9,25 +9,19 @@ module Notee
9
9
  end
10
10
 
11
11
  def create
12
- if Notee.notee_id == params[:id] && Notee.notee_password == params[:password]
13
- if token = Token.create!
14
- session[:access_token] = token.access_token
15
- return redirect_to root_path
16
- end
17
- end
18
-
19
- if now_user = User.sign_in(params[:id], params[:password])
20
- if token = Token.create!(user_id: now_user.id)
21
- session[:access_token] = token.access_token
22
- end
23
- end
24
-
12
+ User.sign_in(params[:id], params[:password])
25
13
  redirect_to root_path
26
14
  end
27
15
 
28
16
  def destroy
29
- Token.find_by_access_token(session[:access_token]).destroy!
30
- session.delete(:access_token)
17
+ respond_to do |format|
18
+ if @token = Token.find_by_access_token(session[:access_token]).destroy!
19
+ session.delete(:access_token)
20
+ format.json { render json: @token, status: 200 }
21
+ else
22
+ format.json { render json: @token.errors, status: :unprocessable_entity }
23
+ end
24
+ end
31
25
  end
32
26
  end
33
27
  end
@@ -0,0 +1,60 @@
1
+ require_dependency 'notee/application_controller'
2
+
3
+ module Notee
4
+ class TrashesController < ApplicationController
5
+ before_action :set_trash, only: [:update]
6
+
7
+ def index
8
+ trash_model = get_model
9
+ if @trashes = trash_model.trash
10
+ render json: { status: 'success', trashes: @trashes }
11
+ else
12
+ render json: @trashes.errors, status: 422
13
+ end
14
+ end
15
+
16
+ def update
17
+ get_model.skip_callback(:update, :before, :update_authority)
18
+
19
+ respond_to do |format|
20
+ if @trash.update(is_deleted: false)
21
+ format.json { render json: @trash, status: 200 }
22
+ else
23
+ format.json { render json: @trash.errors, status: :unprocessable_entity }
24
+ end
25
+ end
26
+
27
+ get_model.set_callback(:update, :before, :update_authority)
28
+ end
29
+
30
+ def self.cleanup
31
+ Post.trash.time_limit.delete_all
32
+ Category.trash.time_limit.delete_all
33
+ Image.trash.time_limit.delete_all
34
+ User.trash.time_limit.delete_all
35
+ Comment.trash.time_limit.delete_all
36
+ end
37
+
38
+ private
39
+
40
+ def get_model
41
+ case params[:model]
42
+ when 'posts'
43
+ return Post
44
+ when 'categories'
45
+ return Category
46
+ when 'images'
47
+ return Image
48
+ when 'users'
49
+ return User
50
+ when 'comments'
51
+ return Comment
52
+ end
53
+ end
54
+
55
+ def set_trash
56
+ trash_model = get_model
57
+ @trash = trash_model.find_by(id: params[:id])
58
+ end
59
+ end
60
+ end
@@ -3,13 +3,14 @@ require_dependency 'notee/application_controller'
3
3
 
4
4
  module Notee
5
5
  class UsersController < ApplicationController
6
+
6
7
  # callbacks
7
8
  before_action :set_user, only: [:show, :update, :destroy]
8
9
  before_action :convert_from_string_to_int, only: [:create, :update]
9
10
 
10
11
  # GET /users
11
12
  def index
12
- @users = User.all.order(updated_at: :desc)
13
+ @users = User.where(is_deleted: false).order(updated_at: :desc)
13
14
  render json: { status: 'success', users: @users }
14
15
  end
15
16
 
@@ -18,10 +19,14 @@ module Notee
18
19
  render json: { status: 'success', user: @user }
19
20
  end
20
21
 
22
+ def mypage
23
+ @user = Token.find_by(access_token: session[:access_token]).user
24
+ render json: { status: 'success', user: @user }
25
+ end
26
+
21
27
  # POST /posts
22
28
  def create
23
29
  @user = User.new(user_params)
24
- @user.file = user_params[:profile_img]
25
30
  respond_to do |format|
26
31
  if @user.save
27
32
  format.json { render json: @user, status: 200 }
@@ -33,7 +38,6 @@ module Notee
33
38
 
34
39
  # PATCH/PUT /posts/1
35
40
  def update
36
- @user.file = user_params[:profile_img]
37
41
  respond_to do |format|
38
42
  if @user.update(user_params)
39
43
  format.json { render json: @user, status: 200 }
@@ -43,10 +47,26 @@ module Notee
43
47
  end
44
48
  end
45
49
 
50
+ def update_password
51
+ @user = Token.find_by(access_token: session[:access_token]).user
52
+ respond_to do |format|
53
+ if @user.update_password(user_params)
54
+ format.json { render json: @user, status: 200 }
55
+ else
56
+ format.json { render json: @user.errors, status: :unprocessable_entity }
57
+ end
58
+ end
59
+ end
60
+
46
61
  # DELETE /posts/1
47
62
  def destroy
48
- @user.destroy
49
- render json: { status: 'success' }
63
+ respond_to do |format|
64
+ if @user.update(is_deleted: true)
65
+ format.json { render json: @user, status: 200 }
66
+ else
67
+ format.json { render json: @user.errors, status: :internal_server_error }
68
+ end
69
+ end
50
70
  end
51
71
 
52
72
  private
@@ -61,7 +81,7 @@ module Notee
61
81
 
62
82
  # Only allow a trusted parameter "white list" through.
63
83
  def user_params
64
- params.require(:user).permit(:name, :email, :password, :password_confirm, :profile, :profile_img, :role)
84
+ params.require(:user).permit(:name, :email, :now_password, :password, :password_confirm, :profile, :profile_img, :role, :file)
65
85
  end
66
86
  end
67
87
  end
@@ -1,5 +1,32 @@
1
1
  module Notee
2
2
  class ApplicationRecord < ActiveRecord::Base
3
3
  self.abstract_class = true
4
+
5
+ # scopes
6
+ scope :trash, -> { where(is_deleted: true) }
7
+ scope :not_trash, -> { where(is_deleted: false) }
8
+ scope :time_limit, -> { where('updated_at <= ?', Time.current - 60*60*24*30) }
9
+
10
+ # authority check
11
+ before_create :create_authority
12
+ before_update :update_authority, unless: :is_destroy?
13
+ before_update :destroy_authority, if: :is_destroy?
14
+
15
+ def create_authority
16
+ Authority.check('create', self)
17
+ end
18
+
19
+ def update_authority
20
+ Authority.check('update', self)
21
+ end
22
+
23
+ def destroy_authority
24
+ Authority.check('destroy', self)
25
+ end
26
+
27
+ def is_destroy?
28
+ return true if self.is_deleted == true
29
+ false
30
+ end
4
31
  end
5
32
  end
@@ -0,0 +1,377 @@
1
+ module Notee
2
+ class Authority
3
+ include ActiveModel::Model
4
+
5
+ class AuthorityError < StandardError; end
6
+ class << self
7
+
8
+ TARGET_ARR = ['Post', 'Category', 'Image', 'User']
9
+
10
+ def check(crud, new_model_obj)
11
+
12
+ check_deleted
13
+ role = get_role
14
+
15
+ case role
16
+ when 'writer' then
17
+ writer(crud, new_model_obj)
18
+ when 'editor' then
19
+ editor(crud, new_model_obj)
20
+ when 'manager' then
21
+ manager(crud, new_model_obj)
22
+ when 'root' then
23
+ root_user(crud, new_model_obj)
24
+ else
25
+ end
26
+ end
27
+
28
+
29
+ def get_role
30
+ token = Token.find_by(access_token: Thread.current[:request].session[:access_token])
31
+ return token.user.role
32
+ end
33
+
34
+ def get_user_id
35
+ token = Token.find_by(access_token: Thread.current[:request].session[:access_token])
36
+ return token.user.id
37
+ end
38
+
39
+ private
40
+
41
+ # /////////////////////////////////
42
+ # WRITER
43
+ # /////////////////////////////////
44
+
45
+ # you can
46
+ # create: posts, categories, images
47
+ # update: my posts, categories, images, my user without role
48
+ # delete: my posts
49
+
50
+ # you cannot
51
+ # create: users
52
+ # update: other posts, other users, my user role
53
+ # delete: other posts, categories, images, users
54
+
55
+ def writer(crud, new_model_obj)
56
+ case crud
57
+ when 'create' then
58
+ writer_create(new_model_obj)
59
+ when 'update' then
60
+ writer_update(new_model_obj)
61
+ when 'destroy' then
62
+ writer_destroy(new_model_obj)
63
+ else
64
+ end
65
+ end
66
+
67
+ def writer_create(new_model_obj)
68
+ case new_model_obj.class.name
69
+ when /Post/ then
70
+ # success
71
+ Rails.logger.debug("Writer create a post")
72
+ when /Category/ then
73
+ # success
74
+ Rails.logger.debug("Writer create a category")
75
+ when /Image/ then
76
+ # success
77
+ Rails.logger.debug("Writer create a image")
78
+ when /User/ then
79
+ # error
80
+ raise AuthorityError, 'Writer can not create User'
81
+ else
82
+ end
83
+ end
84
+
85
+ def writer_update(new_model_obj)
86
+ case new_model_obj.class.name
87
+ when /Post/ then
88
+ # error
89
+ raise AuthorityError, 'Writer can update only my Post' unless get_user_id == new_model_obj.user_id
90
+
91
+ # success
92
+ Rails.logger.debug("Writer update my post")
93
+ when /Category/ then
94
+ # success
95
+ Rails.logger.debug("Writer update a category")
96
+ when /Image/ then
97
+ # success
98
+ Rails.logger.debug("Writer update a image")
99
+ when /User/ then
100
+ # error
101
+ raise AuthorityError, 'Writer can update only my Post' unless get_user_id == new_model_obj.id
102
+
103
+ # success
104
+ Rails.logger.debug("Writer update my user")
105
+ else
106
+
107
+ end
108
+ end
109
+
110
+ def writer_destroy(new_model_obj)
111
+ case new_model_obj.class.name
112
+ when /Post/ then
113
+ # error
114
+ raise AuthorityError, 'Writer can destroy only my Post' unless get_user_id == new_model_obj.user_id
115
+
116
+ # success
117
+ Rails.logger.debug("Writer destroy my post")
118
+ when /Category/ then
119
+ # error
120
+ raise AuthorityError, 'Writer can not destroy Category'
121
+ when /Image/ then
122
+ # error
123
+ raise AuthorityError, 'Writer can not destroy Image'
124
+ when /User/ then
125
+ # error
126
+ raise AuthorityError, 'Writer can not destroy User'
127
+ else
128
+
129
+ end
130
+ end
131
+
132
+ # /////////////////////////////////
133
+ # EDITOR - Restriction
134
+ # /////////////////////////////////
135
+
136
+ # you can
137
+ # create: posts, categories, images
138
+ # update: posts, categories, images, my user without role
139
+ # delete: posts, categories, images
140
+
141
+ # you cannot
142
+ # - create: users
143
+ # - update: other users, my user role
144
+ # - delete: users
145
+
146
+ def editor(crud, new_model_obj)
147
+ case crud
148
+ when 'create' then
149
+ editor_create(new_model_obj)
150
+ when 'update' then
151
+ editor_update(new_model_obj)
152
+ when 'destroy' then
153
+ editor_destroy(new_model_obj)
154
+ else
155
+
156
+ end
157
+ end
158
+
159
+ def editor_create(new_model_obj)
160
+ case new_model_obj.class.name
161
+ when /Post/ then
162
+ # success
163
+ Rails.logger.debug("Editor create a post")
164
+ when /Category/ then
165
+ # success
166
+ Rails.logger.debug("Editor create a category")
167
+ when /Image/ then
168
+ # success
169
+ Rails.logger.debug("Editor create a image")
170
+ when /User/ then
171
+ # error
172
+ raise AuthorityError, 'Editor can not destroy User'
173
+ else
174
+
175
+ end
176
+ end
177
+
178
+ def editor_update(new_model_obj)
179
+ case new_model_obj.class.name
180
+ when /Post/ then
181
+ # success
182
+ Rails.logger.debug("Editor update a post")
183
+ when /Category/ then
184
+ # success
185
+ Rails.logger.debug("Editor update a category")
186
+ when /Image/ then
187
+ # success
188
+ Rails.logger.debug("Editor update a image")
189
+ when /User/ then
190
+ # error
191
+ raise AuthorityError, 'Editor can update only my Post' unless get_user_id == new_model_obj.id
192
+
193
+ # success
194
+ Rails.logger.debug("Editor update a user")
195
+ else
196
+
197
+ end
198
+ end
199
+
200
+ def editor_destroy(new_model_obj)
201
+ case new_model_obj.class.name
202
+ when /Post/ then
203
+ # success
204
+ Rails.logger.debug("Editor destroy a post")
205
+ when /Category/ then
206
+ # success
207
+ Rails.logger.debug("Editor destroy a category")
208
+ when /Image/ then
209
+ # success
210
+ Rails.logger.debug("Editor destroy a image")
211
+ when /User/ then
212
+ # error
213
+ raise AuthorityError, 'Editor can not destroy User'
214
+ else
215
+
216
+ end
217
+ end
218
+
219
+ # /////////////////////////////////
220
+ # MANAGER - Restriction
221
+ # /////////////////////////////////
222
+
223
+ # you can
224
+ # create: posts, categories, images, users
225
+ # update: posts, categories, images, users
226
+ # delete: posts, categories, images, users
227
+
228
+ # you cannot
229
+ # - create: none
230
+ # - update: none
231
+ # - delete: none
232
+
233
+ def manager(crud, new_model_obj)
234
+ case crud
235
+ when 'create' then
236
+ manager_create(new_model_obj)
237
+ when 'update' then
238
+ manager_update(new_model_obj)
239
+ when 'destroy' then
240
+ manager_destroy(new_model_obj)
241
+ else
242
+
243
+ end
244
+ end
245
+
246
+ def manager_create(new_model_obj)
247
+ case new_model_obj.class.name
248
+ when /Post/ then
249
+ # success
250
+ Rails.logger.debug("Manager create a post")
251
+ when /Category/ then
252
+ # success
253
+ Rails.logger.debug("Manager create a category")
254
+ when /Image/ then
255
+ # success
256
+ Rails.logger.debug("Manager create a image")
257
+ when /User/ then
258
+ # success
259
+ Rails.logger.debug("Manager create a user")
260
+ else
261
+
262
+ end
263
+ end
264
+
265
+ def manager_update(new_model_obj)
266
+ case new_model_obj.class.name
267
+ when /Post/ then
268
+ # success
269
+ Rails.logger.debug("Manager update a post")
270
+ when /Category/ then
271
+ # success
272
+ Rails.logger.debug("Manager update a category")
273
+ when /Image/ then
274
+ # success
275
+ Rails.logger.debug("Manager update a image")
276
+ when /User/ then
277
+ # success
278
+ Rails.logger.debug("Manager update a user")
279
+ else
280
+
281
+ end
282
+ end
283
+
284
+ def manager_destroy(new_model_obj)
285
+ case new_model_obj.class.name
286
+ when /Post/ then
287
+ # success
288
+ Rails.logger.debug("Manager destroy a post")
289
+ when /Category/ then
290
+ # success
291
+ Rails.logger.debug("Manager destroy a category")
292
+ when /Image/ then
293
+ # success
294
+ Rails.logger.debug("Manager destroy a image")
295
+ when /User/ then
296
+ # success
297
+ Rails.logger.debug("Manager destroy a user")
298
+ else
299
+
300
+ end
301
+ end
302
+
303
+ # /////////////////////////////////
304
+ # ROOT
305
+ # /////////////////////////////////
306
+
307
+ # you can
308
+ # create: users
309
+ # update: none
310
+ # delete: none
311
+
312
+ # you cannot
313
+ # - create: posts, categories, images
314
+ # - update: posts, categories, images, users
315
+ # - delete: posts, categories, images, users
316
+
317
+ def root_user(crud, new_model_obj)
318
+ case crud
319
+ when 'create' then
320
+ root_create(new_model_obj)
321
+ when 'update' then
322
+ root_update(new_model_obj)
323
+ else
324
+ # error
325
+ raise AuthorityError, 'Root user only create User, and update own profile'
326
+ end
327
+ end
328
+
329
+ def root_create(new_model_obj)
330
+ case new_model_obj.class.name
331
+ when /User/ then
332
+ # success
333
+ Rails.logger.debug("Root user create a user")
334
+ else
335
+ # error
336
+ raise AuthorityError, 'Root user only create User'
337
+ end
338
+ end
339
+
340
+ def root_update(new_model_obj)
341
+ case new_model_obj.class.name
342
+ when /User/ then
343
+ raise AuthorityError, 'Root user only update own profile' unless new_model_obj.id == 0
344
+ # success
345
+ Rails.logger.debug("Root user update own profile")
346
+ else
347
+ # error
348
+ raise AuthorityError, 'Root user only update own profile'
349
+ end
350
+ end
351
+
352
+ # /////////////////////////////////
353
+ # DELETED
354
+ # /////////////////////////////////
355
+
356
+ # you can
357
+ # create: none
358
+ # update: none
359
+ # delete: none
360
+
361
+ # you cannot
362
+ # - create: all
363
+ # - update: all
364
+ # - delete: all
365
+
366
+ def check_deleted
367
+ token = Token.find_by(access_token: Thread.current[:request].session[:access_token])
368
+ if token.user.is_deleted
369
+ # error
370
+ raise AuthorityError, 'This User is Deleted..'
371
+ end
372
+ end
373
+
374
+ end
375
+ end
376
+ end
377
+