From 436b15b3e11506af91351207ae8c624ebdcb7cb8 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Mon, 5 Apr 2021 14:58:05 +0200 Subject: [PATCH 01/41] Initial setup - Change ruby version to 2.7.1 - Change rails version to 6.0.3.5 - Run migration --- .gitignore | 3 + .ruby-version | 2 +- Gemfile | 4 +- Gemfile.lock | 230 +++++++++++++++++++++++++++----------------------- db/schema.rb | 10 +-- 5 files changed, 134 insertions(+), 115 deletions(-) diff --git a/.gitignore b/.gitignore index 18b43c9cd2..be71d20d6b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,6 @@ # Ignore master key for decrypting credentials and more. /config/master.key + +# VScode configurations +/.vscode \ No newline at end of file diff --git a/.ruby-version b/.ruby-version index 9aa34646dc..860487ca19 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.7.0 \ No newline at end of file +2.7.1 diff --git a/Gemfile b/Gemfile index 67b156b339..6e976258a2 100644 --- a/Gemfile +++ b/Gemfile @@ -1,10 +1,10 @@ source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } -ruby '2.7.0' +ruby '2.7.1' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '~> 5.2.4' +gem 'rails', '~> 6.0.3.5' # Use postgresql as the database for Active Record gem 'pg', '>= 0.18', '< 2.0' # Use Puma as the app server diff --git a/Gemfile.lock b/Gemfile.lock index b67d4b3306..6e7c7235cb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,55 +1,68 @@ GEM remote: https://rubygems.org/ specs: - actioncable (5.2.4.1) - actionpack (= 5.2.4.1) + actioncable (6.0.3.6) + actionpack (= 6.0.3.6) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailer (5.2.4.1) - actionpack (= 5.2.4.1) - actionview (= 5.2.4.1) - activejob (= 5.2.4.1) + actionmailbox (6.0.3.6) + actionpack (= 6.0.3.6) + activejob (= 6.0.3.6) + activerecord (= 6.0.3.6) + activestorage (= 6.0.3.6) + activesupport (= 6.0.3.6) + mail (>= 2.7.1) + actionmailer (6.0.3.6) + actionpack (= 6.0.3.6) + actionview (= 6.0.3.6) + activejob (= 6.0.3.6) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.2.4.1) - actionview (= 5.2.4.1) - activesupport (= 5.2.4.1) + actionpack (6.0.3.6) + actionview (= 6.0.3.6) + activesupport (= 6.0.3.6) rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.2.4.1) - activesupport (= 5.2.4.1) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (6.0.3.6) + actionpack (= 6.0.3.6) + activerecord (= 6.0.3.6) + activestorage (= 6.0.3.6) + activesupport (= 6.0.3.6) + nokogiri (>= 1.8.5) + actionview (6.0.3.6) + activesupport (= 6.0.3.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (5.2.4.1) - activesupport (= 5.2.4.1) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activejob (6.0.3.6) + activesupport (= 6.0.3.6) globalid (>= 0.3.6) - activemodel (5.2.4.1) - activesupport (= 5.2.4.1) - activerecord (5.2.4.1) - activemodel (= 5.2.4.1) - activesupport (= 5.2.4.1) - arel (>= 9.0) - activestorage (5.2.4.1) - actionpack (= 5.2.4.1) - activerecord (= 5.2.4.1) - marcel (~> 0.3.1) - activesupport (5.2.4.1) + activemodel (6.0.3.6) + activesupport (= 6.0.3.6) + activerecord (6.0.3.6) + activemodel (= 6.0.3.6) + activesupport (= 6.0.3.6) + activestorage (6.0.3.6) + actionpack (= 6.0.3.6) + activejob (= 6.0.3.6) + activerecord (= 6.0.3.6) + marcel (~> 1.0.0) + activesupport (6.0.3.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - arel (9.0.0) - ast (2.4.0) - bcrypt (3.1.13) + zeitwerk (~> 2.2, >= 2.2.2) + ast (2.4.2) + bcrypt (3.1.16) bindex (0.8.1) - bootsnap (1.4.6) + bootsnap (1.7.3) msgpack (~> 1.0) builder (3.2.4) - byebug (11.1.1) + byebug (11.1.3) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) @@ -57,116 +70,118 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.1.6) + concurrent-ruby (1.1.8) crass (1.0.6) - devise (4.7.1) + devise (4.7.3) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - diff-lcs (1.3) - erubi (1.9.0) + diff-lcs (1.4.4) + erubi (1.10.0) execjs (2.7.0) - ffi (1.12.2) - ffi (1.12.2-x64-mingw32) + ffi (1.15.0) + ffi (1.15.0-x64-mingw32) globalid (0.4.2) activesupport (>= 4.2.0) - i18n (1.8.2) + i18n (1.8.10) concurrent-ruby (~> 1.0) - jaro_winkler (1.5.4) - jbuilder (2.10.0) + jbuilder (2.11.2) activesupport (>= 5.0.0) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) - loofah (2.4.0) + loofah (2.9.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) - marcel (0.3.3) - mimemagic (~> 0.3.2) - method_source (0.9.2) - mimemagic (0.3.4) - mini_mime (1.0.2) + marcel (1.0.1) + method_source (1.0.0) + mini_mime (1.1.0) mini_portile2 (2.5.0) - minitest (5.14.0) - msgpack (1.3.3) - msgpack (1.3.3-x64-mingw32) - nio4r (2.5.2) - nokogiri (1.11.1) + minitest (5.14.4) + msgpack (1.4.2) + nio4r (2.5.7) + nokogiri (1.11.2) mini_portile2 (~> 2.5.0) racc (~> 1.4) - nokogiri (1.11.1-x64-mingw32) + nokogiri (1.11.2-x64-mingw32) racc (~> 1.4) orm_adapter (0.5.0) - parallel (1.19.1) - parser (2.7.0.4) - ast (~> 2.4.0) - pg (1.2.2) - pg (1.2.2-x64-mingw32) + parallel (1.20.1) + parser (3.0.0.0) + ast (~> 2.4.1) + pg (1.2.3) + pg (1.2.3-x64-mingw32) puma (3.12.6) racc (1.5.2) rack (2.2.3) rack-test (1.1.0) rack (>= 1.0, < 3) - rails (5.2.4.1) - actioncable (= 5.2.4.1) - actionmailer (= 5.2.4.1) - actionpack (= 5.2.4.1) - actionview (= 5.2.4.1) - activejob (= 5.2.4.1) - activemodel (= 5.2.4.1) - activerecord (= 5.2.4.1) - activestorage (= 5.2.4.1) - activesupport (= 5.2.4.1) + rails (6.0.3.6) + actioncable (= 6.0.3.6) + actionmailbox (= 6.0.3.6) + actionmailer (= 6.0.3.6) + actionpack (= 6.0.3.6) + actiontext (= 6.0.3.6) + actionview (= 6.0.3.6) + activejob (= 6.0.3.6) + activemodel (= 6.0.3.6) + activerecord (= 6.0.3.6) + activestorage (= 6.0.3.6) + activesupport (= 6.0.3.6) bundler (>= 1.3.0) - railties (= 5.2.4.1) + railties (= 6.0.3.6) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) rails-html-sanitizer (1.3.0) loofah (~> 2.3) - railties (5.2.4.1) - actionpack (= 5.2.4.1) - activesupport (= 5.2.4.1) + railties (6.0.3.6) + actionpack (= 6.0.3.6) + activesupport (= 6.0.3.6) method_source rake (>= 0.8.7) - thor (>= 0.19.0, < 2.0) + thor (>= 0.20.3, < 2.0) rainbow (3.0.0) - rake (13.0.1) - rb-fsevent (0.10.3) + rake (13.0.3) + rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) - responders (3.0.0) + regexp_parser (2.1.1) + responders (3.0.1) actionpack (>= 5.0) railties (>= 5.0) rexml (3.2.4) - rspec (3.9.0) - rspec-core (~> 3.9.0) - rspec-expectations (~> 3.9.0) - rspec-mocks (~> 3.9.0) - rspec-core (3.9.1) - rspec-support (~> 3.9.1) - rspec-expectations (3.9.1) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-mocks (3.9.1) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-support (3.9.2) - rubocop (0.80.1) - jaro_winkler (~> 1.5.1) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rubocop (1.12.1) parallel (~> 1.10) - parser (>= 2.7.0.1) + parser (>= 3.0.0.0) rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) rexml + rubocop-ast (>= 1.2.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 1.7) - ruby-progressbar (1.10.1) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.4.1) + parser (>= 2.7.1.5) + ruby-progressbar (1.11.0) ruby_dep (1.5.0) sass (3.7.4) sass-listen (~> 4.0.0) @@ -179,40 +194,41 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) - spring (2.1.0) + spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (3.2.1) + sprockets-rails (3.2.2) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - thor (1.0.1) + thor (1.1.0) thread_safe (0.3.6) tilt (2.0.10) turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) - tzinfo (1.2.6) + tzinfo (1.2.9) thread_safe (~> 0.1) - tzinfo-data (1.2020.1) + tzinfo-data (1.2021.1) tzinfo (>= 1.0.0) uglifier (4.2.0) execjs (>= 0.3.0, < 3) - unicode-display_width (1.6.1) - warden (1.2.8) - rack (>= 2.0.6) - web-console (3.7.0) - actionview (>= 5.0) - activemodel (>= 5.0) + unicode-display_width (2.0.0) + warden (1.2.9) + rack (>= 2.0.9) + web-console (4.1.0) + actionview (>= 6.0.0) + activemodel (>= 6.0.0) bindex (>= 0.4.0) - railties (>= 5.0) - websocket-driver (0.7.1) + railties (>= 6.0.0) + websocket-driver (0.7.3) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) + zeitwerk (2.4.2) PLATFORMS ruby @@ -227,7 +243,7 @@ DEPENDENCIES listen (>= 3.0.5, < 3.2) pg (>= 0.18, < 2.0) puma (~> 3.12) - rails (~> 5.2.4) + rails (~> 6.0.3.5) rspec rubocop sass-rails (~> 5.0) @@ -239,7 +255,7 @@ DEPENDENCIES web-console (>= 3.3.0) RUBY VERSION - ruby 2.7.0p0 + ruby 2.7.1p83 BUNDLED WITH - 2.1.2 + 2.1.4 diff --git a/db/schema.rb b/db/schema.rb index 30ee9f3fad..c796b78b5d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -2,11 +2,11 @@ # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. # -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). +# This file is the source Rails uses to define your schema when running `rails +# db:schema:load`. When creating a new database, `rails db:schema:load` tends to +# be faster and is potentially less error prone than running all of your +# migrations from scratch. Old migrations may fail to apply correctly if those +# migrations use external dependencies or application code. # # It's strongly recommended that you check this file into your version control system. From 2b49d121bebb13b8957cbe152d95881cc264bfd9 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 6 Apr 2021 10:09:15 +0200 Subject: [PATCH 02/41] Add image containing ERD chart --- docs/Stay_in_touch_erd.jpeg | Bin 0 -> 79653 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/Stay_in_touch_erd.jpeg diff --git a/docs/Stay_in_touch_erd.jpeg b/docs/Stay_in_touch_erd.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..690c7193b2bdba7ee0260bc74515f0cc711798e9 GIT binary patch literal 79653 zcmeFZcUV)){x8hlcCc)Oh*ETKsw99?0*2;R=@2j^A(RA;VnhM~3B8}Kf&v0k5+pQf z2_z6C5Fk`V5eNbT3B8CAdQqw%=+R?Gj~qXC?AVDD#|2M{o;oQc zbn?Pkku#!F;+HN;iAzfUDyyRKtF)4gq~v8SMWw5%8X6jx6d-!n)O1zUHPrUs2nZcN zta9}CpMDY+*nck|De#lP&xigj<3GcZqlXS3`}wEi2eH^+1b#Yn=-_`^@Sxa3M}9sd z@YBzS4j&OddiFQfV<$R&gmt^LY9X-^i}F7U0ehr*CrA|Ffqb;IoO|%Tz;+bSe$f5{ zs1SE2LnQkB8X;_gXNc63MK2nByZLd#!#EdyT|1$BE<;bK0^49e;ivwz*C^%(cPOvM zfguzPicmJAxolq`?~Y1wJYE8Eg)`%JG-~wmw5F9haqc!ZHU{ZB7v*qLZ2n#%6KMRi?6v{Z&dn9wr!3rsad0j#!GQm<$&{$ew zI?!V!?ail>+972qZrDR3InC)s|RMrsNu?lkzCw(pR6W2Ykx18Fm6_BMD<2p2v>gm&dC&Z(lDJqWXS#-TS z>6+3ilTeHcK%xlZT(KBD@7}!chs3fpgQ2;=H2Dti=L-i_aJo?``#e%hZ`sY3i-L5Z zrKP=)aHGiG2h|^E9;hUP39K4RtllkIg4Q)oF4EuA%2eKvxi4@(v8Lc|&28<{i>2#2 zI9n!O;oQPB#6o5HS4RDya#=*p1PH_Mb3q~dHn*hS9`EVyFO(0EjfYYyawg5z69v z$nz`_O$`E75)ZuB^Izd+2It;DTDHzk#XYzOrI<=2v=ahga6)#zLxDSK)&@9KcSNIb zH;QK490VY^WV1h^C+w8hxjc6$XFJeATA??Z;yN8o&NQ7SCft%hb|xCj*mEs`w3>ud z_Cig}`3~Re2~)dv=k&S2A^8vg4Z@pg>Q+)3XRS1zM_(Q+2_Btvv*%jSXpBh%%Ov|p ztM1iBQ65!Yy-EQGzz@lH1h`;P7aF%uO+$)sY)&jr9*KPT%s{@VCq_#x<;UIDboX_1 zVCUobvlxckU>q(dhXRB7D@wt_%ewn~PZ^Fzir3}_MgeX6_+C#2kR2$+`1EAysRnz+ z`RzzI)=6X<)CFFjA0^*Y%1i^YIegV|&e^|qm9TFQesO25mvg-!L&vwH93+rl>C!aH zj`a4KaxpWZbSu)B0~95J!gd~XbLlI8AZaxp%l^@OC8{%b!4p!s8~wWzVdUvsnCip| za_&sN+pZZlGoY|=GBeOlRF#F^k|ltP4ZhIm>|bL3-d-;#Rb4jJA97gT@B0GdW_{bq zL;sN7{!zrw37o#By3XC1@Tu}CbSA<3Mv*%a%=6`4)dxmINSxIYeAdhGr|vl)t@y;# z&1y6DsX$NpsF@VGN9{@`=!q!SiG@9^KYgSO?nvcIM%*CKnh_=&nn;5W=m8|H!LcKZ zS=qWNzb4-JRY~~2 z5?X3DCkXOEmXBMfipe!etxNu{dBomnlh*r~}7E%(V18lJ;`SxHg%^)s1e3;>oloC%CeOV#Q!!7mev04Q@AR{H~?4 zJ8JE0I#4ngZ-AWL#T@a~)2;?n3xml?AXv*H(HQFwf(KELG~aOS9VXeW^(ND6tZh)H z8X$2nlO4?)3<7&c=B$y?87p2m-ga1UgfHfv+MliV8uDyd#&%&Dx4e{GKS=jUkq@@_ z+BC}y3bf9>{~&$6txG(uf7rQ7TR7XF9$Mdyu@eoMOkP_t>y_WlcSFLidu=Tn^k?&r zA$i4nvsbjIl-ihUruY2!y=Oq-dRrwTCV7kdFH~E2si}Ne0ey1a4j^BTpdYc zy2=%rpa+I|28M1aijkDP$+0e7lHIyWa$XIx7iFx`CJiZtJmU@ou~bR4H7OOrAmu~Z zd2tX~5^3aQA{dJp45Ft`LR+HhIvPWbr?F+jD%xS=G)I20OtCwmCLg`S?${>UZFF{# zt!K~CyAVh?i@9zf1TdFOHHPS<c2xXdr@?2Anuzi##XXsekr4!BL8Y&P9crAmM;g0;jK%r)V`61${O z6Sfnun)l? z#(K{V$@2#cmj+gImYazohp(vAeH+~A3T5fAZFz$#kL_-lp9(d!P^NgN^Zu}prWHgr zT&_P9M@V>8T&`4evtK(kuxon1&!{uM_lgd~;GzwOc!B`Z}DwGlaF|f2+AL;HL$lN6dU! z00snU<22_O#!LQ6GA<4w-#WOT6Tva*fno$|!tEl$iRRn;0xM%p+Lla1j7XRPI(%WP zZ(m@bYAWQ>zJOEMzJT8u^plI(bt7!^-l)43?WK5Abc=1ABi?>^3N;Zo$qCSs_QY&7 zuZZF7m0vCcifPU3an8upeF1O6zQDS8NQMJA^Cfq62>5^|TLxZ=L(vnYaTCgkdifSP zOC8!`L0B!D_0DGRou#Dy=euXaLU?1BELOL#+?QE9e=QtDWR8Jj=@!;HAaR!DvxeOT z+OyQHw1|CyC}TOE^=w9{Z#T~hlZu{F*C~_5(W0}KwOm7w+3R~|W6*1}W(oAbJj;1E zx47^TIdFqKC=U;{c?)9L3+%-7AB&{a?amu zNljV?9bJ#sxnyJB@{eYre|SHS!20Ity)O`SX{#8b63wfoy?u~LZoZGjYY-(o6S&OQ zr*!)?h+D!nX^)B87ge9;_h9q0*(DYAabyK-?d0i4=U1CX`h55!{B34_gQMM@p5fSv zo_y%?)FH&7*W=+3W>w&X6d&jUo}LBo&hWvTT>FQ+TUkzeT#cfxkIEnC8Tt3f!3pNlo6SLLhAiF6Qp zB!8PIx+_XpLf3qHwYsq{&=wfiwl7fgzTOqSF94p_`DBxU@|l0?EOt6?YOB6rFV%Ul zqqp-gdgAn2ihdIWwH3a5ckl4><+b%Lf@@H*Rtc|vp?B+c2p{f*O4R3TyT(B-DB%;eSPKNKB##3O6s7!k@Jk1tS_YP_$LtI6KiGPv zXW4;I@l$Y1g>xiuv84x;G)_+*dDI`^?I44UGw?>gL?DI>yynNGW8F)A?(Q2wamsX@43~*0)gC07M z3|@4!p1Uw%^(fxJ5R)aHld~JJLiG4MIN;VRO?73vvkg;KB`YH#a}H8cWG$dR)6x%N zwI^{+dS?mY^xXtxS=hBUoYDYAAWewsZ`O%HshlYFnmi{J&H^QTC7a!XT|HgZpXV=$ zyqOurOO>RCTtzf!+_0r$@*<|J2w}c0)CgIa2E`04ycs>hru7stanaGKe7xBJt zbz1x4@N{Fr@`*DX)~L`9NvKXGFq#ZN81A(t%$M_4a+a`ye|+rP*1kP=65EA z#|&wGDk+~xBz#O0-_|nW*(l4pJ)cl4Ul@U`Efn5vz@_EYrK zCj{wbi{-J;*CB)i$yGun2B1zPo*`wFLZp}l{AgX3Agwi${#&;7x9HrRUhB+cEeB7a z=C(P{oaQ0i*S*TDMkZj0cPpzg^TRX+Zdle;1h>iD9E|8Rx+QeZm>nb@MRdBc)oDKG zhFgi(r!=(7x(|{bbQPgCJ%)RiW{hYPyIegtJ(zozQ#THC9W*+%YHb#Ow@gjdD|T0q ziwm+GE13IIGP$v6XSrD5!h$M!d}Vb3bGAi4YhQwmtt}e5S4gr&pHM8ppPZX)>7TB{oEGPDO4f>h+Y*Vi)yVL^AN7sa2Z3GW88&Nn zp6D@C0411eDXd#W#RZcdRD#tSP8{De7$=>QupP(^@o;$DcLtX;krv-*KxoR7C3fN5 zLM-hZp3M!3`p=(`_P^lfK9TBQCj-scWw}1d(TFV@d z8Hmye+Lml>N1Yi_R0N1`z}j3Or#3FiZ?M&BQr^9VAKjfG29Fk2wz`xJWSm@Aw$b}k z*JD!bc$sTNQGchid8HS#rQ8kJzTc%=X)23_IwV-9cq&H}jvI`W*XbKrDb{exJyVkC zNixov>ps`q;J}9N@~BD63xDZi#ger?@T>G5ZqQU9RXYl?t_;?Zr>J*sm9QJiG6NFn zn{PIOAR^2^Cr9d9RKq94h!Qy2$2YNyXMXXwOhrJPb5D>bbSBk8MH^tLi06^tB~=f; zypjw?zA&3aniZl87?vc{Ix#)nfJU1J?~##^x#bHdGk>s#)%ciT;5^dYjk5ULL4QFU=&;;euwVsqD3 z&_3$YuHe$nS7lQj-K;1EQ>Q6@N&qiVS zH-F?^PIalZKj%yFcyFqnaq>CN!vLMb7s>T1_O6=iuyK1u&8uA1_@&0RAl2k$Eub?2 z9<(JArvBuMpPT;6oN`x9*GXuB)S;Zz{xNB`7=CC6;*@&z>DhcJv{i2}kQBAj)v&Fl z*Y0>fJ9W5V^810n6XX)P>Iowx1^0=9uoZSALJ9~|JE07XL}?Y6$nlpJl-)5$HJ>o^ zwFo0(sm0t>E{J|Ho){G|H8`AWPfJGymGoNs*2mYm7TZ))q3<^vnMz}yD)FE6!p=E# z^Eg`~z?j&9wRHAyP)h3jNg?|}X1r-eDQj;^y*c+mYwHw=i^AA0B7=RQAVAv{AG*Yx zWUYt`Ay>p-iu3GQs>K%>`)))7=_!X3h`EI9RvA=9YN_cbtzCHIi;*+m^1fG0C3da* zo?XlZz>oKr)h;(3BgUk!iL2Oa+n8)eZ{}U z4+|KRL7Sch(TIZV+`_10ZWnfDe3ffp_4CC) zCa^UQw$PH(TA6SDBiaAG<7p5ltdeVU3Y~0IlTTxkxulSV2kay#lsg z3LqiDTX$G!L`OogJgTh0RomP*Q{QHL^Y=e@eG#& z8GeKkzKX3}XWzn(bA360u%LKlW}T=!h`8gq-sXbxt;uwxE)~`vGj1H4RSZ2)c=e4k zeOq@4)9g%_w8!J$HA~CZr;iL-8gj^Uf(CVUixqUD0>W2qToWZUygU(i7^70j4RTJF zE5pS+rd^iYb4&NJxa(f?*({n19aeAf_w9ZP<=ID{x!4-eP??0e}l($7J!_2b<( zQN-6guN?)|H0I-;sqxYqw1GE#y*lPE?b_z$v3bIRawii0g)!=!p7vCpv z=ueDUTAqF)kNz^s_q1`+81ZH57zP)nYFOC`%Q#mM0jggULS*%Hw(b>DqI1ORy3F1O zOR-E+aTJ*U)(MbqNb&m8A0B2)ujXEEQ>*j$=&qXer}qUOXG%1K#Orq{%RZtTX^#tY zNEwbBdG3BFSGZocBJXmZPcmXfk1+kd4-x__h-?)LuWr8kx(_4QSV0!k6Gn~e{7~NR zJF%WFKEMfMP#CX@tA=ICgLAQ|FxLr#gkqaT7C=0$OENQA$FInD3UlT5qQ=5-#_QK0 zWLl4_W@Q8WJLC(&p{b9Uc7(mYsh#rHtjVa_YQyCY@?lyUQPp-iorW`0=(Puq!7W?Q zDO?x*_%1;hd3Dn8^W+*yB7Yt|y9A{a)o`mbzxADCYJCwaQ7eLua6n;abvSlgs`cnA z)rM{iqB-m~@r=v0Vz=OAgXY5qvx-5FiJ*}$8x?qoqkCSqt%L6qR-N+;>e?KdgVsDb z;_GUJ23Lx&PiN}4Qosrr5``?xTB4x3x;`t{X0F7I*l#+}zuXhMHdGPav?P!7LKuE7 z{5&@P^-BXMvy7`9jJ#!xtE$e-;66{VO;8=_X3x-5q)QIp9B-{)U{F+Ho|+5;K}+B+ z84T{tf6Wx#oym71#yW-d_*V-CL*H_{%q>fTtu=K(<%OBEq80Otj@8cI^>``s(<#% zW=c0kgNTQAnhet2WT$a1RJX}6VND`DPQ=Tc?~fQQ?;hChLYLRUI#;V=;|2$&zI{yy zudPoC`%$2hjE;wo&d!l^k_r{`e14olqV(*_s}LV{N^VRi;SK%jXVQqFoMId>yMTCr zQtx=7gk;nc14|(FTIu{n*t(S4%%YYUm#YRQew_Mz|G)%x0HK1ILS7PsyHn_DqsjPo zwm$8equ=qYi{Y!y@$CxerYr5siBu0SSa>3s`{In*&uiVy4yYy8Z^X zgi%dncDYp5+d1eKilT>=-`VqL3DO=0UlRfLSwuZx2d$>tdu_I^O-Z#bc5CFEYIDB% z#?!vFppFwV{c{dalm`Ym_4%ZQUve6b8b_j~6(TG(_HKjg z%h=}T`L5?O&v_2S7NKN<04vwohEDSOWlg@DL}l6c#ccM9H5l%C&)vGY;St24u4dB< zI&J=m+#!W^@tJua$vh?lykp3brg?Y=`JsfKe+OtyfIco)H#?Y@&=>q19utEKzrh<5 z-lrwyy0(6{Bx=cpD{)JU7^Xz=Xj&{@DQ3okmPkI9y#1qTodjCc#TO>ImO>=}(eXGS z-H|stT+<`5=^VDi3=85)QgDH+BfaLzP2YwTClPnm&JXvN0?x;ASg30Bl^tW3Zm~SB zw)KcNA*W60LDC)7U76q%kD1Y!b%3P}OKt-CX-Kx*rdWN7xR?No_3M_FKj^AYx+l{d z(CYx~hsaeso;p*r{b#y3&nRbnb~wj}ZZ4)66c?(VmjyReYjV*27aP?p*|Q1&Kl58Kv+ z?hEX(_G_1hNC|<6gh9$hyC@sZur*rfxftM*Xq;s zHNKn4`o`Nnd)rkfPaGR25|ZFW2$}twG;f)dTrnNW|JmU*8O2vjYnRz%gs5GA$9!+F zosw_WMRLP{6T3|DxgH-y7mT!YQH^vyl2bx76xJ_tr8iy{5Aq?^R0cZ0Fw&Bi``JNcTs0HN$$vzBSH!FOTS%Xfa2SWc|L z0dIb`SowCKf*uHqbaJI~PNTIWN6bz8m&R0uqzC7Q@$NbDUhPYt?aH45M@YEK#d_E| zN3VE)9iBtLfW_B-D?4j`U%ieK`AP*9UvXfSOwPL5i9MB@L>LR1a|25yD){>nyt{M4 zy=sNS{8hroHCUF<=TwaFEeUs-V`WH{rTJ~Ed5Lwr*4!P>$%^&9;!{TPelEG~N?BiX z-1i06=>Fdcclb}gtk7q3HeSR}YSq#@d#~&Zq+BR#GY)Xt84jZY+U2abEpJ}2Zf3Dk z`=dt{%VRyl1E*h*&l5Mvn_#-S^)=f%W!xgD4jB7G!Sy*->S_EuMr9Q`yQFvxqvJ92bQ zLV(J?z)u}YLG#E5+L{g?B)faLQAioQg=bXz*xQm105$rjdc(JYJ?J7^&&uPjIK{lm z-j4+zsx9>5{BQa72=&xle)jvyX0uiJ>h;Foib6_x14=%AAM8F8%S&Zlr9T!h3}!zZ zKjp=k?j5<&dAr%1n?9u}i^Ag?#-enWrNDBYFNvj|Fc~8O=wtOk(XWon<{YAOK5z zBakCC{!;q_x>?c{_HCh$DykU}X}r&KTiYE(s_T)YD$CCF4b_+OaEQKOP5iZK~x^l<8I= ze|~ksf9JlwrF@bpA?;5MUaQot3?XFyQu@bgtt%ZPCFK!Wq^-#qqi%y{ND+xuux5GM zz?ml;R&KZ*b=u_eE6U_vVnBbC9D>;jsz$=*-tV^GlF#RhSlH9&m9zqI^4|8bWQ{*A zHp`IXKCF+iTU@$=N}!ID{;n&rs+j_yfo29!K9v+Yn?qbK?lPY5P9|>?yR7!ZG_mah0ut$2< z=wwDgd^PJYf1uM6E@Y&HHvFZvC3gIq{xp@Q)>j%t(bS0s-YKzi@$YcqkL?SbDht)f zY%^Q0)V6Y*1tkJ2NYftqrmF0^VQB2YR(fnuQb;~<&I6_-ZZC&2Xfn2p#mrW){d=E# zgfXutO=;@eEuVCT6}im~axITXDIBW)C+S^aXSvNdykRFVtWwIQ;$rmH{iLOlr8H6P zX|q0?CR0OSY9hr&M#kB85(Qj)2nl0;->L{45i4(8<}ip0Pc5|>WIfuCAf+M$=yLoI z{K}FAm8jb7WgpCg&cj@JbWEY*IYC6YIe7r!kOh=U(9d0mZA~L~f-Bc!6=>>fs#|+y z`vL(+_e$djT(<>w4(M@u{y_6LwtoHA%c;E_t4$R5;c0{5?**$T^eQgBdb`z!dIvC8 z5jywX%5g{49Eu=m1r{ghb&qNEsd$gAbr?D-f{?3{7;kaR(0wq%rUyx;k?Jx-2-nJ4te*ZM+wO z3`n5TjD0}qRTd!wPIjh~iLDL+yfR!+xj*<&p8vJNCnT4goScvrK63lnuJ^a$eF2@k z4H=c;3dijvE4bZ+<5D$-EwV50txV|0aPbcy%4btnOClmNt`2;tfW(k*|ELMTBonY| z1#6rMsUzViSBIwxl{J_kv^HxwTu*YY376YHi3VarlxM$wKg}v$jAB4^+&3msEk#&g z^&oTsZz;^zE&b)!BuO_?Z zVGoP2r#RI{)OA(wL_OHmwD0o5BGJ^J%UaMP%5$@@_UkXreD1a~Yjhk;syd%a9lmP~ z?<35E!3g2b!zm|(zqN1=OrVaJYb~RSw;-(Hwc*+O71rJ8U-w8CsS!of57YXqpj(y~ z(SatXjlqxVVkn?VN3YaS@tSC=nDM$NV#Vc6WV~`;3U@@gSJ2m+O<7%0t=Y(2Y_|x2 z35N}oS+(RhC4Z}AK5eXl*bW?e&2zk*G3Z0|$Ss^~POiRKP&hq~D_u&JDC@Yn!)kk8 za(bQ`12d0Tp~bNVkO06r*Q{FzQEO`-~UN62UhO>L|vC_qc0&= zT4Apf7ByYKSJSl=I*c|lyY>aLxnbS=0`CVZ2~HGcEnv{LncWb~axGCyX$fIy^;;b# zN6BB=5U@=-VKXi=kq~c+6b3{`j|^-7!b~QuIOIFCE2^~>?bPp2rk`I*?Qoxct+*d>+G4}eaBJum5=jJiGr5!W9 zawyKUJckBca!M64`CpX@6mzsJ=Z`M^D26H(7bUrez(%T_MYHnqLf4p@02eN9-3S{^>*d#SwPn^w_q`s~oDx1hyORseI`DVbh> z72(#1FWA=)bWXo43B@zXMhJay6nYE214aTK#;pG43M_j7I=oH1GH(S^IRUyqbdQ0< zYe{@ftDFdb8mJsn`e_d2u-JF7*Qk>KvF`(+F0-LCcY6j2L-{kZIjr~JKZnrO6P8gb z-8s_BPBOPQ!+O@lNkd$*Yh!ZygQmp=Kny0ho_oC%%2 zDX{O+xYD^ubw;vsqK*6ob%31={B3zUyoG(U@|cXawc=KDzE68cAY0*Gm#(}?-xr{j+Uqm&M^>9C!T-=DQY+YLZi@e?y zyL`|*4Wy7ml*^cx*--FyD5nz<7E7ZJpaMk|L`i<}fu1j8UqBFI8;9F9gMk7sbQ9tD zn?$bbZi|AU)m}Lv$?vq)+EiL9OBA7lG;PfBSBkev(;?R*3^ZBt@nv%zl=*TsQ|?g6 z==95D z^7PW9Nc%cfcSeuJYp6u;Xv;+G`FMn18vsz(ckzk7?OI)l<=}M1P)@KSB{(k_Bh5yl zxwt<8@97yl`;Gz{b8w@QAd^vd2=yq4CK84sY}rS=`Z*TfYLrATBvb57drci@FBaaO zo74bt> zBjBG$=L++E2`#Of-7eDDXU|54uYu15J-*TJtM``JXChC!ZmIhu={eU9Hw7FRhfO7|y`LZK%7Z;DY|{6>+x{TG)PB73c5XLW zazSR4fiOg(u_3fPsUJzjS_QNW6v|*`&gmd44((e8IfBQL}A2|DKu zMr%<71(7fZKz*n#N%1bqp*y2|R-Enqnri^vA-sf6>FH4x$&Qg`ItZ1x3$k{Y@^u3J zbyQQxv&j51Lpx>EcFc&cs?e7CRO6XE8+WC)#of@3T}40NdqNL*AU%>%eZv{*jaT)5~B zpMbV?*MI%@$^S_ZzDfC)j+KXAaa7(MBv-vcOuxzkMn_k5s1+2}=?bP3e1tIGDtK<7i8FsP7#DgyIQtQ4LP{IaET>ERPK|fNBH0Fr#up?KY+&RcK{!ND7HoCzY)xa4;adf-o^v%B zdXj24ziUUSnrz!i34OM3ACL0@h)9&aBV59Z-+$DuyZ%cxC5M(>e2)kAu6DiHJAEQW zWpcFkj130j+0&j0B0we8YFvNw=?In?r4NHqr$+hXlk$K4TeXhsIgN%6wP(z!K5$$q z4mYUpCjIiah=1kq)6J|2Qr5?m0k6>i>G5CJ!vi-xHT?^kvV%FS-LpT;Y=8fslKj8F zJa&a^GnhsN3R_#Fv6Ua^G!U6ei_+3Metg5R)x?ZH#%crD2W|zAU+Zkfi(R>Opv>?) z7WVB6|G*RO^qb{TU3A@Ktka_(oW}zIyC0{>v9t9G~v}W#RPh zL{rzj=*K_D=&=f=S9ZU>AvrVXS4!X$a&~0l!@iZpdd12%xcL&y1IF`|G@lpX zq?-@`iGj17S9vrg3?&n@PSL>h4Flf zsU-LAxD&hoz-d*jpeDsje#GS-=E}fXB=Gh_q>aj;&b9u5306k`_IFQ>#qI4e2LdI# zuo8o3@(yg`z`h=Dd}_!k1afS3B0Au}hS!mpI1Rr6#a9ng@(t!PvnkUOf;6l!5~)Uu zN!OCK$>#r5PNIWDbI3VNi3o&OUc&q6mxJ$e8)-n3ssqD;%F49)?K!duPU`S$rRT=0 zaA}!=;LK8$i_c=w3ne$d3$AH1yIi|TwB}ZftS>Cr z^|u7Nvc-IC>yr))ze9_%A}be9}fm_v*00;;I-yaRNof~nfS{z(Jb z1n4NsDzl;g`Koj8>B^N*y}ec0b<$){D=qySgIvSA>><5w2>iU` zbuH7Hd-b=%@)Bv8B%gQB=7xx3{`9>b?w%xw%Pn+m_o% ze*FRkDq5>1wc%q+SHU~`0@@72L1?5*l1tb%#!gPst3M(BmqNDHw>GOO^M$JV$LYQH z7=ONFz2@+es9+n~awvy*e%jxSP2dgN7K>|-;i`&T*8zP(k(^Q%vS+o#85ONXkPbDm zzU+g&NU6gOMgf7pmOPrA%*{vy%AT=+T#U5@B^x+Ndo(U9Z{M+!l_rUeY%b~w^EXR0~ZZI&kEsj&$bIc=jS3Uxq5-<_W}cs5*OgyQDC?=$!9B)Q#sa6dZx>+O%N*r=At zPM?Bd$^!M$_qfDATkkSD$-fvrU9uqq^fjTkfZO3YY)(UYwio}Lyy4w))gq$`onoM> zu>NVuf|uLReUP_dE3BYMip>o<3_!alFQ%+xLV3x%$-Cwf1m2~J?Cw{{O|h3F;VxkD zP?7Nn8?dn_fxbz*@^ns9F2Ay0X;7S^-3oLs-#pepqeOMdz_x5?EdLxA5OG~mF{E~A zNw;A3=n(BUdI$*CQGYCV@Y$5Sh++)^8^#1d-`N3%tYJDR-^A<`2qjegAb+D8!Ni<~ zFo3Q^X~e9U4*ryu9M9a;E3`YaVyQJlXWTZS!%nIaY}|oO-vMn+J+O9~ z(pf)k4z6lDxA04-v#cre{ov@!fkw}cCw+dJFNjVosrtS-193o2j{=mVFo3(z`qy_W`EGSXQhOy!d#TZo4%XOh{eZ zdl3~^m%lM!Y|TllUH55KmryysbH{&LuO2yE6nV1e6O7xn z4ltBG+YOXfI&0KtRFKxCiBzpQeoH^})-9PrJlSuAtE%$xJY%XRd3;zF7rXU5nPneI z%YThtKnTN3q6ZG93!+!V$m`M^l>o0<*{N~|++_(*@|d}th_G<^QUqPX>)ojjBFD%M zU}nS}dk4I%(9u4P(%*ZFf}Mn1PSjkpn23`8A4i`u{Xs?Xp&6SIlX4FX6~20EYM9-D ztZHQV?@Zxn+PDv;ET3P9FGS-V4sN zhM!tL#f;B@Hj1?#rdbayfh&gawCLW}AW~w)4+nw?*DZYkT=-n!G2~_^=1w_A!M#ri z13(u;N%cW~buF1EX%AN}P%68)-I}BzV4!PiS((s;v8rak9ooy0Paco{i&at4sOy|u zZxGJ!259^#jXfaVWK*V^Bj5eiqU0p$FMq;wMCZ{7mHx-XDwZQ=5XyC(Lp zEG+~@_XQ-&_wLoV#moo@{Jqbmy!o@BgYb7Eyz=Vc@-c6BdZcz>H22*9C^Y_LoicIv z5_eyq$qWDIWB*(TIPhTtbRK-GC)YUFjkRB!LVGMp4XV^$3o_=;bIFrJ( z!#O|+>>lfnQ!<0CP7yXVn#&aD%B!YZ^zvN}Q(If2NzTyXV80tg7`-4(8`r;wlr5N_ zRS~W?(|$I6kD#pp61yDdDZ2Hk+0-YSQCLXLr$q-AW|ZnU`}Juq|NLEyu(TraIeSKb zn-!l)tyByV_>c&8EH;*AS0OEyExu|LZ3gKqGC{<8B#DGCeo9BO2M8>Gp!7FG+24;w zAUWh{Mk2|-PL3YL6g3&1L>h4Tu&Y^i^~Me!Yp7>(3B;W5m$_OWJW|ALVlp+SY zAQ|5YH%sdgY#4CbeK^K;DEjORFDOEEW9CJoZ&b?%ViZn>Ed$TPEzrwxrUw==r*j0- zHrU1>(^w~_VRl^RZZ72&-y@Nnc>MDp$slIS&=Y8f_OFn*+}eSKkm9$fpwtBG;)L@& zAIk*IUKgMT?m+o7YU@sJHW_7jbqxaVB$gg{lT{EG(9)ix#RlVi2>%?t;8lf<-Gh6f zVu;cEakRPb!=>He<;FX3zrk^@I@QT98MtO__G|l`%1^4+@}4LNVOFvh&7b{qf%3)n z?*f$WCc~16IqhS_!yPiRzO^7I$BUj(Huj}~D39COD zv~bTQjLf8>RV@FCWC41sA6vVU&0M#tKsZ_KElv9xyb)FemUCzI{DkT;3NLXj_YSk~MK1k7&CDZytF+4QY?LHXO^@ zG_4CV;V3&}!XM>)X~()T)zb;q4pa9mkvJ7T5nW?KpWJHSbW6+cGn<{o<0CU?0}Je3 z^cIHh=>Q8h55)9>m<*1)egk}9osz{wjodBHWB7FVEK=O9lJ4r#(NW13Dx923Nq_Qb z9?L(C#k)XX{D0Vc^MIz#t$ozC+FBJ`L_`_1GATi@$|N9KD`5^0NC-m$B9kNpWR^jw zR1v~p8Nv{z5+GzCL52hprV0WQ1cVGg!XPq-$pH{i=uLah(bIG6{hfQhbMN=ZJ^5p2 z4{Pu2y!(CEe%G_sdX^vthbiWApFet3q%0ac9VU1u?J9S{?ekxE*e!JDzbohoFAq@< zEUDK`_4zKLs+YJv>!Uw1!_<2dE|a97BPdMUimb#`m#qk`kvmh;^u8QXU4yxUVd^ar zAG2|O_+1f@EMHW8C5nAk&-lys?>qm6#V2mOZ09^^aguS0NI)94v=%FF*TogLTuIR3 zkn{d23W&%CE~Fu9%A)Kl;Eh!A`FPg{*JA7%wudH$G`?cPVukXCyNcgfti1KOd!_cG z8sgU-e%BWd-JMo%SxQxid-ARLd@q>6&aT|5PX?P zth)UZ#|OAwbxJjihEY!Ev9reqK7oYdnGs<0#5ZErlzAT!G|#t%AIx4V$e)dWH@T~V zAkMN<(q7^ZM&bjsoDg8e_S#fI$}$Mc)|{SyPS}UDhWo;flV5+`Fl?3w#g&kGtB zu6SZgs*Pm{bYAdVXKkR0XFRhe&p!q+8cqdQ^F}D04<6QH(Lf}vl8f`E;r0jZ0VE!? z-69a$pgF)+8Z7olWd&9S)Ym2D8D`W2GYxcc++-nBDW2vBn(Q^AU@?+X#RhtTqv~DL z>C^6<8t^DC5kgPzs=a5b)E{`)|M}!O#Pl!XG4KIINiMQ*^_)s&J<7BkR6`<^ua{OV zr}>!rpbRg5q5iOD!3BYSHh4*5-}%)v_?6sw27e+Y4Bo&ycjFu`-PRR7Qrr_#TBm|$ zP42Yi8mW3HSW)3&pQ*piq%Zc+b49;nXK5NK`Tp52Q$$L3QgO^@=_wp?Yd2`apyzYq+Gi7ZOF4c zR^;`(x;%+z6U9y@Li9e^7rb`u%+-^86Mjkm4JKF`Ow4sHjC=Q|c(=4#jPCI*n|H9k zdISCiE%Fx;0B&}Z^3?(^_HB~mjvc#E%LOGZrpM0DA1B=j`3Br6Y%4yg37DCD`zqa{vz&Cw58Kaj#xP&^LA4mAY0=F)Uq*ISf4Wk-6zJb$2?Olrd5Ff-cVl zX-a;JnT8sV{_;D>@Szhm|FC<3j>o(S$cmf%%sb9n1Hn#uLTm)vx5lSX%mqs_G9&I5 zxeKnn0b~IAn3kY#8P9}$nI664BLLM8zqj1Kt-K+F7kQ4caL%tgMx1~7?NT3bsUO4} ze>czl?cg8hqMPFF|F`?Vjz7A^KFqc>)?fyEWa!w?TJB1WuFEOv)duz39k7_K4rd%W z(jc4*wK@28)!8>HkvdeHJ>=!f5)%B;5L8hBt&Ae(1agkZQ`CvBM|2zsU?g~WrjMS? z=~8ygnT4E@>;tyaWej;T7}>fls2``I)LD?wkM#ER3pmF`WNS*l9ei4cAvGBZgrM)) z^UDXTz>g9t3e9mtBS}r)PQx{=eu7^kU*lI7Ru>}0F<3Z#=NU!SHAE@=u)$m3S+&Up z>Y-6f@Dn}qkz8=3bMA7+jJBqrxzDrdiC}^J41;W9lW# zD}w6kk@~}k0%7L;0apNV&J9fB3sKAK9uNx9BjeaukXY*+Z_bVi67rkW=MN=HsoVGI z<$*RfoH~!GiSQGqmZm(qPRR3t37MjF2YQa{-dak^8>{FkxHGEme$IibYONVPuM>w?L-Fz)~i|=1-MP#GNQ#HKMn$IHi8r1A4>#9KfUG z7t|=a_JBx1x_q;k#|MhC%MH(3WauZ0lg`T(3cs8hK@YmjRYa40%jlfT7WC)bcBs6B ziO!OTE{>eofQgxO`+lAR92kux*4sXSovH&Qq;bw1t*TOB$`$?C1Pu=%x!xfmx@bRU z(aufBx<0!lzm6w&q+8@&)Rj%VrzoX21LBnPTVA=S`>;qBQQo>^WRrlUF@Jah|c%5oCiQO9EhY+SeNBMaqi*5_K%# zrX9Cg+evbc=P)q>md!y%TnN=YCLeBO+0_p8`?^m9v9q$kP4@J;ChNg~K6wDSm|Kso1D??giLlae(|ZQBjK?&WuMV>w-Z%c8^vz^Io9qMnwODwiYr>$d74eh_=PedMj-z8^j(u% z@k#PB7WxG4pSjm5l@gy?a#eq@b*gm&ss|t#L<9T==emKdoj?@Ir!@7Jv&f0$Ih3`_ zI;$aOZN4|SGxgxxYXjPhhSF?viaJg23#~jfFyzr%3Z=cm*w_UBZj7#1kp+m7IJLSu zV6kokR=J!71ww)c0g1Ok51p@B+WE@f)Xji~8foV*O7C7T?QcQ5)eibi$Y??)9@xMn zj#yr|_!8k36fb70Nm%~+aY{kYyeaM5Dd>3ejcE1!T3L(uxV>=(cp91Tv^^DHjW>>_ z`AbVm2HrLXjwHmlg-k1HlSTFi5YJgs!30QK|szxn!i?M?SzBS)`oKlI9KZU+T636=-C zw2&G}fL1<03DK(~yHpBcFN204I+c-jscYBE>&u{CyE+OQ_K{1lhu6G=?=RxBzr{BLyf8D6MiYZ&P*U$gk&WMHBLb^J;Y#M zkgge=CpLY+;k0*T{H*%GP0BzmPc|O6!Dh3OLpeiJ&JnVF?ire?-=jQ3PMFN$(O1W> z?)cOAgk2VHDG9OmzwVH3ul<)5)9-?N2+VDA+vZHs_A~x(JH9Yz;hpVb-(gKV<;)QX zj?8K6Y0Bt{WvG8N#?^yq+b!pbVdTDOh}5s9gJT+V4H((0#F!UfI1FrKzZ&~SBybxj ze)~|t#c~sJ@y3r7-&l*gD_@7APtV(KJ=;$$+X5VG{649eeEc2+`TD{&K`Ir9q@+pO z`@8O1_^9wDUTsU+<<|-S#_#;+PTg}_CG_hy0>DMNzsiB$eOF&H@P6ysf9%foWHoZN z4+{LNF$P303JGcaC}%bJzBu4TD$e7glU^CIw9YpQed^H+`;nyUU?7sV27FT!_m|hu zf9}bDey5jrIlR;vx#``vXQizkzX7(7JpI@K(G`;)j1@{-i7D&6M+!49gi$#ylNa7x z{6tV^{p*h8w^Q%FK#m%2YprBFSD=KfZ1gqT{PJI!|9Sh2Gp?!cB8NfRO{#m_yWI?V z8*cm0`ELW_Ccvb>?UZ{>jZ z+q?V!EAT&T2edG>w}{0%i`%p6*9SjSUG-St_9=iMZhgy>fASQeI(=&n#|E{3-SPU+ z{XdZr@BXyxbjQPsVp_c^Gsh$y!*mwsYtbdt1b2uew0sF zZS3{&U;Zof|4kEoN}+}HFc4ZWr(N=2L+y1`Jk!n`CMS?G;en$?6-5JU1MrY`2H8iw zEPD67pcg@eX}8KFs^5LQhy0`c@^Psh|7gqqnGC(O;~ud;Pk z;64iHjG>#X8?shYW9+$H6?mO&9!6{L^_zYq%}A(W#fhGK=IK#b*Mxy@%lM?h$cNZk zE}Q=--b8*QlQ=`rGuUs4XNXZ0JwKyjqE9oSJM-8ckxh~?!~2xR z)={4*^s?nnL10q2qflETwd#JNPjL0Xzv}wAb)O_ z?i1!rMGOn(`pnC8Ynp^h*T$cX;<0`kQVss3rdVsa5k& z9paC8*gqZq>yCf&#(wezL`{>4#@;b#_m`rD=Y|rJr)Wl$c7! z$`cc+&)o33;U#T9t9^uxs5WpYL+s-3&C(NYrYtBj^#D47)uh7w;$uW5t_=DFs?kBH zi=6Whgdd9E2{Zdi8~_V(J>7~Y`_GT$?}IfwHh4C1rOxR}MFwg4i~|p(V))Ec;;N=I z4Pw0zvlz0P!Md7zh40)XYBx?N>@uYU*5>nXtWH2dMn-#we?Fb!I5NmWu66WE2hC1y z-&UzEbfrwSecK|*;Vw;6Mk=*Oe136?s9T?&4MX&-U#y|042x2aJpV}swF@Y+ww?FI zheIH&w5z>SX&xS~DdMz5B54hGkW_|Rs$D(cOqYQ6^rY%9Q8et-;q^e6dVaDAem1hw z^pbCUcJA~Y@}tqmbv8

