notee 0.4.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/notee/application.js +19539 -17294
- data/app/controllers/notee/application_controller.rb +5 -0
- data/app/controllers/notee/categories_controller.rb +7 -3
- data/app/controllers/notee/comments_controller.rb +9 -4
- data/app/controllers/notee/images_controller.rb +2 -2
- data/app/controllers/notee/posts_controller.rb +11 -4
- data/app/controllers/notee/roles_controller.rb +1 -1
- data/app/controllers/notee/tokens_controller.rb +9 -15
- data/app/controllers/notee/trashes_controller.rb +60 -0
- data/app/controllers/notee/users_controller.rb +26 -6
- data/app/models/notee/application_record.rb +27 -0
- data/app/models/notee/authority.rb +377 -0
- data/app/models/notee/category.rb +15 -2
- data/app/models/notee/comment.rb +6 -0
- data/app/models/notee/image.rb +2 -2
- data/app/models/notee/post.rb +7 -5
- data/app/models/notee/user.rb +97 -41
- data/app/views/layouts/notee/application.html.erb +3 -1
- data/config/routes.rb +19 -9
- data/db/migrate/20160605141437_create_notee_posts.rb +1 -0
- data/db/migrate/20160605141510_create_notee_categories.rb +4 -1
- data/db/migrate/20160605141547_create_notee_images.rb +4 -2
- data/db/migrate/20160803154954_create_notee_comments.rb +2 -1
- data/db/migrate/20160809145754_create_notee_users.rb +1 -0
- data/lib/notee/helpers/notee_helper.rb +65 -46
- data/lib/notee/helpers/view_helper.rb +10 -2
- data/lib/notee/status.rb +1 -2
- data/lib/notee/version.rb +1 -1
- data/lib/tasks/config/notee.rb +26 -0
- data/lib/tasks/config/schedule.rb +7 -0
- data/lib/tasks/controllers/notee_controller.rb +65 -0
- data/lib/tasks/javascripts/notee/highlight.pack.js +2 -0
- data/lib/tasks/notee_tasks.rake +105 -51
- data/lib/tasks/stylesheets/notee/highlight/agate.css +108 -0
- data/lib/tasks/stylesheets/notee/highlight/androidstudio.css +66 -0
- data/lib/tasks/stylesheets/notee/highlight/arduino-light.css +88 -0
- data/lib/tasks/stylesheets/notee/highlight/arta.css +73 -0
- data/lib/tasks/stylesheets/notee/highlight/ascetic.css +45 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-cave-dark.css +83 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-cave-light.css +85 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-dune-dark.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-dune-light.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-estuary-dark.css +84 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-estuary-light.css +84 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-forest-dark.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-forest-light.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-heath-dark.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-heath-light.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-lakeside-dark.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-lakeside-light.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-plateau-dark.css +84 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-plateau-light.css +84 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-savanna-dark.css +84 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-savanna-light.css +84 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-seaside-dark.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-seaside-light.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-sulphurpool-dark.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atelier-sulphurpool-light.css +69 -0
- data/lib/tasks/stylesheets/notee/highlight/atom-one-dark.css +96 -0
- data/lib/tasks/stylesheets/notee/highlight/atom-one-light.css +96 -0
- data/lib/tasks/stylesheets/notee/highlight/brown-paper.css +64 -0
- data/lib/tasks/stylesheets/notee/highlight/brown-papersq.png +0 -0
- data/lib/tasks/stylesheets/notee/highlight/codepen-embed.css +60 -0
- data/lib/tasks/stylesheets/notee/highlight/color-brewer.css +71 -0
- data/lib/tasks/stylesheets/notee/highlight/darcula.css +77 -0
- data/lib/tasks/stylesheets/notee/highlight/dark.css +63 -0
- data/lib/tasks/stylesheets/notee/highlight/darkula.css +6 -0
- data/lib/tasks/stylesheets/notee/highlight/default.css +99 -0
- data/lib/tasks/stylesheets/notee/highlight/docco.css +97 -0
- data/lib/tasks/stylesheets/notee/highlight/dracula.css +76 -0
- data/lib/tasks/stylesheets/notee/highlight/far.css +71 -0
- data/lib/tasks/stylesheets/notee/highlight/foundation.css +88 -0
- data/lib/tasks/stylesheets/notee/highlight/github-gist.css +71 -0
- data/lib/tasks/stylesheets/notee/highlight/github.css +99 -0
- data/lib/tasks/stylesheets/notee/highlight/googlecode.css +89 -0
- data/lib/tasks/stylesheets/notee/highlight/grayscale.css +101 -0
- data/lib/tasks/stylesheets/notee/highlight/gruvbox-dark.css +108 -0
- data/lib/tasks/stylesheets/notee/highlight/gruvbox-light.css +108 -0
- data/lib/tasks/stylesheets/notee/highlight/hopscotch.css +83 -0
- data/lib/tasks/stylesheets/notee/highlight/hybrid.css +102 -0
- data/lib/tasks/stylesheets/notee/highlight/idea.css +97 -0
- data/lib/tasks/stylesheets/notee/highlight/ir-black.css +73 -0
- data/lib/tasks/stylesheets/notee/highlight/kimbie.dark.css +74 -0
- data/lib/tasks/stylesheets/notee/highlight/kimbie.light.css +74 -0
- data/lib/tasks/stylesheets/notee/highlight/magula.css +70 -0
- data/lib/tasks/stylesheets/notee/highlight/mono-blue.css +59 -0
- data/lib/tasks/stylesheets/notee/highlight/monokai-sublime.css +83 -0
- data/lib/tasks/stylesheets/notee/highlight/monokai.css +70 -0
- data/lib/tasks/stylesheets/notee/highlight/obsidian.css +88 -0
- data/lib/tasks/stylesheets/notee/highlight/ocean.css +74 -0
- data/lib/tasks/stylesheets/notee/highlight/paraiso-dark.css +72 -0
- data/lib/tasks/stylesheets/notee/highlight/paraiso-light.css +72 -0
- data/lib/tasks/stylesheets/notee/highlight/pojoaque.css +83 -0
- data/lib/tasks/stylesheets/notee/highlight/pojoaque.jpg +0 -0
- data/lib/tasks/stylesheets/notee/highlight/purebasic.css +96 -0
- data/lib/tasks/stylesheets/notee/highlight/qtcreator_dark.css +83 -0
- data/lib/tasks/stylesheets/notee/highlight/qtcreator_light.css +83 -0
- data/lib/tasks/stylesheets/notee/highlight/railscasts.css +106 -0
- data/lib/tasks/stylesheets/notee/highlight/rainbow.css +85 -0
- data/lib/tasks/stylesheets/notee/highlight/school-book.css +72 -0
- data/lib/tasks/stylesheets/notee/highlight/school-book.png +0 -0
- data/lib/tasks/stylesheets/notee/highlight/solarized-dark.css +84 -0
- data/lib/tasks/stylesheets/notee/highlight/solarized-light.css +84 -0
- data/lib/tasks/stylesheets/notee/highlight/sunburst.css +102 -0
- data/lib/tasks/stylesheets/notee/highlight/tomorrow-night-blue.css +75 -0
- data/lib/tasks/stylesheets/notee/highlight/tomorrow-night-bright.css +74 -0
- data/lib/tasks/stylesheets/notee/highlight/tomorrow-night-eighties.css +74 -0
- data/lib/tasks/stylesheets/notee/highlight/tomorrow-night.css +75 -0
- data/lib/tasks/stylesheets/notee/highlight/tomorrow.css +72 -0
- data/lib/tasks/stylesheets/notee/highlight/vs.css +68 -0
- data/lib/tasks/stylesheets/notee/highlight/xcode.css +93 -0
- data/lib/tasks/stylesheets/notee/highlight/xt256.css +92 -0
- data/lib/tasks/stylesheets/notee/highlight/zenburn.css +80 -0
- data/lib/tasks/stylesheets/notee/normalize.css +427 -0
- data/lib/tasks/stylesheets/notee/notee_default.css +386 -0
- data/lib/tasks/views/notee/about.html.erb +43 -0
- data/lib/tasks/views/notee/archives.html.erb +16 -0
- data/lib/tasks/views/notee/categories.html.erb +15 -0
- data/lib/tasks/views/notee/partials/_foote.html.erb +3 -0
- data/lib/tasks/views/notee/partials/_header.html.erb +17 -0
- data/lib/tasks/views/notee/partials/_profile.html.erb +9 -0
- data/lib/tasks/views/notee/partials/_sidebar.html.erb +23 -0
- data/lib/tasks/views/notee/posts.html.erb +53 -0
- data/lib/tasks/views/notee/show.html.erb +42 -0
- data/lib/tasks/views/notee/writers.html.erb +11 -0
- metadata +115 -240
- data/lib/tasks/css/notee_default.css +0 -59
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +0 -3087
- data/test/dummy/log/test.log +0 -872
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-t/-tdJTrCcY92VpiO_z6SIt_iHkHDtn1-8Vf__p-Ve9lU.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/0K/0KQJQyRy3gQkymW0xnPhM4_OpLtoTcw9Rutx4F4IajE.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/1B/1Bb2_fhXoTmM27WcuQJ2sr0UCMHh6TjrBIwd6Ks8qJ0.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/1N/1NYje2ld9grEMpvxBFjocEWWMPi4jNPuPLdlkV1Wq5A.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/1s/1sPuKGE0jImBtnCnczIk6NpOn9cYeyBZsXHvpXJ1tGA.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/1s/1sRxHck-81_JSGvEidXPx2S86Cbe0UjizohTg5lkd-U.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/3d/3dw9fS6dak9HSgJqviXZ6CCibFx8--QDKyWjrqKqraI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4S/4SCYKO2aAiXfZPZF1vTYeIQegrrqvH-2jlfGl1I6juQ.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4z/4zE2reLAwChLIBivfo5JfQjRwOM2sBvlDLXftsA772o.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5L/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5p/5pDjSjY69Pd-A64UKCqQ_yxQouHkmBElVBKf1IZT2HM.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5p/5pnvfhvSgahCnLPLbhB7dM8lSEhk2w39UTDXe83gYng.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5r/5r2K8e-LRVnmo3VUaNdNx3K1b_BgFMOboxlnTQC_Ckk.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5u/5ue4ZdF425UevYa9Danha84KDME2s4InW-zR-y-Y0SM.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6Q/6Qq8Rnvquz8oH8ojJlj79pSAhSHH_VoWRS0Cn-d-yLQ.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6Y/6Y--Gdy-iDkVFcgE3j660zOA3sf_osOedfJpeV_Kxh4.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7G/7GrmDrSvjAFvLUcaRN95cQLmvkzf8D_cvGlhRyL01HA.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/83/83mXRYYdvGZS4tNS_IFZLa5P6e-fg9MSMqWG4MJ-Jks.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8H/8HKewCH2XL9errlVDVPK8QZg0LoH-_Q3zqQ1pjCYBEU.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8v/8vJIODLLCFZwV8yIF98dlb5_CQZlgBdCLiM8UA6WiSA.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/9W/9WtQTxW8TE4CQvkem1QkHVjZFB93XAJo3ioPSt6U5wM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/AH/AHLaBPz-xNABgeh1V66iU7wJ6FCxvFIie5V05wRvI84.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/C1/C1S3q8MtvUImrUe70fZPf9wxMfxdcWPSRXRrv4H6_lo.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/D4/D4ftsVSRtZadejqqBmur8bfiHLhZFCaIjpsAdJT28Iw.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/DS/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fr/FrWiXIfDo2-fsKFSgef9Bs-0HjC7dOgBY8IVBLCq9ag.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fz/FzjTR8U_FOgMIbfYBgJfzujyNBozRZd-3YYTkiAQTOg.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/G6/G6nKI6E9cfkIZqH5EnbMJtS4DKHApFlNTKh__ZuK774.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/HH/HHQp4rqJ3kx9sfFo3AAW2DS6zHl28lCqALB5YnKXeG8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/IN/INpQmG9J4AOUCg2YWypvnwq9ce01SFPnDGidI2qcU_8.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/J0/J038M_TjhJBb-678LCin4jaJSkSaaXy7XHJbEp1Bo5I.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/JI/JIHr2A9bWoln5XahhS15lRxvHSXdQZ7OrlbAW1IzayM.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/JI/JId5JhtAhhN90V7z1OSItT9m4n4H_Nfk3IGtOW0mA_s.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/JP/JPylOhsUjr9NtL1AViDe-Sz0-iLPZGPww463ChRqhEw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/JU/JUdbchVNMjz67zIvPztSzFfpU_VO4Rl9V86GzJH28_A.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/K0/K0Ou5PNqxeODBFSEnIeg7EaidQVBRvPH-SPrTF1tRVA.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/KS/KSTuVqjLw0xUGYH5WcnAloHDphCDQr4cFjXKKl5vW7M.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/L-/L--JLWiCS6RZ0l_EciZOoY0eTEs6BGBED1YZ7hj13vQ.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ME/META30ksADpNoAnM_vlhKhlLOfxBlo5uJjJKSJa264o.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/MH/MHQULHaqwmMfm67LLiF_ZDlM6Zix3aPput7pxTViWQ0.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/NK/NKXg7894FsAVQJxXzYkUOgd131zYAeWOIxmegdT-LFk.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/NW/NWx4g28WkpCPeRLdgMDaUuLO2e4UIw2bs-HKy-ixIlU.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Nj/NjPNj--fkweGPvPTHkDlefKtB5bpFaGG9X60M_goNUo.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/OI/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Oh/Ohok7uysixzjxK1FE7m-KJv6gqYQH4svN8nZyRBOgwA.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ot/Ot7COhZjTueyAONhzjXiOOwv0uTS9EtXGgxYznVMIvs.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/P4/P4KZGx6J2yGIq1PMq13fnsaXrS47R-S_sYrQrcUL59I.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Pn/Pn9eXmle4fRjakm_xgwyXs5YzlWELSuhbi3nnV2-Ink.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/QY/QYNLSW9XctrfttzhOfkik5INswRo-qBjjwQvA7S_lyc.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Qb/Qbb4ATlvuCS0fudaTweqJoma2S99Mr2Q6ISbIpDoMso.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/R6/R6E4Q8O1upT5p_U-ySDbO3dFY6SMeSwmubqJUfSJedo.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Rv/RvcRQ_I7meCLqBRooErlcPwcbH0tdDuvO5SQ_Xy45Qk.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Sz/SzRmx7uSmniNAGO1zMPd4qzEgM8eAaWBqaxestc32Jg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Tk/TkRyIpbn-1DcVexPTWUljWQOek0D_q6yO_jYNGwKM_o.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/U1/U1E_3Z4bItTBl9s8aX6O2rceqAD5GfoNzF8AqYs9Hig.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/UC/UCe1qLwGTD6W2etoFOMln6E2DgTq8Xnm7eGvCs6YGEE.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/UZ/UZhrzLOgNG132Xf1yJ7H7lSq4S3TyDoPphdzwKU8fqQ.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ud/UdBXq-s3u32R-gjMCYZv9RJH4n1xSt8PnBpWxg-JzGE.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/VD/VDaYJQJdErZ0zVg9KgvidORf7a13jqM72Uk97zzuUZU.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/WT/WTExV_4iBOBS-SWMh6jqm61uSp83ezH5DPIkjfktls4.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wi/Wia5tzg4hJNhNhKWgY7pkrxWbvr6n0YaKXl80wh6qPg.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wl/WldqQqssrkJedTdiFt86Y6FDn5ww1MirVAAnOpRqeCE.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wv/WvAZ72pGsB5VpmTmGBucm1eztH129yQ1YmrRMy-yS4g.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wz/WzSkff9VUQsb0DJ5RB3m3SfxRTMU97qhyNCqiIHlJPw.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Yx/Yx6fZ9ju2qCb4Ps_0iEzNR7KgDNTE2gIRjcdOMFXNlo.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ZO/ZOUPFk5_ZB8Wtn42g9PiY6Qu7KSbipNG04Qa5YSP6sw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ZT/ZT-4a7lIKMm0Swxyt7MdXMz5v6r5MaVvtHvqAT6T8Ts.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Zb/ZbvOW6HdEiql0zdGkCPG-EK8beJAmp1ovBR1Oy1V6Fw.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Zu/ZuAoFB2A_kFOIb19dNUzEU5jP-SzQLmauPCURINz2Fo.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/_r/_rmEe1ir-igQN0twVhxrxngbLIFJkINITWVGNye4-MM.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/aE/aEQNT9eY4cAc2ACQnD35BkLV5dEezB-drcCoF1SzjAc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/bK/bKPdLlYXb5ZZU8vrzCdKqLgCXyeiXHExSl9lwGIofU0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/br/brGLDCuoxhnIrvwsuWmzjnwDV7Bn_nezqOrXiI0oco0.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/c3/c3Jo7UkNggNJH21U9HD-Y5Lipd68yZXcl6FGMbzFEeM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/c4/c4YjuvK4zQOjr5Q6N7A_-NHM59NF0kGApLBxSZ5JgqA.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/c9/c9B4H9i5OvdAnZpel-KocssCcsd3TS2Gqe4uKAFjiKQ.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dM/dMJ_N4wD6R1wforGNMdyz6wec-5a7_H03vxu0pgPhLc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dr/drYndmRIbBKroImntO4XhUYV5kqxE2q2qE_aYRwYj4Q.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/du/dumQ6K8NP4rz74ofF4DxxFRetR-K07c75MhZrUQDbqY.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/fn/fns6a_EwXvrlRyeQjB9lcYXHfIZi0guP75oUWPuz4Z0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/g3/g3NfArxOfOGHlWIGK-Znm2-gh1Oyud_f5ZEFuGrOv2g.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/gF/gFErWaVWbjefUiSe3yI-bWCrUD3SsMHomSjTacMlSDM.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/gG/gGCsoohK0vflREMUeOrfW4KZeI73jU9ld5t0pzfjh4U.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/gZ/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hZ/Hz6pNt28QsuyrFcIx0afHONIVEGdLBEC64cV2zh2xAM.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hZ/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hv/hvw4qAvufcLTOeT9ie13DTIDt3SOLih2iH9P603ZOFQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/iZ/iZGxFM6U5PSEZmHGlksi8vAVBMlMiyjOBaL8HIGcOPE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ig/iguUMDAVIm9pfM52njpM4hqpnNYkwKTWvNXQyolgR74.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jJ/jJTo0slnuZqKDbuFGjyBEkenWViH1MiTvb7gNjc4SL4.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jN/jNM9mSzc6sg9yU7srXH0l2_bPIXbqLtJVBML2umXb9w.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jh/jhx8TAOiUaenqesmOiahNzaVcnpiciOE8VKZdrxGerc.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/kT/kTif4yPNd0vB6fWie0kxsN5Gwubl8sqAOyydwpiyHzo.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/m3/m3lSeIbfcyVVkENoCOiz_6LvNubosVesCJBkdI88aNk.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/m6/m6kJHQNOyyMHxod8TObJKAp8iV_noMwYPWsBh-CCG0k.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mX/mXJ655Gxgvg2C08jNcMFB9OQ2G6HrtGc_MfVIpYycsg.cache +0 -3
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mr/MrG8zKUbpqoyxO2GdEOuWmFBUIpOKL3upEtfOWsYluQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mr/mr-hjupF6Lf8wABiaoi8L9823j20yjhhTnrn4FNsEZI.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/n2/n2T4JbhKpnbSE5uhnXyPzu4WnDOkMu78BrJ-Huhn7YU.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/nC/nCuKY2iJdzgSyWS09dThZ5T57F8vGBo0w-ycyuEidUk.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/og/ogVEMp7SPQ-wAJz4mNXdRrx52GXFvHKpSx3bS7dr_t8.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/pE/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/pO/pOOGu7nAdun08PmdiHZas85h5Kqbgs6_M5vHQQKJgW8.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/pX/pXIDW5zCrR8MxxTON9elPRDkMBEefpa-fWViSmyJGns.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/qF/qFG1ZnUOHTHsxMxvN1iTKNCA05nrecKPlygtJzvMdSs.cache +0 -2
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sS/sS00IDFTJ19zoTjrB2-Sypybo0I1qXoTtW8JabBMoAo.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sb/sbB7Wbcww5hxA8e-5K0oBKQDnlNNnY90t0YUIdYE138.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/xX/xXo4fouecqy2oZpxsgtkqL6uyIDuKLwBUwmzddno9hw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/x_/x_WcnsWyMV1QzLUnFW5J4gZHs0gACREYGaSom7xcaBQ.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/yC/yCp-2wuXWORHGqxfwG37-mb00X8GpHiRjrlo2QQX3lU.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/yW/yWtPpcB-kB8_hw5k0prtaOvTW5A5PaCT0ZaJSdh8Zkw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ys/ysFM6FIJniGme1T62LOmRFt3h7g0scd6o6BFIjS5Ppg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/z4/z4i9WzpZRzFXynWsqewNMikNdcZ9f9mGFdlrIP5N6Gs.cache +0 -1
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/zN/zNfQXfFXMTyOoz3HbVM-_4m-46rWO7XrZPvGs4aJCQc.cache +0 -2
@@ -12,10 +12,11 @@
|
|
12
12
|
#
|
13
13
|
|
14
14
|
module Notee
|
15
|
-
class Category <
|
15
|
+
class Category < ApplicationRecord
|
16
|
+
|
16
17
|
# callbacks
|
17
18
|
before_save :set_slug
|
18
|
-
|
19
|
+
before_save :protect_default
|
19
20
|
|
20
21
|
# relations
|
21
22
|
has_many :children, class_name: Notee::Category, foreign_key: 'parent_id', dependent: :destroy
|
@@ -29,5 +30,17 @@ module Notee
|
|
29
30
|
def protect_default
|
30
31
|
return false if self.id == 1
|
31
32
|
end
|
33
|
+
|
34
|
+
def self.before_destroy_parent(id)
|
35
|
+
@child_with_parent =Category.where(parent_id: id)
|
36
|
+
|
37
|
+
Category.skip_callback(:update, :before, :update_authority)
|
38
|
+
Category.skip_callback(:update, :before, :destroy_authority)
|
39
|
+
@child_with_parent.each do |child|
|
40
|
+
child.update(parent_id: nil)
|
41
|
+
end
|
42
|
+
Category.set_callback(:update, :before, :update_authority)
|
43
|
+
Category.set_callback(:update, :before, :destroy_authority)
|
44
|
+
end
|
32
45
|
end
|
33
46
|
end
|
data/app/models/notee/comment.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
module Notee
|
2
2
|
class Comment < ActiveRecord::Base
|
3
|
+
|
4
|
+
# scopes
|
5
|
+
scope :trash, -> { where(is_deleted: true) }
|
6
|
+
scope :time_limit, -> { where('updated_at <= ?', Time.current - 60*60*24*30) }
|
7
|
+
|
8
|
+
# validates
|
3
9
|
validates :post_id, presence: true
|
4
10
|
validates :content, presence: true
|
5
11
|
end
|
data/app/models/notee/image.rb
CHANGED
@@ -11,13 +11,13 @@
|
|
11
11
|
require 'securerandom'
|
12
12
|
|
13
13
|
module Notee
|
14
|
-
class Image <
|
14
|
+
class Image < ApplicationRecord
|
15
15
|
# accessors
|
16
16
|
attr_accessor :file
|
17
17
|
|
18
18
|
# callbacks
|
19
19
|
before_save :manage_image
|
20
|
-
|
20
|
+
before_save :protect_default
|
21
21
|
|
22
22
|
private
|
23
23
|
|
data/app/models/notee/post.rb
CHANGED
@@ -17,20 +17,25 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
module Notee
|
20
|
-
class Post <
|
20
|
+
class Post < ApplicationRecord
|
21
21
|
# callbacks
|
22
22
|
before_create :set_title
|
23
23
|
before_create :set_slug
|
24
|
+
|
24
25
|
before_save :set_published_at
|
25
|
-
before_save :check_role
|
26
26
|
|
27
27
|
# relations
|
28
|
+
belongs_to :user
|
28
29
|
belongs_to :category
|
29
30
|
belongs_to :thumbnail, class_name: Notee::Image, foreign_key: 'thumbnail_id'
|
30
31
|
|
31
32
|
# accessors
|
32
33
|
attr_accessor :editor_id
|
33
34
|
|
35
|
+
def set_user_id
|
36
|
+
self.user_id = Authority.get_user_id
|
37
|
+
end
|
38
|
+
|
34
39
|
private
|
35
40
|
|
36
41
|
def set_title
|
@@ -48,8 +53,5 @@ module Notee
|
|
48
53
|
end
|
49
54
|
end
|
50
55
|
|
51
|
-
def check_role
|
52
|
-
|
53
|
-
end
|
54
56
|
end
|
55
57
|
end
|
data/app/models/notee/user.rb
CHANGED
@@ -1,74 +1,130 @@
|
|
1
1
|
module Notee
|
2
|
-
class User <
|
3
|
-
# enums
|
4
|
-
enum role: { writer: 0, editor: 10, manager: 20, suspended: 99 }
|
5
|
-
|
6
|
-
# writer
|
7
|
-
# - create: posts, categories, images
|
8
|
-
# - update: my posts, my user
|
9
|
-
# - delete: my posts (Logical delete)
|
10
|
-
|
11
|
-
# editor
|
12
|
-
# - create: posts, categories, images
|
13
|
-
# - update: posts, categories, images, my user
|
14
|
-
# - delete: posts, categories, images (Logical delete)
|
2
|
+
class User < ApplicationRecord
|
15
3
|
|
16
|
-
#
|
17
|
-
|
18
|
-
# - update: posts, categories, images, users
|
19
|
-
# - delete: posts, categories, images, users (Logical delete)
|
4
|
+
# relations
|
5
|
+
has_many :posts
|
20
6
|
|
21
|
-
#
|
22
|
-
|
23
|
-
|
24
|
-
# root
|
25
|
-
# all
|
7
|
+
# enums
|
8
|
+
enum role: { writer: 0, editor: 10, manager: 20, root: 9999 }
|
26
9
|
|
27
10
|
# accessors
|
28
11
|
attr_accessor :file
|
12
|
+
attr_accessor :now_password
|
29
13
|
attr_accessor :password
|
30
14
|
attr_accessor :password_confirm
|
31
15
|
attr_accessor :editor_id
|
32
16
|
|
33
17
|
# callback
|
34
|
-
|
35
|
-
|
18
|
+
before_create :confirm_password
|
19
|
+
before_create :encrypt_password
|
20
|
+
before_update :confirm_password, if: :has_password? # 1
|
21
|
+
before_update :encrypt_password, if: :has_password? # 2
|
22
|
+
before_update :set_user_id_to_root, if: :is_destroy?
|
23
|
+
before_update :restrict_change_own_role
|
36
24
|
before_save :manage_profile_img
|
37
25
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
return false unless user
|
42
|
-
return false unless user.encrypted_password == encrypt(password)
|
26
|
+
# constants
|
27
|
+
SECURE = 'SOFHGPOIJERPGOKSPDO2SPTI4RJ6POIFDJVS7ETJ1EITJHSPEKMVOEIGU'
|
28
|
+
CIPHER = 'aes-256-cbc'
|
43
29
|
|
44
|
-
|
30
|
+
def update_password(params)
|
31
|
+
return false unless params[:now_password] == User.decrypt(self.encrypted_password)
|
32
|
+
return false unless params[:password] == params[:password_confirm]
|
33
|
+
self.update(params)
|
45
34
|
end
|
46
35
|
|
47
36
|
def encrypt(password)
|
48
|
-
|
37
|
+
crypt = ActiveSupport::MessageEncryptor.new(SECURE, CIPHER)
|
38
|
+
crypt.encrypt_and_sign(password)
|
49
39
|
end
|
50
40
|
|
51
|
-
def
|
52
|
-
|
41
|
+
def self.decrypt(password)
|
42
|
+
crypt = ActiveSupport::MessageEncryptor.new(SECURE, CIPHER)
|
43
|
+
crypt.decrypt_and_verify(password)
|
53
44
|
end
|
54
45
|
|
55
|
-
def
|
56
|
-
|
46
|
+
def self.sign_in(name_or_email, password)
|
47
|
+
|
48
|
+
# root-user login
|
49
|
+
if Notee.notee_id == name_or_email && Notee.notee_password == password
|
50
|
+
return root_user_setting
|
51
|
+
end
|
52
|
+
|
53
|
+
# other-user login
|
54
|
+
user = not_trash.find_by(name: name_or_email)
|
55
|
+
user = not_trash.find_by(email: name_or_email) unless user
|
56
|
+
return false unless user
|
57
|
+
return false if user.id == 0 # root_user
|
58
|
+
return false unless password == decrypt(user.encrypted_password)
|
59
|
+
|
60
|
+
user_setting(user)
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.user_setting(user)
|
64
|
+
if token = Token.create!(user_id: user.id)
|
65
|
+
Thread.current[:request].session[:access_token] = token.access_token
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.root_user_setting
|
70
|
+
unless User.exists?(id: 0)
|
71
|
+
User.skip_callback(:create, :before, :create_authority)
|
72
|
+
User.create(id: 0, name: Notee.notee_id, email: "root", password: SecureRandom.hex, role: 9999)
|
73
|
+
User.set_callback(:create, :before, :create_authority)
|
74
|
+
end
|
75
|
+
|
76
|
+
if token = Token.create!(user_id: 0)
|
77
|
+
Thread.current[:request].session[:access_token] = token.access_token
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
def restrict_change_own_role
|
84
|
+
now_user = Token.find_by_access_token(Thread.current[:request].session[:access_token]).user
|
85
|
+
self.role = now_user.role if self.id == now_user.id
|
57
86
|
end
|
58
87
|
|
59
88
|
def manage_profile_img
|
60
|
-
return unless file
|
61
|
-
return if User.exists?(profile_img: file)
|
89
|
+
return unless self.file.present?
|
62
90
|
|
63
|
-
image_dir = Rails.root.to_s +
|
91
|
+
image_dir = Rails.root.to_s + "/public/notee/profile/"
|
64
92
|
FileUtils.mkdir_p(image_dir) unless FileTest.exist?(image_dir)
|
65
93
|
image_name = Time.now.strftime('%Y%m%d%H%M%S') + '--' + SecureRandom.uuid + '.jpg'
|
94
|
+
|
95
|
+
return if User.exists?(profile_img: image_name)
|
96
|
+
|
66
97
|
transaction do
|
67
|
-
open(image_dir +
|
68
|
-
output.write(file.read)
|
98
|
+
open(image_dir + "/" + image_name, 'wb') do |output|
|
99
|
+
output.write(self.file.read)
|
100
|
+
end
|
101
|
+
self.profile_img = image_name
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def set_user_id_to_root
|
106
|
+
posts = Post.where(user_id: self.id)
|
107
|
+
|
108
|
+
Post.skip_callback(:update, :before, :destroy_authority)
|
109
|
+
Post.transaction do
|
110
|
+
posts.each do |post|
|
111
|
+
post.update(user_id: 0)
|
69
112
|
end
|
70
113
|
end
|
71
|
-
|
114
|
+
Post.set_callback(:update, :before, :destroy_authority)
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
def confirm_password
|
119
|
+
return false unless password == password_confirm
|
120
|
+
end
|
121
|
+
|
122
|
+
def encrypt_password
|
123
|
+
self.encrypted_password = encrypt(self.password)
|
124
|
+
end
|
125
|
+
|
126
|
+
def has_password?
|
127
|
+
self.password.present?
|
72
128
|
end
|
73
129
|
end
|
74
130
|
end
|
@@ -3,7 +3,9 @@
|
|
3
3
|
<head>
|
4
4
|
<title>Notee</title>
|
5
5
|
<%= stylesheet_link_tag "notee/application", media: "all" %>
|
6
|
-
|
6
|
+
<% unless new_token_path == "/notee" + request.path_info %>
|
7
|
+
<%= javascript_include_tag "notee/application" %>
|
8
|
+
<% end %>
|
7
9
|
<%= favicon_link_tag(asset_path "favicon.ico") %>
|
8
10
|
<%= csrf_meta_tags %>
|
9
11
|
</head>
|
data/config/routes.rb
CHANGED
@@ -2,25 +2,35 @@ Notee::Engine.routes.draw do
|
|
2
2
|
|
3
3
|
root to: 'notees#index'
|
4
4
|
|
5
|
-
get '
|
6
|
-
get '
|
7
|
-
get '
|
8
|
-
get '
|
9
|
-
get '
|
10
|
-
get '
|
11
|
-
get '
|
12
|
-
get 'users
|
5
|
+
get 'posts' => 'notees#index'
|
6
|
+
get 'posts/new' => 'notees#index'
|
7
|
+
get 'posts/edit/:id' => 'notees#index'
|
8
|
+
get 'categories' => 'notees#index'
|
9
|
+
get 'categories/edit/:id' => 'notees#index'
|
10
|
+
get 'images' => 'notees#index'
|
11
|
+
get 'comments' => 'notees#index'
|
12
|
+
get 'users' => 'notees#index'
|
13
|
+
get 'users/new' => 'notees#index'
|
14
|
+
get 'users/edit/:id' => 'notees#index'
|
15
|
+
get 'trashes' => 'notees#index'
|
16
|
+
get 'trashes/:model' => 'notees#index'
|
17
|
+
get 'mypage' => 'notees#index'
|
18
|
+
get 'mypage/edit' => 'notees#index'
|
19
|
+
get 'mypage/edit/password' => 'notees#index'
|
13
20
|
|
14
21
|
# post 'secret_published' => 'notees#secret_published'
|
15
22
|
resources :tokens, only: [:new, :create, :destroy]
|
16
23
|
|
17
24
|
scope :api, { format: 'json' } do
|
18
25
|
resources :posts, only: [:index, :show, :create, :update, :destroy]
|
26
|
+
get 'users/mypage' => 'users#mypage'
|
27
|
+
put 'users/mypage' => 'users#update_password'
|
19
28
|
resources :users, only: [:index, :show, :create, :update, :destroy]
|
20
29
|
resources :images, only: [:index, :show, :create, :destroy]
|
21
30
|
resources :categories, only: [:index, :show, :create, :update, :destroy]
|
22
31
|
resources :statuses, only: [:index, :show]
|
23
|
-
resources :comments, only: [:index, :show, :create, :update, :
|
32
|
+
resources :comments, only: [:index, :show, :create, :update, :destroy]
|
24
33
|
resources :roles, only: [:index, :show]
|
34
|
+
resources :trashes, only: [:index, :update]
|
25
35
|
end
|
26
36
|
end
|
@@ -5,9 +5,10 @@ class CreateNoteeCategories < ActiveRecord::Migration
|
|
5
5
|
create_table :notee_categories do |t|
|
6
6
|
|
7
7
|
t.string :name, null: false, default: "category_name"
|
8
|
-
t.string :slug,
|
8
|
+
t.string :slug, uniqueness: true
|
9
9
|
t.integer :parent_id
|
10
10
|
t.boolean :is_private, null: false, default: false
|
11
|
+
t.boolean :is_deleted, null: false, default: false
|
11
12
|
|
12
13
|
t.timestamps null: false
|
13
14
|
end
|
@@ -15,6 +16,8 @@ class CreateNoteeCategories < ActiveRecord::Migration
|
|
15
16
|
add_index :notee_categories, :slug, :unique => true
|
16
17
|
|
17
18
|
# create default category
|
19
|
+
Notee::Category.skip_callback(:create, :before, :create_authority)
|
18
20
|
Notee::Category.create :name => 'No_Category'
|
21
|
+
Notee::Category.set_callback(:create, :before, :create_authority)
|
19
22
|
end
|
20
23
|
end
|
@@ -5,6 +5,7 @@ class CreateNoteeImages < ActiveRecord::Migration
|
|
5
5
|
create_table :notee_images do |t|
|
6
6
|
|
7
7
|
t.string :content, null: false, uniqueness: true
|
8
|
+
t.boolean :is_deleted, null: false, default: false
|
8
9
|
|
9
10
|
# if you have user_id
|
10
11
|
# t.integer :user_id
|
@@ -13,8 +14,9 @@ class CreateNoteeImages < ActiveRecord::Migration
|
|
13
14
|
end
|
14
15
|
|
15
16
|
# create default image
|
16
|
-
|
17
|
-
|
17
|
+
Notee::Image.skip_callback(:create, :before, :create_authority)
|
18
|
+
Notee::Image.create :content => 'default.png'
|
19
|
+
Notee::Image.set_callback(:create, :before, :create_authority)
|
18
20
|
end
|
19
21
|
|
20
22
|
end
|
@@ -4,76 +4,89 @@ module Notee
|
|
4
4
|
|
5
5
|
def notee(search_txt)
|
6
6
|
return false unless search_txt
|
7
|
-
|
8
|
-
|
7
|
+
post = Notee::Post.find_by(id: search_txt)
|
8
|
+
post = Notee::Post.find_by(slug: search_txt) unless post
|
9
9
|
|
10
|
-
return if
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
return if post.status == Notee::STATUS[:draft] ||
|
11
|
+
post.status == Notee::STATUS[:deleted] ||
|
12
|
+
post.status == Notee::STATUS[:privated] ||
|
13
|
+
post.is_deleted == true
|
14
|
+
post
|
14
15
|
end
|
15
16
|
|
16
|
-
def notees(search_txt = 'all')
|
17
|
-
@notees = []
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
def notees
|
19
|
+
@posts = Notee::Post.where(status: Notee::STATUS[:published], is_deleted: false).order(published_at: :desc)
|
20
|
+
@posts
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def category_notees(search_txt)
|
25
|
+
# search_by_category_slug
|
26
|
+
category = Notee::Category.find_by(slug: search_txt)
|
27
|
+
category = Notee::Category.find_by(name: search_txt) unless category
|
28
|
+
return false unless category
|
29
|
+
return false if category.is_deleted
|
30
|
+
|
31
|
+
@posts = Notee::Post.where(category_id: category.id, status: Notee::STATUS[:published], is_deleted: false).order(published_at: :desc)
|
32
|
+
@posts
|
33
|
+
end
|
34
|
+
|
27
35
|
|
28
|
-
|
36
|
+
def archive_notees(year, month)
|
37
|
+
if month
|
38
|
+
tmp_month = (month.to_s.size != 2 ? "0" : "") + month.to_s
|
39
|
+
tmp_date = year.to_s + tmp_month + "01"
|
40
|
+
begin_time = Date.parse(tmp_date).beginning_of_month
|
41
|
+
end_time = Date.parse(tmp_date).end_of_month
|
42
|
+
else
|
43
|
+
tmp_date = year.to_s + "0101"
|
44
|
+
begin_time = Date.parse(tmp_date).beginning_of_year
|
45
|
+
end_time = Date.parse(tmp_date).end_of_year
|
29
46
|
end
|
30
47
|
|
31
|
-
@
|
48
|
+
@posts = Notee::Post.where(published_at: begin_time..end_time).order(published_at: :desc)
|
49
|
+
@posts
|
32
50
|
end
|
33
51
|
|
34
|
-
# TODO: secret_mode
|
35
|
-
# def secret_notees
|
36
|
-
# @notees = Notee::Post.where(status: Notee::STATUS[:secret_published]).order(published_at: :desc)
|
37
|
-
# end
|
38
52
|
|
39
|
-
def
|
40
|
-
|
53
|
+
def writer_notees(name_or_id)
|
54
|
+
writer = Notee::User.find_by(name: name_or_id)
|
55
|
+
writer = Notee::User.find_by(name: name_or_id) unless writer
|
56
|
+
return false unless writer
|
57
|
+
return false if writer.is_deleted
|
58
|
+
|
59
|
+
@posts = writer.posts
|
60
|
+
end
|
41
61
|
|
42
|
-
case sort
|
43
|
-
when 'alphabetal'
|
44
|
-
@notee_categories = @notee_categories.sort
|
45
|
-
when 'size'
|
46
|
-
@notee_categories = @notee_categories.sort_by {|category| category.name.size }
|
47
|
-
end
|
48
62
|
|
49
|
-
|
63
|
+
def notee_categories
|
64
|
+
# DATA: {notee.category.name, notee.count}
|
65
|
+
Notee::Post.find_by_sql("SELECT category_id as category_id, count(*) as count FROM notee_posts WHERE notee_posts.status=1 and notee_posts.is_deleted=false GROUP BY category_id;")
|
50
66
|
end
|
51
67
|
|
52
|
-
def notee_archives(year, month)
|
53
|
-
start_date = Date.new(year, month, 1)
|
54
|
-
end_date = Date.new(year, month, -1)
|
55
|
-
@notee_archives = Notee::Post.where(status: Notee::STATUS[:published], :published_at => start_date...end_date)
|
56
68
|
|
57
|
-
|
69
|
+
def notee_archives
|
70
|
+
# DATA: {notee.time, notee.count}
|
71
|
+
Notee::Post.find_by_sql("SELECT DATE_FORMAT(published_at, '%Y-%m') as time, count(*) as count FROM notee_posts WHERE status=1 and is_deleted=false GROUP BY DATE_FORMAT(published_at, '%Y-%m') ORDER BY time DESC;")
|
58
72
|
end
|
59
73
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
else
|
67
|
-
return Notee::Post.where(status: Notee::STATUS[:published]).group('year(published_at)').group('month(published_at)').count
|
68
|
-
end
|
74
|
+
|
75
|
+
def notee_writers
|
76
|
+
users = Notee::User.where(is_deleted: false)
|
77
|
+
writers = users.select { |user| user if user.posts.count > 0 }.map { |user| user }
|
78
|
+
|
79
|
+
writers
|
69
80
|
end
|
70
81
|
|
82
|
+
|
71
83
|
def notee_comments(id)
|
72
84
|
return if id.nil?
|
73
|
-
@notee_comments = Notee::
|
85
|
+
@notee_comments = Notee::Comment.where(post_id: id, is_hidden: false, is_deleted: false)
|
74
86
|
@notee_comments
|
75
87
|
end
|
76
88
|
|
89
|
+
|
77
90
|
def notee_set_meta_by_post(post)
|
78
91
|
return {
|
79
92
|
title: post.title,
|
@@ -82,6 +95,12 @@ module Notee
|
|
82
95
|
og_image: request.base_url + "/notee/" + post.thumbnail.content
|
83
96
|
}
|
84
97
|
end
|
98
|
+
|
99
|
+
|
100
|
+
# TODO: secret_mode
|
101
|
+
# def secret_notees
|
102
|
+
# @notees = Notee::Post.where(status: Notee::STATUS[:secret_published]).order(published_at: :desc)
|
103
|
+
# end
|
85
104
|
end
|
86
105
|
end
|
87
106
|
end
|