|A3=(c!+kyRTU2i|Dh-uGw60i4jrMZ0~M0-`OC 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 G2LA(gZ=}Zn literal 0 HcmV?d00001 From e5704f2e94a4de9116d48bef7373b15778e64465 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 6 Apr 2021 11:26:24 +0200 Subject: [PATCH 03/41] Add image_link and change author_id to user_id --- docs/Stay_in_touch_erd.jpeg | Bin 79653 -> 81578 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Stay_in_touch_erd.jpeg b/docs/Stay_in_touch_erd.jpeg index 690c7193b2bdba7ee0260bc74515f0cc711798e9..aa2a2ec38a438d77749cca4342f189165d086841 100644 GIT binary patch literal 81578 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

~{LrYZ1TV#{cH& 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

|A3=(c!+kyRTU2i|Dh-uGw60i4jrMZ0~M0-`OC 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 G2LA(gZ=}Zn From 4f1af07706bc1ab68cb3157bf3a7a74c4e4de1e1 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 6 Apr 2021 14:47:21 +0200 Subject: [PATCH 04/41] Change all primary keys to id --- docs/Stay_in_touch_erd.jpeg | Bin 81578 -> 78380 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Stay_in_touch_erd.jpeg b/docs/Stay_in_touch_erd.jpeg index aa2a2ec38a438d77749cca4342f189165d086841..ff072465480028d7c60acfb2a9634a770fd1e903 100644 GIT binary patch literal 78380 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�S6oARm?%H9=5HvHm_ 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

~{LrYZ1TV#{cH& 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 Date: Tue, 6 Apr 2021 14:52:51 +0200 Subject: [PATCH 05/41] Fix a spelling error --- docs/Stay_in_touch_erd.jpeg | Bin 78380 -> 78388 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Stay_in_touch_erd.jpeg b/docs/Stay_in_touch_erd.jpeg index ff072465480028d7c60acfb2a9634a770fd1e903..fd676931cae0d8360f92f8e4d9b4a2e794644c2c 100644 GIT binary patch delta 6654 zcmZWuX;>2Kw#HrUTUPsQQ*=Ak&N0CuOB~a(oE1%F$oZs}ilK>$IdV_CEGaQ1L~%NT zp@5*NsEFFmwwgGUg0onbsNhuQkXd={KF>YpKKFkA*7L0I`?20Nyzly|XZJVE?*GpQ zIr(EaiiAaD4sW^1FZ=B1wokJ&_3YK+i9Lkz0StFC7gHb=Z!Pw)IheJ?D*Ek(3H)S` zhxetpOtT1E^@>n!5{suIKO6L>FjZ(aiXAdSznhcsm}5Q1_GeWSicT@BV=VadTGwtZ zm0z{$4`$VH1G%%SMJ4!AP0(Pcmfi~u+@^_$iC+S(o=j|Oy4=~*>DbY@3()oP91B6Z ze8Fm~H*A7^ATgUu97X&*ZXf5;HwWB@%G#HJy>lulgzkQ#&}Q7Ua2Ej0#eF{iHBqZU zhC)N3iG>q{6iX?q@^+zCCIktFpXR_FdwnfC!YV-yK{4c`(DL;}0ZRH7N1-nR&87wf zkby~zPC@s8V<;#gHfZV)+P!MFQRZf3VMooMbOxR{4-cM$2nQr^hfw1IwKgkc_pgGW1hesE8n?x4FnT0$3gl@Hf=L6rUUiYz(1Eyu{@=VkN!lQ$5V&OnKWjeev4M}29p9YsuWIfk zsbCnk<*9h?x4a#}6*qBaFA^=X#y4if7B<72b#OMuf|=@$`L@Cz2FVbf3$%6wO4GBR4>(Q}R*9XzEUx#2ebP_Wvj`V*S4IALJS)!i_ZI}WY|uNA!;S)6 zf*x$^mojz^QMcBHB9k;(7tLdfP@SH(OAJ<=5cnxFRaaB%Pjb;kpWc0?lCk+P2WKs2 zEP{znPt8f7_%n$_%A!q~2H9;)KVdE6XxbW80#EIE?6LJoR3)^)M>Zs0JCYzA88^s3 z^v`^F*a@z@sesV&0k)b@sCljZ3NF!cKpIJO;ALEU>NDPr)M z(cFvlXOZqDb#0M(?d*kxLQiIHmnb!Gghe_dftD=Z*#+?8vY9Unh8IvLA5ldM6U;B- zNMgIWeG1`cp_L{nnifhAELpBj{|h?O%}MJl0%QOozlgkmuD}EnIledalH88SS6Y;=ecdAeB@Sh`N^C0 zAw%DAj?7b$3uQND@QUhx<|U5Bn>XhA>Ali;k3R+zSv+7L7y_@u63n;>i~AEqEAyI) zfy2(=iViK#_k#sfKH!wMe-PD}!0LMUsLIL&bhEHes%eIv8i6qQQE&w&uS4s@6g06u zaofT*7>%YU4vb!Ssr#e~9(^s0>VR0*KXAcuz}jNlV%$jc=BwZ@MJ1X?kDf5kCgiJH zNfoxI=g%K?@QCRM@1`0is>Qqc`pe+0vnC|W=(W=|m?j)f{_bPa&vI_KdG{p!$WNAS zBHcgjKw5MqrYr4OezM-vAQT#`wQT)c?g@GRv)Xcs5o(SQusp$B?B@utrs&+9Z?E>W z%NrV@`QN{PKZ~dEH^oap2Ty$DxQ>^HRSpUaw-MmIHl%&nG|TLe7j{P6vG)1J~pe?44^ zf3gd(ulm+bdvEyYqTrTxrWq_8?F0eBZ{9C}F1C5R{QQMtoMSDty~pFfjS7y5bcGWmw4oIUy6A-O}i(u5`q zHs|aE@x{P>>eFLm^KCCjxInm|*}-$$H-^p+ev)e@ZnTQJ!nX~&A_p3<7sxFdo{|SBYSm!PvnKh}Eoc@Gk`$W-9&OW*0kc_YbQP0a5C#fG5($GFs!;^<6Kc930zwPC3Txmg9^KL0X6^l`|Gw& z|L;BN5<}esu@u34RgIE4;)+kH_-trD$|DCWjQ>W01($woCrz}BhqaDQkB1|D277GJ zM)HOoQ~l?!?%WddER((JqAep6&~>XpYOX;c`(thsN>or$!J;5szTQR`lJGSdsajZP zx3mL06FgK%dIjZaKS9yLUi~Zye-=M_JEHQXXW)izzToqCT#L_8yTe4-wOj>3$=A5<$5WM@3Kk80&DP_r50CG9 z_Bg)N;T`X-vo}g?8&~aS?cT36EZ^)heg+5P-P(LMy_5CANeU89Fz3*)1Wvdy#!DMp zq^vj(N}$F)ubS)xw!d%>iEHsSG`>sl=fbjyAg)Rjqii|O!Q8SsU0=I?6h_Un#QA+HNA;aRN2dlcV(!!c~6S81=;;l!ZE(g7D~a{07nj z178wyfeM&x$5*s=7m>^cqS>N;7dns+vLc$gZ7Uq}`kcB8h@(tmo2CtTJLnt0%hV;- zOp294YA-=P$^sF!1%vL3#lej8m3c#^^;~$B2%hA1QH!}%i-rZWALoy8Ai(txgKi@& zR zY6`vviO$#V0;&=}op{i4Z}Y^)uMUPZAfmVPrxB>eFQxRdqEN_y2OZPui?tay zdED@N(5DmXrRIDD2X!*ddVN2=suIsB^-mtl!6R75hu^Yc9px|m*fHkv5mK2Rx`je_ zQH9OUYt|BA4$-$jl}<{r8y4*gVu^&$7o%57(_ zsVKWktwS_v#rJ$VG1Pp9$se_84qJrjHJHR9p4EjUyWMs9JKMV`bSjIuR zW%qXh(&pFYbph1bGib^c(po?nY#W%>AU(}-2EC`=plX$j8~0eoC937E7zjj8b^b1c9-@03m?)C;GEBhKccYpu{CzK7|6RtaW$WWAyMRA-0o}gNL_TEy=FYOi z`ctSbbbzYg;-tmt0AYEn5#S95f{N+sA>2)1aqDqeyrfG$u1V<*%iCnv?O^(~1CaLQ zsO3Nj&Ma{S<23c`mw2pqYDNxAc45b}ya|pE=7TC)^E{<6Z`gs4AvLetwUaCW@!! zcTA7TT$)eO_V!IW){m-t;~R43V{oq#h^-BwRuM9htT|K-Y97+>G2^Xh=b`pB$KT-h zLD<&u$}H4;zT-Tps>ZdyZC&=XWT0giWszHo2qGW}Ax?;rVZr@@F=O+ODkp;${DDE#N||vHcC# zl_Il@QT{>!-9g%WD^hb6ZZb!;sH+Q8l>(4_YI@`0v?IHK>$mkfx~#B#n1`0}trdu2 zqnhSlYHuA<`U1z)Rxe{ui0nrUYL*TEx^&@yoNfgl?K9d zsSx!$7~@-75wdfE>xoP$#yyW6q?;jdl2NShUEJbYYp{d9t>Ct~&U7{mk;TsSfkc6T zy*A;Pwrj{VNjwP-M?T9l&mk^qYSbD>N8B!y>e?DP2Fzxv=pTp%#z}itDz9{U`5GR+ zDmrH9g+OG zipf`hObjKP8li4ZU&&HI1Dlc^D@{Y#u=0u+3X|@H*y!lrW{THK*@zSy$hp^prhVb{ zc1g5iPVW>CKJ7%$uA>)TFLO)!TBg1^R{RdP{B$zF&pFOfP*aOs=nWF&<3V>>epU6N z4KyRgv+v_~qE$%i7&nTQPG$yq^h7Wi4)Zb)J)zG1PKS2!(#qP+HI0Fm7j6xZMkZQ4 z2`@Fw2{+ZrbGKKV!WVxEW-lQVDUiRXoz}6K$>@*>id*B7pJKa z8kRCUUD%Pa^06KzRNk@mAU$fKQyX1|^x<%kbrkSEZ@ia`i6}oEGl7OR2Be;fESS46 zYP&$d@G$dWa>_Ow`homtpWFpE06=XR2ID^clnAR8o!zPH%JG^uh>VI18+-EPc1f8S zZx)*IJ{-7w?MUnp+2Dk_#%JktHHHiHXBGsSI7$Be7t8#eJa|-2`Tw)!3&daL_LGVJ_6kl&%Sd3$bEz>oMGL8M9QQqN_`Ak6`oqM zJ)W;Zn^-bdkuM^rfYQ6h_HaD#uVOLzPXMZ}j^f5MQ1w=1hN7%pyccRhO%5PFI`~HZ zfc*ck2J$&wxzohK2P(w3{qi^>Pv$l&I&pGr`C)Z6L5D*3o13HlgZ0T9t^kL}Jy&d# zba9=U(w})C0#~ppOq9T{rHBDnQFLM5nR`PRXLVaH1oiT*>ttg4>s9|GdXGt^=#6^w zUs6h0Xwhm?zcc-Gs|u*-sbq>5F}xMUz55C}!Twd`lC35q46UJ*6nz8Zh&%xU(Nz1HpB}yG*seywedV_ z#jHAODUb(T7N4yX59z94?&>VuEA9|M|4hbqpkWm&eKk})yKc(z5Hy|87vHoO5$T;J?LlO z_+ZdDcuMp1;zEL$PGPF2ZZq)|3IWZ@wd@i(4ESauu{hkzWPAGc+~(lL$k|FplZVWo zVwPg%6AptuPD+OR;zqlFR!xkd*0m67E{{p0mbqsd^?SYGjbGrH8S_Ek!;I~ z&DWS578rEm=>gmJQa{ayGi(&Iru=UPxM~QvI=V{e<(u~Kp&yUS3TDjR`cyDJzRmww zOhg{u2p#m7)J~qbnb_mqmpg!PJPhOqV5}742KkjZPf2%}C~??AR&?|oUOwRAujb{1 z%EEBMt>K%T7;oU|W)G9J%%(-OeQF~NIkBX)nwh;Cz6kN*hR4G(V}okEpb~A8VCD?7 z=tF?n#k%Cafj{&x?(dWu_Ai$? zP2jt>K9e;H7uk$V6}Pd9Y(8jI8^b6y;6FLn+*u{zqxw(kCfZV{|8Y6c&)40{c*qs5 z5&emTzt4CKhsAt9;r)kqh#%+F@}|2HFqNLqF#wf8z%(>ijfb7!EORt~DM|AO>-{tG zBe&f~6kAjpt<;@zU(Vr}kg*3DDwVin;3|DbiLnEn976}*aIbwfM7^-2ow_r8E2%GW zJ<)UMTxr*1A^2_cWotx5bitr{TVTn-5-Yt1@wtzfd)4$jRaFfRZEkvw3Hh8o-m(66 zY;b+;MG&Jz$0Vni|8fpYVKj&{ullwZyBsxjhO3<9!s>kcCUAGlt5Fx{KvwYNK0V7- zfdVo>J?zO~Qb2Yihd$|bEn_hE3KVtFT@((~AP6RXuoG5}i9`ZiALF zi<;=}7J4|dPd;l&s7$KCNmA>kPzS~BDGcThrrrIq-~KnpRNL}jFl=S9yJn6$d)xJm zse=v5z{#COr>2KhG88;Ob0J(wUfuIZCY_MAW`yo=bNok6cEFvS#*Q|mO#C?byPZF$ zdQhd`-Z_b0eFIJ!LJo;ucy6nLaOXAY{tqVgOrQ0>h*Qzc{FpF^Tr9?J)Am|S+7owY zZBuPpH1Xiv*6^8TY4>CCu*yg@%SaScbr&U0#AGs>K(=6@P0=}6>r#=4gToDsRUy_=%NS|%@eS1Wyb@x-=VbGX zh~~=^;K=;E+_g^asjcOv#uQ^=0lpPDCcYb}9OEgSuNoYy$HHKd zsFut~w&7m#R(d4(WjZw~58^-DR}-|*esPu@cv8-um>sdVD|)4P;(z@wr2QB@KaSkR zB58hEA9?KE7owb;ndQ&fLwCtwc+lY~Hrl~6J20!Hn0|Ikw+L8&v?WikH4kS zI_#ke8;1{^eP{xdI(q)5!za%e%NdiiP2_~+x5jb@kF!TmU7|%+`nN{G>}^U(XaZ_r z9PZ;FNWh_O4-m=rr{zxka3q;u>g9Pv3$K?xkIRE^SHrrHD~=&ksYB-cC&A^_qOAf= msL>^>=HFo*Tz(VNc)bInh|^$_iS`ld^}os`%k4YAJN{qPc3{N- delta 6545 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 From 46a1191bd628074717731f4f721a2442731df9af Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 7 Apr 2021 17:34:32 +0200 Subject: [PATCH 06/41] Add FriendshipInvitation model And its associations with the user model --- Gemfile | 7 +- Gemfile.lock | 33 +++++++-- app/models/friendship_invitation.rb | 4 ++ app/models/user.rb | 2 + ...406130956_create_friendship_invitations.rb | 14 ++++ ..._default_value_to_friendship_invitation.rb | 5 ++ db/schema.rb | 14 +++- spec/models/friendship_invitation_spec.rb | 8 +++ spec/models/user_spec.rb | 8 +++ spec/rails_helper.rb | 71 +++++++++++++++++++ spec/spec_helper.rb | 6 +- 11 files changed, 158 insertions(+), 14 deletions(-) create mode 100644 app/models/friendship_invitation.rb create mode 100644 db/migrate/20210406130956_create_friendship_invitations.rb create mode 100644 db/migrate/20210406161314_add_confirmed_default_value_to_friendship_invitation.rb create mode 100644 spec/models/friendship_invitation_spec.rb create mode 100644 spec/models/user_spec.rb create mode 100644 spec/rails_helper.rb diff --git a/Gemfile b/Gemfile index 6e976258a2..7d74ff8ba2 100644 --- a/Gemfile +++ b/Gemfile @@ -40,12 +40,17 @@ gem 'bootsnap', '>= 1.1.0', require: false gem 'devise' group :development, :test do + # Strategies for cleaning databases to ensure a clean slate for testing. + gem 'database_cleaner', '~> 2.0', '>= 2.0.1' + # install rspec rails + gem 'rspec-rails', '~> 5.0', '>= 5.0.1' # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: %i[mri mingw x64_mingw] end group :test do gem 'rspec' + gem 'shoulda-matchers', '~> 3.1', '>= 3.1.1' end group :development do @@ -53,7 +58,7 @@ group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'web-console', '>= 3.3.0' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring - gem 'rubocop' + gem 'rubocop', '~> 0.92.0' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end diff --git a/Gemfile.lock b/Gemfile.lock index 6e7c7235cb..86f7829656 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -72,6 +72,12 @@ GEM coffee-script-source (1.12.2) concurrent-ruby (1.1.8) crass (1.0.6) + database_cleaner (2.0.1) + database_cleaner-active_record (~> 2.0.0) + database_cleaner-active_record (2.0.0) + activerecord (>= 5.a) + database_cleaner-core (~> 2.0.0) + database_cleaner-core (2.0.1) devise (4.7.3) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -169,16 +175,24 @@ GEM rspec-mocks (3.10.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.10.0) + rspec-rails (5.0.1) + actionpack (>= 5.2) + activesupport (>= 5.2) + railties (>= 5.2) + rspec-core (~> 3.10) + rspec-expectations (~> 3.10) + rspec-mocks (~> 3.10) + rspec-support (~> 3.10) rspec-support (3.10.2) - rubocop (1.12.1) + rubocop (0.92.0) parallel (~> 1.10) - parser (>= 3.0.0.0) + parser (>= 2.7.1.5) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) + regexp_parser (>= 1.7) rexml - rubocop-ast (>= 1.2.0, < 2.0) + rubocop-ast (>= 0.5.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) + unicode-display_width (>= 1.4.0, < 2.0) rubocop-ast (1.4.1) parser (>= 2.7.1.5) ruby-progressbar (1.11.0) @@ -194,6 +208,8 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) + shoulda-matchers (3.1.3) + activesupport (>= 4.0.0) spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) @@ -217,7 +233,7 @@ GEM tzinfo (>= 1.0.0) uglifier (4.2.0) execjs (>= 0.3.0, < 3) - unicode-display_width (2.0.0) + unicode-display_width (1.7.0) warden (1.2.9) rack (>= 2.0.9) web-console (4.1.0) @@ -238,6 +254,7 @@ DEPENDENCIES bootsnap (>= 1.1.0) byebug coffee-rails (~> 4.2) + database_cleaner (~> 2.0, >= 2.0.1) devise jbuilder (~> 2.5) listen (>= 3.0.5, < 3.2) @@ -245,8 +262,10 @@ DEPENDENCIES puma (~> 3.12) rails (~> 6.0.3.5) rspec - rubocop + rspec-rails (~> 5.0, >= 5.0.1) + rubocop (~> 0.92.0) sass-rails (~> 5.0) + shoulda-matchers (~> 3.1, >= 3.1.1) spring spring-watcher-listen (~> 2.0.0) turbolinks (~> 5) diff --git a/app/models/friendship_invitation.rb b/app/models/friendship_invitation.rb new file mode 100644 index 0000000000..03c762b275 --- /dev/null +++ b/app/models/friendship_invitation.rb @@ -0,0 +1,4 @@ +class FriendshipInvitation < ApplicationRecord + belongs_to :inviter, class_name: 'User', foreign_key: 'inviter_id' + belongs_to :invitee, class_name: 'User', foreign_key: 'invitee_id' +end diff --git a/app/models/user.rb b/app/models/user.rb index e97f1363c0..6e95edfdba 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -9,4 +9,6 @@ class User < ApplicationRecord has_many :posts has_many :comments, dependent: :destroy has_many :likes, dependent: :destroy + has_many :received_invitations, class_name: 'FriendshipInvitation', foreign_key: 'invitee_id' + has_many :sent_invitations, class_name: 'FriendshipInvitation', foreign_key: 'inviter_id' end diff --git a/db/migrate/20210406130956_create_friendship_invitations.rb b/db/migrate/20210406130956_create_friendship_invitations.rb new file mode 100644 index 0000000000..7fd5addd67 --- /dev/null +++ b/db/migrate/20210406130956_create_friendship_invitations.rb @@ -0,0 +1,14 @@ +class CreateFriendshipInvitations < ActiveRecord::Migration[6.0] + def change + create_table :friendship_invitations do |t| + t.references :inviter, null: false, index: true + t.references :invitee, null: false, index: true + t.boolean :confirmed + + t.timestamps + end + + add_foreign_key :friendship_invitations, :users, column: 'inviter_id' + add_foreign_key :friendship_invitations, :users, column: 'invitee_id' + end +end diff --git a/db/migrate/20210406161314_add_confirmed_default_value_to_friendship_invitation.rb b/db/migrate/20210406161314_add_confirmed_default_value_to_friendship_invitation.rb new file mode 100644 index 0000000000..1432e929f3 --- /dev/null +++ b/db/migrate/20210406161314_add_confirmed_default_value_to_friendship_invitation.rb @@ -0,0 +1,5 @@ +class AddConfirmedDefaultValueToFriendshipInvitation < ActiveRecord::Migration[6.0] + def change + change_column_default :friendship_invitations, :confirmed, false + end +end diff --git a/db/schema.rb b/db/schema.rb index c796b78b5d..11a95287b9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_02_04_165841) do +ActiveRecord::Schema.define(version: 2021_04_06_161314) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -25,6 +25,16 @@ t.index ["user_id"], name: "index_comments_on_user_id" end + create_table "friendship_invitations", force: :cascade do |t| + t.bigint "inviter_id", null: false + t.bigint "invitee_id", null: false + t.boolean "confirmed", default: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["invitee_id"], name: "index_friendship_invitations_on_invitee_id" + t.index ["inviter_id"], name: "index_friendship_invitations_on_inviter_id" + end + create_table "likes", force: :cascade do |t| t.integer "post_id" t.integer "user_id" @@ -54,4 +64,6 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + add_foreign_key "friendship_invitations", "users", column: "invitee_id" + add_foreign_key "friendship_invitations", "users", column: "inviter_id" end diff --git a/spec/models/friendship_invitation_spec.rb b/spec/models/friendship_invitation_spec.rb new file mode 100644 index 0000000000..d7687ffd9d --- /dev/null +++ b/spec/models/friendship_invitation_spec.rb @@ -0,0 +1,8 @@ +require 'rails_helper' + +RSpec.describe FriendshipInvitation, type: :model do + context 'Associations' do + it { should belong_to(:inviter) } + it { should belong_to(:invitee) } + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb new file mode 100644 index 0000000000..ddc1626e1d --- /dev/null +++ b/spec/models/user_spec.rb @@ -0,0 +1,8 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + context 'Associations' do + it { should have_many(:received_invitations) } + it { should have_many(:sent_invitations) } + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb new file mode 100644 index 0000000000..6f78d82cc4 --- /dev/null +++ b/spec/rails_helper.rb @@ -0,0 +1,71 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../config/environment', __dir__) +# Prevent database truncation if the environment is production +abort('The Rails environment is running in production mode!') if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, type: :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end + +Shoulda::Matchers.configure do |config| + config.integrate do |with| + with.test_framework :rspec + with.library :rails + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a403ac5360..15a38725be 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,4 +1,4 @@ -# This file was generated by the `rspec --init` command. Conventionally, all +# This file was generated by the `rails generate rspec:install` command. Conventionally, all # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. # The generated `.rspec` file contains `--require spec_helper` which will cause # this file to always be loaded, without a need to explicitly require it in any @@ -65,10 +65,6 @@ # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode # config.disable_monkey_patching! # - # # This setting enables warnings. It's recommended, but in some cases may - # # be too noisy due to issues in dependencies. - # config.warnings = true - # # # Many RSpec users commonly either run the entire suite or an individual # # file, and it's useful to allow more verbose output when running an # # individual spec file. From d02b21f611e4b60e4a5dfa22f2460d8f3dc6f33e Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Thu, 8 Apr 2021 16:19:50 +0200 Subject: [PATCH 07/41] Add create and destroy action on FriendshipInvitations --- .../stylesheets/friendship_invitations.scss | 3 +++ .../friendship_invitations_controller.rb | 26 +++++++++++++++++++ app/helpers/friendship_invitations_helper.rb | 2 ++ .../friendship_invitations/create.html.erb | 2 ++ .../friendship_invitations/destroy.html.erb | 2 ++ config/routes.rb | 2 ++ .../friendship_invitations_helper_spec.rb | 15 +++++++++++ spec/requests/friendship_invitations_spec.rb | 18 +++++++++++++ .../create.html.erb_spec.rb | 5 ++++ .../destroy.html.erb_spec.rb | 5 ++++ 10 files changed, 80 insertions(+) create mode 100644 app/assets/stylesheets/friendship_invitations.scss create mode 100644 app/controllers/friendship_invitations_controller.rb create mode 100644 app/helpers/friendship_invitations_helper.rb create mode 100644 app/views/friendship_invitations/create.html.erb create mode 100644 app/views/friendship_invitations/destroy.html.erb create mode 100644 spec/helpers/friendship_invitations_helper_spec.rb create mode 100644 spec/requests/friendship_invitations_spec.rb create mode 100644 spec/views/friendship_invitations/create.html.erb_spec.rb create mode 100644 spec/views/friendship_invitations/destroy.html.erb_spec.rb diff --git a/app/assets/stylesheets/friendship_invitations.scss b/app/assets/stylesheets/friendship_invitations.scss new file mode 100644 index 0000000000..3fba4cb317 --- /dev/null +++ b/app/assets/stylesheets/friendship_invitations.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the friendship_invitations controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/friendship_invitations_controller.rb b/app/controllers/friendship_invitations_controller.rb new file mode 100644 index 0000000000..01a178fd7b --- /dev/null +++ b/app/controllers/friendship_invitations_controller.rb @@ -0,0 +1,26 @@ +class FriendshipInvitationsController < ApplicationController + def create + invitation = FriendshipInvitation.new(invitation_params) + if invitation.save + redirect_to users_path, notice: 'Invitation sent' + else + flash.now.alert = 'Error' + render users_path + end + end + + def destroy + if @invitation.destroy + redirect_to users_path, notice: 'Friendship canceled' + else + flash.now.alert = 'Error' + render users_path + end + end + + private + + def invitation_params + params.require(:invitation).permit(:inviter_id, :invitee_id) + end +end diff --git a/app/helpers/friendship_invitations_helper.rb b/app/helpers/friendship_invitations_helper.rb new file mode 100644 index 0000000000..a67691d390 --- /dev/null +++ b/app/helpers/friendship_invitations_helper.rb @@ -0,0 +1,2 @@ +module FriendshipInvitationsHelper +end diff --git a/app/views/friendship_invitations/create.html.erb b/app/views/friendship_invitations/create.html.erb new file mode 100644 index 0000000000..9002a6ccaf --- /dev/null +++ b/app/views/friendship_invitations/create.html.erb @@ -0,0 +1,2 @@ +

FriendshipInvitations#create

+

Find me in app/views/friendship_invitations/create.html.erb

diff --git a/app/views/friendship_invitations/destroy.html.erb b/app/views/friendship_invitations/destroy.html.erb new file mode 100644 index 0000000000..0c8e4aa1f3 --- /dev/null +++ b/app/views/friendship_invitations/destroy.html.erb @@ -0,0 +1,2 @@ +

FriendshipInvitations#destroy

+

Find me in app/views/friendship_invitations/destroy.html.erb

diff --git a/config/routes.rb b/config/routes.rb index d34298b198..657245a5df 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,7 @@ Rails.application.routes.draw do + get 'friendship_invitations/create', as: 'send_invitation' + get 'friendship_invitations/destroy' root 'posts#index' devise_for :users diff --git a/spec/helpers/friendship_invitations_helper_spec.rb b/spec/helpers/friendship_invitations_helper_spec.rb new file mode 100644 index 0000000000..57ebad6bf4 --- /dev/null +++ b/spec/helpers/friendship_invitations_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the FriendshipInvitationsHelper. For example: +# +# describe FriendshipInvitationsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe FriendshipInvitationsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/requests/friendship_invitations_spec.rb b/spec/requests/friendship_invitations_spec.rb new file mode 100644 index 0000000000..2ed43b5e35 --- /dev/null +++ b/spec/requests/friendship_invitations_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "FriendshipInvitations", type: :request do + describe "GET /create" do + it "returns http success" do + get "/friendship_invitations/create" + expect(response).to have_http_status(:success) + end + end + + describe "GET /destroy" do + it "returns http success" do + get "/friendship_invitations/destroy" + expect(response).to have_http_status(:success) + end + end + +end diff --git a/spec/views/friendship_invitations/create.html.erb_spec.rb b/spec/views/friendship_invitations/create.html.erb_spec.rb new file mode 100644 index 0000000000..98962ad2c7 --- /dev/null +++ b/spec/views/friendship_invitations/create.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "friendship_invitations/create.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/friendship_invitations/destroy.html.erb_spec.rb b/spec/views/friendship_invitations/destroy.html.erb_spec.rb new file mode 100644 index 0000000000..a9116aef49 --- /dev/null +++ b/spec/views/friendship_invitations/destroy.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "friendship_invitations/destroy.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end From b8e213bec8c4a071f21655e5851c19073431bcf9 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 20 Apr 2021 09:44:34 +0200 Subject: [PATCH 08/41] Add #friends method to User model --- app/models/user.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/models/user.rb b/app/models/user.rb index 6e95edfdba..62be209d9e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -11,4 +11,10 @@ class User < ApplicationRecord has_many :likes, dependent: :destroy has_many :received_invitations, class_name: 'FriendshipInvitation', foreign_key: 'invitee_id' has_many :sent_invitations, class_name: 'FriendshipInvitation', foreign_key: 'inviter_id' + + def friends + friends = received_invitations.map { |invitation| invitation.inviter if invitation.confirmed == true } + friends << sent_invitations.map { |invitation| invitation.invitee if invitation.confirmed == true } + friends.compact + end end From 0e26461d8dd46a7f11cdd6aacff9b5a6463cf0a5 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 20 Apr 2021 10:08:47 +0200 Subject: [PATCH 09/41] Add #pending_invitations and #friendship_requests --- app/models/user.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/models/user.rb b/app/models/user.rb index 62be209d9e..9349f56e22 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -17,4 +17,12 @@ def friends friends << sent_invitations.map { |invitation| invitation.invitee if invitation.confirmed == true } friends.compact end + + def pending_invitations + sent_invitations.map { |invitation| invitation.invitee if invitation.confirmed == false }.compact + end + + def friendship_requests + received_invitations.map { |invitation| invitation.inviter if invitation.confirmed == false }.compact + end end From 316f69e1725a95e44883a5ed7560e64121816662 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 20 Apr 2021 10:47:39 +0200 Subject: [PATCH 10/41] Add #confirm_friend and #frind? methods --- app/models/user.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/models/user.rb b/app/models/user.rb index 9349f56e22..8ddda62201 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -25,4 +25,14 @@ def pending_invitations def friendship_requests received_invitations.map { |invitation| invitation.inviter if invitation.confirmed == false }.compact end + + def confirm_friend(user) + friend_invitation = received_invitations.find { |invitation| invitation.inviter == user } + friend_invitation.confirmed = true + friend_invitation.save + end + + def friend?(user) + friends.include? user + end end From cc51370294ce4576c0da8df3e7c39427b43d12ae Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 20 Apr 2021 16:10:48 +0200 Subject: [PATCH 11/41] Fix #friends method --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 8ddda62201..6bb77894c6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -14,7 +14,7 @@ class User < ApplicationRecord def friends friends = received_invitations.map { |invitation| invitation.inviter if invitation.confirmed == true } - friends << sent_invitations.map { |invitation| invitation.invitee if invitation.confirmed == true } + friends += sent_invitations.map { |invitation| invitation.invitee if invitation.confirmed == true } friends.compact end From ebfc7a2b7109e293d84e8b2fe34a02bb686f3d04 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 21 Apr 2021 13:30:11 +0200 Subject: [PATCH 12/41] Add invite to friendship button --- app/assets/stylesheets/custom.scss | 27 +++++++++++++++++++++++++++ app/helpers/user_helper.rb | 13 +++++++++++++ app/views/users/_user.html.erb | 1 + app/views/users/show.html.erb | 5 ++++- config/routes.rb | 2 +- 5 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 app/helpers/user_helper.rb diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index aa50459d37..a1c99b95ad 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -347,3 +347,30 @@ form { width: 50%; } } + +.button_to { + display: inline-block; + width: fit-content; + + input[type="submit"] { + padding: 8px; + width: fit-content; + border: none; + border-radius: 4px; + background-color: $primary-color-dark; + color: $primary-color-light; + text-transform: uppercase; + font-weight: 900; + } +} + +.pending_badge { + padding: 8px; + width: fit-content; + border: none; + border-radius: 4px; + background-color: $divider-color; + color: $primary-color-text; + font-size: .8rem; + text-transform: uppercase; +} \ No newline at end of file diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb new file mode 100644 index 0000000000..1261bb0a54 --- /dev/null +++ b/app/helpers/user_helper.rb @@ -0,0 +1,13 @@ +module UserHelper + def invite_to_friendship_btn(user) + return if user == current_user or current_user.friend? user + + if current_user.pending_invitations.include? user + content_tag :span, 'Pending request', class: 'pending_badge' + else + button_to 'Invite to friendship',\ + send_invitation_path,\ + params: { invitation: { inviter_id: current_user.id, invitee_id: user.id } } + end + end +end diff --git a/app/views/users/_user.html.erb b/app/views/users/_user.html.erb index e03c4beb3f..60afcb9213 100644 --- a/app/views/users/_user.html.erb +++ b/app/views/users/_user.html.erb @@ -3,4 +3,5 @@ <%= link_to 'See Profile', user_path(user), class: 'profile-link' %> + <%= invite_to_friendship_btn user %> \ No newline at end of file diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index e9919805de..9656cf4f41 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -1,5 +1,8 @@
-

<%= "Name: #{@user.name}" %>

+

+ <%= "Name: #{@user.name}" %> + <%= invite_to_friendship_btn @user %> +

Recent posts:

    diff --git a/config/routes.rb b/config/routes.rb index 657245a5df..95c76cc2be 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,6 @@ Rails.application.routes.draw do - get 'friendship_invitations/create', as: 'send_invitation' + post 'friendship_invitations/create', as: 'send_invitation' get 'friendship_invitations/destroy' root 'posts#index' From 34283fc15f85be8621a7d713d95a1482e587b2e1 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Thu, 22 Apr 2021 10:52:47 +0200 Subject: [PATCH 13/41] Add invitations page --- app/assets/stylesheets/custom.scss | 6 ++++-- .../friendship_invitations_controller.rb | 15 +++++++++++++++ app/helpers/friendship_invitations_helper.rb | 5 +++++ .../friendship_invitations/_invitation.html.erb | 7 +++++++ app/views/friendship_invitations/index.html.erb | 5 +++++ app/views/layouts/application.html.erb | 3 +++ config/routes.rb | 3 ++- 7 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 app/views/friendship_invitations/_invitation.html.erb create mode 100644 app/views/friendship_invitations/index.html.erb diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index a1c99b95ad..0936d00a61 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -275,11 +275,11 @@ form { } } -.users-section { +.users-section, .invitations-section { width: 100%; margin: 10px; - .users-list li { + .users-list li, .invitations-list li { margin-bottom: 16px; text-transform: capitalize; font-size: 1.2em; @@ -330,6 +330,7 @@ form { .new_post, .timeline, .users-section, + .invitations-section, .user-section { width: 70%; } @@ -343,6 +344,7 @@ form { .new_post, .timeline, .users-section, + .invitations-section, .user-section { width: 50%; } diff --git a/app/controllers/friendship_invitations_controller.rb b/app/controllers/friendship_invitations_controller.rb index 01a178fd7b..7e6f29542e 100644 --- a/app/controllers/friendship_invitations_controller.rb +++ b/app/controllers/friendship_invitations_controller.rb @@ -1,4 +1,8 @@ class FriendshipInvitationsController < ApplicationController + def index + @invitations = current_user.friendship_requests + end + def create invitation = FriendshipInvitation.new(invitation_params) if invitation.save @@ -9,6 +13,17 @@ def create end end + def update + invitation = current_user.received_invitations.find_by(inviter_id: invitation_params[:inviter_id]) + invitation.confirmed = true + if invitation.save + redirect_to invitations_path, notice: "#{invitation.inviter.name} is your friend now!" + else + flash.now.alert = 'Error' + render users_path + end + end + def destroy if @invitation.destroy redirect_to users_path, notice: 'Friendship canceled' diff --git a/app/helpers/friendship_invitations_helper.rb b/app/helpers/friendship_invitations_helper.rb index a67691d390..da53df83ae 100644 --- a/app/helpers/friendship_invitations_helper.rb +++ b/app/helpers/friendship_invitations_helper.rb @@ -1,2 +1,7 @@ module FriendshipInvitationsHelper + def confirm_friendship_btn(inviter) + button_to 'Confirm friendship',\ + confirm_invitation_path,\ + params: { invitation: { inviter_id: inviter.id, invitee_id: current_user.id } } + end end diff --git a/app/views/friendship_invitations/_invitation.html.erb b/app/views/friendship_invitations/_invitation.html.erb new file mode 100644 index 0000000000..43f3f11c21 --- /dev/null +++ b/app/views/friendship_invitations/_invitation.html.erb @@ -0,0 +1,7 @@ +
  • + Name: <%= invitation.name %> + + <%= link_to 'See Profile', user_path(invitation), class: 'profile-link' %> + + <%= confirm_friendship_btn invitation %> +
  • \ No newline at end of file diff --git a/app/views/friendship_invitations/index.html.erb b/app/views/friendship_invitations/index.html.erb new file mode 100644 index 0000000000..ae894f776e --- /dev/null +++ b/app/views/friendship_invitations/index.html.erb @@ -0,0 +1,5 @@ +
    +
      + <%= render partial: 'invitation', collection: @invitations %> +
    +
    diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index e5fdd63777..c1a0729c15 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -17,6 +17,9 @@ + <% if current_user %> <%= link_to 'Sign out', destroy_user_session_path, method: :delete %> diff --git a/config/routes.rb b/config/routes.rb index 95c76cc2be..4b1422ba1a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,7 @@ Rails.application.routes.draw do - + get 'friendship_invitations', to: 'friendship_invitations#index', as: 'invitations' post 'friendship_invitations/create', as: 'send_invitation' + post 'friendship_invitations/update', to: 'friendship_invitations#update', as: 'confirm_invitation' get 'friendship_invitations/destroy' root 'posts#index' From d84c3d296b859466382958049b82dea83ce1f1ec Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Thu, 22 Apr 2021 21:18:50 +0200 Subject: [PATCH 14/41] Add buttons to reject friendship --- app/assets/stylesheets/custom.scss | 15 +++++++++++++++ .../friendship_invitations_controller.rb | 4 +++- app/helpers/friendship_invitations_helper.rb | 4 ++++ app/helpers/user_helper.rb | 6 ++++++ app/models/user.rb | 7 +++++++ .../friendship_invitations/_invitation.html.erb | 1 + app/views/users/_user.html.erb | 1 + config/routes.rb | 2 +- 8 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index 0936d00a61..37871b9c70 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -375,4 +375,19 @@ form { color: $primary-color-text; font-size: .8rem; text-transform: uppercase; +} + +.un-friend { + padding: 8px; + width: fit-content; + border: none; + border-radius: 4px; + background-color: rgb(255, 103, 103); + color: white; + font-size: .8rem; + text-transform: uppercase; +} + +.un-friend:hover { + background-color: rgb(116, 41, 41); } \ No newline at end of file diff --git a/app/controllers/friendship_invitations_controller.rb b/app/controllers/friendship_invitations_controller.rb index 7e6f29542e..00bf800fa8 100644 --- a/app/controllers/friendship_invitations_controller.rb +++ b/app/controllers/friendship_invitations_controller.rb @@ -25,7 +25,9 @@ def update end def destroy - if @invitation.destroy + user = User.find(params[:id]) + invitation = current_user.friend_invitation user + if invitation.destroy redirect_to users_path, notice: 'Friendship canceled' else flash.now.alert = 'Error' diff --git a/app/helpers/friendship_invitations_helper.rb b/app/helpers/friendship_invitations_helper.rb index da53df83ae..012743d964 100644 --- a/app/helpers/friendship_invitations_helper.rb +++ b/app/helpers/friendship_invitations_helper.rb @@ -4,4 +4,8 @@ def confirm_friendship_btn(inviter) confirm_invitation_path,\ params: { invitation: { inviter_id: inviter.id, invitee_id: current_user.id } } end + + def reject_friendship_btn(inviter) + link_to 'Reject friendship', reject_invitation_path(inviter.id), class: 'un-friend' + end end diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb index 1261bb0a54..d4182c061c 100644 --- a/app/helpers/user_helper.rb +++ b/app/helpers/user_helper.rb @@ -10,4 +10,10 @@ def invite_to_friendship_btn(user) params: { invitation: { inviter_id: current_user.id, invitee_id: user.id } } end end + + def cancel_friendship_btn(user) + return unless current_user.friend? user + + link_to 'Undo friendship', reject_invitation_path(user), method: :delete, class: 'un-friend' + end end diff --git a/app/models/user.rb b/app/models/user.rb index 6bb77894c6..9a169e6889 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -35,4 +35,11 @@ def confirm_friend(user) def friend?(user) friends.include? user end + + def friend_invitation(user) + received_invitation = received_invitations.find { |invitation| invitation if invitation.inviter == user } + return received_invitation unless received_invitation.nil? + + sent_invitations.find { |invitation| invitation if invitation.invitee == user } + end end diff --git a/app/views/friendship_invitations/_invitation.html.erb b/app/views/friendship_invitations/_invitation.html.erb index 43f3f11c21..6015c3f803 100644 --- a/app/views/friendship_invitations/_invitation.html.erb +++ b/app/views/friendship_invitations/_invitation.html.erb @@ -4,4 +4,5 @@ <%= link_to 'See Profile', user_path(invitation), class: 'profile-link' %> <%= confirm_friendship_btn invitation %> + <%= reject_friendship_btn invitation %> \ No newline at end of file diff --git a/app/views/users/_user.html.erb b/app/views/users/_user.html.erb index 60afcb9213..d9f7d9be10 100644 --- a/app/views/users/_user.html.erb +++ b/app/views/users/_user.html.erb @@ -4,4 +4,5 @@ <%= link_to 'See Profile', user_path(user), class: 'profile-link' %> <%= invite_to_friendship_btn user %> + <%= cancel_friendship_btn user %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 4b1422ba1a..ffa7f17e88 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,7 @@ get 'friendship_invitations', to: 'friendship_invitations#index', as: 'invitations' post 'friendship_invitations/create', as: 'send_invitation' post 'friendship_invitations/update', to: 'friendship_invitations#update', as: 'confirm_invitation' - get 'friendship_invitations/destroy' + delete 'friendship_invitations/destroy/:id', to: 'friendship_invitations#destroy', as: 'reject_invitation' root 'posts#index' devise_for :users From 773851b8a2f55b3b50d736ce3fe7811d973c3387 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Thu, 22 Apr 2021 22:26:14 +0200 Subject: [PATCH 15/41] Fix linter errors --- app/assets/stylesheets/custom.scss | 47 +- package-lock.json | 2392 +++++++++++++++++ package.json | 6 +- spec/requests/friendship_invitations_spec.rb | 15 +- .../create.html.erb_spec.rb | 2 +- .../destroy.html.erb_spec.rb | 2 +- 6 files changed, 2430 insertions(+), 34 deletions(-) create mode 100644 package-lock.json diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index 37871b9c70..6fa8a3b204 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -177,7 +177,26 @@ form { text-transform: uppercase; font-weight: 900; } +} + +.button_to { + display: inline-block; + width: fit-content; + + input[type="submit"] { + padding: 8px; + width: fit-content; + border: none; + border-radius: 4px; + background-color: $primary-color-dark; + color: $primary-color-light; + text-transform: uppercase; + font-weight: 900; + } +} +form, +.button_to { input[type="submit"]:hover { background-color: $primary-color; color: #fff; @@ -275,11 +294,13 @@ form { } } -.users-section, .invitations-section { +.users-section, +.invitations-section { width: 100%; margin: 10px; - .users-list li, .invitations-list li { + .users-list li, + .invitations-list li { margin-bottom: 16px; text-transform: capitalize; font-size: 1.2em; @@ -350,22 +371,6 @@ form { } } -.button_to { - display: inline-block; - width: fit-content; - - input[type="submit"] { - padding: 8px; - width: fit-content; - border: none; - border-radius: 4px; - background-color: $primary-color-dark; - color: $primary-color-light; - text-transform: uppercase; - font-weight: 900; - } -} - .pending_badge { padding: 8px; width: fit-content; @@ -373,7 +378,7 @@ form { border-radius: 4px; background-color: $divider-color; color: $primary-color-text; - font-size: .8rem; + font-size: 0.8rem; text-transform: uppercase; } @@ -384,10 +389,10 @@ form { border-radius: 4px; background-color: rgb(255, 103, 103); color: white; - font-size: .8rem; + font-size: 0.8rem; text-transform: uppercase; } .un-friend:hover { background-color: rgb(116, 41, 41); -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..b5aa8cd34a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2392 @@ +{ + "name": "ror_social_scaffold", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", + "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "dev": true + }, + "@babel/core": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz", + "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.16", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.13.14", + "@babel/helpers": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "dev": true, + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz", + "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.17", + "@babel/types": "^7.13.17" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz", + "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.16", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.16", + "@babel/types": "^7.13.17", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz", + "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", + "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", + "dev": true, + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "dev": true, + "requires": { + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" + } + }, + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/minimist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true + }, + "ajv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", + "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.16.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", + "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001214", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.719", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001214", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", + "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==", + "dev": true + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "electron-to-chromium": { + "version": "1.3.719", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.719.tgz", + "integrity": "sha512-heM78GKSqrIzO9Oz0/y22nTBN7bqSP1Pla2SyU9DiSnQD+Ea9SyyN5RWWlgqsqeBLNDkSlE9J9EHFmdMPzxB/g==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "known-css-properties": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", + "dev": true + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", + "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "resolve": "^1.20.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "requires": { + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", + "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, + "requires": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + } + }, + "remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, + "remark-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylelint": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.12.0.tgz", + "integrity": "sha512-P8O1xDy41B7O7iXaSlW+UuFbE5+ZWQDb61ndGDxKIt36fMH50DtlQTbwLpFLf8DikceTAb3r6nPrRv30wBlzXw==", + "dev": true, + "requires": { + "@stylelint/postcss-css-in-js": "^0.37.2", + "@stylelint/postcss-markdown": "^0.36.2", + "autoprefixer": "^9.8.6", + "balanced-match": "^1.0.0", + "chalk": "^4.1.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.3.1", + "execall": "^2.0.0", + "fast-glob": "^3.2.5", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.2", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.21.0", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.2", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.35", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.4", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.2", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^6.0.7", + "v8-compile-cache": "^2.2.0", + "write-file-atomic": "^3.0.3" + } + }, + "stylelint-config-recommended": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-4.0.0.tgz", + "integrity": "sha512-sgna89Ng+25Hr9kmmaIxpGWt2LStVm1xf1807PdcWasiPDaOTkOHRL61sINw0twky7QMzafCGToGDnHT/kTHtQ==", + "dev": true + }, + "stylelint-config-standard": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-21.0.0.tgz", + "integrity": "sha512-Yf6mx5oYEbQQJxWuW7X3t1gcxqbUx52qC9SMS3saC2ruOVYEyqmr5zSW6k3wXflDjjFrPhar3kp68ugRopmlzg==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^4.0.0" + } + }, + "stylelint-csstree-validator": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/stylelint-csstree-validator/-/stylelint-csstree-validator-1.9.0.tgz", + "integrity": "sha512-fVbtWDEWzux/bZSPBk9tD/bvyc8bSmb52BvUDjcduOzXqKqOyFHUvFayVr9ic88l8KJEVV0Ujab9ah5oTdX4Uw==", + "dev": true, + "requires": { + "css-tree": "^1.0.0" + } + }, + "stylelint-scss": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.19.0.tgz", + "integrity": "sha512-Ic5bsmpS4wVucOw44doC1Yi9f5qbeVL4wPFiEOaUElgsOuLEN6Ofn/krKI8BeNL2gAn53Zu+IcVV4E345r6rBw==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "table": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.3.2.tgz", + "integrity": "sha512-I9/Ca6Huf2oxFag7crD0DhA+arIdfLtWunSn0NIXSzjtUlDgIBGVZY7SsMkNPNT3Psd/z4gza0nuEpmra9eRbg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unist-util-find-all-after": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 0cb8e1ac37..7471b522ea 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "private": true, "dependencies": {}, "devDependencies": { - "stylelint": "^13.3.3", - "stylelint-config-standard": "^20.0.0", + "stylelint": "^13.12.0", + "stylelint-config-standard": "^21.0.0", "stylelint-csstree-validator": "^1.9.0", - "stylelint-scss": "^3.17.2" + "stylelint-scss": "^3.19.0" } } diff --git a/spec/requests/friendship_invitations_spec.rb b/spec/requests/friendship_invitations_spec.rb index 2ed43b5e35..73dafb6a7f 100644 --- a/spec/requests/friendship_invitations_spec.rb +++ b/spec/requests/friendship_invitations_spec.rb @@ -1,18 +1,17 @@ require 'rails_helper' -RSpec.describe "FriendshipInvitations", type: :request do - describe "GET /create" do - it "returns http success" do - get "/friendship_invitations/create" +RSpec.describe 'FriendshipInvitations', type: :request do + describe 'GET /create' do + it 'returns http success' do + get '/friendship_invitations/create' expect(response).to have_http_status(:success) end end - describe "GET /destroy" do - it "returns http success" do - get "/friendship_invitations/destroy" + describe 'GET /destroy' do + it 'returns http success' do + get '/friendship_invitations/destroy' expect(response).to have_http_status(:success) end end - end diff --git a/spec/views/friendship_invitations/create.html.erb_spec.rb b/spec/views/friendship_invitations/create.html.erb_spec.rb index 98962ad2c7..d7d9231d06 100644 --- a/spec/views/friendship_invitations/create.html.erb_spec.rb +++ b/spec/views/friendship_invitations/create.html.erb_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -RSpec.describe "friendship_invitations/create.html.erb", type: :view do +RSpec.describe 'friendship_invitations/create.html.erb', type: :view do pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/views/friendship_invitations/destroy.html.erb_spec.rb b/spec/views/friendship_invitations/destroy.html.erb_spec.rb index a9116aef49..aac18849f2 100644 --- a/spec/views/friendship_invitations/destroy.html.erb_spec.rb +++ b/spec/views/friendship_invitations/destroy.html.erb_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -RSpec.describe "friendship_invitations/destroy.html.erb", type: :view do +RSpec.describe 'friendship_invitations/destroy.html.erb', type: :view do pending "add some examples to (or delete) #{__FILE__}" end From fc71a59180075abf23f84adab5feb7dccaa2ca76 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Fri, 23 Apr 2021 16:48:22 +0200 Subject: [PATCH 16/41] Modify #timeline_posts method It is modified to return only user's posts or his friends posts --- app/controllers/posts_controller.rb | 3 ++- spec/requests/friendship_invitations_spec.rb | 16 ---------------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 0062aebe55..1cb4cbd511 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -20,7 +20,8 @@ def create private def timeline_posts - @timeline_posts ||= Post.all.ordered_by_most_recent.includes(:user) + posts ||= Post.all.ordered_by_most_recent.includes(:user) + @timeline_posts = posts.select { |post| current_user == post.user or current_user.friends.include? post.user } end def post_params diff --git a/spec/requests/friendship_invitations_spec.rb b/spec/requests/friendship_invitations_spec.rb index 73dafb6a7f..63f198bccf 100644 --- a/spec/requests/friendship_invitations_spec.rb +++ b/spec/requests/friendship_invitations_spec.rb @@ -1,17 +1 @@ require 'rails_helper' - -RSpec.describe 'FriendshipInvitations', type: :request do - describe 'GET /create' do - it 'returns http success' do - get '/friendship_invitations/create' - expect(response).to have_http_status(:success) - end - end - - describe 'GET /destroy' do - it 'returns http success' do - get '/friendship_invitations/destroy' - expect(response).to have_http_status(:success) - end - end -end From f60a3af51563058a18613e715df635605b532866 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Fri, 23 Apr 2021 17:24:29 +0200 Subject: [PATCH 17/41] Move sign in and sign out logic to helpers --- app/helpers/application_helper.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ea52901dfe..2111ea5dea 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,4 +1,12 @@ module ApplicationHelper + def sign_in_or_sign_out + if current_user + link_to 'Sign out', destroy_user_session_path, method: :delete + else + link_to 'Sign in', user_session_path + end + end + def menu_link_to(link_text, link_path) class_name = current_page?(link_path) ? 'menu-item active' : 'menu-item' From 106a95b695341f648d81ae897d3fd72779a501a2 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Fri, 23 Apr 2021 17:50:50 +0200 Subject: [PATCH 18/41] Move notifications logic in the helpers' module --- app/helpers/application_helper.rb | 8 ++++++++ app/views/layouts/application.html.erb | 17 ++--------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2111ea5dea..066951557a 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -7,6 +7,14 @@ def sign_in_or_sign_out end end + def notifications + if notice.present? + content_tag :div, content_tag(:div, notice), class: 'notice' + elsif alert.present? + content_tag :div, content_tag(:div, alert), class: 'alert' + end + end + def menu_link_to(link_text, link_path) class_name = current_page?(link_path) ? 'menu-item active' : 'menu-item' diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index c1a0729c15..9208df9452 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -21,22 +21,9 @@ <%= menu_link_to 'Invitations', invitations_path %> - <% if current_user %> - <%= link_to 'Sign out', destroy_user_session_path, method: :delete %> - <% else %> - <%= link_to 'Sign in', user_session_path %> - <% end %> + <%= sign_in_or_sign_out %> - <% if notice.present? %> -
    -

    <%= notice %>

    -
    - <% end %> - <% if alert.present? %> -
    -

    <%= alert %>

    -
    - <% end %> + <%= notifications %>
    <%= yield %>
    From 68b9ad14cd0bbb56afab6285a9bf6d3ae785f354 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 5 May 2021 10:10:00 +0200 Subject: [PATCH 19/41] Install and configure gems --- Gemfile.lock | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 86f7829656..1c23bb8af2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -56,6 +56,8 @@ GEM minitest (~> 5.1) tzinfo (~> 1.1) zeitwerk (~> 2.2, >= 2.2.2) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) ast (2.4.2) bcrypt (3.1.16) bindex (0.8.1) @@ -63,6 +65,15 @@ GEM msgpack (~> 1.0) builder (3.2.4) byebug (11.1.3) + capybara (3.35.3) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) + childprocess (3.0.0) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) @@ -72,8 +83,6 @@ GEM coffee-script-source (1.12.2) concurrent-ruby (1.1.8) crass (1.0.6) - database_cleaner (2.0.1) - database_cleaner-active_record (~> 2.0.0) database_cleaner-active_record (2.0.0) activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) @@ -122,6 +131,7 @@ GEM ast (~> 2.4.1) pg (1.2.3) pg (1.2.3-x64-mingw32) + public_suffix (4.0.6) puma (3.12.6) racc (1.5.2) rack (2.2.3) @@ -163,10 +173,6 @@ GEM actionpack (>= 5.0) railties (>= 5.0) rexml (3.2.4) - rspec (3.10.0) - rspec-core (~> 3.10.0) - rspec-expectations (~> 3.10.0) - rspec-mocks (~> 3.10.0) rspec-core (3.10.1) rspec-support (~> 3.10.0) rspec-expectations (3.10.1) @@ -197,6 +203,7 @@ GEM parser (>= 2.7.1.5) ruby-progressbar (1.11.0) ruby_dep (1.5.0) + rubyzip (2.3.0) sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) @@ -208,6 +215,9 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) + selenium-webdriver (3.142.7) + childprocess (>= 0.5, < 4.0) + rubyzip (>= 1.2.2) shoulda-matchers (3.1.3) activesupport (>= 4.0.0) spring (2.1.1) @@ -244,6 +254,8 @@ GEM websocket-driver (0.7.3) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) + xpath (3.2.0) + nokogiri (~> 1.8) zeitwerk (2.4.2) PLATFORMS @@ -253,18 +265,19 @@ PLATFORMS DEPENDENCIES bootsnap (>= 1.1.0) byebug + capybara (>= 2.15) coffee-rails (~> 4.2) - database_cleaner (~> 2.0, >= 2.0.1) + database_cleaner-active_record devise jbuilder (~> 2.5) listen (>= 3.0.5, < 3.2) pg (>= 0.18, < 2.0) puma (~> 3.12) rails (~> 6.0.3.5) - rspec rspec-rails (~> 5.0, >= 5.0.1) rubocop (~> 0.92.0) sass-rails (~> 5.0) + selenium-webdriver shoulda-matchers (~> 3.1, >= 3.1.1) spring spring-watcher-listen (~> 2.0.0) From a2146d54a40d112fae1a7f810c4f4bc310aca008 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 5 May 2021 10:12:45 +0200 Subject: [PATCH 20/41] Add tests for user, post, and like models --- Gemfile | 9 ++++++--- app/models/post.rb | 4 ++-- .../friendship_invitations_helper_spec.rb | 15 --------------- spec/models/like_spec.rb | 11 +++++++++++ spec/models/post_spec.rb | 18 ++++++++++++++++++ spec/models/user_spec.rb | 10 +++++++++- spec/rails_helper.rb | 2 +- spec/requests/friendship_invitations_spec.rb | 1 - spec/spec_helper.rb | 1 + .../create.html.erb_spec.rb | 5 ----- .../destroy.html.erb_spec.rb | 5 ----- 11 files changed, 48 insertions(+), 33 deletions(-) delete mode 100644 spec/helpers/friendship_invitations_helper_spec.rb create mode 100644 spec/models/like_spec.rb create mode 100644 spec/models/post_spec.rb delete mode 100644 spec/requests/friendship_invitations_spec.rb delete mode 100644 spec/views/friendship_invitations/create.html.erb_spec.rb delete mode 100644 spec/views/friendship_invitations/destroy.html.erb_spec.rb diff --git a/Gemfile b/Gemfile index 7d74ff8ba2..4f3f33e2a2 100644 --- a/Gemfile +++ b/Gemfile @@ -40,8 +40,6 @@ gem 'bootsnap', '>= 1.1.0', require: false gem 'devise' group :development, :test do - # Strategies for cleaning databases to ensure a clean slate for testing. - gem 'database_cleaner', '~> 2.0', '>= 2.0.1' # install rspec rails gem 'rspec-rails', '~> 5.0', '>= 5.0.1' # Call 'byebug' anywhere in the code to stop execution and get a debugger console @@ -49,7 +47,12 @@ group :development, :test do end group :test do - gem 'rspec' + # Adds support for Capybara system testing and selenium driver + gem 'capybara', '>= 2.15' + # Strategies for cleaning databases to ensure a clean slate for testing. + gem 'database_cleaner-active_record' + gem 'selenium-webdriver' + # Easy installation and use of web drivers to run system tests with browsers gem 'shoulda-matchers', '~> 3.1', '>= 3.1.1' end diff --git a/app/models/post.rb b/app/models/post.rb index 39ebdc54cb..74c2bf124d 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1,6 +1,6 @@ class Post < ApplicationRecord - validates :content, presence: true, length: { maximum: 1000, - too_long: '1000 characters in post is the maximum allowed.' } + validates :content, presence: true, + length: { maximum: 1000, too_long: '1000 characters in post is the maximum allowed.' } belongs_to :user diff --git a/spec/helpers/friendship_invitations_helper_spec.rb b/spec/helpers/friendship_invitations_helper_spec.rb deleted file mode 100644 index 57ebad6bf4..0000000000 --- a/spec/helpers/friendship_invitations_helper_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'rails_helper' - -# Specs in this file have access to a helper object that includes -# the FriendshipInvitationsHelper. For example: -# -# describe FriendshipInvitationsHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end -# end -RSpec.describe FriendshipInvitationsHelper, type: :helper do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/models/like_spec.rb b/spec/models/like_spec.rb new file mode 100644 index 0000000000..92926b37f3 --- /dev/null +++ b/spec/models/like_spec.rb @@ -0,0 +1,11 @@ +require 'rails_helper' + +RSpec.describe Like, type: :model do + context 'Validations' do + it { should validate_uniqueness_of(:user_id).scoped_to(:post_id) } + end + context 'Associations' do + it { should belong_to(:user) } + it { should belong_to(:post) } + end +end diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb new file mode 100644 index 0000000000..3ffddbe7ed --- /dev/null +++ b/spec/models/post_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe Post, type: :model do + context 'Validations' do + it { should validate_presence_of(:content) } + it do + should validate_length_of(:content) + .is_at_most(1000) + .with_long_message('1000 characters in post is the maximum allowed.') + end + end + + context 'Associations' do + it { should belong_to(:user) } + it { should have_many(:comments).dependent(:destroy) } + it { should have_many(:likes).dependent(:destroy) } + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index ddc1626e1d..0d9f62b32d 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,7 +1,15 @@ require 'rails_helper' RSpec.describe User, type: :model do - context 'Associations' do + describe 'validations' do + it { should validate_presence_of(:name) } + it { should validate_uniqueness_of(:email).ignoring_case_sensitivity } + it { should validate_length_of(:name).is_at_most(20) } + end + describe 'associations' do + it { should have_many(:posts) } + it { should have_many(:comments).dependent(:destroy) } + it { should have_many(:likes).dependent(:destroy) } it { should have_many(:received_invitations) } it { should have_many(:sent_invitations) } end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 6f78d82cc4..74e76b54d9 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -37,7 +37,7 @@ # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. - config.use_transactional_fixtures = true + config.use_transactional_fixtures = false # You can uncomment this line to turn off ActiveRecord support entirely. # config.use_active_record = false diff --git a/spec/requests/friendship_invitations_spec.rb b/spec/requests/friendship_invitations_spec.rb deleted file mode 100644 index 63f198bccf..0000000000 --- a/spec/requests/friendship_invitations_spec.rb +++ /dev/null @@ -1 +0,0 @@ -require 'rails_helper' diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 15a38725be..d4128f88dd 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,3 +1,4 @@ +require 'capybara/rspec' # This file was generated by the `rails generate rspec:install` command. Conventionally, all # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. # The generated `.rspec` file contains `--require spec_helper` which will cause diff --git a/spec/views/friendship_invitations/create.html.erb_spec.rb b/spec/views/friendship_invitations/create.html.erb_spec.rb deleted file mode 100644 index d7d9231d06..0000000000 --- a/spec/views/friendship_invitations/create.html.erb_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'friendship_invitations/create.html.erb', type: :view do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/views/friendship_invitations/destroy.html.erb_spec.rb b/spec/views/friendship_invitations/destroy.html.erb_spec.rb deleted file mode 100644 index aac18849f2..0000000000 --- a/spec/views/friendship_invitations/destroy.html.erb_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'friendship_invitations/destroy.html.erb', type: :view do - pending "add some examples to (or delete) #{__FILE__}" -end From 5661203d0d4527a27856a7ba0b8470f1784b0497 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Sun, 9 May 2021 13:04:01 +0200 Subject: [PATCH 21/41] Add tests for sign in and sign up functionalities --- app/views/devise/registrations/new.html.erb | 2 +- spec/features/sign_in_spec.rb | 34 ++++++++++++++++ spec/features/sign_up_spec.rb | 26 +++++++++++++ spec/models/comment_spec.rb | 17 ++++++++ spec/rails_helper.rb | 43 ++++++++++++++++++++- spec/spec_helper.rb | 1 - 6 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 spec/features/sign_in_spec.rb create mode 100644 spec/features/sign_up_spec.rb create mode 100644 spec/models/comment_spec.rb diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index cf595d517b..e12d287c88 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -27,7 +27,7 @@
    - <%= f.submit "Sign up" %> + <%= f.submit "SIGN UP" %>
    <% end %> diff --git a/spec/features/sign_in_spec.rb b/spec/features/sign_in_spec.rb new file mode 100644 index 0000000000..a43b60f310 --- /dev/null +++ b/spec/features/sign_in_spec.rb @@ -0,0 +1,34 @@ +require 'rails_helper' + +RSpec.feature 'SignIns', type: :feature do + scenario "is expected to fail if the user doesn't exist" do + visit('/users/sign_in') + within('form') do + fill_in 'Email', with: 'testuser@email.com' + fill_in 'user_password', with: '365214' + end + click_button 'Log in' + expect(page).not_to have_content 'Signed in successfully.' + end + + scenario 'is expected to succeed if the user exists' do + visit('/users/sign_up') + within('form') do + fill_in 'Name', with: 'testuser' + fill_in 'Email', with: 'testuser@email.com' + fill_in 'Password', with: '365214' + fill_in 'Password confirmation', with: '365214' + click_button 'SIGN UP' + end + visit '/' + click_link 'Sign out' + + visit('/users/sign_in') + within('form') do + fill_in 'Email', with: 'testuser@email.com' + fill_in 'user_password', with: '365214' + end + click_button 'Log in' + expect(page).to have_content 'Signed in successfully.' + end +end diff --git a/spec/features/sign_up_spec.rb b/spec/features/sign_up_spec.rb new file mode 100644 index 0000000000..991da6c49a --- /dev/null +++ b/spec/features/sign_up_spec.rb @@ -0,0 +1,26 @@ +require 'rails_helper' + +RSpec.feature 'SignUps', type: :feature do + scenario 'is expected to succeed if all are filled out' do + visit('/users/sign_up') + within('form') do + fill_in 'Name', with: 'First' + fill_in 'Email', with: 'firstuser@email.com' + fill_in 'Password', with: '654321' + fill_in 'Password confirmation', with: '654321' + end + click_button 'SIGN UP' + expect(page).to have_content 'Welcome! You have signed up successfully.' + end + scenario 'is expected to fail if password and password confirmation fields missmatch' do + visit('/users/sign_up') + within('form') do + fill_in 'Name', with: 'First User' + fill_in 'Email', with: 'firstuser@gmail.com' + fill_in 'Password', with: '654321' + fill_in 'Password confirmation', with: '123456' + end + click_button 'SIGN UP' + expect(page).not_to have_content 'Welcome! You have signed up successfully.' + end +end diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb new file mode 100644 index 0000000000..396189b8e0 --- /dev/null +++ b/spec/models/comment_spec.rb @@ -0,0 +1,17 @@ +require 'rails_helper' + +RSpec.describe Comment, type: :model do + context 'Validations' do + it { should validate_presence_of(:content) } + it do + should validate_length_of(:content) + .is_at_most(200) + .with_long_message('200 characters in comment is the maximum allowed.') + end + end + + context 'Associations' do + it { should belong_to(:user) } + it { should belong_to(:post) } + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 74e76b54d9..074f624c67 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -5,6 +5,8 @@ # Prevent database truncation if the environment is production abort('The Rails environment is running in production mode!') if Rails.env.production? require 'rspec/rails' +require 'capybara/rails' +require 'database_cleaner/active_record' # Add additional requires below this line. Rails is not loaded until this point! # Requires supporting ruby files with custom matchers and macros, etc, in @@ -37,7 +39,6 @@ # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. - config.use_transactional_fixtures = false # You can uncomment this line to turn off ActiveRecord support entirely. # config.use_active_record = false @@ -61,6 +62,46 @@ config.filter_rails_from_backtrace! # arbitrary gems may also be filtered via: # config.filter_gems_from_backtrace("gem name") + + config.use_transactional_fixtures = false + + config.before(:suite) do + if config.use_transactional_fixtures? + raise(<<-MSG) + Delete line `config.use_transactional_fixtures = true` from rails_helper.rb + (or set it to false) to prevent uncommitted transactions being used in + JavaScript-dependent specs. + MSG + + end + + DatabaseCleaner.clean_with(:truncation) + end + + config.before(:each) do + DatabaseCleaner.strategy = :transaction + end + + config.before(:each, type: :feature) do + # :rack_test driver's Rack app under test shares database connection + # with the specs, so continue to use transaction strategy for speed. + driver_shares_db_connection_with_specs = Capybara.current_driver == :rack_test + + unless driver_shares_db_connection_with_specs + # Driver is probably for an external browser with an app + # under test that does *not* share a database connection with the + # specs, so use truncation strategy. + DatabaseCleaner.strategy = :truncation + end + end + + config.before(:each) do + DatabaseCleaner.start + end + + config.append_after(:each) do + DatabaseCleaner.clean + end end Shoulda::Matchers.configure do |config| diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d4128f88dd..15a38725be 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,4 +1,3 @@ -require 'capybara/rspec' # This file was generated by the `rails generate rspec:install` command. Conventionally, all # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. # The generated `.rspec` file contains `--require spec_helper` which will cause From 5373b7cc13fc890c165b3fb2ac44ba62e35cf770 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Sun, 9 May 2021 14:12:48 +0200 Subject: [PATCH 22/41] Fix reject friendship link --- app/helpers/friendship_invitations_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/friendship_invitations_helper.rb b/app/helpers/friendship_invitations_helper.rb index 012743d964..70ff7bf904 100644 --- a/app/helpers/friendship_invitations_helper.rb +++ b/app/helpers/friendship_invitations_helper.rb @@ -6,6 +6,6 @@ def confirm_friendship_btn(inviter) end def reject_friendship_btn(inviter) - link_to 'Reject friendship', reject_invitation_path(inviter.id), class: 'un-friend' + link_to 'Reject friendship', reject_invitation_path(inviter.id), class: 'un-friend', method: :delete end end From 32b853ef98d7868721078e13e46f344b771af8bf Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Sun, 9 May 2021 17:03:58 +0200 Subject: [PATCH 23/41] Add reject and confirm friendship to all users --- app/helpers/user_helper.rb | 12 ++++++++++++ app/models/user.rb | 4 ++++ app/views/shared/_confirm_reject_btn.html.erb | 5 +++++ 3 files changed, 21 insertions(+) create mode 100644 app/views/shared/_confirm_reject_btn.html.erb diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb index d4182c061c..8c20aa377d 100644 --- a/app/helpers/user_helper.rb +++ b/app/helpers/user_helper.rb @@ -4,6 +4,8 @@ def invite_to_friendship_btn(user) if current_user.pending_invitations.include? user content_tag :span, 'Pending request', class: 'pending_badge' + elsif current_user.invited_by? user + render partial: 'shared/confirm_reject_btn', locals: { user: user } else button_to 'Invite to friendship',\ send_invitation_path,\ @@ -16,4 +18,14 @@ def cancel_friendship_btn(user) link_to 'Undo friendship', reject_invitation_path(user), method: :delete, class: 'un-friend' end + + def reject_friendship_btn(user) + link_to('Reject Friendship', reject_invitation_path(user), method: :delete, class: 'un-friend') + end + + def confirm_friendship_btn(user) + button_to('Confirm friendship',\ + confirm_invitation_path,\ + params: { invitation: { inviter_id: user.id, invitee_id: current_user.id } }) + end end diff --git a/app/models/user.rb b/app/models/user.rb index 9a169e6889..506cb75837 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -36,6 +36,10 @@ def friend?(user) friends.include? user end + def invited_by?(user) + received_invitations.one? { |invitation| invitation.inviter == user and invitation.confirmed == false } + end + def friend_invitation(user) received_invitation = received_invitations.find { |invitation| invitation if invitation.inviter == user } return received_invitation unless received_invitation.nil? diff --git a/app/views/shared/_confirm_reject_btn.html.erb b/app/views/shared/_confirm_reject_btn.html.erb new file mode 100644 index 0000000000..7f01aa3b9e --- /dev/null +++ b/app/views/shared/_confirm_reject_btn.html.erb @@ -0,0 +1,5 @@ +<%= button_to('Confirm friendship',\ + confirm_invitation_path,\ + params: { invitation: { inviter_id: user.id, invitee_id: current_user.id } }) %> + +<%= link_to('Reject Friendship', reject_invitation_path(user), method: :delete, class: 'un-friend') %> \ No newline at end of file From 315b2ef6d7d25ba2d2aea82da778b6bd921ce0eb Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 11 May 2021 15:10:12 +0200 Subject: [PATCH 24/41] Rename FriendshipInvitation model to Friendship Changes to all implicated files --- ...ontroller.rb => friendships_controller.rb} | 10 +++++----- ...tations_helper.rb => friendship_helper.rb} | 4 ++-- app/helpers/user_helper.rb | 4 ++-- app/models/friendship.rb | 4 ++++ app/models/friendship_invitation.rb | 4 ---- app/models/user.rb | 20 +++++++++---------- .../_invitation.html.erb | 0 .../create.html.erb | 0 .../destroy.html.erb | 0 .../index.html.erb | 0 app/views/shared/_confirm_reject_btn.html.erb | 2 +- config/routes.rb | 8 ++++---- ...e_friendship_invitations_to_friendships.rb | 5 +++++ ...210511092700_rename_friendships_columns.rb | 8 ++++++++ db/schema.rb | 16 +++++++-------- 15 files changed, 49 insertions(+), 36 deletions(-) rename app/controllers/{friendship_invitations_controller.rb => friendships_controller.rb} (64%) rename app/helpers/{friendship_invitations_helper.rb => friendship_helper.rb} (67%) create mode 100644 app/models/friendship.rb delete mode 100644 app/models/friendship_invitation.rb rename app/views/{friendship_invitations => friendships}/_invitation.html.erb (100%) rename app/views/{friendship_invitations => friendships}/create.html.erb (100%) rename app/views/{friendship_invitations => friendships}/destroy.html.erb (100%) rename app/views/{friendship_invitations => friendships}/index.html.erb (100%) create mode 100644 db/migrate/20210511091905_change_friendship_invitations_to_friendships.rb create mode 100644 db/migrate/20210511092700_rename_friendships_columns.rb diff --git a/app/controllers/friendship_invitations_controller.rb b/app/controllers/friendships_controller.rb similarity index 64% rename from app/controllers/friendship_invitations_controller.rb rename to app/controllers/friendships_controller.rb index 00bf800fa8..22a43b3c07 100644 --- a/app/controllers/friendship_invitations_controller.rb +++ b/app/controllers/friendships_controller.rb @@ -1,10 +1,10 @@ -class FriendshipInvitationsController < ApplicationController +class FriendshipsController < ApplicationController def index @invitations = current_user.friendship_requests end def create - invitation = FriendshipInvitation.new(invitation_params) + invitation = Friendship.new(invitation_params) if invitation.save redirect_to users_path, notice: 'Invitation sent' else @@ -14,10 +14,10 @@ def create end def update - invitation = current_user.received_invitations.find_by(inviter_id: invitation_params[:inviter_id]) + invitation = current_user.received_invitations.find_by(user_id: invitation_params[:user_id]) invitation.confirmed = true if invitation.save - redirect_to invitations_path, notice: "#{invitation.inviter.name} is your friend now!" + redirect_to invitations_path, notice: "#{invitation.user.name} is your friend now!" else flash.now.alert = 'Error' render users_path @@ -38,6 +38,6 @@ def destroy private def invitation_params - params.require(:invitation).permit(:inviter_id, :invitee_id) + params.require(:invitation).permit(:user_id, :friend_id) end end diff --git a/app/helpers/friendship_invitations_helper.rb b/app/helpers/friendship_helper.rb similarity index 67% rename from app/helpers/friendship_invitations_helper.rb rename to app/helpers/friendship_helper.rb index 70ff7bf904..3a619be03f 100644 --- a/app/helpers/friendship_invitations_helper.rb +++ b/app/helpers/friendship_helper.rb @@ -1,8 +1,8 @@ -module FriendshipInvitationsHelper +module FriendshipHelper def confirm_friendship_btn(inviter) button_to 'Confirm friendship',\ confirm_invitation_path,\ - params: { invitation: { inviter_id: inviter.id, invitee_id: current_user.id } } + params: { invitation: { user_id: inviter.id, friend_id: current_user.id } } end def reject_friendship_btn(inviter) diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb index 8c20aa377d..bfa4bdfa95 100644 --- a/app/helpers/user_helper.rb +++ b/app/helpers/user_helper.rb @@ -9,7 +9,7 @@ def invite_to_friendship_btn(user) else button_to 'Invite to friendship',\ send_invitation_path,\ - params: { invitation: { inviter_id: current_user.id, invitee_id: user.id } } + params: { invitation: { user_id: current_user.id, friend_id: user.id } } end end @@ -26,6 +26,6 @@ def reject_friendship_btn(user) def confirm_friendship_btn(user) button_to('Confirm friendship',\ confirm_invitation_path,\ - params: { invitation: { inviter_id: user.id, invitee_id: current_user.id } }) + params: { invitation: { user_id: user.id, friend_id: current_user.id } }) end end diff --git a/app/models/friendship.rb b/app/models/friendship.rb new file mode 100644 index 0000000000..65333fb175 --- /dev/null +++ b/app/models/friendship.rb @@ -0,0 +1,4 @@ +class Friendship < ApplicationRecord + belongs_to :user + belongs_to :friend, class_name: 'User', foreign_key: 'friend_id' +end diff --git a/app/models/friendship_invitation.rb b/app/models/friendship_invitation.rb deleted file mode 100644 index 03c762b275..0000000000 --- a/app/models/friendship_invitation.rb +++ /dev/null @@ -1,4 +0,0 @@ -class FriendshipInvitation < ApplicationRecord - belongs_to :inviter, class_name: 'User', foreign_key: 'inviter_id' - belongs_to :invitee, class_name: 'User', foreign_key: 'invitee_id' -end diff --git a/app/models/user.rb b/app/models/user.rb index 506cb75837..495c107103 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -9,25 +9,25 @@ class User < ApplicationRecord has_many :posts has_many :comments, dependent: :destroy has_many :likes, dependent: :destroy - has_many :received_invitations, class_name: 'FriendshipInvitation', foreign_key: 'invitee_id' - has_many :sent_invitations, class_name: 'FriendshipInvitation', foreign_key: 'inviter_id' + has_many :received_invitations, class_name: 'Friendship', foreign_key: 'friend_id' + has_many :sent_invitations, class_name: 'Friendship', foreign_key: 'user_id' def friends - friends = received_invitations.map { |invitation| invitation.inviter if invitation.confirmed == true } - friends += sent_invitations.map { |invitation| invitation.invitee if invitation.confirmed == true } + friends = received_invitations.map { |invitation| invitation.user if invitation.confirmed == true } + friends += sent_invitations.map { |invitation| invitation.friend if invitation.confirmed == true } friends.compact end def pending_invitations - sent_invitations.map { |invitation| invitation.invitee if invitation.confirmed == false }.compact + sent_invitations.map { |invitation| invitation.friend if invitation.confirmed == false }.compact end def friendship_requests - received_invitations.map { |invitation| invitation.inviter if invitation.confirmed == false }.compact + received_invitations.map { |invitation| invitation.user if invitation.confirmed == false }.compact end def confirm_friend(user) - friend_invitation = received_invitations.find { |invitation| invitation.inviter == user } + friend_invitation = received_invitations.find { |invitation| invitation.user == user } friend_invitation.confirmed = true friend_invitation.save end @@ -37,13 +37,13 @@ def friend?(user) end def invited_by?(user) - received_invitations.one? { |invitation| invitation.inviter == user and invitation.confirmed == false } + received_invitations.one? { |invitation| invitation.user == user and invitation.confirmed == false } end def friend_invitation(user) - received_invitation = received_invitations.find { |invitation| invitation if invitation.inviter == user } + received_invitation = received_invitations.find { |invitation| invitation if invitation.user == user } return received_invitation unless received_invitation.nil? - sent_invitations.find { |invitation| invitation if invitation.invitee == user } + sent_invitations.find { |invitation| invitation if invitation.friend == user } end end diff --git a/app/views/friendship_invitations/_invitation.html.erb b/app/views/friendships/_invitation.html.erb similarity index 100% rename from app/views/friendship_invitations/_invitation.html.erb rename to app/views/friendships/_invitation.html.erb diff --git a/app/views/friendship_invitations/create.html.erb b/app/views/friendships/create.html.erb similarity index 100% rename from app/views/friendship_invitations/create.html.erb rename to app/views/friendships/create.html.erb diff --git a/app/views/friendship_invitations/destroy.html.erb b/app/views/friendships/destroy.html.erb similarity index 100% rename from app/views/friendship_invitations/destroy.html.erb rename to app/views/friendships/destroy.html.erb diff --git a/app/views/friendship_invitations/index.html.erb b/app/views/friendships/index.html.erb similarity index 100% rename from app/views/friendship_invitations/index.html.erb rename to app/views/friendships/index.html.erb diff --git a/app/views/shared/_confirm_reject_btn.html.erb b/app/views/shared/_confirm_reject_btn.html.erb index 7f01aa3b9e..2396195b9e 100644 --- a/app/views/shared/_confirm_reject_btn.html.erb +++ b/app/views/shared/_confirm_reject_btn.html.erb @@ -1,5 +1,5 @@ <%= button_to('Confirm friendship',\ confirm_invitation_path,\ - params: { invitation: { inviter_id: user.id, invitee_id: current_user.id } }) %> + params: { invitation: { user_id: user.id, friend_id: current_user.id } }) %> <%= link_to('Reject Friendship', reject_invitation_path(user), method: :delete, class: 'un-friend') %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index ffa7f17e88..85eb1a2fe8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,8 +1,8 @@ Rails.application.routes.draw do - get 'friendship_invitations', to: 'friendship_invitations#index', as: 'invitations' - post 'friendship_invitations/create', as: 'send_invitation' - post 'friendship_invitations/update', to: 'friendship_invitations#update', as: 'confirm_invitation' - delete 'friendship_invitations/destroy/:id', to: 'friendship_invitations#destroy', as: 'reject_invitation' + get 'friendships', to: 'friendships#index', as: 'invitations' + post 'friendship/create', to: 'friendships#create', as: 'send_invitation' + post 'friendship/update', to: 'friendships#update', as: 'confirm_invitation' + delete 'friendship/destroy/:id', to: 'friendships#destroy', as: 'reject_invitation' root 'posts#index' devise_for :users diff --git a/db/migrate/20210511091905_change_friendship_invitations_to_friendships.rb b/db/migrate/20210511091905_change_friendship_invitations_to_friendships.rb new file mode 100644 index 0000000000..e4c5a1745a --- /dev/null +++ b/db/migrate/20210511091905_change_friendship_invitations_to_friendships.rb @@ -0,0 +1,5 @@ +class ChangeFriendshipInvitationsToFriendships < ActiveRecord::Migration[6.0] + def change + rename_table :friendship_invitations, :friendships + end +end diff --git a/db/migrate/20210511092700_rename_friendships_columns.rb b/db/migrate/20210511092700_rename_friendships_columns.rb new file mode 100644 index 0000000000..9be9f63006 --- /dev/null +++ b/db/migrate/20210511092700_rename_friendships_columns.rb @@ -0,0 +1,8 @@ +class RenameFriendshipsColumns < ActiveRecord::Migration[6.0] + def change + change_table(:friendships) do |t| + t.rename :inviter_id, :user_id + t.rename :invitee_id, :friend_id + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 11a95287b9..4ce6bafcae 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2021_04_06_161314) do +ActiveRecord::Schema.define(version: 2021_05_11_092700) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -25,14 +25,14 @@ t.index ["user_id"], name: "index_comments_on_user_id" end - create_table "friendship_invitations", force: :cascade do |t| - t.bigint "inviter_id", null: false - t.bigint "invitee_id", null: false + create_table "friendships", force: :cascade do |t| + t.bigint "user_id", null: false + t.bigint "friend_id", null: false t.boolean "confirmed", default: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false - t.index ["invitee_id"], name: "index_friendship_invitations_on_invitee_id" - t.index ["inviter_id"], name: "index_friendship_invitations_on_inviter_id" + t.index ["friend_id"], name: "index_friendships_on_friend_id" + t.index ["user_id"], name: "index_friendships_on_user_id" end create_table "likes", force: :cascade do |t| @@ -64,6 +64,6 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end - add_foreign_key "friendship_invitations", "users", column: "invitee_id" - add_foreign_key "friendship_invitations", "users", column: "inviter_id" + add_foreign_key "friendships", "users" + add_foreign_key "friendships", "users", column: "friend_id" end From c9fdf6e949e7f5d04cb0eee74c7c9a01846a23fc Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 11 May 2021 15:54:24 +0200 Subject: [PATCH 25/41] Fix associations --- app/controllers/friendships_controller.rb | 2 +- app/models/user.rb | 20 ++++++++++---------- spec/models/friendship_invitation_spec.rb | 8 -------- spec/models/friendship_spec.rb | 8 ++++++++ spec/models/user_spec.rb | 4 ++-- 5 files changed, 21 insertions(+), 21 deletions(-) delete mode 100644 spec/models/friendship_invitation_spec.rb create mode 100644 spec/models/friendship_spec.rb diff --git a/app/controllers/friendships_controller.rb b/app/controllers/friendships_controller.rb index 22a43b3c07..fb105c43f7 100644 --- a/app/controllers/friendships_controller.rb +++ b/app/controllers/friendships_controller.rb @@ -14,7 +14,7 @@ def create end def update - invitation = current_user.received_invitations.find_by(user_id: invitation_params[:user_id]) + invitation = current_user.inverted_friendships.find_by(user_id: invitation_params[:user_id]) invitation.confirmed = true if invitation.save redirect_to invitations_path, notice: "#{invitation.user.name} is your friend now!" diff --git a/app/models/user.rb b/app/models/user.rb index 495c107103..c8a7391899 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -9,25 +9,25 @@ class User < ApplicationRecord has_many :posts has_many :comments, dependent: :destroy has_many :likes, dependent: :destroy - has_many :received_invitations, class_name: 'Friendship', foreign_key: 'friend_id' - has_many :sent_invitations, class_name: 'Friendship', foreign_key: 'user_id' + has_many :inverted_friendships, class_name: 'Friendship', foreign_key: 'friend_id' + has_many :friendships, class_name: 'Friendship', foreign_key: 'user_id' def friends - friends = received_invitations.map { |invitation| invitation.user if invitation.confirmed == true } - friends += sent_invitations.map { |invitation| invitation.friend if invitation.confirmed == true } + friends = inverted_friendships.map { |invitation| invitation.user if invitation.confirmed == true } + friends += friendships.map { |invitation| invitation.friend if invitation.confirmed == true } friends.compact end def pending_invitations - sent_invitations.map { |invitation| invitation.friend if invitation.confirmed == false }.compact + friendships.map { |invitation| invitation.friend if invitation.confirmed == false }.compact end def friendship_requests - received_invitations.map { |invitation| invitation.user if invitation.confirmed == false }.compact + inverted_friendships.map { |invitation| invitation.user if invitation.confirmed == false }.compact end def confirm_friend(user) - friend_invitation = received_invitations.find { |invitation| invitation.user == user } + friend_invitation = inverted_friendships.find { |invitation| invitation.user == user } friend_invitation.confirmed = true friend_invitation.save end @@ -37,13 +37,13 @@ def friend?(user) end def invited_by?(user) - received_invitations.one? { |invitation| invitation.user == user and invitation.confirmed == false } + inverted_friendships.one? { |invitation| invitation.user == user and invitation.confirmed == false } end def friend_invitation(user) - received_invitation = received_invitations.find { |invitation| invitation if invitation.user == user } + received_invitation = inverted_friendships.find { |invitation| invitation if invitation.user == user } return received_invitation unless received_invitation.nil? - sent_invitations.find { |invitation| invitation if invitation.friend == user } + friendships.find { |invitation| invitation if invitation.friend == user } end end diff --git a/spec/models/friendship_invitation_spec.rb b/spec/models/friendship_invitation_spec.rb deleted file mode 100644 index d7687ffd9d..0000000000 --- a/spec/models/friendship_invitation_spec.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'rails_helper' - -RSpec.describe FriendshipInvitation, type: :model do - context 'Associations' do - it { should belong_to(:inviter) } - it { should belong_to(:invitee) } - end -end diff --git a/spec/models/friendship_spec.rb b/spec/models/friendship_spec.rb new file mode 100644 index 0000000000..c83a935126 --- /dev/null +++ b/spec/models/friendship_spec.rb @@ -0,0 +1,8 @@ +require 'rails_helper' + +RSpec.describe Friendship, type: :model do + context 'Associations' do + it { should belong_to(:friend) } + it { should belong_to(:user) } + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 0d9f62b32d..27e3a07ddc 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -10,7 +10,7 @@ it { should have_many(:posts) } it { should have_many(:comments).dependent(:destroy) } it { should have_many(:likes).dependent(:destroy) } - it { should have_many(:received_invitations) } - it { should have_many(:sent_invitations) } + it { should have_many(:friendships) } + it { should have_many(:inverted_friendships) } end end From 29c84504265294586e64571a65c58d806e30bb59 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 11 May 2021 16:14:07 +0200 Subject: [PATCH 26/41] Refactor friendships#update method --- app/controllers/friendships_controller.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/controllers/friendships_controller.rb b/app/controllers/friendships_controller.rb index fb105c43f7..95b17dfe20 100644 --- a/app/controllers/friendships_controller.rb +++ b/app/controllers/friendships_controller.rb @@ -14,10 +14,9 @@ def create end def update - invitation = current_user.inverted_friendships.find_by(user_id: invitation_params[:user_id]) - invitation.confirmed = true - if invitation.save - redirect_to invitations_path, notice: "#{invitation.user.name} is your friend now!" + inviter = User.find(invitation_params[:user_id]) + if current_user.confirm_friend inviter + redirect_to invitations_path, notice: "#{inviter.name} is your friend now!" else flash.now.alert = 'Error' render users_path From 01669b9897d12483fbc1d7ef5dc152a14daa35a4 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 11 May 2021 16:48:45 +0200 Subject: [PATCH 27/41] Refactore user#confirm_friend method --- app/models/user.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index c8a7391899..5c778c442c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -27,9 +27,11 @@ def friendship_requests end def confirm_friend(user) - friend_invitation = inverted_friendships.find { |invitation| invitation.user == user } - friend_invitation.confirmed = true - friend_invitation.save + friendship = inverted_friendships.find { |invitation| invitation.user == user } + friendship.confirmed = true + friendship.save + inverted_friendship = Friendship.new(user_id: friendship.friend_id, friend_id: friendship.user_id) + inverted_friendship.save end def friend?(user) From 12873ef9b0eb5ad39114a01ec91076865e1575da Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Tue, 11 May 2021 17:31:28 +0200 Subject: [PATCH 28/41] Fix user#confirm_friend method --- app/models/user.rb | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 5c778c442c..2df15b4cc5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -9,16 +9,14 @@ class User < ApplicationRecord has_many :posts has_many :comments, dependent: :destroy has_many :likes, dependent: :destroy - has_many :inverted_friendships, class_name: 'Friendship', foreign_key: 'friend_id' - has_many :friendships, class_name: 'Friendship', foreign_key: 'user_id' + has_many :inverted_friendships, class_name: 'Friendship', foreign_key: 'friend_id', dependent: :destroy + has_many :friendships, class_name: 'Friendship', foreign_key: 'user_id', dependent: :destroy def friends - friends = inverted_friendships.map { |invitation| invitation.user if invitation.confirmed == true } - friends += friendships.map { |invitation| invitation.friend if invitation.confirmed == true } - friends.compact + friendships.map { |invitation| invitation.friend if invitation.confirmed == true }.compact end - def pending_invitations + def pending_friends friendships.map { |invitation| invitation.friend if invitation.confirmed == false }.compact end @@ -30,7 +28,7 @@ def confirm_friend(user) friendship = inverted_friendships.find { |invitation| invitation.user == user } friendship.confirmed = true friendship.save - inverted_friendship = Friendship.new(user_id: friendship.friend_id, friend_id: friendship.user_id) + inverted_friendship = Friendship.new(user_id: friendship.friend_id, friend_id: friendship.user_id, confirmed: true) inverted_friendship.save end From e37082b93804a823ab5c517b71b52db7d063e172 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 12 May 2021 00:43:53 +0200 Subject: [PATCH 29/41] Fix #invite_to_priendship_btn helper method --- app/helpers/user_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb index bfa4bdfa95..0072568b36 100644 --- a/app/helpers/user_helper.rb +++ b/app/helpers/user_helper.rb @@ -2,7 +2,7 @@ module UserHelper def invite_to_friendship_btn(user) return if user == current_user or current_user.friend? user - if current_user.pending_invitations.include? user + if current_user.pending_friends.include? user content_tag :span, 'Pending request', class: 'pending_badge' elsif current_user.invited_by? user render partial: 'shared/confirm_reject_btn', locals: { user: user } From 2bb50f312a67f11c24aa5bbf4602d0aecb1faac3 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 12 May 2021 01:03:46 +0200 Subject: [PATCH 30/41] Add user#friends_and_own_posts method --- app/controllers/posts_controller.rb | 3 +-- app/models/user.rb | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 1cb4cbd511..f1ea61a994 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -20,8 +20,7 @@ def create private def timeline_posts - posts ||= Post.all.ordered_by_most_recent.includes(:user) - @timeline_posts = posts.select { |post| current_user == post.user or current_user.friends.include? post.user } + @timeline_posts = current_user.friends_and_own_posts end def post_params diff --git a/app/models/user.rb b/app/models/user.rb index 2df15b4cc5..0c75e45e7c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -46,4 +46,8 @@ def friend_invitation(user) friendships.find { |invitation| invitation if invitation.friend == user } end + + def friends_and_own_posts + Post.where(user: (friends.to_a << self)).ordered_by_most_recent + end end From 56b529c36d9c037b894bce9d966fa19c467ea1c2 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 12 May 2021 02:36:08 +0200 Subject: [PATCH 31/41] Fix undo friendship --- app/controllers/friendships_controller.rb | 3 +-- app/models/user.rb | 13 ++++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/controllers/friendships_controller.rb b/app/controllers/friendships_controller.rb index 95b17dfe20..88de67f1c9 100644 --- a/app/controllers/friendships_controller.rb +++ b/app/controllers/friendships_controller.rb @@ -25,8 +25,7 @@ def update def destroy user = User.find(params[:id]) - invitation = current_user.friend_invitation user - if invitation.destroy + if current_user.destroy_friendship(user) redirect_to users_path, notice: 'Friendship canceled' else flash.now.alert = 'Error' diff --git a/app/models/user.rb b/app/models/user.rb index 0c75e45e7c..58fc87b6ab 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -40,11 +40,14 @@ def invited_by?(user) inverted_friendships.one? { |invitation| invitation.user == user and invitation.confirmed == false } end - def friend_invitation(user) - received_invitation = inverted_friendships.find { |invitation| invitation if invitation.user == user } - return received_invitation unless received_invitation.nil? - - friendships.find { |invitation| invitation if invitation.friend == user } + def destroy_friendship(user) + received_invitation = inverted_friendships.find_by(user_id: user.id) + if received_invitation.confirmed == false + received_invitation.destroy + elsif received_invitation.confirmed == true + received_invitation.destroy + friendships.find_by(friend_id: user.id).destroy + end end def friends_and_own_posts From 08c06303224ce7735cb5aebbb320a47421811e0e Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 12 May 2021 02:53:59 +0200 Subject: [PATCH 32/41] Add confirmed_friendships and friends associations --- app/models/user.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 58fc87b6ab..4c15a8fafe 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -11,10 +11,8 @@ class User < ApplicationRecord has_many :likes, dependent: :destroy has_many :inverted_friendships, class_name: 'Friendship', foreign_key: 'friend_id', dependent: :destroy has_many :friendships, class_name: 'Friendship', foreign_key: 'user_id', dependent: :destroy - - def friends - friendships.map { |invitation| invitation.friend if invitation.confirmed == true }.compact - end + has_many :confirmed_friendships, -> { where confirmed: true }, class_name: 'Friendship' + has_many :friends, through: :confirmed_friendships def pending_friends friendships.map { |invitation| invitation.friend if invitation.confirmed == false }.compact From e308180e11dcae672de500d4aa64b9d7e967aa7a Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 12 May 2021 02:59:14 +0200 Subject: [PATCH 33/41] Add pending_friendships and pending_friends assoctions --- app/models/user.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 4c15a8fafe..d78df27db1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -13,10 +13,8 @@ class User < ApplicationRecord has_many :friendships, class_name: 'Friendship', foreign_key: 'user_id', dependent: :destroy has_many :confirmed_friendships, -> { where confirmed: true }, class_name: 'Friendship' has_many :friends, through: :confirmed_friendships - - def pending_friends - friendships.map { |invitation| invitation.friend if invitation.confirmed == false }.compact - end + has_many :pending_friendships, -> { where confirmed: false }, class_name: "Friendship", foreign_key: "user_id" + has_many :pending_friends, through: :pending_friendships, source: :friend def friendship_requests inverted_friendships.map { |invitation| invitation.user if invitation.confirmed == false }.compact From 5af8a834dc3584a7dc7d09e7d50c2cedcff8989d Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Wed, 12 May 2021 03:05:32 +0200 Subject: [PATCH 34/41] Add inverted_friendships and friend_requests assoctions --- app/models/user.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index d78df27db1..1e164fa935 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -13,12 +13,10 @@ class User < ApplicationRecord has_many :friendships, class_name: 'Friendship', foreign_key: 'user_id', dependent: :destroy has_many :confirmed_friendships, -> { where confirmed: true }, class_name: 'Friendship' has_many :friends, through: :confirmed_friendships - has_many :pending_friendships, -> { where confirmed: false }, class_name: "Friendship", foreign_key: "user_id" + has_many :pending_friendships, -> { where confirmed: false }, class_name: 'Friendship', foreign_key: 'user_id' has_many :pending_friends, through: :pending_friendships, source: :friend - - def friendship_requests - inverted_friendships.map { |invitation| invitation.user if invitation.confirmed == false }.compact - end + has_many :inverted_friendships, -> { where confirmed: false }, class_name: 'Friendship', foreign_key: 'friend_id' + has_many :friend_requests, through: :inverted_friendships def confirm_friend(user) friendship = inverted_friendships.find { |invitation| invitation.user == user } From db762cd1b7216f60d90fff431fe0a78cb4486301 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Sun, 16 May 2021 12:32:33 +0200 Subject: [PATCH 35/41] Fix reject friendship button --- app/controllers/friendships_controller.rb | 19 ++++++++------- app/helpers/friendship_helper.rb | 2 +- app/helpers/user_helper.rb | 4 ++-- app/models/friendship.rb | 16 +++++++++++++ app/models/user.rb | 24 +++---------------- app/views/shared/_confirm_reject_btn.html.erb | 2 +- config/routes.rb | 2 +- 7 files changed, 34 insertions(+), 35 deletions(-) diff --git a/app/controllers/friendships_controller.rb b/app/controllers/friendships_controller.rb index 88de67f1c9..f2967ccdac 100644 --- a/app/controllers/friendships_controller.rb +++ b/app/controllers/friendships_controller.rb @@ -1,6 +1,6 @@ class FriendshipsController < ApplicationController def index - @invitations = current_user.friendship_requests + @invitations = current_user.friend_requests end def create @@ -14,9 +14,9 @@ def create end def update - inviter = User.find(invitation_params[:user_id]) - if current_user.confirm_friend inviter - redirect_to invitations_path, notice: "#{inviter.name} is your friend now!" + invitation = current_user.inverted_friendships.find_by(user_id: invitation_params[:user_id]) + if invitation.confirm_friend + redirect_to invitations_path, notice: "#{invitation.user.name} is your friend now!" else flash.now.alert = 'Error' render users_path @@ -24,12 +24,13 @@ def update end def destroy - user = User.find(params[:id]) - if current_user.destroy_friendship(user) + if params[:status] == 'invitation' + current_user.inverted_friendships.find_by(user_id: params[:id]).destroy + redirect_to users_path, notice: 'Friendship canceled' + elsif params[:status] == 'friendship' + current_user.friendships.find_by(friend_id: params[:id]).destroy + current_user.inverted_friendships.find_by(user_id: params[:id]).destroy redirect_to users_path, notice: 'Friendship canceled' - else - flash.now.alert = 'Error' - render users_path end end diff --git a/app/helpers/friendship_helper.rb b/app/helpers/friendship_helper.rb index 3a619be03f..3af07fd81a 100644 --- a/app/helpers/friendship_helper.rb +++ b/app/helpers/friendship_helper.rb @@ -6,6 +6,6 @@ def confirm_friendship_btn(inviter) end def reject_friendship_btn(inviter) - link_to 'Reject friendship', reject_invitation_path(inviter.id), class: 'un-friend', method: :delete + link_to 'Reject friendship', reject_invitation_path(inviter.id, 'friendship'), class: 'un-friend', method: :delete end end diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb index 0072568b36..ac405729b7 100644 --- a/app/helpers/user_helper.rb +++ b/app/helpers/user_helper.rb @@ -16,11 +16,11 @@ def invite_to_friendship_btn(user) def cancel_friendship_btn(user) return unless current_user.friend? user - link_to 'Undo friendship', reject_invitation_path(user), method: :delete, class: 'un-friend' + link_to 'Undo friendship', reject_invitation_path(user.id, 'friendship'), method: :delete, class: 'un-friend' end def reject_friendship_btn(user) - link_to('Reject Friendship', reject_invitation_path(user), method: :delete, class: 'un-friend') + link_to('Reject Friendship', reject_invitation_path(user.id, 'invitation'), method: :delete, class: 'un-friend') end def confirm_friendship_btn(user) diff --git a/app/models/friendship.rb b/app/models/friendship.rb index 65333fb175..d8d58e2ab6 100644 --- a/app/models/friendship.rb +++ b/app/models/friendship.rb @@ -1,4 +1,20 @@ class Friendship < ApplicationRecord belongs_to :user belongs_to :friend, class_name: 'User', foreign_key: 'friend_id' + + def confirm_friend + update_attributes(confirmed: true) + Friendship.create!(friend_id: user_id, + user_id: friend_id, + confirmed: true) + end + + def destroy_friendship + if confirmed == true + Friendship.find_by(friend_id: user_id).destroy + destroy + elsif confirmed == false + destroy + end + end end diff --git a/app/models/user.rb b/app/models/user.rb index 1e164fa935..798678303c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -15,33 +15,15 @@ class User < ApplicationRecord has_many :friends, through: :confirmed_friendships has_many :pending_friendships, -> { where confirmed: false }, class_name: 'Friendship', foreign_key: 'user_id' has_many :pending_friends, through: :pending_friendships, source: :friend - has_many :inverted_friendships, -> { where confirmed: false }, class_name: 'Friendship', foreign_key: 'friend_id' - has_many :friend_requests, through: :inverted_friendships - - def confirm_friend(user) - friendship = inverted_friendships.find { |invitation| invitation.user == user } - friendship.confirmed = true - friendship.save - inverted_friendship = Friendship.new(user_id: friendship.friend_id, friend_id: friendship.user_id, confirmed: true) - inverted_friendship.save - end + has_many :unconfirmed_friendships, -> { where confirmed: false }, class_name: 'Friendship', foreign_key: 'friend_id' + has_many :friend_requests, through: :unconfirmed_friendships, source: :user def friend?(user) friends.include? user end def invited_by?(user) - inverted_friendships.one? { |invitation| invitation.user == user and invitation.confirmed == false } - end - - def destroy_friendship(user) - received_invitation = inverted_friendships.find_by(user_id: user.id) - if received_invitation.confirmed == false - received_invitation.destroy - elsif received_invitation.confirmed == true - received_invitation.destroy - friendships.find_by(friend_id: user.id).destroy - end + friend_requests.include? user end def friends_and_own_posts diff --git a/app/views/shared/_confirm_reject_btn.html.erb b/app/views/shared/_confirm_reject_btn.html.erb index 2396195b9e..9a685f4151 100644 --- a/app/views/shared/_confirm_reject_btn.html.erb +++ b/app/views/shared/_confirm_reject_btn.html.erb @@ -2,4 +2,4 @@ confirm_invitation_path,\ params: { invitation: { user_id: user.id, friend_id: current_user.id } }) %> -<%= link_to('Reject Friendship', reject_invitation_path(user), method: :delete, class: 'un-friend') %> \ No newline at end of file +<%= link_to('Reject Friendship', reject_invitation_path(user, 'invitation'), method: :delete, class: 'un-friend') %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 85eb1a2fe8..adf2e72b67 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,7 @@ get 'friendships', to: 'friendships#index', as: 'invitations' post 'friendship/create', to: 'friendships#create', as: 'send_invitation' post 'friendship/update', to: 'friendships#update', as: 'confirm_invitation' - delete 'friendship/destroy/:id', to: 'friendships#destroy', as: 'reject_invitation' + delete 'friendship/destroy/:id/:status', to: 'friendships#destroy', as: 'reject_invitation' root 'posts#index' devise_for :users From 98cf79264426d21936ce01c87c5a22c367425fb5 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Sun, 16 May 2021 12:38:30 +0200 Subject: [PATCH 36/41] Add user associtation tests --- spec/models/user_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 27e3a07ddc..d3ba364d1f 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -11,6 +11,8 @@ it { should have_many(:comments).dependent(:destroy) } it { should have_many(:likes).dependent(:destroy) } it { should have_many(:friendships) } - it { should have_many(:inverted_friendships) } + it { should have_many(:friends) } + it { should have_many(:pending_friends) } + it { should have_many(:friend_requests) } end end From 2e8f49af5980471699bcb5fc6b3fda5340b2261a Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Sun, 16 May 2021 17:34:00 +0200 Subject: [PATCH 37/41] Update readme --- README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e2ff61f120..9328b1a7e9 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ TBA - ## Getting Started To get a local copy up and running follow these simple example steps. @@ -65,13 +64,13 @@ Open `http://localhost:3000/` in your browser. > Tests will be added by Microverse students. There are no tests for initial features in order to make sure that students write all tests from scratch. -### Deployment - -TBA - ## Authors -TBA +👤 **Hubert MUGABO** + +- Github: [@mugberto](https://github.com/mugberto) +- Twitter: [@mugberto](https://twitter.com/mugberto) +- Linkedin: [mugberto](https://www.linkedin.com/in/hubert-mugabo-23144b6a/) ## 🤝 Contributing @@ -85,9 +84,9 @@ Give a ⭐️ if you like this project! ## Acknowledgments -TBA +- Project inspired by Microverse Program ## 📝 License -TBA +This project is MIT Lisenced From 4d312071f2018055a4c1a9c11436835958785538 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Sun, 16 May 2021 19:44:02 +0200 Subject: [PATCH 38/41] Update readme --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 9328b1a7e9..f5ab7b8111 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,6 @@ - Ruby v2.7.0 - Ruby on Rails v5.2.4 -## Live Demo - -TBA ## Getting Started From 13865443837e9ce0851c1c1092cd06766220d458 Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Mon, 17 May 2021 17:30:42 +0200 Subject: [PATCH 39/41] Update and clean up readme --- README.md | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f5ab7b8111..f9b8c33414 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Scaffold for social media app with Ruby on Rails -> This repo includes intial code for social media app with basic styling. Its purpose is to be a starting point for Microverse students. +> This repo includes code for basic social media app built with rails. The app allows users to create account, see other users, invite them to friendship, and accept or reject thier friendship requests. A user also can create posts, publish them on their timeline, and see his friends' posts ## Built With - Ruby v2.7.0 -- Ruby on Rails v5.2.4 +- Ruby on Rails v6.0.3 ## Getting Started @@ -20,7 +20,7 @@ Postgres: >=9.5 ### Setup -Instal gems with: +Install gems with: ``` bundle install @@ -33,16 +33,6 @@ Setup database with: rails db:migrate ``` -### Github Actions - -To make sure the linters' checks using Github Actions work properly, you should follow the next steps: - -1. On your recently forked repo, enable the GitHub Actions in the Actions tab. -2. Create the `feature/branch` and push. -3. Start working on your milestone as usual. -4. Open a PR from the `feature/branch` when your work is done. - - ### Usage Start server with: From b1fccfe17ec4a7f77fbe9639c479e122203e0dbc Mon Sep 17 00:00:00 2001 From: Hubert MUGABO Date: Mon, 17 May 2021 23:41:18 +0200 Subject: [PATCH 40/41] Add live demo link --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index f9b8c33414..b6e452e6c3 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ > This repo includes code for basic social media app built with rails. The app allows users to create account, see other users, invite them to friendship, and accept or reject thier friendship requests. A user also can create posts, publish them on their timeline, and see his friends' posts +## Live demo + +View the demo [here](https://fierce-ocean-92729.herokuapp.com/) + ## Built With - Ruby v2.7.0 From 7ba14ecf7c783222edc62c769fb9cc3266a6cd9f Mon Sep 17 00:00:00 2001 From: elyor doniyorov Date: Tue, 2 Nov 2021 17:40:43 +0500 Subject: [PATCH 41/41] changing an existing app --- app/controllers/API/api_controller.rb | 2 ++ config/application.rb | 1 + config/environments/development.rb | 1 + 3 files changed, 4 insertions(+) create mode 100644 app/controllers/API/api_controller.rb diff --git a/app/controllers/API/api_controller.rb b/app/controllers/API/api_controller.rb new file mode 100644 index 0000000000..be0ae11d0e --- /dev/null +++ b/app/controllers/API/api_controller.rb @@ -0,0 +1,2 @@ +class API::ApiController < ActionController::API +end diff --git a/config/application.rb b/config/application.rb index 1cbf7597fa..6757428bdb 100644 --- a/config/application.rb +++ b/config/application.rb @@ -19,6 +19,7 @@ module RorSocialScaffold class Application < Rails::Application + config.api_only = true # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.2 diff --git a/config/environments/development.rb b/config/environments/development.rb index 8f81b7b34f..49cff2c732 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,4 +1,5 @@ Rails.application.configure do + config.debug_exception_response_format = :api # Settings specified here will take precedence over those in config/application.rb. # In the development environment your application's code is reloaded on