diff --git a/app/assets/images/.keep b/app/assets/images/jinda/.keep
similarity index 100%
rename from app/assets/images/.keep
rename to app/assets/images/jinda/.keep
diff --git a/app/assets/images/4dcity-old.ico b/app/assets/images/jinda/4dcity-old.ico
similarity index 100%
rename from app/assets/images/4dcity-old.ico
rename to app/assets/images/jinda/4dcity-old.ico
diff --git a/app/assets/images/4dcity.ico b/app/assets/images/jinda/4dcity.ico
similarity index 100%
rename from app/assets/images/4dcity.ico
rename to app/assets/images/jinda/4dcity.ico
diff --git a/app/assets/images/account.png b/app/assets/images/jinda/account.png
similarity index 100%
rename from app/assets/images/account.png
rename to app/assets/images/jinda/account.png
diff --git a/app/assets/images/add.png b/app/assets/images/jinda/add.png
similarity index 100%
rename from app/assets/images/add.png
rename to app/assets/images/jinda/add.png
diff --git a/app/assets/images/ajax-loader-circle.gif b/app/assets/images/jinda/ajax-loader-circle.gif
similarity index 100%
rename from app/assets/images/ajax-loader-circle.gif
rename to app/assets/images/jinda/ajax-loader-circle.gif
diff --git a/app/assets/images/ajax-loader.gif b/app/assets/images/jinda/ajax-loader.gif
similarity index 100%
rename from app/assets/images/ajax-loader.gif
rename to app/assets/images/jinda/ajax-loader.gif
diff --git a/app/assets/images/anchor.png b/app/assets/images/jinda/anchor.png
similarity index 100%
rename from app/assets/images/anchor.png
rename to app/assets/images/jinda/anchor.png
diff --git a/app/assets/images/application_double.png b/app/assets/images/jinda/application_double.png
similarity index 100%
rename from app/assets/images/application_double.png
rename to app/assets/images/jinda/application_double.png
diff --git a/app/assets/images/application_form_edit.png b/app/assets/images/jinda/application_form_edit.png
similarity index 100%
rename from app/assets/images/application_form_edit.png
rename to app/assets/images/jinda/application_form_edit.png
diff --git a/app/assets/images/arrow_left.png b/app/assets/images/jinda/arrow_left.png
similarity index 100%
rename from app/assets/images/arrow_left.png
rename to app/assets/images/jinda/arrow_left.png
diff --git a/app/assets/images/arrow_right.png b/app/assets/images/jinda/arrow_right.png
similarity index 100%
rename from app/assets/images/arrow_right.png
rename to app/assets/images/jinda/arrow_right.png
diff --git a/app/assets/images/arrow_turn_left.png b/app/assets/images/jinda/arrow_turn_left.png
similarity index 100%
rename from app/assets/images/arrow_turn_left.png
rename to app/assets/images/jinda/arrow_turn_left.png
diff --git a/app/assets/images/arrow_turn_right.png b/app/assets/images/jinda/arrow_turn_right.png
similarity index 100%
rename from app/assets/images/arrow_turn_right.png
rename to app/assets/images/jinda/arrow_turn_right.png
diff --git a/app/assets/images/calendar.png b/app/assets/images/jinda/calendar.png
similarity index 100%
rename from app/assets/images/calendar.png
rename to app/assets/images/jinda/calendar.png
diff --git a/app/assets/images/cancel.png b/app/assets/images/jinda/cancel.png
similarity index 100%
rename from app/assets/images/cancel.png
rename to app/assets/images/jinda/cancel.png
diff --git a/app/assets/images/chart_bar.png b/app/assets/images/jinda/chart_bar.png
similarity index 100%
rename from app/assets/images/chart_bar.png
rename to app/assets/images/jinda/chart_bar.png
diff --git a/app/assets/images/clock.png b/app/assets/images/jinda/clock.png
similarity index 100%
rename from app/assets/images/clock.png
rename to app/assets/images/jinda/clock.png
diff --git a/app/assets/images/cog.png b/app/assets/images/jinda/cog.png
similarity index 100%
rename from app/assets/images/cog.png
rename to app/assets/images/jinda/cog.png
diff --git a/app/assets/images/control_fastforward.png b/app/assets/images/jinda/control_fastforward.png
similarity index 100%
rename from app/assets/images/control_fastforward.png
rename to app/assets/images/jinda/control_fastforward.png
diff --git a/app/assets/images/control_play.png b/app/assets/images/jinda/control_play.png
similarity index 100%
rename from app/assets/images/control_play.png
rename to app/assets/images/jinda/control_play.png
diff --git a/app/assets/images/cross.png b/app/assets/images/jinda/cross.png
similarity index 100%
rename from app/assets/images/cross.png
rename to app/assets/images/jinda/cross.png
diff --git a/app/assets/images/delete.png b/app/assets/images/jinda/delete.png
similarity index 100%
rename from app/assets/images/delete.png
rename to app/assets/images/jinda/delete.png
diff --git a/app/assets/images/external-link.png b/app/assets/images/jinda/external-link.png
similarity index 100%
rename from app/assets/images/external-link.png
rename to app/assets/images/jinda/external-link.png
diff --git a/app/assets/images/facebook-continue-button.png b/app/assets/images/jinda/facebook-continue-button.png
similarity index 100%
rename from app/assets/images/facebook-continue-button.png
rename to app/assets/images/jinda/facebook-continue-button.png
diff --git a/app/assets/images/facebooksmall.png b/app/assets/images/jinda/facebooksmall.png
similarity index 100%
rename from app/assets/images/facebooksmall.png
rename to app/assets/images/jinda/facebooksmall.png
diff --git a/app/assets/images/favicon.ico b/app/assets/images/jinda/favicon.ico
similarity index 100%
rename from app/assets/images/favicon.ico
rename to app/assets/images/jinda/favicon.ico
diff --git a/app/assets/images/freemind(mm).png b/app/assets/images/jinda/freemind(mm).png
similarity index 100%
rename from app/assets/images/freemind(mm).png
rename to app/assets/images/jinda/freemind(mm).png
diff --git a/app/assets/images/google-continue-button.png b/app/assets/images/jinda/google-continue-button.png
similarity index 100%
rename from app/assets/images/google-continue-button.png
rename to app/assets/images/jinda/google-continue-button.png
diff --git a/app/assets/images/help.png b/app/assets/images/jinda/help.png
similarity index 100%
rename from app/assets/images/help.png
rename to app/assets/images/jinda/help.png
diff --git a/app/assets/images/highway-menu.png b/app/assets/images/jinda/highway-menu.png
similarity index 100%
rename from app/assets/images/highway-menu.png
rename to app/assets/images/jinda/highway-menu.png
diff --git a/app/assets/images/highway.png b/app/assets/images/jinda/highway.png
similarity index 100%
rename from app/assets/images/highway.png
rename to app/assets/images/jinda/highway.png
diff --git a/app/assets/images/house.png b/app/assets/images/jinda/house.png
similarity index 100%
rename from app/assets/images/house.png
rename to app/assets/images/jinda/house.png
diff --git a/app/assets/images/icons-18-black.png b/app/assets/images/jinda/icons-18-black.png
similarity index 100%
rename from app/assets/images/icons-18-black.png
rename to app/assets/images/jinda/icons-18-black.png
diff --git a/app/assets/images/icons-18-white.png b/app/assets/images/jinda/icons-18-white.png
similarity index 100%
rename from app/assets/images/icons-18-white.png
rename to app/assets/images/jinda/icons-18-white.png
diff --git a/app/assets/images/icons-36-black.png b/app/assets/images/jinda/icons-36-black.png
similarity index 100%
rename from app/assets/images/icons-36-black.png
rename to app/assets/images/jinda/icons-36-black.png
diff --git a/app/assets/images/icons-36-white.png b/app/assets/images/jinda/icons-36-white.png
similarity index 100%
rename from app/assets/images/icons-36-white.png
rename to app/assets/images/jinda/icons-36-white.png
diff --git a/app/assets/images/logo.png b/app/assets/images/jinda/logo.png
similarity index 100%
rename from app/assets/images/logo.png
rename to app/assets/images/jinda/logo.png
diff --git a/app/assets/images/logo_jinda.png b/app/assets/images/jinda/logo_jinda.png
similarity index 100%
rename from app/assets/images/logo_jinda.png
rename to app/assets/images/jinda/logo_jinda.png
diff --git a/app/assets/images/logout.png b/app/assets/images/jinda/logout.png
similarity index 100%
rename from app/assets/images/logout.png
rename to app/assets/images/jinda/logout.png
diff --git a/app/assets/images/new.gif b/app/assets/images/jinda/new.gif
similarity index 100%
rename from app/assets/images/new.gif
rename to app/assets/images/jinda/new.gif
diff --git a/app/assets/images/new.png b/app/assets/images/jinda/new.png
similarity index 100%
rename from app/assets/images/new.png
rename to app/assets/images/jinda/new.png
diff --git a/app/assets/images/page.png b/app/assets/images/jinda/page.png
similarity index 100%
rename from app/assets/images/page.png
rename to app/assets/images/jinda/page.png
diff --git a/app/assets/images/page_attach.png b/app/assets/images/jinda/page_attach.png
similarity index 100%
rename from app/assets/images/page_attach.png
rename to app/assets/images/jinda/page_attach.png
diff --git a/app/assets/images/page_green.png b/app/assets/images/jinda/page_green.png
similarity index 100%
rename from app/assets/images/page_green.png
rename to app/assets/images/jinda/page_green.png
diff --git a/app/assets/images/page_output.png b/app/assets/images/jinda/page_output.png
similarity index 100%
rename from app/assets/images/page_output.png
rename to app/assets/images/jinda/page_output.png
diff --git a/app/assets/images/page_pdf.png b/app/assets/images/jinda/page_pdf.png
similarity index 100%
rename from app/assets/images/page_pdf.png
rename to app/assets/images/jinda/page_pdf.png
diff --git a/app/assets/images/pencil.png b/app/assets/images/jinda/pencil.png
similarity index 100%
rename from app/assets/images/pencil.png
rename to app/assets/images/jinda/pencil.png
diff --git a/app/assets/images/printer.png b/app/assets/images/jinda/printer.png
similarity index 100%
rename from app/assets/images/printer.png
rename to app/assets/images/jinda/printer.png
diff --git a/app/assets/images/refresh.png b/app/assets/images/jinda/refresh.png
similarity index 100%
rename from app/assets/images/refresh.png
rename to app/assets/images/jinda/refresh.png
diff --git a/app/assets/images/report.png b/app/assets/images/jinda/report.png
similarity index 100%
rename from app/assets/images/report.png
rename to app/assets/images/jinda/report.png
diff --git a/app/assets/images/rssmall.png b/app/assets/images/jinda/rssmall.png
similarity index 100%
rename from app/assets/images/rssmall.png
rename to app/assets/images/jinda/rssmall.png
diff --git a/app/assets/images/tick.png b/app/assets/images/jinda/tick.png
similarity index 100%
rename from app/assets/images/tick.png
rename to app/assets/images/jinda/tick.png
diff --git a/app/assets/images/twittersmall.png b/app/assets/images/jinda/twittersmall.png
similarity index 100%
rename from app/assets/images/twittersmall.png
rename to app/assets/images/jinda/twittersmall.png
diff --git a/app/assets/images/user.png b/app/assets/images/jinda/user.png
similarity index 100%
rename from app/assets/images/user.png
rename to app/assets/images/jinda/user.png
diff --git a/app/assets/images/user_admin_gear.png b/app/assets/images/jinda/user_admin_gear.png
similarity index 100%
rename from app/assets/images/user_admin_gear.png
rename to app/assets/images/jinda/user_admin_gear.png
diff --git a/app/assets/images/view_code.png b/app/assets/images/jinda/view_code.png
similarity index 100%
rename from app/assets/images/view_code.png
rename to app/assets/images/jinda/view_code.png
diff --git a/app/assets/javascripts/application.js-org b/app/assets/javascripts/jinda/application.js-org
similarity index 100%
rename from app/assets/javascripts/application.js-org
rename to app/assets/javascripts/jinda/application.js-org
diff --git a/app/assets/javascripts/cable.js b/app/assets/javascripts/jinda/cable.js
similarity index 100%
rename from app/assets/javascripts/cable.js
rename to app/assets/javascripts/jinda/cable.js
diff --git a/app/assets/javascripts/channels/.keep b/app/assets/javascripts/jinda/channels/.keep
similarity index 100%
rename from app/assets/javascripts/channels/.keep
rename to app/assets/javascripts/jinda/channels/.keep
diff --git a/app/assets/javascripts/disable_enter_key.js b/app/assets/javascripts/jinda/disable_enter_key.js
similarity index 100%
rename from app/assets/javascripts/disable_enter_key.js
rename to app/assets/javascripts/jinda/disable_enter_key.js
diff --git a/app/assets/javascripts/iscroll-wrapper.js b/app/assets/javascripts/jinda/iscroll-wrapper.js
similarity index 100%
rename from app/assets/javascripts/iscroll-wrapper.js
rename to app/assets/javascripts/jinda/iscroll-wrapper.js
diff --git a/app/assets/javascripts/iscroll.js b/app/assets/javascripts/jinda/iscroll.js
similarity index 100%
rename from app/assets/javascripts/iscroll.js
rename to app/assets/javascripts/jinda/iscroll.js
diff --git a/app/assets/javascripts/jinda.js b/app/assets/javascripts/jinda/jinda.js
similarity index 100%
rename from app/assets/javascripts/jinda.js
rename to app/assets/javascripts/jinda/jinda.js
diff --git a/app/assets/javascripts/jinda_jqm.js b/app/assets/javascripts/jinda/jinda_jqm.js
similarity index 100%
rename from app/assets/javascripts/jinda_jqm.js
rename to app/assets/javascripts/jinda/jinda_jqm.js
diff --git a/app/assets/javascripts/jquery.mobile-1.2.1.js b/app/assets/javascripts/jinda/jquery.mobile-1.2.1.js
similarity index 100%
rename from app/assets/javascripts/jquery.mobile-1.2.1.js
rename to app/assets/javascripts/jinda/jquery.mobile-1.2.1.js
diff --git a/app/assets/javascripts/jquery.mobile.datebox.js b/app/assets/javascripts/jinda/jquery.mobile.datebox.js
similarity index 100%
rename from app/assets/javascripts/jquery.mobile.datebox.js
rename to app/assets/javascripts/jinda/jquery.mobile.datebox.js
diff --git a/app/assets/javascripts/jquery.mobile.splitview.js b/app/assets/javascripts/jinda/jquery.mobile.splitview.js
similarity index 100%
rename from app/assets/javascripts/jquery.mobile.splitview.js
rename to app/assets/javascripts/jinda/jquery.mobile.splitview.js
diff --git a/app/assets/stylesheets/app.scss b/app/assets/stylesheets/jinda/app.scss
similarity index 100%
rename from app/assets/stylesheets/app.scss
rename to app/assets/stylesheets/jinda/app.scss
diff --git a/app/assets/stylesheets/articles.scss b/app/assets/stylesheets/jinda/articles.scss
similarity index 100%
rename from app/assets/stylesheets/articles.scss
rename to app/assets/stylesheets/jinda/articles.scss
diff --git a/app/assets/stylesheets/fonts/sarabun.eot b/app/assets/stylesheets/jinda/fonts/sarabun.eot
similarity index 100%
rename from app/assets/stylesheets/fonts/sarabun.eot
rename to app/assets/stylesheets/jinda/fonts/sarabun.eot
diff --git a/app/assets/stylesheets/fonts/sarabun.ttf b/app/assets/stylesheets/jinda/fonts/sarabun.ttf
similarity index 100%
rename from app/assets/stylesheets/fonts/sarabun.ttf
rename to app/assets/stylesheets/jinda/fonts/sarabun.ttf
diff --git a/app/assets/stylesheets/fonts/sarabun.woff b/app/assets/stylesheets/jinda/fonts/sarabun.woff
similarity index 100%
rename from app/assets/stylesheets/fonts/sarabun.woff
rename to app/assets/stylesheets/jinda/fonts/sarabun.woff
diff --git a/app/assets/stylesheets/fonts/sarabun_bold.ttf b/app/assets/stylesheets/jinda/fonts/sarabun_bold.ttf
similarity index 100%
rename from app/assets/stylesheets/fonts/sarabun_bold.ttf
rename to app/assets/stylesheets/jinda/fonts/sarabun_bold.ttf
diff --git a/app/assets/stylesheets/fonts/sarabun_bolditalic.ttf b/app/assets/stylesheets/jinda/fonts/sarabun_bolditalic.ttf
similarity index 100%
rename from app/assets/stylesheets/fonts/sarabun_bolditalic.ttf
rename to app/assets/stylesheets/jinda/fonts/sarabun_bolditalic.ttf
diff --git a/app/assets/stylesheets/fonts/sarabun_italic.ttf b/app/assets/stylesheets/jinda/fonts/sarabun_italic.ttf
similarity index 100%
rename from app/assets/stylesheets/fonts/sarabun_italic.ttf
rename to app/assets/stylesheets/jinda/fonts/sarabun_italic.ttf
diff --git a/app/assets/stylesheets/fonts/thsarabunnew-webfont.eot b/app/assets/stylesheets/jinda/fonts/thsarabunnew-webfont.eot
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew-webfont.eot
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew-webfont.eot
diff --git a/app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf b/app/assets/stylesheets/jinda/fonts/thsarabunnew-webfont.ttf
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew-webfont.ttf
diff --git a/app/assets/stylesheets/fonts/thsarabunnew-webfont.woff b/app/assets/stylesheets/jinda/fonts/thsarabunnew-webfont.woff
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew-webfont.woff
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew-webfont.woff
diff --git a/app/assets/stylesheets/fonts/thsarabunnew.css b/app/assets/stylesheets/jinda/fonts/thsarabunnew.css
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew.css
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew.css
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot b/app/assets/stylesheets/jinda/fonts/thsarabunnew_bold-webfont.eot
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_bold-webfont.eot
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf b/app/assets/stylesheets/jinda/fonts/thsarabunnew_bold-webfont.ttf
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_bold-webfont.ttf
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff b/app/assets/stylesheets/jinda/fonts/thsarabunnew_bold-webfont.woff
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_bold-webfont.woff
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot b/app/assets/stylesheets/jinda/fonts/thsarabunnew_bolditalic-webfont.eot
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_bolditalic-webfont.eot
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf b/app/assets/stylesheets/jinda/fonts/thsarabunnew_bolditalic-webfont.ttf
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_bolditalic-webfont.ttf
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff b/app/assets/stylesheets/jinda/fonts/thsarabunnew_bolditalic-webfont.woff
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_bolditalic-webfont.woff
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot b/app/assets/stylesheets/jinda/fonts/thsarabunnew_italic-webfont.eot
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_italic-webfont.eot
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf b/app/assets/stylesheets/jinda/fonts/thsarabunnew_italic-webfont.ttf
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_italic-webfont.ttf
diff --git a/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff b/app/assets/stylesheets/jinda/fonts/thsarabunnew_italic-webfont.woff
similarity index 100%
rename from app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff
rename to app/assets/stylesheets/jinda/fonts/thsarabunnew_italic-webfont.woff
diff --git a/app/assets/stylesheets/images/ajax-loader.gif b/app/assets/stylesheets/jinda/images/ajax-loader.gif
similarity index 100%
rename from app/assets/stylesheets/images/ajax-loader.gif
rename to app/assets/stylesheets/jinda/images/ajax-loader.gif
diff --git a/app/assets/stylesheets/images/button_black.png b/app/assets/stylesheets/jinda/images/button_black.png
similarity index 100%
rename from app/assets/stylesheets/images/button_black.png
rename to app/assets/stylesheets/jinda/images/button_black.png
diff --git a/app/assets/stylesheets/images/button_blue.png b/app/assets/stylesheets/jinda/images/button_blue.png
similarity index 100%
rename from app/assets/stylesheets/images/button_blue.png
rename to app/assets/stylesheets/jinda/images/button_blue.png
diff --git a/app/assets/stylesheets/images/button_red.png b/app/assets/stylesheets/jinda/images/button_red.png
similarity index 100%
rename from app/assets/stylesheets/images/button_red.png
rename to app/assets/stylesheets/jinda/images/button_red.png
diff --git a/app/assets/stylesheets/images/gears.png b/app/assets/stylesheets/jinda/images/gears.png
similarity index 100%
rename from app/assets/stylesheets/images/gears.png
rename to app/assets/stylesheets/jinda/images/gears.png
diff --git a/app/assets/stylesheets/images/icons-18-black.png b/app/assets/stylesheets/jinda/images/icons-18-black.png
similarity index 100%
rename from app/assets/stylesheets/images/icons-18-black.png
rename to app/assets/stylesheets/jinda/images/icons-18-black.png
diff --git a/app/assets/stylesheets/images/icons-18-white.png b/app/assets/stylesheets/jinda/images/icons-18-white.png
similarity index 100%
rename from app/assets/stylesheets/images/icons-18-white.png
rename to app/assets/stylesheets/jinda/images/icons-18-white.png
diff --git a/app/assets/stylesheets/images/icons-36-black.png b/app/assets/stylesheets/jinda/images/icons-36-black.png
similarity index 100%
rename from app/assets/stylesheets/images/icons-36-black.png
rename to app/assets/stylesheets/jinda/images/icons-36-black.png
diff --git a/app/assets/stylesheets/images/icons-36-white.png b/app/assets/stylesheets/jinda/images/icons-36-white.png
similarity index 100%
rename from app/assets/stylesheets/images/icons-36-white.png
rename to app/assets/stylesheets/jinda/images/icons-36-white.png
diff --git a/app/assets/stylesheets/images/indicator.gif b/app/assets/stylesheets/jinda/images/indicator.gif
similarity index 100%
rename from app/assets/stylesheets/images/indicator.gif
rename to app/assets/stylesheets/jinda/images/indicator.gif
diff --git a/app/assets/stylesheets/jinda.scss b/app/assets/stylesheets/jinda/jinda.scss
similarity index 100%
rename from app/assets/stylesheets/jinda.scss
rename to app/assets/stylesheets/jinda/jinda.scss
diff --git a/app/assets/stylesheets/jinda_jqm.css.scss b/app/assets/stylesheets/jinda/jinda_jqm.css.scss
similarity index 100%
rename from app/assets/stylesheets/jinda_jqm.css.scss
rename to app/assets/stylesheets/jinda/jinda_jqm.css.scss
diff --git a/app/assets/stylesheets/jquery.mobile-1.2.1.css b/app/assets/stylesheets/jinda/jquery.mobile-1.2.1.css
similarity index 100%
rename from app/assets/stylesheets/jquery.mobile-1.2.1.css
rename to app/assets/stylesheets/jinda/jquery.mobile-1.2.1.css
diff --git a/app/assets/stylesheets/jquery.mobile.datebox.css b/app/assets/stylesheets/jinda/jquery.mobile.datebox.css
similarity index 100%
rename from app/assets/stylesheets/jquery.mobile.datebox.css
rename to app/assets/stylesheets/jinda/jquery.mobile.datebox.css
diff --git a/app/assets/stylesheets/jquery.mobile.grids.collapsible.css b/app/assets/stylesheets/jinda/jquery.mobile.grids.collapsible.css
similarity index 100%
rename from app/assets/stylesheets/jquery.mobile.grids.collapsible.css
rename to app/assets/stylesheets/jinda/jquery.mobile.grids.collapsible.css
diff --git a/app/assets/stylesheets/jquery.mobile.splitview.css b/app/assets/stylesheets/jinda/jquery.mobile.splitview.css
similarity index 100%
rename from app/assets/stylesheets/jquery.mobile.splitview.css
rename to app/assets/stylesheets/jinda/jquery.mobile.splitview.css
diff --git a/app/assets/stylesheets/kul-4.2.css b/app/assets/stylesheets/jinda/kul-4.2.css
similarity index 100%
rename from app/assets/stylesheets/kul-4.2.css
rename to app/assets/stylesheets/jinda/kul-4.2.css
diff --git a/app/assets/stylesheets/kul-4.2.min.css b/app/assets/stylesheets/jinda/kul-4.2.min.css
similarity index 100%
rename from app/assets/stylesheets/kul-4.2.min.css
rename to app/assets/stylesheets/jinda/kul-4.2.min.css
diff --git a/app/assets/stylesheets/modules.scss b/app/assets/stylesheets/jinda/modules.scss
similarity index 100%
rename from app/assets/stylesheets/modules.scss
rename to app/assets/stylesheets/jinda/modules.scss
diff --git a/app/assets/stylesheets/sarabun.css b/app/assets/stylesheets/jinda/sarabun.css
similarity index 100%
rename from app/assets/stylesheets/sarabun.css
rename to app/assets/stylesheets/jinda/sarabun.css
diff --git a/app/assets/stylesheets/social.scss b/app/assets/stylesheets/jinda/social.scss
similarity index 100%
rename from app/assets/stylesheets/social.scss
rename to app/assets/stylesheets/jinda/social.scss
diff --git a/app/config/routes.rb b/app/config/jinda/routes.rb
similarity index 100%
rename from app/config/routes.rb
rename to app/config/jinda/routes.rb
diff --git a/app/controllers/jinda/concerns/jinda_general_concern.rb b/app/controllers/jinda/concerns/jinda_general_concern.rb
new file mode 100644
index 0000000..8ebe89d
--- /dev/null
+++ b/app/controllers/jinda/concerns/jinda_general_concern.rb
@@ -0,0 +1,179 @@
+module JindaGeneralConcern
+ extend ActiveSupport::Concern
+
+ def index
+ end
+
+ def logs
+ @xmains = Jinda::Xmain.all.desc(:created_at).page(params[:page]).per(10)
+ end
+
+ def error_logs
+ @xmains = Jinda::Xmain.in(status:['E']).desc(:created_at).page(params[:page]).per(10)
+ end
+
+ def notice_logs
+ @notices= Jinda::Notice.desc(:created_at).page(params[:page]).per(10)
+ end
+
+ def pending
+ @title= "Pending Tasks"
+ @xmains = Jinda::Xmain.in(status:['R','I']).asc(:created_at)
+ end
+
+ def cancel
+ Jinda::Xmain.find(params[:id]).update_attributes :status=>'X'
+ if params[:return]
+ redirect_to params[:return]
+ else
+ redirect_to action:"pending"
+ end
+ end
+
+ # process images from first level
+ def get_image(key, params)
+ doc = Jinda::Doc.create(
+ :name=> key.to_s,
+ :xmain=> @xmain.id,
+ :runseq=> @runseq.id,
+ :filename=> params.original_filename,
+ :content_type => params.content_type || 'application/zip',
+ :data_text=> '',
+ :ma_display=>true,
+ :ma_secured => @xmain.service.ma_secured )
+ if defined?(IMAGE_LOCATION)
+ filename = "#{IMAGE_LOCATION}/f#{Param.gen(:asset_id)}"
+ File.open(filename,"wb") { |f| f.write(params.read) }
+ # File.open(filename,"wb") { |f| f.puts(params.read) }
+ eval "@xvars[@runseq.code][key] = '#{url_for(:action=>'document', :id=>doc.id, :only_path => true )}' "
+ doc.update_attributes :url => filename, :basename => File.basename(filename), :cloudinary => false
+ else
+ result = Cloudinary::Uploader.upload(params)
+ eval %Q{ @xvars[@runseq.code][key] = '#{result["url"]}' }
+ doc.update_attributes :url => result["url"], :basename => File.basename(result["url"]), :cloudinary => true
+ end
+ end
+
+ # process images from second level, e.g,, fields_for
+ # save uploaded file info to Doc
+ def get_image1(key, key1, params)
+ doc = Jinda::Doc.create(
+ :name=> "#{key}_#{key1}",
+ :xmain=> @xmain.id,
+ :runseq=> @runseq.id,
+ :filename=> params.original_filename,
+ :content_type => params.content_type || 'application/zip',
+ :data_text=> '',
+ :dscan=> '',
+ :description=>'',
+ :keywords=>'',
+ :category=>'',
+ :ma_display=>true, :ma_secured => @xmain.service.ma_secured )
+ if defined?(IMAGE_LOCATION)
+ filename = "#{IMAGE_LOCATION}/f#{Param.gen(:asset_id)}"
+ File.open(filename,"wb") { |f| f.write(params.read) }
+ eval "@xvars[@runseq.code][key][key1] = '#{url_for(:action=>'document', :id=>doc.id, :only_path => true)}' "
+ doc.update_attributes :url => filename,
+ :basename => File.basename(filename),
+ :cloudinary => false,
+ :dscan => @xvars[@runseq.code][key][key1],
+ :user_id => @xvars["user_id"]
+ else
+ result = Cloudinary::Uploader.upload(params)
+ eval %Q{ @xvars[@runseq.code][key][key1] = '#{result["url"]}' }
+ doc.update_attributes :url => result["url"], :basename => File.basename(result["url"]), :cloudinary => true, :dscan => @xvars[@runseq.code][key][key1]
+ end
+ end
+
+ def doc_print
+ render :file=>'public/doc.html', :layout=>'layouts/print'
+ end
+
+ # generate documentation for application
+ # search data from Doc
+ def document
+ doc = Jinda::Doc.find params[:id]
+ if doc.cloudinary
+ require 'net/http'
+ require "uri"
+ uri = URI.parse(doc.url)
+ data = Net::HTTP.get_response(uri)
+ send_data(data.body, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
+ else
+ data= read_binary(doc.url)
+ send_data(data, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
+ end
+ end
+
+ def doc
+ require 'rdoc'
+ @app= get_app
+ @intro = File.read('README.md')
+ @print= "
+<%= label_tag :role, "Role" %>
+<%= text_field_tag :role, user.role %>
diff --git a/test/dummy-2/app/views/admins/edit_role/select_user.html.erb b/test/dummy-2/app/views/admins/edit_role/select_user.html.erb
new file mode 100644
index 0000000..0753b3a
--- /dev/null
+++ b/test/dummy-2/app/views/admins/edit_role/select_user.html.erb
@@ -0,0 +1,4 @@
+
+ <%= label_tag :code, 'User code' %>
+ <%= select_tag :code, options_from_collection_for_select(User.all.asc(:code), :code, :code), "data-native-menu"=>"false" %>
+
diff --git a/test/dummy-2/app/views/api/v1/note.haml b/test/dummy-2/app/views/api/v1/note.haml
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/app/views/articles/_report.haml b/test/dummy-2/app/views/articles/_report.haml
new file mode 100644
index 0000000..2321958
--- /dev/null
+++ b/test/dummy-2/app/views/articles/_report.haml
@@ -0,0 +1,35 @@
+.box.box-info
+ .box-header.with-border
+ .box-tools.pull-right
+ %button.btn.btn-box-tool{"data-widget" => "collapse", :type => "button"}
+ %i.fa.fa-minus
+ %button.btn.btn-box-tool{"data-widget" => "remove", :type => "button"}
+ %i.fa.fa-times
+ / /.box-header
+ .box-body
+ .table-responsive
+ %table.table.no-margin
+ %thead
+ %tr
+ - unless current_ma_user.nil?
+ - if current_ma_user.role.include?"A"
+ %th Author
+ %th Title
+ %th Description
+ %th Created
+ %th Updated
+ %th Delete
+ %th Edit
+ - report.each do |article|
+ - user = User.find(article.user_id)
+ %tr
+ -# if current_ma_user.role.include?"A"
+ - unless current_ma_user.nil?
+ - if current_ma_user.role.include?"A"
+ %td= user.code
+ %td= link_to article.title, :controller=>"articles", :action=>"show", :article_id => article.id
+ %td= article.text.html_safe
+ %td= article.created_at.strftime('%m/%d/%Y')
+ %td= article.updated_at.strftime('%m/%d/%Y')
+ %td(align='center')= link_to image_tag('delete.png', style:'border:none; float:none;'), {controller: "articles", action: "destroy", article_id: article.id}, data: { confirm: "Please Confirm" }
+ %td(align='center')= link_to image_tag('pencil.png', style:'border:none; float:none;'), {controller: "jinda", action: "init", s: 'articles:xedit_article', article_id: article.id}, data: { confirm: "Please Confirm" }
diff --git a/test/dummy-2/app/views/articles/edit.haml b/test/dummy-2/app/views/articles/edit.haml
new file mode 100644
index 0000000..41f946e
--- /dev/null
+++ b/test/dummy-2/app/views/articles/edit.haml
@@ -0,0 +1,23 @@
+- @title= "Edit"
+- @page_title = 'Edit'
+.container
+ %div.row::before
+ %div.col-md-12
+ %h2.display-3.mt-5.pt-5
+ = @article.title
+ %hr
+ = @article.text
+ %h4.display-5
+ = @article.body.html_safe
+
+ .container
+ .card
+ = form_for @article, :html => {:class => "form-horizontal center"} , :article_id => @article.id do |f|
+ .form-group
+ = f.text_field :title, class: "form-control", :required => true
+ .form-group
+ = f.text_field :text, class: "form-control", :required => true
+ .form-group
+ = f.text_area :body, rows: 10, class: "form-control"
+ .form-group
+ = f.submit "Submit", class: "btn btn-default btn-success"
diff --git a/test/dummy-2/app/views/articles/edit_article/edit_article.html.erb b/test/dummy-2/app/views/articles/edit_article/edit_article.html.erb
new file mode 100644
index 0000000..9f48ada
--- /dev/null
+++ b/test/dummy-2/app/views/articles/edit_article/edit_article.html.erb
@@ -0,0 +1,15 @@
+<%
+ article = Article.find_by :id=> $xvars["select_article"]["title"]
+ %>
+
+ <%= fields_for article do |f| %>
+ <%= f.label :title, "Title" %>
+ <%= f.text_field :title %>
+ <%= f.label :text, "Text" %>
+ <%= f.text_field :text %>
+ <%= f.label :text, "Keywords" %>
+ <%= f.text_field :keywords %>
+ <%= f.label :body, "Body Content" %>
+ <%= f.text_area :body %>
+ <% end %>
+
diff --git a/test/dummy-2/app/views/articles/edit_article/select_article.html.erb b/test/dummy-2/app/views/articles/edit_article/select_article.html.erb
new file mode 100644
index 0000000..5c825f0
--- /dev/null
+++ b/test/dummy-2/app/views/articles/edit_article/select_article.html.erb
@@ -0,0 +1,12 @@
+<%
+ if current_ma_user.role.upcase.split(',').include?("A")
+ article = Article.all.desc(:created_at)
+ else
+ article = Article.where(user: current_ma_user).desc(:created_at)
+ end
+%>
+
+ <%= label_tag :title, 'Article title' %>
+ <%= select_tag :title, options_from_collection_for_select(article, :id, :title), "data-native-menu"=>"false" %>
+
+
diff --git a/test/dummy-2/app/views/articles/index.haml b/test/dummy-2/app/views/articles/index.haml
new file mode 100644
index 0000000..7f05ab8
--- /dev/null
+++ b/test/dummy-2/app/views/articles/index.haml
@@ -0,0 +1,5 @@
+- @title= "All Articles"
+%p
+- @page_title = 'All Articlces'
+= render :partial => 'report', locals: { report: @articles}
+= paginate @articles
diff --git a/test/dummy-2/app/views/articles/my.haml b/test/dummy-2/app/views/articles/my.haml
new file mode 100644
index 0000000..6323325
--- /dev/null
+++ b/test/dummy-2/app/views/articles/my.haml
@@ -0,0 +1,5 @@
+- @title= "My Articles"
+%p
+- @page_title = 'All Articlces'
+= render :partial => 'report', locals: { report: @my_articles}
+= paginate @my_articles
diff --git a/test/dummy-2/app/views/articles/new_article/form_article.html.erb b/test/dummy-2/app/views/articles/new_article/form_article.html.erb
new file mode 100644
index 0000000..2a1900c
--- /dev/null
+++ b/test/dummy-2/app/views/articles/new_article/form_article.html.erb
@@ -0,0 +1,16 @@
+<%- @title= 'New Article' %>
+<%
+ article = @article
+%>
+
+<%= fields_for article do |f| %>
+ <%= f.label :title, "Title" %>
+ <%= f.text_field :title, :required => true %>
+ <%= f.label :text, "Description" %>
+ <%= f.text_field :text, :required => true %>
+ <%= f.label :text, "Keywords" %>
+ <%= f.text_field :keywords %>
+ <%= f.label :body, "Body Content" %>
+ <%= f.text_area :body, :required => true %>
+<% end %>
+
diff --git a/test/dummy-2/app/views/articles/show.html.haml b/test/dummy-2/app/views/articles/show.html.haml
new file mode 100644
index 0000000..88de868
--- /dev/null
+++ b/test/dummy-2/app/views/articles/show.html.haml
@@ -0,0 +1,58 @@
+- title @show[:article][:title]
+- description @show[:article][:text]
+- keywords @show[:article][:keywords]
+.container
+ %div.row::before
+ %div.col-md-12
+ .row-description
+ %h2.display-3.mt-5.pt-5
+ = @show[:article][:title]
+ = link_to image_tag('pencil.png', style:'border:none; float:right;', id: 'article_pen'), {controller: "articles", action: "edit", article_id: @article.id}, data: { confirm: "Please Confirm" }
+ %div.font-weight-light
+ by
+ %img.img-circle{:alt => "User Image", src: @show[:user][:image] }/
+ %div.font-weight-light
+ = @show[:user][:code]
+ %div.font-weight-light
+ = @show[:article][:created_at]
+ %hr
+ = @show[:article][:text]
+ %h4.row-body
+ = @show[:article][:body].html_safe
+ %hr
+ - @show[:comments].each do |comment|
+ %div#article-comment.ui-corner-all
+ .col-md-12
+ %div.small-box.bg-white.text-info
+ %div.inner
+ %div.font-weight-light
+ - user_image = get_user_image(comment.user_id)
+ %img.comment-user-image{:alt => "User Image", src: user_image}/
+
+ %div.font-weight-light
+ Author:
+ %b= comment.name if comment.name
+ %div.right-date
+ 12/12/2021
+ %div#comment-body
+ %i= comment.body
+
+ - if login?
+ %hr
+ %h4.col-md-12
+ Add a comment:
+ = form_with(model: [@show[:article], Comment.new], local: true) do |f|
+ .form-group
+ = f.hidden_field :article_id, :value => @show[:article][:id]
+ .form-group
+ = f.label :body, "Comment"
+ .form-group
+ = f.text_area :body, rows: 5, class: "form-control"
+ .form-group
+ = f.hidden_field :user_id, :value => current_ma_user.id
+ .form-group
+ = f.hidden_field :name, :value => current_ma_user.code
+ .form-group
+ = f.hidden_field :image, :value => current_ma_user.image
+ .form-group
+ = f.submit "Submit", class: "btn btn-default btn-success"
diff --git a/test/dummy-2/app/views/articles/xedit_article/edit_article.html.erb b/test/dummy-2/app/views/articles/xedit_article/edit_article.html.erb
new file mode 100644
index 0000000..1864e1c
--- /dev/null
+++ b/test/dummy-2/app/views/articles/xedit_article/edit_article.html.erb
@@ -0,0 +1,13 @@
+<%
+ article = Article.find_by :id=> $xvars["p"]["article_id"]
+%>
+<%= fields_for article do |f| %>
+ <%= f.label :title, "Title" %>
+ <%= f.text_field :title %>
+ <%= f.label :text, "Description" %>
+ <%= f.text_field :text %>
+ <%= f.label :text, "Keywords" %>
+ <%= f.text_field :keywords %>
+ <%= f.label :body, "Body Content" %>
+ <%= f.text_area :body %>
+<% end %>
diff --git a/test/dummy-2/app/views/ctrs/vfolder1/viewfile1.html.erb b/test/dummy-2/app/views/ctrs/vfolder1/viewfile1.html.erb
new file mode 100644
index 0000000..9dbcb29
--- /dev/null
+++ b/test/dummy-2/app/views/ctrs/vfolder1/viewfile1.html.erb
@@ -0,0 +1,23 @@
+<%#
+ doc = Doc.new :issue_on=> Date.today, :process_at => Time.now
+%>
+<%#= fields_for doc do |f| %>
+ <%#= f.label :rnum, "Reference number" %>
+ <%#= f.text_field :rnum %>
+
+ <%#= f.label :issue_on, "Dated" %>
+ <%#= f.date_field :issue_on, "blackDays"=>[0,6] %>
+ <%#= f.label :summary, "Summary" %>
+ <%#= f.text_area :summary, :cols=>50, :rows=>6 %>
+ <%#= f.label :dscan, "Attached document" %>
+ <%#= f.file_field :dscan %>
+<%# end %>
+<%#= label_tag :hotel, "Ungroup field" %>
+<%#= text_field_tag :hotel %>
+
diff --git a/test/dummy-2/app/views/ctrs/vfolder1/viewfile2.html.erb b/test/dummy-2/app/views/ctrs/vfolder1/viewfile2.html.erb
new file mode 100644
index 0000000..9dbcb29
--- /dev/null
+++ b/test/dummy-2/app/views/ctrs/vfolder1/viewfile2.html.erb
@@ -0,0 +1,23 @@
+<%#
+ doc = Doc.new :issue_on=> Date.today, :process_at => Time.now
+%>
+<%#= fields_for doc do |f| %>
+ <%#= f.label :rnum, "Reference number" %>
+ <%#= f.text_field :rnum %>
+
+ <%#= f.label :issue_on, "Dated" %>
+ <%#= f.date_field :issue_on, "blackDays"=>[0,6] %>
+ <%#= f.label :summary, "Summary" %>
+ <%#= f.text_area :summary, :cols=>50, :rows=>6 %>
+ <%#= f.label :dscan, "Attached document" %>
+ <%#= f.file_field :dscan %>
+<%# end %>
+<%#= label_tag :hotel, "Ungroup field" %>
+<%#= text_field_tag :hotel %>
+
diff --git a/test/dummy-2/app/views/ctrs/vfolder2/viewfile2.html.erb b/test/dummy-2/app/views/ctrs/vfolder2/viewfile2.html.erb
new file mode 100644
index 0000000..9dbcb29
--- /dev/null
+++ b/test/dummy-2/app/views/ctrs/vfolder2/viewfile2.html.erb
@@ -0,0 +1,23 @@
+<%#
+ doc = Doc.new :issue_on=> Date.today, :process_at => Time.now
+%>
+<%#= fields_for doc do |f| %>
+ <%#= f.label :rnum, "Reference number" %>
+ <%#= f.text_field :rnum %>
+
+ <%#= f.label :issue_on, "Dated" %>
+ <%#= f.date_field :issue_on, "blackDays"=>[0,6] %>
+ <%#= f.label :summary, "Summary" %>
+ <%#= f.text_area :summary, :cols=>50, :rows=>6 %>
+ <%#= f.label :dscan, "Attached document" %>
+ <%#= f.file_field :dscan %>
+<%# end %>
+<%#= label_tag :hotel, "Ungroup field" %>
+<%#= text_field_tag :hotel %>
+
diff --git a/test/dummy-2/app/views/custom/_adsense.haml b/test/dummy-2/app/views/custom/_adsense.haml
new file mode 100644
index 0000000..f95d08a
--- /dev/null
+++ b/test/dummy-2/app/views/custom/_adsense.haml
@@ -0,0 +1,6 @@
+%script{:async => "", :src => "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"}
+:javascript
+ (adsbygoogle = window.adsbygoogle || []).push({
+ google_ad_client: "ca-pub-5479990040644502",
+ enable_page_level_ads: true
+ });
diff --git a/test/dummy-2/app/views/docs/doc_edit/doc_edit.html.erb b/test/dummy-2/app/views/docs/doc_edit/doc_edit.html.erb
new file mode 100644
index 0000000..41e60b2
--- /dev/null
+++ b/test/dummy-2/app/views/docs/doc_edit/doc_edit.html.erb
@@ -0,0 +1,21 @@
+<%
+ doc = Jinda::Doc.new :issue_on=> Date.today, :process_at => Time.now
+%>
+<%= fields_for doc do |f| %>
+ <%= f.label :content_type, "Content type" %>
+ <%= f.select :content_type, [["pdf file", "pdf"], ["png file", "png"], ["html file", "html"]] %>
+
+ <%= f.label :issue_on, "Dated" %>
+ <%= f.date_field :issue_on, "blackDays"=>[0,6] %>
+
+ <%= f.label :dscan, "Attached document" %>
+ <%= f.file_field :dscan %>
+ <%= f.label :filename, "File Name" %>
+ <% end %>
+ <%= label_tag :x, "x field" %>
+ <%= text_field_tag :x %>
+
+ <%= label_tag :ma_display, "Display", :class=>"ui-input-text" %>
+ <%= select_tag :ma_display, options_for_select([['Yes', 'y'], ['No', 'n']],'y'), 'data-role'=>"slider" %>
+
diff --git a/test/dummy-2/app/views/docs/doc_edit/doc_select.html.erb b/test/dummy-2/app/views/docs/doc_edit/doc_select.html.erb
new file mode 100644
index 0000000..abb7be7
--- /dev/null
+++ b/test/dummy-2/app/views/docs/doc_edit/doc_select.html.erb
@@ -0,0 +1,14 @@
+
+<%
+ if current_ma_user.role.upcase.split(',').include?("A")
+ note= Jinda::Doc.all.desc(:created_at)
+ else
+ note= Jinda::Doc.where(user: current_ma_user).desc(:created_at)
+ end
+%>
+
+ <%= f.label :category, "Category" %>
+ <%= f.select :category, [["Book", "book"], ["Letter", "letter"], ["Brochure", "brochure"]] %>
+
+
+ <%= f.label :issue_on, "Dated" %>
+ <%= f.date_field :issue_on, "blackDays"=>[0,6] %>
+
+
+ <%= label_tag :description, "Description" %>
+ <%= text_field_tag :description %>
+
+
+ <%= label_tag :ma_display, "Display", :class=>"ui-input-text" %>
+ <%= select_tag :ma_display, options_for_select([['Yes', 'y'], ['No', 'n']],'y'), 'data-role'=>"slider" %>
+
+
+ <%= label_tag :ma_display, "Display", :class=>"ui-input-text" %>
+ <%= label_tag :keywords, "Search Keywords" %>
+ <%= text_field_tag :keywords %>
+
diff --git a/test/dummy-2/app/views/docs/doc_new/doc_form.md b/test/dummy-2/app/views/docs/doc_new/doc_form.md
new file mode 100644
index 0000000..6820c88
--- /dev/null
+++ b/test/dummy-2/app/views/docs/doc_new/doc_form.md
@@ -0,0 +1,36 @@
+
+
+<%= File.read('README.md') %>
+
+***
+
+# Help (UNDER CONSTRUCTION: DUI)
+
+<%= render :partial=>'jinda/modul.md', :collection=> Jinda::Module.all.asc(:seq) %>
+
+***
+
+# Admin
+
+## Data Structure
+
+<%- models= @app.elements["//node[@TEXT='models']"] %>
+
+<%= render :partial=>'jinda/model.md', :collection=> models.map {|m| m.attributes["TEXT"] } %>
+
+***
+
+# Contents
+
+## markdown
+
+This document created and edited with
+
+ <%= label_tag :ma_display, "Display", :class=>"ui-input-text" %>
+ <%= select_tag :ma_display, options_for_select([['Yes', 'y'], ['No', 'n']],'y'), 'data-role'=>"slider" %>
+
diff --git a/test/dummy-2/app/views/docs/edit/select_note.html.erb b/test/dummy-2/app/views/docs/edit/select_note.html.erb
new file mode 100644
index 0000000..e3b9a49
--- /dev/null
+++ b/test/dummy-2/app/views/docs/edit/select_note.html.erb
@@ -0,0 +1,14 @@
+
+<%
+ if current_ma_user.role.upcase.split(',').include?("A")
+ note= Note.all.desc(:created_at)
+ else
+ note= Note.where(user: current_ma_user).desc(:created_at)
+ end
+%>
+
+ <%= fields_for doc do |f| %>
+ <%= f.label :title, "Subject" %>
+ <%= f.text_field :title %>
+ <%= f.label :body, "Content" %>
+ <%= f.text_area :body, :cols=>50, :rows=>6 %>
+ <% end %>
+
diff --git a/test/dummy-2/app/views/notes/mail/select_note.html.erb b/test/dummy-2/app/views/notes/mail/select_note.html.erb
new file mode 100644
index 0000000..b0589e2
--- /dev/null
+++ b/test/dummy-2/app/views/notes/mail/select_note.html.erb
@@ -0,0 +1,19 @@
+
+<%
+ if current_ma_user.role.upcase.split(',').include?("A")
+ note= Note.all.desc(:created_at)
+else
+ note= Note.where(user: current_ma_user).desc(:created_at)
+end
+%>
+
+ <%= label_tag :title, 'Select Note' , :class => "ui_input_text" %>
+
+
+ <%= select_tag :id, options_from_collection_for_select(note, :id, :title), "notee-menu"=>"false" %>
diff --git a/test/dummy-2/app/views/notes/mail/show.html.haml b/test/dummy-2/app/views/notes/mail/show.html.haml
new file mode 100644
index 0000000..c14d640
--- /dev/null
+++ b/test/dummy-2/app/views/notes/mail/show.html.haml
@@ -0,0 +1,13 @@
+- title @note.title
+- description @note.body
+
+- @title= 'Show Note'
+- doc = Note.find_by :id => $xvars["select_note"]["id"]
+= fields_for doc do |f|
+ = f.label :title, "Title"
+ = f.text_field :title
+ %br/
+ = f.label :body, "Body Content"
+ = f.cktext_area :body, :cols=>50, :rows=>6
+
+= link_to image_tag('pencil.png', style:'border:none; float:none;'), {controller: "jinda", action: "init", s: 'notes:xedit', note_id: @note.id}, data: { confirm: "Please Confirm" }
diff --git a/test/dummy-2/app/views/notes/my.haml b/test/dummy-2/app/views/notes/my.haml
new file mode 100644
index 0000000..90317d5
--- /dev/null
+++ b/test/dummy-2/app/views/notes/my.haml
@@ -0,0 +1,21 @@
+- @title= "My Notes"
+%P
+- @page_title = 'My Notes'
+= paginate @notes
+%table{:class=>"module-table", :data-mode => "reflow", :data-role => "table"}
+ %tr
+ %th Title
+ %th Body
+ %th Created
+ %th Updated
+ %th Delete
+ %th Edit
+ - @notes.each do |note|
+ %tr
+ %td= link_to note.title, :controller=>"notes", :action=>"show", :id=>note.id
+ %td= note.body
+ %td= note.created_at.strftime('%m/%d/%Y')
+ %td= note.updated_at.strftime('%m/%d/%Y')
+ %td(align='center')= link_to image_tag('delete.png', style:'border:none; float:none;'), "#", :onclick=>"if (confirm('Please Confirm')) {location.hash='/notes/destroy/#{note.id}';}"
+ %td(align='center')= link_to image_tag('pencil.png', style:'border:none; float:none;'), {controller: "jinda", action: "init", s: 'notes:xedit', note_id: note.id}, data: { confirm: "Please Confirm" }
+
diff --git a/test/dummy-2/app/views/notes/new/new_note.html.erb b/test/dummy-2/app/views/notes/new/new_note.html.erb
new file mode 100644
index 0000000..98ee11a
--- /dev/null
+++ b/test/dummy-2/app/views/notes/new/new_note.html.erb
@@ -0,0 +1,13 @@
+<%- @title= 'New Note' %>
+<%
+ doc = Note.new :issue_on=> Date.today, :process_at => Time.now
+%>
+
+
+ <%= fields_for doc, validate: true do |f| %>
+ <%= f.label :title, "Title" %>
+ <%= f.text_field :title, :required => true %>
+ <%= f.label :body, "Body Content" %>
+ <%= f.text_area :body, :cols=>50, :rows=>6, required: true %>
+<% end %>
+
diff --git a/test/dummy-2/app/views/notes/show.haml b/test/dummy-2/app/views/notes/show.haml
new file mode 100644
index 0000000..bc49be0
--- /dev/null
+++ b/test/dummy-2/app/views/notes/show.haml
@@ -0,0 +1,10 @@
+- @title= 'Show Note'
+- doc = Note.find_by :id => @note.id
+
+%h3.ui-bar.ui-bar-a.ui-corner-all Title: #{@note.title}
+
+.ui-body.ui-body-a.ui-corner-all
+
+ %p #{@note.body}
+
+ = link_to image_tag('pencil.png', style:'border:none; float:none;'), {controller: "jinda", action: "init", s: 'notes:xedit', note_id: @note.id}, data: { confirm: "Please Confirm" }
diff --git a/test/dummy-2/app/views/notes/xedit/edit_note.html.erb b/test/dummy-2/app/views/notes/xedit/edit_note.html.erb
new file mode 100644
index 0000000..7a3bf36
--- /dev/null
+++ b/test/dummy-2/app/views/notes/xedit/edit_note.html.erb
@@ -0,0 +1,10 @@
+<%- @title= 'Edit Note' %>
+<%
+ doc = Note.find_by :id=> $xvars["p"]["note_id"]
+%>
+<%= fields_for doc do |f| %>
+ <%= f.label :title, "Title" %>
+ <%= f.text_field :title %>
+ <%= f.label :body, "Body Content" %>
+ <%= f.text_area :body, :cols=>50, :rows=>6 %>
+<% end %>
diff --git a/test/dummy-2/app/views/password_resets/edit.html.erb b/test/dummy-2/app/views/password_resets/edit.html.erb
new file mode 100644
index 0000000..ea5e439
--- /dev/null
+++ b/test/dummy-2/app/views/password_resets/edit.html.erb
@@ -0,0 +1,21 @@
+<%= form_for @user, :url => password_reset_path(params[:id]) do |f| %>
+ <% if @user.errors.any? %>
+
+
Form is invalid
+
+ <% for message in @user.errors.full_messages %>
+ - <%= message %>
+ <% end %>
+
+
+ <% end %>
+
+ <%= f.label :password %>
+ <%= f.password_field :password %>
+
+
+ <%= f.label :password_confirmation %>
+ <%= f.password_field :password_confirmation %>
+
+
<%= f.submit "Update Password" %>
+<% end %>
\ No newline at end of file
diff --git a/test/dummy-2/app/views/password_resets/new.html.haml b/test/dummy-2/app/views/password_resets/new.html.haml
new file mode 100644
index 0000000..e0c5c35
--- /dev/null
+++ b/test/dummy-2/app/views/password_resets/new.html.haml
@@ -0,0 +1,11 @@
+.container
+ .signup-form
+ .sign_in
+ = form_tag password_resets_path, :method => :post do
+ .form-group.form-control
+ = label_tag :email
+ = text_field_tag :email, params[:email]
+ %button.btn.btn-success.btn-block.actions{:type => "submit"}
+ %i.fas.fa-sign-in-alt
+ Reset Password
+
diff --git a/test/dummy/app/views/sessions/new-bak.html.haml b/test/dummy-2/app/views/sessions/new-bak.html.haml
similarity index 100%
rename from test/dummy/app/views/sessions/new-bak.html.haml
rename to test/dummy-2/app/views/sessions/new-bak.html.haml
diff --git a/test/dummy-2/app/views/sessions/new.html.haml b/test/dummy-2/app/views/sessions/new.html.haml
new file mode 100644
index 0000000..34bf93b
--- /dev/null
+++ b/test/dummy-2/app/views/sessions/new.html.haml
@@ -0,0 +1,35 @@
+.container
+ .signup-form
+ = form_tag "/auth/identity/callback", {'data-ajax'=>'false'} do
+ %h1.h3.mb-3.font-weight-normal{:style => "text-align: center"} Sign in
+ %p.hint-text Sign in with your social media account or Username
+ .social-btn.text-center
+ %a.btn.btn-primary.btn-lg{:href => "/auth/facebook"}
+ %i.fa.fa-facebook
+ Facebook
+ %a.btn.btn-info.btn-lg{:href => "#"}
+ %i.fa.fa-twitter
+ Twitter
+ %a.btn.btn-danger.btn-lg{:href => "/auth/google_oauth2"}
+ %i.fa.fa-google
+ Google
+ .or-seperator
+ %b or
+ .sign_in
+ .label-warning
+ = flash[:alert]
+ .form-group.form-control
+ = label_tag :auth_key, "User name"
+ = text_field_tag :auth_key
+ .form-group.form-control
+ = label_tag :password, "Password"
+ = password_field_tag :password
+ .form-group
+ = label_tag :remember_me
+ = check_box_tag :remember_me, 1, params.permit[:remember_me]
+ %button.btn.btn-success.btn-block.actions{:type => "submit"}
+ %i.fas.fa-sign-in-alt
+ Sign in
+ = link_to 'Forgotten password?', new_password_reset_path, data: {icon: 'info', mini: 'true', role: 'button'}
+ %hr/
+
diff --git a/test/dummy-2/app/views/sitemap/index.xml.haml b/test/dummy-2/app/views/sitemap/index.xml.haml
new file mode 100644
index 0000000..7ebe707
--- /dev/null
+++ b/test/dummy-2/app/views/sitemap/index.xml.haml
@@ -0,0 +1,10 @@
+/= From https://makandracards.com/makandra/689-know-your-haml-comments
+
+!!! XML
+%urlset{:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9"}
+ - for article in @articles
+ %url
+ %loc #{article_url(article)}
+ %lastmod=article.updated_at.strftime('%Y-%m-%d')
+ %changefreq monthly
+ %priority 0.5
\ No newline at end of file
diff --git a/test/dummy-2/app/views/user_mailer/password_reset.html.haml b/test/dummy-2/app/views/user_mailer/password_reset.html.haml
new file mode 100644
index 0000000..52001fe
--- /dev/null
+++ b/test/dummy-2/app/views/user_mailer/password_reset.html.haml
@@ -0,0 +1,3 @@
+To reset your password, click the URL below.
+= edit_password_reset_url(@user.password_reset_token)
+If you did not request your password to be reset, just ignore this email and your password will continue to stay the same.
diff --git a/test/dummy-2/app/views/user_mailer/password_reset.text.erb b/test/dummy-2/app/views/user_mailer/password_reset.text.erb
new file mode 100644
index 0000000..52001fe
--- /dev/null
+++ b/test/dummy-2/app/views/user_mailer/password_reset.text.erb
@@ -0,0 +1,3 @@
+To reset your password, click the URL below.
+= edit_password_reset_url(@user.password_reset_token)
+If you did not request your password to be reset, just ignore this email and your password will continue to stay the same.
diff --git a/test/dummy-2/app/views/user_mailer/password_reset.text.haml b/test/dummy-2/app/views/user_mailer/password_reset.text.haml
new file mode 100644
index 0000000..b9f400b
--- /dev/null
+++ b/test/dummy-2/app/views/user_mailer/password_reset.text.haml
@@ -0,0 +1,3 @@
+UserMailer#password_reset
+
+= @greeting + ", find me in app/views/user_mailer/password_reset.text.haml"
diff --git a/test/dummy-2/app/views/users/index.haml b/test/dummy-2/app/views/users/index.haml
new file mode 100644
index 0000000..95c7aeb
--- /dev/null
+++ b/test/dummy-2/app/views/users/index.haml
@@ -0,0 +1,13 @@
+.field(data-role="fieldcontain")
+ %label.ui-input-text Name
+ = b current_ma_user.code
+.field(data-role="fieldcontain")
+ %label.ui-input-text Email
+ = b current_ma_user.email
+.field(data-role="fieldcontain")
+ %label.ui-input-text Role
+ = b current_ma_user.role
+
+- if @xmains
+ %h2 Pending Tasks
+ = render :partial=>"jinda/pending_page", :locals=>{:xmains=>@xmains}
diff --git a/test/dummy-2/app/views/users/pwd/enter.html.erb b/test/dummy-2/app/views/users/pwd/enter.html.erb
new file mode 100644
index 0000000..664808e
--- /dev/null
+++ b/test/dummy-2/app/views/users/pwd/enter.html.erb
@@ -0,0 +1,6 @@
+<%= label_tag :epass, "Existing password" %>
+<%= password_field_tag :epass %>
+<%= label_tag :npass, "New password" %>
+<%= password_field_tag :npass %>
+<%= label_tag :npass_confirm, "New password confirmation" %>
+<%= password_field_tag :npass_confirm %>
diff --git a/test/dummy-2/app/views/users/user/enter_user.html.erb b/test/dummy-2/app/views/users/user/enter_user.html.erb
new file mode 100644
index 0000000..8ae8bfe
--- /dev/null
+++ b/test/dummy-2/app/views/users/user/enter_user.html.erb
@@ -0,0 +1,10 @@
+<%
+ user = current_ma_user
+%>
+
<%= user.code %>
+<%= fields_for user do |f| %>
+ <%= f.label :email, "Email" %>
+ <%= f.text_field :email %>
+ <%= f.label :image, "image link" %>
+ <%= f.text_field :image%>
+<% end %>
diff --git a/test/dummy-2/bin/rails b/test/dummy-2/bin/rails
new file mode 100755
index 0000000..efc0377
--- /dev/null
+++ b/test/dummy-2/bin/rails
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+APP_PATH = File.expand_path("../config/application", __dir__)
+require_relative "../config/boot"
+require "rails/commands"
diff --git a/test/dummy-2/bin/rake b/test/dummy-2/bin/rake
new file mode 100755
index 0000000..4fbf10b
--- /dev/null
+++ b/test/dummy-2/bin/rake
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+require_relative "../config/boot"
+require "rake"
+Rake.application.run
diff --git a/test/dummy-2/bin/setup b/test/dummy-2/bin/setup
new file mode 100755
index 0000000..57b65c8
--- /dev/null
+++ b/test/dummy-2/bin/setup
@@ -0,0 +1,25 @@
+#!/usr/bin/env ruby
+require "fileutils"
+
+# path to your application root.
+APP_ROOT = File.expand_path("..", __dir__)
+
+def system!(*args)
+ system(*args) || abort("\n== Command #{args} failed ==")
+end
+
+FileUtils.chdir APP_ROOT do
+ # This script is a way to set up or update your development environment automatically.
+ # This script is idempotent, so that you can run it at any time and get an expectable outcome.
+ # Add necessary setup steps to this file.
+
+ puts "== Installing dependencies =="
+ system! "gem install bundler --conservative"
+ system("bundle check") || system!("bundle install")
+
+ puts "\n== Removing old logs and tempfiles =="
+ system! "bin/rails log:clear tmp:clear"
+
+ puts "\n== Restarting application server =="
+ system! "bin/rails restart"
+end
diff --git a/test/dummy-2/config.ru b/test/dummy-2/config.ru
new file mode 100644
index 0000000..4a3c09a
--- /dev/null
+++ b/test/dummy-2/config.ru
@@ -0,0 +1,6 @@
+# This file is used by Rack-based servers to start the application.
+
+require_relative "config/environment"
+
+run Rails.application
+Rails.application.load_server
diff --git a/test/dummy-2/config/application.rb b/test/dummy-2/config/application.rb
new file mode 100644
index 0000000..3c74f92
--- /dev/null
+++ b/test/dummy-2/config/application.rb
@@ -0,0 +1,61 @@
+require_relative "boot"
+
+require "rails"
+# Pick the frameworks you want:
+require "active_model/railtie"
+require "active_job/railtie"
+# require "active_record/railtie"
+# require "active_storage/engine"
+require "action_controller/railtie"
+require "action_mailer/railtie"
+# require "action_mailbox/engine"
+# require "action_text/engine"
+require "action_view/railtie"
+require "action_cable/engine"
+# require "rails/test_unit/railtie"
+
+# Require the gems listed in Gemfile, including any gems
+# you've limited to :test, :development, or :production.
+Bundler.require(*Rails.groups)
+
+module Dummy
+ class Application < Rails::Application
+
+ # Jinda default
+ config.generators do |g|
+ g.orm :mongoid
+ g.template_engine :haml
+ g.test_framework :rspec
+ g.integration_tool :rspec
+ end
+
+ # config time zone
+ config.time_zone = "Central Time (US & Canada)"
+
+ # gmail config
+ # config.action_mailer.delivery_method = :smtp
+ # config.action_mailer.smtp_settings = {
+ # :address => "smtp.gmail.com",
+ # :port => 587,
+ # :user_name => 'user@gmail.com',
+ # :password => 'secret',
+ # :authentication => 'plain',
+ # :enable_starttls_auto => true }
+ # config.action_mailer.raise_delivery_errors = true
+ # config.action_mailer.perform_deliveries = true
+
+ # Initialize configuration defaults for originally generated Rails version.
+ config.load_defaults 7.0
+
+ # Configuration for the application, engines, and railties goes here.
+ #
+ # These settings can be overridden in specific environments using the files
+ # in config/environments, which are processed later.
+ #
+ # config.time_zone = "Central Time (US & Canada)"
+ # config.eager_load_paths << Rails.root.join("extras")
+
+ # Don't generate system test files.
+ config.generators.system_tests = nil
+ end
+end
diff --git a/test/dummy-2/config/boot.rb b/test/dummy-2/config/boot.rb
new file mode 100644
index 0000000..988a5dd
--- /dev/null
+++ b/test/dummy-2/config/boot.rb
@@ -0,0 +1,4 @@
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "bundler/setup" # Set up gems listed in the Gemfile.
+require "bootsnap/setup" # Speed up boot time by caching expensive operations.
diff --git a/test/dummy-2/config/cable.yml b/test/dummy-2/config/cable.yml
new file mode 100644
index 0000000..98367f8
--- /dev/null
+++ b/test/dummy-2/config/cable.yml
@@ -0,0 +1,10 @@
+development:
+ adapter: async
+
+test:
+ adapter: test
+
+production:
+ adapter: redis
+ url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
+ channel_prefix: dummy_production
diff --git a/test/dummy-2/config/cloudinary.yml b/test/dummy-2/config/cloudinary.yml
new file mode 100644
index 0000000..a63dafc
--- /dev/null
+++ b/test/dummy-2/config/cloudinary.yml
@@ -0,0 +1,9 @@
+development:
+ cloud_name: "sample"
+ api_key: "874837483274837"
+ api_secret: "a676b67565c6767a6767d6767f676fe1"
+
+production:
+ cloud_name: "sample"
+ api_key: "874837483274837"
+ api_secret: "a676b67565c6767a6767d6767f676fe1"
diff --git a/test/dummy-2/config/credentials.yml.enc b/test/dummy-2/config/credentials.yml.enc
new file mode 100644
index 0000000..29427e3
--- /dev/null
+++ b/test/dummy-2/config/credentials.yml.enc
@@ -0,0 +1 @@
+rKJOMS7I0Z2/6HTmUtZoHpiofv1hKjyG7PP/xif21dRzKKgCueZV6ImjpU0HdupQYnIheFTCoNdcQmzvzfl0oZaUr03Ox6pf/KGVkEUAwuBPAt76UzNrElzKR1LOctwpmQ6gqCT4AR26lGhpIQDC/XpzT6b4A05C19Xq6vwS4pYBPz119XcKB7dVVGfzhY79NndT1ifklAmWqw2qvoqDp9BdTPpI+HdtjZrbYV8KL0l34lqV/Cf8x2LkvNQjcnCQ8e8tCjNDBFbfQbNrAxQEC832RrQEZ4stK+miW3n+5tEMAwBg7lxyrI8OosHHn5GKnL5geG1NPIosSfgdiFnv0TGGRlaS2d8Is0c0LpWTAMoUN20xl6w6R2HMkumfXLmJLhZEfeZVsLwE11jjSxRLKd8hciqV+W9IqNqV--4BEM1/9dfS1odAZT--IrPmtHRIpZytag1DsyZDSg==
\ No newline at end of file
diff --git a/test/dummy-2/config/environment.rb b/test/dummy-2/config/environment.rb
new file mode 100644
index 0000000..9397e5a
--- /dev/null
+++ b/test/dummy-2/config/environment.rb
@@ -0,0 +1,11 @@
+# Load the Rails application.
+require_relative "application"
+
+# Initialize the Rails application.
+Rails.application.initialize!
+
+# hack to fix cloudinary error https://github.com/archiloque/rest-client/issues/141
+class Hash
+ remove_method :read
+rescue
+end
diff --git a/test/dummy-2/config/environments/development.rb b/test/dummy-2/config/environments/development.rb
new file mode 100644
index 0000000..7feeea1
--- /dev/null
+++ b/test/dummy-2/config/environments/development.rb
@@ -0,0 +1,62 @@
+require "active_support/core_ext/integer/time"
+
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/application.rb.
+
+ # In the development environment your application's code is reloaded any time
+ # it changes. This slows down response time but is perfect for development
+ # since you don't have to restart the web server when you make code changes.
+ config.cache_classes = false
+
+ # Do not eager load code on boot.
+ config.eager_load = false
+
+ # Show full error reports.
+ config.consider_all_requests_local = true
+
+ # Enable server timing
+ config.server_timing = true
+
+ # Enable/disable caching. By default caching is disabled.
+ # Run rails dev:cache to toggle caching.
+ if Rails.root.join("tmp/caching-dev.txt").exist?
+ config.action_controller.perform_caching = true
+ config.action_controller.enable_fragment_cache_logging = true
+
+ config.cache_store = :memory_store
+ config.public_file_server.headers = {
+ "Cache-Control" => "public, max-age=#{2.days.to_i}"
+ }
+ else
+ config.action_controller.perform_caching = false
+
+ config.cache_store = :null_store
+ end
+
+ # Don't care if the mailer can't send.
+ config.action_mailer.raise_delivery_errors = false
+ config.assets.check_precompiled_asset = false
+
+ config.action_mailer.perform_caching = false
+
+ # Print deprecation notices to the Rails logger.
+ config.active_support.deprecation = :log
+
+ # Raise exceptions for disallowed deprecations.
+ config.active_support.disallowed_deprecation = :raise
+
+ # Tell Active Support which deprecation messages to disallow.
+ config.active_support.disallowed_deprecation_warnings = []
+
+ # Suppress logger output for asset requests.
+ config.assets.quiet = true
+
+ # Raises error for missing translations.
+ # config.i18n.raise_on_missing_translations = true
+
+ # Annotate rendered view with file names.
+ # config.action_view.annotate_rendered_view_with_filenames = true
+
+ # Uncomment if you wish to allow Action Cable access from any origin.
+ # config.action_cable.disable_request_forgery_protection = true
+end
diff --git a/test/dummy-2/config/environments/production.rb b/test/dummy-2/config/environments/production.rb
new file mode 100644
index 0000000..806b190
--- /dev/null
+++ b/test/dummy-2/config/environments/production.rb
@@ -0,0 +1,88 @@
+require "active_support/core_ext/integer/time"
+
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/application.rb.
+
+ # Code is not reloaded between requests.
+ config.cache_classes = true
+
+ # Eager load code on boot. This eager loads most of Rails and
+ # your application in memory, allowing both threaded web servers
+ # and those relying on copy on write to perform better.
+ # Rake tasks automatically ignore this option for performance.
+ config.eager_load = true
+
+ # Full error reports are disabled and caching is turned on.
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
+
+ # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
+ # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
+ # config.require_master_key = true
+
+ # Disable serving static files from the `/public` folder by default since
+ # Apache or NGINX already handles this.
+ config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
+
+ # Compress CSS using a preprocessor.
+ # config.assets.css_compressor = :sass
+
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
+ config.assets.compile = false
+ config.assets.compile = true
+
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+ # config.asset_host = "http://assets.example.com"
+
+ # Specifies the header that your server uses for sending files.
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache
+ # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX
+
+ # Mount Action Cable outside main process or domain.
+ # config.action_cable.mount_path = nil
+ # config.action_cable.url = "wss://example.com/cable"
+ # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ]
+
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+ # config.force_ssl = true
+
+ # Include generic and useful information about system operation, but avoid logging too much
+ # information to avoid inadvertent exposure of personally identifiable information (PII).
+ config.log_level = :info
+
+ # Prepend all log lines with the following tags.
+ config.log_tags = [ :request_id ]
+
+ # Use a different cache store in production.
+ # config.cache_store = :mem_cache_store
+
+ # Use a real queuing backend for Active Job (and separate queues per environment).
+ # config.active_job.queue_adapter = :resque
+ # config.active_job.queue_name_prefix = "dummy_production"
+
+ config.action_mailer.perform_caching = false
+
+ # Ignore bad email addresses and do not raise email delivery errors.
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+ # config.action_mailer.raise_delivery_errors = false
+
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+ # the I18n.default_locale when a translation cannot be found).
+ config.i18n.fallbacks = true
+
+ # Don't log any deprecations.
+ config.active_support.report_deprecations = false
+
+ # Use default logging formatter so that PID and timestamp are not suppressed.
+ config.log_formatter = ::Logger::Formatter.new
+
+ # Use a different logger for distributed setups.
+ # require "syslog/logger"
+ # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name")
+
+ if ENV["RAILS_LOG_TO_STDOUT"].present?
+ logger = ActiveSupport::Logger.new(STDOUT)
+ logger.formatter = config.log_formatter
+ config.logger = ActiveSupport::TaggedLogging.new(logger)
+ end
+end
diff --git a/test/dummy-2/config/environments/test.rb b/test/dummy-2/config/environments/test.rb
new file mode 100644
index 0000000..e57c036
--- /dev/null
+++ b/test/dummy-2/config/environments/test.rb
@@ -0,0 +1,57 @@
+require "active_support/core_ext/integer/time"
+
+# The test environment is used exclusively to run your application's
+# test suite. You never need to work with it otherwise. Remember that
+# your test database is "scratch space" for the test suite and is wiped
+# and recreated between test runs. Don't rely on the data there!
+
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/application.rb.
+
+ # Turn false under Spring and add config.action_view.cache_template_loading = true.
+ config.cache_classes = true
+
+ # Eager loading loads your whole application. When running a single test locally,
+ # this probably isn't necessary. It's a good idea to do in a continuous integration
+ # system, or in some way before deploying your code.
+ config.eager_load = ENV["CI"].present?
+
+ # Configure public file server for tests with Cache-Control for performance.
+ config.public_file_server.enabled = true
+ config.public_file_server.headers = {
+ "Cache-Control" => "public, max-age=#{1.hour.to_i}"
+ }
+
+ # Show full error reports and disable caching.
+ config.consider_all_requests_local = true
+ config.action_controller.perform_caching = false
+ config.cache_store = :null_store
+
+ # Raise exceptions instead of rendering exception templates.
+ config.action_dispatch.show_exceptions = false
+
+ # Disable request forgery protection in test environment.
+ config.action_controller.allow_forgery_protection = false
+
+ config.action_mailer.perform_caching = false
+
+ # Tell Action Mailer not to deliver emails to the real world.
+ # The :test delivery method accumulates sent emails in the
+ # ActionMailer::Base.deliveries array.
+ config.action_mailer.delivery_method = :test
+
+ # Print deprecation notices to the stderr.
+ config.active_support.deprecation = :stderr
+
+ # Raise exceptions for disallowed deprecations.
+ config.active_support.disallowed_deprecation = :raise
+
+ # Tell Active Support which deprecation messages to disallow.
+ config.active_support.disallowed_deprecation_warnings = []
+
+ # Raises error for missing translations.
+ # config.i18n.raise_on_missing_translations = true
+
+ # Annotate rendered view with file names.
+ # config.action_view.annotate_rendered_view_with_filenames = true
+end
diff --git a/test/dummy-2/config/initializers/assets.rb b/test/dummy-2/config/initializers/assets.rb
new file mode 100644
index 0000000..2eeef96
--- /dev/null
+++ b/test/dummy-2/config/initializers/assets.rb
@@ -0,0 +1,12 @@
+# Be sure to restart your server when you modify this file.
+
+# Version of your assets, change this if you want to expire all your assets.
+Rails.application.config.assets.version = "1.0"
+
+# Add additional assets to the asset load path.
+# Rails.application.config.assets.paths << Emoji.images_path
+
+# Precompile additional assets.
+# application.js, application.css, and all non-JS/CSS in the app/assets
+# folder are already added.
+# Rails.application.config.assets.precompile += %w( admin.js admin.css )
diff --git a/test/dummy-2/config/initializers/content_security_policy.rb b/test/dummy-2/config/initializers/content_security_policy.rb
new file mode 100644
index 0000000..54f47cf
--- /dev/null
+++ b/test/dummy-2/config/initializers/content_security_policy.rb
@@ -0,0 +1,25 @@
+# Be sure to restart your server when you modify this file.
+
+# Define an application-wide content security policy.
+# See the Securing Rails Applications Guide for more information:
+# https://guides.rubyonrails.org/security.html#content-security-policy-header
+
+# Rails.application.configure do
+# config.content_security_policy do |policy|
+# policy.default_src :self, :https
+# policy.font_src :self, :https, :data
+# policy.img_src :self, :https, :data
+# policy.object_src :none
+# policy.script_src :self, :https
+# policy.style_src :self, :https
+# # Specify URI for violation reports
+# # policy.report_uri "/csp-violation-report-endpoint"
+# end
+#
+# # Generate session nonces for permitted importmap and inline scripts
+# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
+# config.content_security_policy_nonce_directives = %w(script-src)
+#
+# # Report violations without enforcing the policy.
+# # config.content_security_policy_report_only = true
+# end
diff --git a/test/dummy-2/config/initializers/filter_parameter_logging.rb b/test/dummy-2/config/initializers/filter_parameter_logging.rb
new file mode 100644
index 0000000..adc6568
--- /dev/null
+++ b/test/dummy-2/config/initializers/filter_parameter_logging.rb
@@ -0,0 +1,8 @@
+# Be sure to restart your server when you modify this file.
+
+# Configure parameters to be filtered from the log file. Use this to limit dissemination of
+# sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
+# notations and behaviors.
+Rails.application.config.filter_parameters += [
+ :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+]
diff --git a/test/dummy-2/config/initializers/fix_mongoid_generator.rb-org b/test/dummy-2/config/initializers/fix_mongoid_generator.rb-org
new file mode 100644
index 0000000..2800014
--- /dev/null
+++ b/test/dummy-2/config/initializers/fix_mongoid_generator.rb-org
@@ -0,0 +1,14 @@
+require 'rails/generators'
+require 'rails/generators/mongoid/config/config_generator'
+
+if Gem::Version.new(Mongoid::VERSION) >= Gem::Version.new('7.3.0')
+ warn("You may need not this file: #{__FILE__}\nAfter https://github.com/mongodb/mongoid/pull/4953 is released.")
+end
+Mongoid::Generators::ConfigGenerator.class_eval do
+ def app_name
+ # Rails::Application.subclasses.first.parent.to_s.underscore
+ # No more Module#parent
+ # See https://github.com/rails/rails/commit/167b4153cac0069a21e0bb9689cb16f34f6abbaa
+ Rails::Application.subclasses.first.module_parent_name.underscore
+ end
+end
diff --git a/test/dummy-2/config/initializers/inflections.rb b/test/dummy-2/config/initializers/inflections.rb
new file mode 100644
index 0000000..3860f65
--- /dev/null
+++ b/test/dummy-2/config/initializers/inflections.rb
@@ -0,0 +1,16 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format. Inflections
+# are locale specific, and you may define rules for as many different
+# locales as you wish. All of these examples are active by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+# inflect.plural /^(ox)$/i, "\\1en"
+# inflect.singular /^(ox)en/i, "\\1"
+# inflect.irregular "person", "people"
+# inflect.uncountable %w( fish sheep )
+# end
+
+# These inflection rules are supported but not enabled by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+# inflect.acronym "RESTful"
+# end
diff --git a/test/dummy-2/config/initializers/jinda.rb b/test/dummy-2/config/initializers/jinda.rb
new file mode 100644
index 0000000..727f133
--- /dev/null
+++ b/test/dummy-2/config/initializers/jinda.rb
@@ -0,0 +1,14 @@
+# encoding: utf-8
+MM = "#{Rails.root}/app/jinda/index.mm"
+DEFAULT_TITLE = 'Jinda'
+DEFAULT_HEADER = 'Jinda'
+DEFAULT_DESCRIPTION = 'Rails Application Generator'
+DEFAULT_KEYWORDS = %w[Jinda Rails ruby Generator, Prateep Kul]
+GMAP = false
+# ADSENSE = true
+NEXT = "Next >"
+# comment IMAGE_LOCATION to use cloudinary (specify params in config/cloudinary.yml)
+IMAGE_LOCATION = "upload"
+# for debugging
+# DONT_SEND_MAIL = true
+
diff --git a/test/dummy-2/config/initializers/mongoid.rb b/test/dummy-2/config/initializers/mongoid.rb
new file mode 100644
index 0000000..1680d93
--- /dev/null
+++ b/test/dummy-2/config/initializers/mongoid.rb
@@ -0,0 +1,10 @@
+# encoding: utf-8
+ #
+ # Mongoid 6 follows the new pattern of AR5 requiring a belongs_to relation to always require its parent
+ # belongs_to` will now trigger a validation error by default if the association is not present.
+ # You can turn this off on a per-association basis with `optional: true`.
+ # (Note this new default only applies to new Rails apps that will be generated with
+ # `config.active_record.belongs_to_required_by_default = true` in initializer.)
+ #
+ Mongoid::Config.belongs_to_required_by_default = false
+
diff --git a/test/dummy/config/initializers/omniauth.rb b/test/dummy-2/config/initializers/omniauth.rb
similarity index 100%
rename from test/dummy/config/initializers/omniauth.rb
rename to test/dummy-2/config/initializers/omniauth.rb
diff --git a/test/dummy-2/config/initializers/permissions_policy.rb b/test/dummy-2/config/initializers/permissions_policy.rb
new file mode 100644
index 0000000..00f64d7
--- /dev/null
+++ b/test/dummy-2/config/initializers/permissions_policy.rb
@@ -0,0 +1,11 @@
+# Define an application-wide HTTP permissions policy. For further
+# information see https://developers.google.com/web/updates/2018/06/feature-policy
+#
+# Rails.application.config.permissions_policy do |f|
+# f.camera :none
+# f.gyroscope :none
+# f.microphone :none
+# f.usb :none
+# f.fullscreen :self
+# f.payment :self, "https://secure.example.com"
+# end
diff --git a/test/dummy-2/config/locales/en.yml b/test/dummy-2/config/locales/en.yml
new file mode 100644
index 0000000..8ca56fc
--- /dev/null
+++ b/test/dummy-2/config/locales/en.yml
@@ -0,0 +1,33 @@
+# Files in the config/locales directory are used for internationalization
+# and are automatically loaded by Rails. If you want to use locales other
+# than English, add the necessary files in this directory.
+#
+# To use the locales, use `I18n.t`:
+#
+# I18n.t "hello"
+#
+# In views, this is aliased to just `t`:
+#
+# <%= t("hello") %>
+#
+# To use a different locale, set it with `I18n.locale`:
+#
+# I18n.locale = :es
+#
+# This would use the information in config/locales/es.yml.
+#
+# The following keys must be escaped otherwise they will not be retrieved by
+# the default I18n backend:
+#
+# true, false, on, off, yes, no
+#
+# Instead, surround them with single quotes.
+#
+# en:
+# "true": "foo"
+#
+# To learn more, please read the Rails Internationalization guide
+# available at https://guides.rubyonrails.org/i18n.html.
+
+en:
+ hello: "Hello world"
diff --git a/test/dummy-2/config/mongoid.yml b/test/dummy-2/config/mongoid.yml
new file mode 100644
index 0000000..f37ff3d
--- /dev/null
+++ b/test/dummy-2/config/mongoid.yml
@@ -0,0 +1,196 @@
+development:
+ # Configure available database clients. (required)
+ clients:
+ # Defines the default client. (required)
+ default:
+ # Mongoid can connect to a URI accepted by the driver:
+ # uri: mongodb://user:password@mongodb.domain.com:27017/dummy_development
+
+ # Otherwise define the parameters separately.
+ # This defines the name of the default database that Mongoid can connect to.
+ # (required).
+ database: dummy_development
+ # Provides the hosts the default client can connect to. Must be an array
+ # of host:port pairs. (required)
+ hosts:
+ - localhost:27017
+ options:
+ # Note that all options listed below are Ruby driver client options (the mongo gem).
+ # Please refer to the driver documentation of the version of the mongo gem you are using
+ # for the most up-to-date list of options.
+ #
+ # Change the default write concern. (default = { w: 1 })
+ # write:
+ # w: 1
+
+ # Change the default read preference. Valid options for mode are: :secondary,
+ # :secondary_preferred, :primary, :primary_preferred, :nearest
+ # (default: primary)
+ # read:
+ # mode: :secondary_preferred
+ # tag_sets:
+ # - use: web
+
+ # The name of the user for authentication.
+ # user: 'user'
+
+ # The password of the user for authentication.
+ # password: 'password'
+
+ # The user's database roles.
+ # roles:
+ # - 'dbOwner'
+
+ # Change the default authentication mechanism. Valid options are: :scram,
+ # :mongodb_cr, :mongodb_x509, and :plain. Note that all authentication
+ # mechanisms require username and password, with the exception of :mongodb_x509.
+ # Default on mongoDB 3.0 is :scram, default on 2.4 and 2.6 is :plain.
+ # auth_mech: :scram
+
+ # The database or source to authenticate the user against.
+ # (default: the database specified above or admin)
+ # auth_source: admin
+
+ # Force a the driver cluster to behave in a certain manner instead of auto-
+ # discovering. Can be one of: :direct, :replica_set, :sharded. Set to :direct
+ # when connecting to hidden members of a replica set.
+ # connect: :direct
+
+ # Changes the default time in seconds the server monitors refresh their status
+ # via hello commands. (default: 10)
+ # heartbeat_frequency: 10
+
+ # The time in seconds for selecting servers for a near read preference. (default: 0.015)
+ # local_threshold: 0.015
+
+ # The timeout in seconds for selecting a server for an operation. (default: 30)
+ # server_selection_timeout: 30
+
+ # The maximum number of connections in the connection pool. (default: 5)
+ # max_pool_size: 5
+
+ # The minimum number of connections in the connection pool. (default: 1)
+ # min_pool_size: 1
+
+ # The time to wait, in seconds, in the connection pool for a connection
+ # to be checked in before timing out. (default: 5)
+ # wait_queue_timeout: 5
+
+ # The time to wait to establish a connection before timing out, in seconds.
+ # (default: 10)
+ # connect_timeout: 10
+
+ # How long to wait for a response for each operation sent to the
+ # server. This timeout should be set to a value larger than the
+ # processing time for the longest operation that will be executed
+ # by the application. Note that this is a client-side timeout;
+ # the server may continue executing an operation after the client
+ # aborts it with the SocketTimeout exception.
+ # (default: nil, meaning no timeout)
+ # socket_timeout: 5
+
+ # The name of the replica set to connect to. Servers provided as seeds that do
+ # not belong to this replica set will be ignored.
+ # replica_set: name
+
+ # Whether to connect to the servers via ssl. (default: false)
+ # ssl: true
+
+ # The certificate file used to identify the connection against MongoDB.
+ # ssl_cert: /path/to/my.cert
+
+ # The private keyfile used to identify the connection against MongoDB.
+ # Note that even if the key is stored in the same file as the certificate,
+ # both need to be explicitly specified.
+ # ssl_key: /path/to/my.key
+
+ # A passphrase for the private key.
+ # ssl_key_pass_phrase: password
+
+ # Whether to do peer certification validation. (default: true)
+ # ssl_verify: true
+
+ # The file containing concatenated certificate authority certificates
+ # used to validate certs passed from the other end of the connection.
+ # ssl_ca_cert: /path/to/ca.cert
+
+ # Whether to truncate long log lines. (default: true)
+ # truncate_logs: true
+
+ # Configure Mongoid specific options. (optional)
+ options:
+ # Application name that is printed to the mongodb logs upon establishing
+ # a connection in server versions >= 3.4. Note that the name cannot
+ # exceed 128 bytes. It is also used as the database name if the
+ # database name is not explicitly defined. (default: nil)
+ # app_name: MyApplicationName
+
+production:
+ clients:
+ default:
+ uri: <%= ENV['MONGODB_URI'] %>
+ options:
+ raise_not_found_error: false
+ belongs_to_required_by_default: false
+
+
+ # Mark belongs_to associations as required by default, so that saving a
+ # model with a missing belongs_to association will trigger a validation
+ # error. (default: true)
+ # belongs_to_required_by_default: true
+ belongs_to_required_by_default: false
+
+ # Raise an exception when a field is redefined. (default: false)
+ # duplicate_fields_exception: false
+
+ # Include the root model name in json serialization. (default: false)
+ # include_root_in_json: false
+
+ # Include the _type field in serialization. (default: false)
+ # include_type_for_serialization: false
+
+ # Whether to join nested persistence contexts for atomic operations
+ # to parent contexts by default. (default: false)
+ # join_contexts: false
+
+ # Set the Mongoid and Ruby driver log levels when Mongoid is not using
+ # Ruby on Rails logger instance. (default: :info)
+ # log_level: :info
+
+ # Preload all models in development, needed when models use
+ # inheritance. (default: false)
+ # preload_models: false
+
+ # Raise an error when performing a #find and the document is not found.
+ # (default: true)
+ # raise_not_found_error: true
+ raise_not_found_error: false
+
+ # Raise an error when defining a scope with the same name as an
+ # existing method. (default: false)
+ # scope_overwrite_exception: false
+
+ # Use ActiveSupport's time zone in time operations instead of
+ # the Ruby default time zone. See the time zone section below for
+ # further information. (default: true)
+ # use_activesupport_time_zone: true
+
+ # Return stored times as UTC. See the time zone section below for
+ # further information. Most applications should not use this option.
+ # (default: false)
+ # use_utc: false
+
+ # (Deprecated) In MongoDB 4.0 and earlier, set whether to create
+ # indexes in the background by default. (default: false)
+ # background_indexing: false
+
+test:
+ clients:
+ default:
+ database: dummy_test
+ hosts:
+ - localhost:27017
+ options:
+ read:
+ mode: :primary
+ max_pool_size: 1
diff --git a/test/dummy-2/config/mongoid.yml-docker b/test/dummy-2/config/mongoid.yml-docker
new file mode 100644
index 0000000..9be8e88
--- /dev/null
+++ b/test/dummy-2/config/mongoid.yml-docker
@@ -0,0 +1,182 @@
+development:
+ # Configure available database clients. (required)
+ clients:
+ # Defines the default client. (required)
+ default:
+ # Mongoid can connect to a URI accepted by the driver:
+ # uri: mongodb://user:password@mongodb.domain.com:27017/shop263603_development
+
+ # Otherwise define the parameters separately.
+ # This defines the name of the default database that Mongoid can connect to.
+ # (required).
+ database: shop263603_development
+ # Provides the hosts the default client can connect to. Must be an array
+ # of host:port pairs. (required)
+ hosts:
+ # - localhost:27017
+ - mongodb
+ options:
+ # Note that all options listed below are Ruby driver client options (the mongo gem).
+ # Please refer to the driver documentation of the version of the mongo gem you are using
+ # for the most up-to-date list of options.
+ #
+ # Change the default write concern. (default = { w: 1 })
+ # write:
+ # w: 1
+
+ # Change the default read preference. Valid options for mode are: :secondary,
+ # :secondary_preferred, :primary, :primary_preferred, :nearest
+ # (default: primary)
+ # read:
+ # mode: :secondary_preferred
+ # tag_sets:
+ # - use: web
+
+ # The name of the user for authentication.
+ # user: 'user'
+
+ # The password of the user for authentication.
+ # password: 'password'
+
+ # The user's database roles.
+ # roles:
+ # - 'dbOwner'
+
+ # Change the default authentication mechanism. Valid options are: :scram,
+ # :mongodb_cr, :mongodb_x509, and :plain. Note that all authentication
+ # mechanisms require username and password, with the exception of :mongodb_x509.
+ # Default on mongoDB 3.0 is :scram, default on 2.4 and 2.6 is :plain.
+ # auth_mech: :scram
+
+ # The database or source to authenticate the user against.
+ # (default: the database specified above or admin)
+ # auth_source: admin
+
+ # Force a the driver cluster to behave in a certain manner instead of auto-
+ # discovering. Can be one of: :direct, :replica_set, :sharded. Set to :direct
+ # when connecting to hidden members of a replica set.
+ # connect: :direct
+
+ # Changes the default time in seconds the server monitors refresh their status
+ # via ismaster commands. (default: 10)
+ # heartbeat_frequency: 10
+
+ # The time in seconds for selecting servers for a near read preference. (default: 0.015)
+ # local_threshold: 0.015
+
+ # The timeout in seconds for selecting a server for an operation. (default: 30)
+ # server_selection_timeout: 30
+
+ # The maximum number of connections in the connection pool. (default: 5)
+ # max_pool_size: 5
+
+ # The minimum number of connections in the connection pool. (default: 1)
+ # min_pool_size: 1
+
+ # The time to wait, in seconds, in the connection pool for a connection
+ # to be checked in before timing out. (default: 5)
+ # wait_queue_timeout: 5
+
+ # The time to wait to establish a connection before timing out, in seconds.
+ # (default: 10)
+ # connect_timeout: 10
+
+ # The timeout to wait to execute operations on a socket before raising an error.
+ # (default: 5)
+ # socket_timeout: 5
+
+ # The name of the replica set to connect to. Servers provided as seeds that do
+ # not belong to this replica set will be ignored.
+ # replica_set: name
+
+ # Whether to connect to the servers via ssl. (default: false)
+ # ssl: true
+
+ # The certificate file used to identify the connection against MongoDB.
+ # ssl_cert: /path/to/my.cert
+
+ # The private keyfile used to identify the connection against MongoDB.
+ # Note that even if the key is stored in the same file as the certificate,
+ # both need to be explicitly specified.
+ # ssl_key: /path/to/my.key
+
+ # A passphrase for the private key.
+ # ssl_key_pass_phrase: password
+
+ # Whether to do peer certification validation. (default: true)
+ # ssl_verify: true
+
+ # The file containing concatenated certificate authority certificates
+ # used to validate certs passed from the other end of the connection.
+ # ssl_ca_cert: /path/to/ca.cert
+
+ # Whether to truncate long log lines. (default: true)
+ # truncate_logs: true
+
+ # Configure Mongoid specific options. (optional)
+ options:
+ # Includes the root model name in json serialization. (default: false)
+ # include_root_in_json: false
+
+ # Include the _type field in serialization. (default: false)
+ # include_type_for_serialization: false
+
+ # Preload all models in development, needed when models use
+ # inheritance. (default: false)
+ # preload_models: false
+
+ # Raise an error when performing a #find and the document is not found.
+ # (default: true)
+ # raise_not_found_error: true
+ raise_not_found_error: false
+
+ # Raise an error when defining a scope with the same name as an
+ # existing method. (default: false)
+ # scope_overwrite_exception: false
+
+ # Raise an error when defining a field with the same name as an
+ # existing method. (default: false)
+ # duplicate_fields_exception: false
+
+ # Use Active Support's time zone in conversions. (default: true)
+ # use_activesupport_time_zone: true
+
+ # Ensure all times are UTC in the app side. (default: false)
+ # use_utc: false
+
+ # Set the Mongoid and Ruby driver log levels when not in a Rails
+ # environment. The Mongoid logger will be set to the Rails logger
+ # otherwise.(default: :info)
+ # log_level: :info
+
+ # Control whether `belongs_to` association is required. By default
+ # `belongs_to` will trigger a validation error if the association
+ # is not present. (default: true)
+ # belongs_to_required_by_default: true
+ belongs_to_required_by_default: false
+
+ # Application name that is printed to the mongodb logs upon establishing a
+ # connection in server versions >= 3.4. Note that the name cannot exceed 128 bytes.
+ # app_name: MyApplicationName
+
+production:
+ clients:
+ default:
+ uri: <%= ENV['MONGODB_URI'] %>
+ options:
+ raise_not_found_error: false
+ belongs_to_required_by_default: false
+
+
+ # Use background indexes by default if `background` option not specified. (default: false)
+ # background_indexing: false
+test:
+ clients:
+ default:
+ database: shop263603_test
+ hosts:
+ - localhost:27017
+ options:
+ read:
+ mode: :primary
+ max_pool_size: 1
diff --git a/test/dummy-2/config/mongoid.yml-localhost b/test/dummy-2/config/mongoid.yml-localhost
new file mode 100644
index 0000000..6c0c902
--- /dev/null
+++ b/test/dummy-2/config/mongoid.yml-localhost
@@ -0,0 +1,182 @@
+development:
+ # Configure available database clients. (required)
+ clients:
+ # Defines the default client. (required)
+ default:
+ # Mongoid can connect to a URI accepted by the driver:
+ # uri: mongodb://user:password@mongodb.domain.com:27017/shop263603_development
+
+ # Otherwise define the parameters separately.
+ # This defines the name of the default database that Mongoid can connect to.
+ # (required).
+ database: shop263603_development
+ # Provides the hosts the default client can connect to. Must be an array
+ # of host:port pairs. (required)
+ hosts:
+ - localhost:27017
+ # - mongodb
+ options:
+ # Note that all options listed below are Ruby driver client options (the mongo gem).
+ # Please refer to the driver documentation of the version of the mongo gem you are using
+ # for the most up-to-date list of options.
+ #
+ # Change the default write concern. (default = { w: 1 })
+ # write:
+ # w: 1
+
+ # Change the default read preference. Valid options for mode are: :secondary,
+ # :secondary_preferred, :primary, :primary_preferred, :nearest
+ # (default: primary)
+ # read:
+ # mode: :secondary_preferred
+ # tag_sets:
+ # - use: web
+
+ # The name of the user for authentication.
+ # user: 'user'
+
+ # The password of the user for authentication.
+ # password: 'password'
+
+ # The user's database roles.
+ # roles:
+ # - 'dbOwner'
+
+ # Change the default authentication mechanism. Valid options are: :scram,
+ # :mongodb_cr, :mongodb_x509, and :plain. Note that all authentication
+ # mechanisms require username and password, with the exception of :mongodb_x509.
+ # Default on mongoDB 3.0 is :scram, default on 2.4 and 2.6 is :plain.
+ # auth_mech: :scram
+
+ # The database or source to authenticate the user against.
+ # (default: the database specified above or admin)
+ # auth_source: admin
+
+ # Force a the driver cluster to behave in a certain manner instead of auto-
+ # discovering. Can be one of: :direct, :replica_set, :sharded. Set to :direct
+ # when connecting to hidden members of a replica set.
+ # connect: :direct
+
+ # Changes the default time in seconds the server monitors refresh their status
+ # via ismaster commands. (default: 10)
+ # heartbeat_frequency: 10
+
+ # The time in seconds for selecting servers for a near read preference. (default: 0.015)
+ # local_threshold: 0.015
+
+ # The timeout in seconds for selecting a server for an operation. (default: 30)
+ # server_selection_timeout: 30
+
+ # The maximum number of connections in the connection pool. (default: 5)
+ # max_pool_size: 5
+
+ # The minimum number of connections in the connection pool. (default: 1)
+ # min_pool_size: 1
+
+ # The time to wait, in seconds, in the connection pool for a connection
+ # to be checked in before timing out. (default: 5)
+ # wait_queue_timeout: 5
+
+ # The time to wait to establish a connection before timing out, in seconds.
+ # (default: 10)
+ # connect_timeout: 10
+
+ # The timeout to wait to execute operations on a socket before raising an error.
+ # (default: 5)
+ # socket_timeout: 5
+
+ # The name of the replica set to connect to. Servers provided as seeds that do
+ # not belong to this replica set will be ignored.
+ # replica_set: name
+
+ # Whether to connect to the servers via ssl. (default: false)
+ # ssl: true
+
+ # The certificate file used to identify the connection against MongoDB.
+ # ssl_cert: /path/to/my.cert
+
+ # The private keyfile used to identify the connection against MongoDB.
+ # Note that even if the key is stored in the same file as the certificate,
+ # both need to be explicitly specified.
+ # ssl_key: /path/to/my.key
+
+ # A passphrase for the private key.
+ # ssl_key_pass_phrase: password
+
+ # Whether to do peer certification validation. (default: true)
+ # ssl_verify: true
+
+ # The file containing concatenated certificate authority certificates
+ # used to validate certs passed from the other end of the connection.
+ # ssl_ca_cert: /path/to/ca.cert
+
+ # Whether to truncate long log lines. (default: true)
+ # truncate_logs: true
+
+ # Configure Mongoid specific options. (optional)
+ options:
+ # Includes the root model name in json serialization. (default: false)
+ # include_root_in_json: false
+
+ # Include the _type field in serialization. (default: false)
+ # include_type_for_serialization: false
+
+ # Preload all models in development, needed when models use
+ # inheritance. (default: false)
+ # preload_models: false
+
+ # Raise an error when performing a #find and the document is not found.
+ # (default: true)
+ # raise_not_found_error: true
+ raise_not_found_error: false
+
+ # Raise an error when defining a scope with the same name as an
+ # existing method. (default: false)
+ # scope_overwrite_exception: false
+
+ # Raise an error when defining a field with the same name as an
+ # existing method. (default: false)
+ # duplicate_fields_exception: false
+
+ # Use Active Support's time zone in conversions. (default: true)
+ # use_activesupport_time_zone: true
+
+ # Ensure all times are UTC in the app side. (default: false)
+ # use_utc: false
+
+ # Set the Mongoid and Ruby driver log levels when not in a Rails
+ # environment. The Mongoid logger will be set to the Rails logger
+ # otherwise.(default: :info)
+ # log_level: :info
+
+ # Control whether `belongs_to` association is required. By default
+ # `belongs_to` will trigger a validation error if the association
+ # is not present. (default: true)
+ # belongs_to_required_by_default: true
+ belongs_to_required_by_default: false
+
+ # Application name that is printed to the mongodb logs upon establishing a
+ # connection in server versions >= 3.4. Note that the name cannot exceed 128 bytes.
+ # app_name: MyApplicationName
+
+production:
+ clients:
+ default:
+ uri: <%= ENV['MONGODB_URI'] %>
+ options:
+ raise_not_found_error: false
+ belongs_to_required_by_default: false
+
+
+ # Use background indexes by default if `background` option not specified. (default: false)
+ # background_indexing: false
+test:
+ clients:
+ default:
+ database: shop263603_test
+ hosts:
+ - localhost:27017
+ options:
+ read:
+ mode: :primary
+ max_pool_size: 1
diff --git a/test/dummy-2/config/puma.rb b/test/dummy-2/config/puma.rb
new file mode 100644
index 0000000..daaf036
--- /dev/null
+++ b/test/dummy-2/config/puma.rb
@@ -0,0 +1,43 @@
+# Puma can serve each request in a thread from an internal thread pool.
+# The `threads` method setting takes two numbers: a minimum and maximum.
+# Any libraries that use thread pools should be configured to match
+# the maximum value specified for Puma. Default is set to 5 threads for minimum
+# and maximum; this matches the default thread size of Active Record.
+#
+max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
+min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
+threads min_threads_count, max_threads_count
+
+# Specifies the `worker_timeout` threshold that Puma will use to wait before
+# terminating a worker in development environments.
+#
+worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
+
+# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
+#
+port ENV.fetch("PORT") { 3000 }
+
+# Specifies the `environment` that Puma will run in.
+#
+environment ENV.fetch("RAILS_ENV") { "development" }
+
+# Specifies the `pidfile` that Puma will use.
+pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
+
+# Specifies the number of `workers` to boot in clustered mode.
+# Workers are forked web server processes. If using threads and workers together
+# the concurrency of the application would be max `threads` * `workers`.
+# Workers do not work on JRuby or Windows (both of which do not support
+# processes).
+#
+# workers ENV.fetch("WEB_CONCURRENCY") { 2 }
+
+# Use the `preload_app!` method when specifying a `workers` number.
+# This directive tells Puma to first boot the application and load code
+# before forking the application. This takes advantage of Copy On Write
+# process behavior so workers use less memory.
+#
+# preload_app!
+
+# Allow puma to be restarted by `bin/rails restart` command.
+plugin :tmp_restart
diff --git a/test/dummy-2/config/routes.rb b/test/dummy-2/config/routes.rb
new file mode 100644
index 0000000..06b4a51
--- /dev/null
+++ b/test/dummy-2/config/routes.rb
@@ -0,0 +1,7 @@
+Rails.application.routes.draw do
+ root :to => 'jinda#index'
+ # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
+
+ # Defines the root path route ("/")
+ # root "articles#index"
+end
diff --git a/test/dummy-2/db/seeds.rb b/test/dummy-2/db/seeds.rb
new file mode 100644
index 0000000..e13ea94
--- /dev/null
+++ b/test/dummy-2/db/seeds.rb
@@ -0,0 +1,6 @@
+unless Identity.where(code:"admin").exists?
+ identity= Identity.create :code => "admin", :email => "admin@test.com", :password => "secret",
+ :password_confirmation => "secret"
+ User.create :provider => "identity", :uid => identity.id.to_s, :code => identity.code,
+ :email => identity.email, :role => "M,A,D"
+end
diff --git a/test/dummy/docker-compose.yml b/test/dummy-2/docker-compose.yml
similarity index 100%
rename from test/dummy/docker-compose.yml
rename to test/dummy-2/docker-compose.yml
diff --git a/test/dummy-2/dot/.rspec b/test/dummy-2/dot/.rspec
new file mode 100644
index 0000000..89aa361
--- /dev/null
+++ b/test/dummy-2/dot/.rspec
@@ -0,0 +1,4 @@
+--color
+--format documentation
+--require spec_helper
+--require rails_helper
diff --git a/test/dummy-2/dot/dot.env b/test/dummy-2/dot/dot.env
new file mode 100644
index 0000000..b338aa1
--- /dev/null
+++ b/test/dummy-2/dot/dot.env
@@ -0,0 +1,2 @@
+FACEBOOK_API="16x"
+FACEBOOK_KEY="32x"
diff --git a/test/dummy/entrypoint.sh b/test/dummy-2/entrypoint.sh
similarity index 100%
rename from test/dummy/entrypoint.sh
rename to test/dummy-2/entrypoint.sh
diff --git a/test/dummy-2/lib/assets/.keep b/test/dummy-2/lib/assets/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/lib/tasks/.keep b/test/dummy-2/lib/tasks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/log/.keep b/test/dummy-2/log/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/public/404.html b/test/dummy-2/public/404.html
new file mode 100644
index 0000000..2be3af2
--- /dev/null
+++ b/test/dummy-2/public/404.html
@@ -0,0 +1,67 @@
+
+
+
+
The page you were looking for doesn't exist (404)
+
+
+
+
+
+
+
+
+
The page you were looking for doesn't exist.
+
You may have mistyped the address or the page may have moved.
+
+
If you are the application owner check the logs for more information.
+
+
+
diff --git a/test/dummy-2/public/422.html b/test/dummy-2/public/422.html
new file mode 100644
index 0000000..c08eac0
--- /dev/null
+++ b/test/dummy-2/public/422.html
@@ -0,0 +1,67 @@
+
+
+
+
The change you wanted was rejected (422)
+
+
+
+
+
+
+
+
+
The change you wanted was rejected.
+
Maybe you tried to change something you didn't have access to.
+
+
If you are the application owner check the logs for more information.
+
+
+
diff --git a/test/dummy-2/public/500.html b/test/dummy-2/public/500.html
new file mode 100644
index 0000000..78a030a
--- /dev/null
+++ b/test/dummy-2/public/500.html
@@ -0,0 +1,66 @@
+
+
+
+
We're sorry, but something went wrong (500)
+
+
+
+
+
+
+
+
+
We're sorry, but something went wrong.
+
+
If you are the application owner check the logs for more information.
+
+
+
diff --git a/test/dummy-2/public/apple-touch-icon-precomposed.png b/test/dummy-2/public/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/public/apple-touch-icon.png b/test/dummy-2/public/apple-touch-icon.png
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/public/favicon.ico b/test/dummy-2/public/favicon.ico
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/public/robots.txt b/test/dummy-2/public/robots.txt
new file mode 100644
index 0000000..c19f78a
--- /dev/null
+++ b/test/dummy-2/public/robots.txt
@@ -0,0 +1 @@
+# See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
diff --git a/test/dummy-2/spec/controllers/api/v1_get_index_spec.rb b/test/dummy-2/spec/controllers/api/v1_get_index_spec.rb
new file mode 100644
index 0000000..d5cc346
--- /dev/null
+++ b/test/dummy-2/spec/controllers/api/v1_get_index_spec.rb
@@ -0,0 +1,23 @@
+require 'rails_helper'
+# describe Api::V1::NotesController, '#index', type: :request do
+RSpec.describe 'Notes API', type: :request do
+ # let(:notes) { create_list(:note,1)}
+ # let!(:notes) {Note.create(title: "dddd", body: "body")}
+ let!(:note) {FactoryBot.create_list(:note, 9)}
+ let(:note_id) { notes.first.id }
+
+ describe 'GET /api/v1/notes' do
+ before { get api_v1_notes_path }
+
+ it 'returns notes size as expected' do
+ expect(json).not_to be_empty
+ expect(json.size).to eq(9)
+ end
+
+ it 'returns status code 200' do
+ expect(response).to have_http_status(:success)
+ end
+
+ end
+end
+
diff --git a/test/dummy-2/spec/controllers/api/v1_get_my_spec.rb b/test/dummy-2/spec/controllers/api/v1_get_my_spec.rb
new file mode 100644
index 0000000..311c965
--- /dev/null
+++ b/test/dummy-2/spec/controllers/api/v1_get_my_spec.rb
@@ -0,0 +1,14 @@
+require 'rails_helper'
+
+RSpec.describe 'Notes API', type: :request do
+ let!(:note) {FactoryBot.create_list(:note, 9)}
+ before {get api_v1_notes_my_path}
+
+ it 'returns all notes' do
+ expect(json.size).to eq(9)
+ end
+ it 'returns status code 200' do
+ expect(response).to have_http_status(:success)
+ end
+end
+
diff --git a/test/dummy-2/spec/controllers/api/v1_post_spec.rb b/test/dummy-2/spec/controllers/api/v1_post_spec.rb
new file mode 100644
index 0000000..6c33d30
--- /dev/null
+++ b/test/dummy-2/spec/controllers/api/v1_post_spec.rb
@@ -0,0 +1,19 @@
+require 'rails_helper'
+describe Api::V1::NotesController , type: :controller do
+
+ before do
+ create_and_sign_in_user
+ post :create , params: { :body => 'test_body', :title => 'test_title', :user => User.first}
+ end
+
+ it 'returns the title' do
+ expect(JSON.parse(@response.body)['title']).to eq('test_title')
+ end
+ it 'returns the body' do
+ expect(JSON.parse(@response.body)['body']).to eq('test_body')
+ end
+
+ it 'returns a created status' do
+ expect(response).to have_http_status(:created)
+ end
+end
diff --git a/test/dummy-2/spec/controllers/sessions_controller_spec.rb b/test/dummy-2/spec/controllers/sessions_controller_spec.rb
new file mode 100644
index 0000000..042e22b
--- /dev/null
+++ b/test/dummy-2/spec/controllers/sessions_controller_spec.rb
@@ -0,0 +1,98 @@
+# sessions_controller_spec.rb
+# 1. Set up the mock
+# 2. Make the request
+# 3. Test whatever code is attached to the callback
+# require 'spec_helper'
+require 'rails_helper'
+describe SessionsController, type: :controller do
+
+ describe "Google" do
+
+ before do
+
+ @request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:google_oauth2]
+ visit '/auth/google_oauth2'
+ end
+
+ describe "#create" do
+
+ it "should successfully create a session" do
+ session[:user_id].should be_nil
+ post :create, params: {provider: :google_oauth2}
+ session[:user_id].should_not be_nil
+ end
+
+ it "should redirect the user to root_path " do
+ post :create, params: {provider: :google_oauth2}
+ response.should redirect_to root_path
+ end
+
+ end
+
+ #describe "#destroy", js: true do
+ describe "#destroy" do
+ before do
+ post :create, params: {provider: :google_oauth2}
+ end
+
+ it "should clear the session" do
+ session[:user_id].should_not be_nil
+ delete :destroy
+ session[:user_id].should be_nil
+ end
+
+ it "should redirect to the home page" do
+ delete :destroy
+ # response.should redirect_to root_url
+ # https://stackoverflow.com/questions/5144758/how-to-test-a-javascript-redirect-with-rspec
+ response.body.should include("window.location")
+ end
+ end
+ end
+
+ skip describe "Facebook" do
+ # skip or finish at config facebook
+
+ before do
+ @request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:facebook]
+ visit '/auth/facebook'
+ end
+
+ describe "#create" do
+
+ it "should successfully create a session" do
+ session[:user_id].should be_nil
+ post :create, params: {provider: :facebook}
+ session[:user_id].should_not be_nil
+ end
+
+ it "should redirect the user to the articles/my url" do
+ post :create, params: {provider: :facebook}
+ response.should redirect_to articles_my_path
+ end
+
+ end
+
+ describe "#destroy" do
+ before do
+ post :create, params: {provider: :facebook}
+ end
+
+ it "should clear the session" do
+ session[:user_id].should_not be_nil
+ delete :destroy
+ session[:user_id].should be_nil
+ end
+
+ it "should redirect to the home page" do
+ delete :destroy
+ # response.should redirect_to root_url
+ # https://stackoverflow.com/questions/5144758/how-to-test-a-javascript-redirect-with-rspec
+ response.body.should include("window.location")
+ end
+ end
+ end
+
+end
+
+
diff --git a/test/dummy-2/spec/features/userlogins_spec.rb b/test/dummy-2/spec/features/userlogins_spec.rb
new file mode 100644
index 0000000..0fbc6c0
--- /dev/null
+++ b/test/dummy-2/spec/features/userlogins_spec.rb
@@ -0,0 +1,23 @@
+require 'rails_helper'
+
+RSpec.feature "Userlogins", type: :feature do
+ scenario "Admin User Sign In" do
+ skip visit "/sessions/new"
+
+ fill_in "User name", :with => "admin"
+ fill_in "Password", :with => "secret1"
+ click_button "Sign In"
+
+ xexpect(page).to have_text("My Articles")
+ end
+
+ scenario "Google User Sign In" do
+ visit "/auth/google_oauth2"
+ expect(page).to have_text("My Articles")
+ end
+
+
+
+
+
+end
diff --git a/test/dummy-2/spec/mailers/note_spec.rb b/test/dummy-2/spec/mailers/note_spec.rb
new file mode 100644
index 0000000..ebc7900
--- /dev/null
+++ b/test/dummy-2/spec/mailers/note_spec.rb
@@ -0,0 +1,24 @@
+require 'rails_helper'
+
+RSpec.describe NoteMailer do
+
+
+ describe 'gmail' do
+
+ let(:mail) {NoteMailer.gmail("Test Body", "receiver@email.com", "Test title", "from@example.com")}
+
+
+ it 'renders the subject' do
+ expect(mail.subject).to eql('Test title')
+ end
+
+ it 'renders the receiver email' do
+ expect(mail.to).to eql(['receiver@email.com'])
+ end
+
+ it 'renders the sender email' do
+ expect(mail.from).to eql(['from@example.com'])
+ end
+ end
+
+end
diff --git a/test/dummy-2/spec/mailers/previews/note_preview.rb b/test/dummy-2/spec/mailers/previews/note_preview.rb
new file mode 100644
index 0000000..4a59518
--- /dev/null
+++ b/test/dummy-2/spec/mailers/previews/note_preview.rb
@@ -0,0 +1,9 @@
+# Preview all emails at http://localhost:3000/rails/mailers/note
+class NotePreview < ActionMailer::Preview
+
+ # Preview this email at http://localhost:3000/rails/mailers/note/gmail
+ def gmail
+ NoteMailer.gmail
+ end
+
+end
diff --git a/test/dummy-2/spec/models/note_spec.rb b/test/dummy-2/spec/models/note_spec.rb
new file mode 100644
index 0000000..b6402d5
--- /dev/null
+++ b/test/dummy-2/spec/models/note_spec.rb
@@ -0,0 +1,41 @@
+require 'rails_helper'
+
+RSpec.describe Note, type: :model do
+ describe "Required only title (Maximum 30)" do
+
+ it "valid with both title and body" do
+ before_count = Note.count
+ Note.create(title: "dddd", body: "body")
+ expect(Note.count).not_to eq(before_count)
+ end
+
+ it "valid with only title" do
+ before_count = Note.count
+ Note.create(title: "Title")
+ expect(Note.count).not_to eq(before_count)
+ end
+
+ it "invalid with only body" do
+ before_count = Note.count
+ Note.new(body: "body")
+ expect(Note.count).to eq(before_count)
+ end
+
+ it "invalid body length more than 1000" do
+ before_count = Note.count
+ title_max = "x"*30
+ body_max = "y"*1001
+ Note.create(title: title_max, body: body_max)
+ expect(Note.count).to eq(before_count)
+ end
+ end
+
+ describe "title data blank" do
+ it "auto fill from body" do
+ note = Note.create(:title => "", :body => "Body content")
+ note.title.should == "Body content"
+ end
+ end
+
+end
+
diff --git a/test/dummy-2/spec/models/user_spec.rb b/test/dummy-2/spec/models/user_spec.rb
new file mode 100644
index 0000000..f340199
--- /dev/null
+++ b/test/dummy-2/spec/models/user_spec.rb
@@ -0,0 +1,12 @@
+require 'rails_helper'
+
+RSpec.describe "User", :type => :model do
+ it "prevents duplicates " do
+ user1 = create(:user, code: 'abc', email: 'test@email.com')
+ user2 = build(:user, code: 'abc', email: 'test@email.com')
+
+ user1.should be_valid
+ #user2.should be_valid
+ user2.should_not have_valid(:code)
+ end
+end
diff --git a/test/dummy-2/spec/rails_helper.rb b/test/dummy-2/spec/rails_helper.rb
new file mode 100644
index 0000000..e8bfb91
--- /dev/null
+++ b/test/dummy-2/spec/rails_helper.rb
@@ -0,0 +1,42 @@
+# This file is copied to spec/ when you run 'rails generate rspec:install'
+ENV['RAILS_ENV'] ||= 'test'
+require File.expand_path('../../config/environment', __FILE__)
+Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } # Add this at top of file
+# 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 'spec_helper'
+
+RSpec.configure do |config|
+
+ # Add create_and_sign_in_user
+ config.include AuthenticationHelper, type: :controller
+
+ # To include RequestSpecHelper
+ config.include RequestSpecHelper, type: :request
+
+ # 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")
+
+
+
+ # Added to make factorybot work
+ # FactoryBot.allow_class_lookup = false
+ config.use_transactional_fixtures = false
+ config.include FactoryBot::Syntax::Methods
+ config.before do
+ FactoryBot.find_definitions
+ end
+ # configure shoulda matchers to use rspec as the test framework and full matcher libraries for rails
+ Shoulda::Matchers.configure do |config|
+ config.integrate do |with|
+ with.test_framework :rspec
+ with.library :rails
+ end
+ end
+
+end
diff --git a/test/dummy-2/spec/spec_helper.rb b/test/dummy-2/spec/spec_helper.rb
new file mode 100644
index 0000000..e3accd6
--- /dev/null
+++ b/test/dummy-2/spec/spec_helper.rb
@@ -0,0 +1,80 @@
+# https://www.natashatherobot.com/rails-test-omniauth-sessions-controller/
+# spec_helper.rb
+require 'rubygems'
+require 'capybara/rspec'
+# Set up the mock
+require 'support/omniauth_macros'
+require 'valid_attribute'
+
+# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
+RSpec.configure do |config|
+ config.filter_run focus: true
+ config.run_all_when_everything_filtered = true
+
+ # config.include SpecTestHelper, :type => :controller
+ config.expect_with :rspec do |expectations|
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
+ expectations.syntax = [:expect, :should]
+ end
+ config.mock_with :rspec do |mocks|
+ mocks.verify_partial_doubles = true
+ end
+ config.shared_context_metadata_behavior = :apply_to_host_groups
+
+# https://github.com/DatabaseCleaner/database_cleaner #
+# config.use_transactional_fixtures = false
+ # https://stackoverflow.com/questions/15148585/undefined-method-visit-when-using-rspec-and-capybara-in-rails
+ config.include Capybara::DSL
+
+ # https://stackoverflow.com/questions/21445164/set-chrome-as-default-browser-for-rspec-capybara/30551595
+ Capybara.register_driver :chrome do |app|
+ Capybara::Selenium::Driver.new(app, :browser => :chrome)
+ end
+ Capybara.javascript_driver = :chrome
+
+ 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.
+
+ During testing, the app-under-test that the browser driver connects to
+ uses a different database connection to the database connection used by
+ the spec. The app's database connection would not be able to access
+ uncommitted transaction data setup over the spec's database connection.
+ MSG
+ end
+ DatabaseCleaner.clean_with(:deletion)
+ end
+
+ config.before(:each, :js => true) do
+ #DatabaseCleaner.strategy = :transaction
+ DatabaseCleaner.strategy = :deletion
+ 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
+ DatabaseCleaner[:mongoid].strategy = :deletion
+
+ end
+ end
+
+ config.before(:each) do
+ DatabaseCleaner.start
+ end
+
+ config.append_after(:each) do
+ DatabaseCleaner.clean
+ end
+# https://github.com/DatabaseCleaner/database_cleaner #
+
+end
diff --git a/test/dummy-2/spec/support/authentication_helper.rb b/test/dummy-2/spec/support/authentication_helper.rb
new file mode 100644
index 0000000..724f3e6
--- /dev/null
+++ b/test/dummy-2/spec/support/authentication_helper.rb
@@ -0,0 +1,20 @@
+module AuthenticationHelper
+ # controller return 1. Session 2. Cookies ==> user.id
+ def sign_in(user)
+ @user = user
+ current_ma_user
+ end
+
+ def create_and_sign_in_user
+ user = FactoryBot.create(:user)
+ sign_in(user)
+ return user
+ end
+ # from Jinda::Helpers
+ def current_ma_user
+ @user ||= User.where(:auth_token => user.auth_token)
+ return @user
+ end
+
+end
+
diff --git a/test/dummy-2/spec/support/databasecleaner.rb b/test/dummy-2/spec/support/databasecleaner.rb
new file mode 100644
index 0000000..5a82539
--- /dev/null
+++ b/test/dummy-2/spec/support/databasecleaner.rb
@@ -0,0 +1,13 @@
+RSpec.configure do |config|
+ config.before(:suite) do
+ DatabaseCleaner[:mongoid].strategy = :deletion
+ end
+
+ config.before(:each) do
+ DatabaseCleaner[:mongoid].start
+ end
+
+ config.after(:each) do
+ DatabaseCleaner[:mongoid].clean
+ end
+end
diff --git a/test/dummy-2/spec/support/factory_bot.rb b/test/dummy-2/spec/support/factory_bot.rb
new file mode 100644
index 0000000..06dbc6e
--- /dev/null
+++ b/test/dummy-2/spec/support/factory_bot.rb
@@ -0,0 +1,12 @@
+FactoryBot.define do
+ factory :user, class: 'User' do
+ code {Faker::Name.unique.name}
+ email {Faker::Internet.email}
+ role {"Admin"}
+ end
+ factory :note, class: 'Note' do
+ title { Faker::Lorem.sentence[0..29] }
+ body { Faker::Lorem.sentence[0..999] }
+ user { User.first }
+ end
+end
diff --git a/test/dummy-2/spec/support/omniauth_macros.rb b/test/dummy-2/spec/support/omniauth_macros.rb
new file mode 100644
index 0000000..ab7cdd7
--- /dev/null
+++ b/test/dummy-2/spec/support/omniauth_macros.rb
@@ -0,0 +1,38 @@
+# in spec/support/omniauth_macro.rb
+module OmniauthMacros
+require 'omniauth'
+ #To enable all request to OmniAuth short circuited to use below mock authentication hash the /auth/provider will redirect immediately to /auth/provider/call back
+ # https://github.com/omniauth/omniauth/wiki/Integration-Testing
+ OmniAuth.config.test_mode = true
+
+ omniauth_hash = { 'provider' => 'google_oauth2',
+ 'uid' => '105362273761620533373',
+ 'info' => {
+ 'name' => 'Kulsoft',
+ 'email' => 'kulsoft.net@gmail.com',
+ 'nickname' => 'kulsoft'
+ },
+ 'extra' => {'raw_info' =>
+ { 'location' => 'San Francisco',
+ 'gravatar_id' => '123456789'
+ }
+ }
+ }
+ OmniAuth.config.add_mock(:google_oauth2, omniauth_hash)
+
+ omniauth_hash = { 'provider' => 'facebook',
+ 'uid' => '105362273761620533373',
+ 'info' => {
+ 'name' => 'Peter Colling',
+ 'email' => '1.0@kul.asia',
+ 'nickname' => 'Peter C'
+ },
+ 'extra' => {'raw_info' =>
+ {'location' => 'LA',
+ 'gravatar_id' => '13'
+ }
+ }
+ }
+ OmniAuth.config.add_mock(:facebook, omniauth_hash)
+end
+
diff --git a/test/dummy-2/spec/support/request_spec_helper.rb b/test/dummy-2/spec/support/request_spec_helper.rb
new file mode 100644
index 0000000..a986145
--- /dev/null
+++ b/test/dummy-2/spec/support/request_spec_helper.rb
@@ -0,0 +1,8 @@
+#request_spec_helper.rb
+
+module RequestSpecHelper
+ # Parse JSON response to ruby hash
+ def json
+ JSON.parse(response.body)
+ end
+end
diff --git a/test/dummy-2/spec/views/articles/_article.html.erb_spec.rbx b/test/dummy-2/spec/views/articles/_article.html.erb_spec.rbx
new file mode 100644
index 0000000..17482ea
--- /dev/null
+++ b/test/dummy-2/spec/views/articles/_article.html.erb_spec.rbx
@@ -0,0 +1,14 @@
+let login_as_admin
+
+describe 'articles/_article.html.erb' do
+ context 'when the article has a url' do
+ it 'display the url' do
+ assign(:article, Article.build(:article, url: 'http://localhost:3000/jinda/init?s=articles:new_article'))
+
+ render
+
+ expect(rendered).to have_link 'Article', href: 'http://localhost:3000/jinda/init?s=articles:new_article'
+ end
+ end
+end
+
diff --git a/test/dummy-2/tmp/.keep b/test/dummy-2/tmp/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/tmp/pids/.keep b/test/dummy-2/tmp/pids/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy-2/vendor/.keep b/test/dummy-2/vendor/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/dummy/Gemfile b/test/dummy/Gemfile
index 504edd9..13b27ce 100644
--- a/test/dummy/Gemfile
+++ b/test/dummy/Gemfile
@@ -97,4 +97,3 @@ group :development, :test do
end
gem "mongoid-paperclip", require: "mongoid_paperclip"
gem "kaminari-mongoid", "1.0.1"
-gem 'rspec_junit_formatter'
diff --git a/test/dummy/Gemfile.lock b/test/dummy/Gemfile.lock
index 9d57dfd..22ce3a1 100644
--- a/test/dummy/Gemfile.lock
+++ b/test/dummy/Gemfile.lock
@@ -389,8 +389,6 @@ GEM
rspec-mocks (~> 3.11)
rspec-support (~> 3.11)
rspec-support (3.12.0)
- rspec_junit_formatter (0.6.0)
- rspec-core (>= 2, < 4, != 2.12.0)
ruby2_keywords (0.0.5)
ruby_parser (3.19.1)
sexp_processor (~> 4.16)
@@ -502,7 +500,6 @@ DEPENDENCIES
rouge
rspec
rspec-rails
- rspec_junit_formatter
selenium-webdriver
shoulda
sprockets-rails
diff --git a/test/dummy/app/assets/javascripts/application.js b/test/dummy/app/assets/javascripts/application.js
index 87a9a81..37c2fd0 100644
--- a/test/dummy/app/assets/javascripts/application.js
+++ b/test/dummy/app/assets/javascripts/application.js
@@ -1,15 +1,15 @@
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
-// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
-// vendor/assets/javascripts directory can be referenced here using a relative path.
+// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
+// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
-// compiled file. JavaScript code in this file should be added after the last require_* statement.
+// the compiled file.
//
-// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
-// about supported directives.
+// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
+// GO AFTER THE REQUIRES BELOW.
//
-//= require rails-ujs
-// require turbolinks
-//= require jindalte.js
+//= require jinda_jqm
+
+
diff --git a/test/dummy/app/assets/stylesheets/application.css.bak b/test/dummy/app/assets/stylesheets/application.css.bak
new file mode 100644
index 0000000..288b9ab
--- /dev/null
+++ b/test/dummy/app/assets/stylesheets/application.css.bak
@@ -0,0 +1,15 @@
+/*
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
+ * listed below.
+ *
+ * Any CSS (and SCSS, if configured) file within this directory, lib/assets/stylesheets, or any plugin's
+ * vendor/assets/stylesheets directory can be referenced here using a relative path.
+ *
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS
+ * files in this directory. Styles in this file should be added after the last require_* statement.
+ * It is generally better to create a new file per style scope.
+ *
+ *= require_tree .
+ *= require_self
+ */
diff --git a/test/dummy/app/assets/stylesheets/application.css.scss b/test/dummy/app/assets/stylesheets/application.css.scss
new file mode 100644
index 0000000..5932cb8
--- /dev/null
+++ b/test/dummy/app/assets/stylesheets/application.css.scss
@@ -0,0 +1,15 @@
+/*
+ * This is a manif.est file that'll be compiled into application.css, which will include all the files
+ * listed below.
+ *
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
+ *
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
+ * compiled file, but it's generally better to create a new file per style scope.
+ *
+ *= require_tree .
+ *= require_self
+ *= require normalize-rails
+ */
+@import "jinda_jqm.css.scss"
diff --git a/test/dummy/app/assets/stylesheets/jinda_jqm.css.scss b/test/dummy/app/assets/stylesheets/jinda_jqm.css.scss
new file mode 100644
index 0000000..58d4118
--- /dev/null
+++ b/test/dummy/app/assets/stylesheets/jinda_jqm.css.scss
@@ -0,0 +1,32 @@
+/*
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
+ * listed below.
+ *
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
+ *
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
+ * compiled file, but it's generally better to create a new file per style scope.
+ *
+ *= require normalize-rails
+ */
+
+@import "jquery.mobile-1.2.1";
+@import "jquery.mobile.splitview";
+@import "jquery.mobile.grids.collapsible";
+@import "jquery.mobile.datebox.css";
+@import "sarabun";
+@import "jinda";
+@import "kul-4.2";
+@import "articles";
+@import "app.scss";
+@import "font-awesome-sprockets";
+@import "font-awesome";
+@import "social";
+
+
+
+
+
+
+
diff --git a/test/dummy/app/views/identities/new.html.haml b/test/dummy/app/views/identities/new.html.haml
index d0cb298..56d6623 100644
--- a/test/dummy/app/views/identities/new.html.haml
+++ b/test/dummy/app/views/identities/new.html.haml
@@ -3,19 +3,6 @@
- @title= 'Sign Up'
= form_tag "/auth/identity/register", {'data-ajax'=>'false'} do
%h1.h3.mb-3.font-weight-normal{:style => "text-align: center"} Sign Up
- %p.hint-text Sign Up with your social media account or Username
- .social-btn.text-center
- %a.btn.btn-primary.btn-lg{:href => "/auth/facebook"}
- %i.fa.fa-facebook
- Facebook
- %a.btn.btn-info.btn-lg{:href => "#"}
- %i.fa.fa-twitter
- Twitter
- %a.btn.btn-danger.btn-lg{:href => "/auth/google_oauth2"}
- %i.fa.fa-google
- Google
- .or-seperator
- %b or
.sign_in
.label-warning
= flash[:alert]
diff --git a/test/dummy/app/views/layouts/application.haml b/test/dummy/app/views/layouts/application.haml
index 6714385..0894f04 100644
--- a/test/dummy/app/views/layouts/application.haml
+++ b/test/dummy/app/views/layouts/application.haml
@@ -1,51 +1,4 @@
-%html
- %head
- %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
- = csrf_meta_tags
- /%link{:href => "https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic", :rel => "stylesheet"}/
- %title Jinda AdminLTE 2 | Starter
- = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
- = javascript_include_tag "application", 'data-turbolinks-track': 'reload'
- /
- BODY TAG OPTIONS:
- \=================
- Apply one or more of the following classes to get the
- desired effect
- |---------------------------------------------------------|
- | SKINS | skin-blue |
- | | skin-black |
- | | skin-purple |
- | | skin-yellow |
- | | skin-red |
- | | skin-green |
- |---------------------------------------------------------|
- |LAYOUT OPTIONS | fixed |
- | | layout-boxed |
- | | layout-top-nav |
- | | sidebar-collapse |
- | | sidebar-mini |
- |---------------------------------------------------------|
-
- %body.hold-transition.skin-yellow.sidebar-mini
- .wrapper
- = render "layouts/lte/header"
- = render "layouts/lte/sidebar"
- .content-wrapper
- %h3.box-title
- = @page_title
- = render 'layouts/lte/flash'
- .label-warning
- #flashes
- - if flash[:notice]
- %p#flash_notice.messages.notice= flash[:notice]
- = javascript_tag "$('#flash_notice').effect('highlight',{},1000);"
- - if flash[:error] || flash[:errors]
- %p#flash_errors.messages.errors= flash[:error] || flash[:errors]
- = javascript_tag "$('#flash_errors').effect('highlight',{},1000);"
- - flash[:error] = flash[:errors] = flash[:notice] = nil
- = yield
- = render 'layouts/lte/footer'
- .control-sidebar-bg
- / REQUIRED JS SCRIPTS
- / jQuery 3
-
+- if request.accept=="text/html, */*; q=0.01"
+ = render "layouts/jqm/page"
+- else
+ = render "layouts/jqm/full"
diff --git a/test/dummy/app/views/sessions/new.html.haml b/test/dummy/app/views/sessions/new.html.haml
index 34bf93b..e19bb2e 100644
--- a/test/dummy/app/views/sessions/new.html.haml
+++ b/test/dummy/app/views/sessions/new.html.haml
@@ -2,19 +2,6 @@
.signup-form
= form_tag "/auth/identity/callback", {'data-ajax'=>'false'} do
%h1.h3.mb-3.font-weight-normal{:style => "text-align: center"} Sign in
- %p.hint-text Sign in with your social media account or Username
- .social-btn.text-center
- %a.btn.btn-primary.btn-lg{:href => "/auth/facebook"}
- %i.fa.fa-facebook
- Facebook
- %a.btn.btn-info.btn-lg{:href => "#"}
- %i.fa.fa-twitter
- Twitter
- %a.btn.btn-danger.btn-lg{:href => "/auth/google_oauth2"}
- %i.fa.fa-google
- Google
- .or-seperator
- %b or
.sign_in
.label-warning
= flash[:alert]
diff --git a/test/dummy/config/credentials.yml.enc b/test/dummy/config/credentials.yml.enc
index 29427e3..86685fd 100644
--- a/test/dummy/config/credentials.yml.enc
+++ b/test/dummy/config/credentials.yml.enc
@@ -1 +1 @@
-rKJOMS7I0Z2/6HTmUtZoHpiofv1hKjyG7PP/xif21dRzKKgCueZV6ImjpU0HdupQYnIheFTCoNdcQmzvzfl0oZaUr03Ox6pf/KGVkEUAwuBPAt76UzNrElzKR1LOctwpmQ6gqCT4AR26lGhpIQDC/XpzT6b4A05C19Xq6vwS4pYBPz119XcKB7dVVGfzhY79NndT1ifklAmWqw2qvoqDp9BdTPpI+HdtjZrbYV8KL0l34lqV/Cf8x2LkvNQjcnCQ8e8tCjNDBFbfQbNrAxQEC832RrQEZ4stK+miW3n+5tEMAwBg7lxyrI8OosHHn5GKnL5geG1NPIosSfgdiFnv0TGGRlaS2d8Is0c0LpWTAMoUN20xl6w6R2HMkumfXLmJLhZEfeZVsLwE11jjSxRLKd8hciqV+W9IqNqV--4BEM1/9dfS1odAZT--IrPmtHRIpZytag1DsyZDSg==
\ No newline at end of file
+Tc7HI8GJT1XlYyLCg2NoTW4hquKJYDBjxbOnCYTPNkeHjMuXFg38IYU+FpxvuFu/58PPztO/GSc4AKX5vgA1gDiZmjQ0PLuMAxwR4a44C6DI+hkOt399N7Mc3Fh/4Rp8zbntYG8g7E7Sbn+3ilvapRk0IET+CSdJuFip4eaZ9LYhVK1/EPQWbynvfMKwkfQj9NcS6P3LpUHX87uH7OwHdYyj/8pFfDLU4KVRATLuiDVGi43IpxoLdhTtp8m603Fkx6/Nuxp0r4miPV8AoNudNlzkuaYEJeygEPA9NVVEcRN/5lFGvfUrK46/vzGAVOIrv3lninf3Y7hgMXM81Z8UScSqJhIJx0j9Uc16/oSKJhm7si6J5iP4cq0nz3DLkHoudTxO0CUft1xO7Isesg8zlzuC7Bxu7IHIpNcQ--8cIwmfEJiX4SlV85--HcCKJOKgSp8mz55wFTFtOw==
\ No newline at end of file
diff --git a/test/dummy/config/mongoid.yml b/test/dummy/config/mongoid.yml
index f37ff3d..6c0c902 100644
--- a/test/dummy/config/mongoid.yml
+++ b/test/dummy/config/mongoid.yml
@@ -4,16 +4,17 @@ development:
# Defines the default client. (required)
default:
# Mongoid can connect to a URI accepted by the driver:
- # uri: mongodb://user:password@mongodb.domain.com:27017/dummy_development
+ # uri: mongodb://user:password@mongodb.domain.com:27017/shop263603_development
# Otherwise define the parameters separately.
# This defines the name of the default database that Mongoid can connect to.
# (required).
- database: dummy_development
+ database: shop263603_development
# Provides the hosts the default client can connect to. Must be an array
# of host:port pairs. (required)
hosts:
- localhost:27017
+ # - mongodb
options:
# Note that all options listed below are Ruby driver client options (the mongo gem).
# Please refer to the driver documentation of the version of the mongo gem you are using
@@ -57,7 +58,7 @@ development:
# connect: :direct
# Changes the default time in seconds the server monitors refresh their status
- # via hello commands. (default: 10)
+ # via ismaster commands. (default: 10)
# heartbeat_frequency: 10
# The time in seconds for selecting servers for a near read preference. (default: 0.015)
@@ -80,13 +81,8 @@ development:
# (default: 10)
# connect_timeout: 10
- # How long to wait for a response for each operation sent to the
- # server. This timeout should be set to a value larger than the
- # processing time for the longest operation that will be executed
- # by the application. Note that this is a client-side timeout;
- # the server may continue executing an operation after the client
- # aborts it with the SocketTimeout exception.
- # (default: nil, meaning no timeout)
+ # The timeout to wait to execute operations on a socket before raising an error.
+ # (default: 5)
# socket_timeout: 5
# The name of the replica set to connect to. Servers provided as seeds that do
@@ -119,44 +115,12 @@ development:
# Configure Mongoid specific options. (optional)
options:
- # Application name that is printed to the mongodb logs upon establishing
- # a connection in server versions >= 3.4. Note that the name cannot
- # exceed 128 bytes. It is also used as the database name if the
- # database name is not explicitly defined. (default: nil)
- # app_name: MyApplicationName
-
-production:
- clients:
- default:
- uri: <%= ENV['MONGODB_URI'] %>
- options:
- raise_not_found_error: false
- belongs_to_required_by_default: false
-
-
- # Mark belongs_to associations as required by default, so that saving a
- # model with a missing belongs_to association will trigger a validation
- # error. (default: true)
- # belongs_to_required_by_default: true
- belongs_to_required_by_default: false
-
- # Raise an exception when a field is redefined. (default: false)
- # duplicate_fields_exception: false
-
- # Include the root model name in json serialization. (default: false)
+ # Includes the root model name in json serialization. (default: false)
# include_root_in_json: false
# Include the _type field in serialization. (default: false)
# include_type_for_serialization: false
- # Whether to join nested persistence contexts for atomic operations
- # to parent contexts by default. (default: false)
- # join_contexts: false
-
- # Set the Mongoid and Ruby driver log levels when Mongoid is not using
- # Ruby on Rails logger instance. (default: :info)
- # log_level: :info
-
# Preload all models in development, needed when models use
# inheritance. (default: false)
# preload_models: false
@@ -170,24 +134,46 @@ production:
# existing method. (default: false)
# scope_overwrite_exception: false
- # Use ActiveSupport's time zone in time operations instead of
- # the Ruby default time zone. See the time zone section below for
- # further information. (default: true)
+ # Raise an error when defining a field with the same name as an
+ # existing method. (default: false)
+ # duplicate_fields_exception: false
+
+ # Use Active Support's time zone in conversions. (default: true)
# use_activesupport_time_zone: true
- # Return stored times as UTC. See the time zone section below for
- # further information. Most applications should not use this option.
- # (default: false)
+ # Ensure all times are UTC in the app side. (default: false)
# use_utc: false
- # (Deprecated) In MongoDB 4.0 and earlier, set whether to create
- # indexes in the background by default. (default: false)
- # background_indexing: false
+ # Set the Mongoid and Ruby driver log levels when not in a Rails
+ # environment. The Mongoid logger will be set to the Rails logger
+ # otherwise.(default: :info)
+ # log_level: :info
+
+ # Control whether `belongs_to` association is required. By default
+ # `belongs_to` will trigger a validation error if the association
+ # is not present. (default: true)
+ # belongs_to_required_by_default: true
+ belongs_to_required_by_default: false
+ # Application name that is printed to the mongodb logs upon establishing a
+ # connection in server versions >= 3.4. Note that the name cannot exceed 128 bytes.
+ # app_name: MyApplicationName
+
+production:
+ clients:
+ default:
+ uri: <%= ENV['MONGODB_URI'] %>
+ options:
+ raise_not_found_error: false
+ belongs_to_required_by_default: false
+
+
+ # Use background indexes by default if `background` option not specified. (default: false)
+ # background_indexing: false
test:
clients:
default:
- database: dummy_test
+ database: shop263603_test
hosts:
- localhost:27017
options:
diff --git a/test/dummy/config/routes.rb b/test/dummy/config/routes.rb
index 06b4a51..54a9428 100644
--- a/test/dummy/config/routes.rb
+++ b/test/dummy/config/routes.rb
@@ -1,5 +1,6 @@
Rails.application.routes.draw do
- root :to => 'jinda#index'
+ mount Jinda::Engine => "/jinda"
+ # root :to => 'jinda#index'
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Defines the root path route ("/")
diff --git a/test/dummy/log/development.log b/test/dummy/log/development.log
index db10794..e69de29 100644
--- a/test/dummy/log/development.log
+++ b/test/dummy/log/development.log
@@ -1,585 +0,0 @@
-Started GET "/" for ::1 at 2022-11-19 15:39:06 -0600
-Processing by JindaController#index as HTML
- Rendering layout layouts/application.haml
- Rendering jinda/index.html.haml within layouts/application
- Rendered jinda/index.html.haml within layouts/application (Duration: 7.4ms | Allocations: 15133)
- Rendered layouts/_head.html.erb (Duration: 1209.3ms | Allocations: 364979)
-MONGODB | EVENT: #
-MONGODB | Topology type 'unknown' initializing.
-MONGODB | EVENT: #
-MONGODB | Topology type 'Unknown' changed to type 'Unknown'.
-MONGODB | EVENT: #
-MONGODB | Server localhost:27017 initializing.
-MONGODB | Waiting for up to 30.00 seconds for servers to be scanned: #]>
-MONGODB | EVENT: # new=#true, "topologyVersion"=>{"processId"=>BSON::ObjectId('6367ec5a76a448c37db6eee4'), "counter"=>0}, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2022-11-19 21:39:07.622 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>92, "minWireVersion"=>0, "maxWireVersion"=>17, "readOnly"=>false, "ok"=>1.0} average_round_trip_time=0.004262>>
-MONGODB | Server description for localhost:27017 changed from 'unknown' to 'standalone'.
-MONGODB | EVENT: #
-MONGODB | Topology type 'Unknown' changed to type 'Single'.
-The criteria cache has been deprecated and will be removed in Mongoid 8. Please enable the Mongoid QueryCache to have caching functionality.
-MONGODB | EVENT: #true, "topologyVersion"=>{"processId"=>BSON::ObjectId('6367ec5a76a448c37db6eee4'), "counter"=>0}, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2022-11-19 21:39:07.622 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>92, "minWireVersion"=>0, "maxWireVersion"=>17, "readOnly"=>false, "ok"=>1.0} average_round_trip_time=0.004262> new=#true, "topologyVersion"=>{"processId"=>BSON::ObjectId('6367ec5a76a448c37db6eee4'), "counter"=>0}, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2022-11-19 21:39:07.626 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>94, "minWireVersion"=>0, "maxWireVersion"=>17, "readOnly"=>false, "ok"=>1.0} average_round_trip_time=0.0038656000000000003>>
-MONGODB | Server description for localhost:27017 changed from 'standalone' to 'standalone'.
-MONGODB | EVENT: #
-MONGODB | Topology type 'Single' changed to type 'Single'.
-MONGODB | [7] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [7] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [8] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_modules", "filter"=>{"code"=>"jobs"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [8] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [9] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86a7'), "code"=>"jobs"}], "lsid"=>{"id"=>}}
-MONGODB | [9] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.007s
-MONGODB | [10] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86a7')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86a7", "icon"=>"edit"}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86a7')}, "u"=>{"$set"=>{"name"=>"Job", "seq"=>0}}}], "lsid"=>{"id"=>}}
-MONGODB | [11] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [12] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"jobs", "code"=>"link", "name"=>"All Jobs: /jobs"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [12] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [13] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86a8'), "module_code"=>"jobs", "code"=>"link", "name"=>"All Jobs: /jobs"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86a8')}, "u"=>{"$set"=>{"xml"=>"", "lis...
-MONGODB | [14] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [15] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"jobs", "code"=>"link", "name"=>"My jobs: /jobs/my"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [15] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [16] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86a9'), "module_code"=>"jobs", "code"=>"link", "name"=>"My jobs: /jobs/my"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86a9')}, "u"=>{"$set"=>{"xml"=>"", "li...
-MONGODB | [17] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [18] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"jobs", "code"=>"link", "name"=>"My forms: /jobs/forms"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [18] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [19] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86aa'), "module_code"=>"jobs", "code"=>"link", "name"=>"My forms: /jobs/forms"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86aa')}, "u"=>{"$set"=>{"xml"=>"",...
-MONGODB | [20] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [21] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"jobs", "code"=>"new_job"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [21] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [22] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ab'), "module_code"=>"jobs", "code"=>"new_job"}], "lsid"=>{"id"=>}}
-MONGODB | [22] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [23] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ab')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"jobs", "code"=>"edit_job"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [24] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [25] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ac'), "module_code"=>"jobs", "code"=>"edit_job"}], "lsid"=>{"id"=>}}
-MONGODB | [25] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [26] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ac')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"jobs", "code"=>"create_form"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [27] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [28] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ad'), "module_code"=>"jobs", "code"=>"create_form"}], "lsid"=>{"id"=>}}
-MONGODB | [28] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [29] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ad')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"jobs", "code"=>"import_job"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [30] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [31] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ae'), "module_code"=>"jobs", "code"=>"import_job"}], "lsid"=>{"id"=>}}
-MONGODB | [31] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [32] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ae')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"jobs", "code"=>"xedit_job"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [33] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [34] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86af'), "module_code"=>"jobs", "code"=>"xedit_job"}], "lsid"=>{"id"=>}}
-MONGODB | [34] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [35] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86af')}, "u"=>{"$set"=>{"xml"=>""jinda_modules", "filter"=>{"code"=>"users"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [36] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [37] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b0'), "code"=>"users"}], "lsid"=>{"id"=>}}
-MONGODB | [37] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [38] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b0')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86b0", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b0')}, "u"=>{"$set"=>{"name"=>"User", "seq"=>1}}}], "lsid"=>{"id"=>}}
-MONGODB | [39] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [40] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b0')}, "u"=>{"$set"=>{"role"=>"m"}}}], "lsid"=>{"id"=>}}
-MONGODB | [40] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [41] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"users", "code"=>"link", "name"=>"info: /users"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [41] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [42] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b1'), "module_code"=>"users", "code"=>"link", "name"=>"info: /users"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b1')}, "u"=>{"$set"=>{"xml"=>"", "list"=>...
-MONGODB | [43] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [44] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"users", "code"=>"link", "name"=>"pending tasks: /jinda/pending"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [44] localhost:27017 | dummy_development.find | SUCCEEDED | 0.003s
-MONGODB | [45] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b2'), "module_code"=>"users", "code"=>"link", "name"=>"pending tasks: /jinda/pending"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b2')}, "u"=>{"$set"=>{"xml"=>""users", "code"=>"user"}], "lsid"=>{"id"=>}}
-MONGODB | [48] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.002s
-MONGODB | [49] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b3')}, "u"=>{"$set"=>{"xml"=>""users", "code"=>"pwd"}], "lsid"=>{"id"=>}}
-MONGODB | [51] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.019s
-MONGODB | [52] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b4')}, "u"=>{"$set"=>{"xml"=>""jinda_modules", "filter"=>{"code"=>"admins"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [53] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [54] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b5'), "code"=>"admins"}], "lsid"=>{"id"=>}}
-MONGODB | [54] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [55] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b5')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86b5", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b5')}, "u"=>{"$set"=>{"name"=>"Admin", "seq"=>2}}}], "lsid"=>{"id"=>}}
-MONGODB | [56] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [57] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b5')}, "u"=>{"$set"=>{"role"=>"a"}}}], "lsid"=>{"id"=>}}
-MONGODB | [57] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [58] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"admins", "code"=>"edit_role"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [58] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [59] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b6'), "module_code"=>"admins", "code"=>"edit_role"}], "lsid"=>{"id"=>}}
-MONGODB | [59] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [60] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b6')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"admins", "code"=>"link", "name"=>"pending tasks: /jinda/pending"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [61] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [62] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b7'), "module_code"=>"admins", "code"=>"link", "name"=>"pending tasks: /jinda/pending"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b7')}, "u"=>{"$set"=>{"xml"=>""admins", "code"=>"link", "name"=>"logs: /jinda/logs"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b8')}, "u"=>{"$set"=>{"xml"=>"", "li...
-MONGODB | [66] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [67] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"admins", "code"=>"link", "name"=>"docs: /jinda/doc"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [67] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [68] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b9'), "module_code"=>"admins", "code"=>"link", "name"=>"docs: /jinda/doc"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86b9')}, "u"=>{"$set"=>{"xml"=>"", "lis...
-MONGODB | [69] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [70] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_modules", "filter"=>{"code"=>"devs"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [70] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [71] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ba'), "code"=>"devs"}], "lsid"=>{"id"=>}}
-MONGODB | [71] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [72] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ba')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86ba", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ba')}, "u"=>{"$set"=>{"name"=>"Developer", "seq"=>3}}}], "lsid"=>{"id"=>}}
-MONGODB | [73] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [74] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ba')}, "u"=>{"$set"=>{"role"=>"d"}}}], "lsid"=>{"id"=>}}
-MONGODB | [74] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [75] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"devs", "code"=>"link", "name"=>"error_logs: /jinda/error_logs"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [75] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [76] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86bb'), "module_code"=>"devs", "code"=>"link", "name"=>"error_logs: /jinda/error_logs"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86bb')}, "u"=>{"$set"=>{"xml"=>""devs", "code"=>"link", "name"=>"notice_logs: /jinda/notice_logs"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86bc')}, "u"=>{"$set"=>{"xml"=>""docs"}], "lsid"=>{"id"=>}}
-MONGODB | [82] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [83] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86bd')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86bd", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86bd')}, "u"=>{"$set"=>{"name"=>"Document", "seq"=>4}}}], "lsid"=>{"id"=>}}
-MONGODB | [84] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [85] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"docs", "code"=>"link", "name"=>"My Document: /docs/my"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [85] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [86] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86be'), "module_code"=>"docs", "code"=>"link", "name"=>"My Document: /docs/my"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86be')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"docs", "code"=>"doc_new"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [88] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [89] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86bf'), "module_code"=>"docs", "code"=>"doc_new"}], "lsid"=>{"id"=>}}
-MONGODB | [89] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [90] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86bf')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"docs", "code"=>"doc_edit"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [91] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [92] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c0'), "module_code"=>"docs", "code"=>"doc_edit"}], "lsid"=>{"id"=>}}
-MONGODB | [92] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [93] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c0')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"docs", "code"=>"doc_xedit"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [94] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [95] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c1'), "module_code"=>"docs", "code"=>"doc_xedit"}], "lsid"=>{"id"=>}}
-MONGODB | [95] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [96] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c1')}, "u"=>{"$set"=>{"xml"=>""jinda_modules", "filter"=>{"code"=>"notes"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [97] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [98] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c2'), "code"=>"notes"}], "lsid"=>{"id"=>}}
-MONGODB | [98] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [99] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c2')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86c2", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c2')}, "u"=>{"$set"=>{"name"=>"Notes", "seq"=>5}}}], "lsid"=>{"id"=>}}
-MONGODB | [100] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [101] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"notes", "code"=>"link", "name"=>"My Notes: /notes/my"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [101] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [102] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c3'), "module_code"=>"notes", "code"=>"link", "name"=>"My Notes: /notes/my"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c3')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"notes", "code"=>"new"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [104] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [105] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c4'), "module_code"=>"notes", "code"=>"new"}], "lsid"=>{"id"=>}}
-MONGODB | [105] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [106] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c4')}, "u"=>{"$set"=>{"xml"=>""notes", "code"=>"edit"}], "lsid"=>{"id"=>}}
-MONGODB | [108] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [109] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c5')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"notes", "code"=>"delete"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [110] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [111] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c6'), "module_code"=>"notes", "code"=>"delete"}], "lsid"=>{"id"=>}}
-MONGODB | [111] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [112] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c6')}, "u"=>{"$set"=>{"xml"=>""notes", "code"=>"mail"}], "lsid"=>{"id"=>}}
-MONGODB | [114] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [115] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c7')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"notes", "code"=>"xedit"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [116] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [117] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c8'), "module_code"=>"notes", "code"=>"xedit"}], "lsid"=>{"id"=>}}
-MONGODB | [117] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [118] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c8')}, "u"=>{"$set"=>{"xml"=>""jinda_modules", "filter"=>{"code"=>"articles"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [119] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [120] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c9'), "code"=>"articles"}], "lsid"=>{"id"=>}}
-MONGODB | [120] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [121] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c9')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86c9", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c9')}, "u"=>{"$set"=>{"name"=>"Article", "seq"=>6}}}], "lsid"=>{"id"=>}}
-MONGODB | [122] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [123] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"articles", "code"=>"link", "name"=>"All Articles: /articles"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [123] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [124] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ca'), "module_code"=>"articles", "code"=>"link", "name"=>"All Articles: /articles"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ca')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"articles", "code"=>"link", "name"=>"My article: /articles/my"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [126] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [127] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cb'), "module_code"=>"articles", "code"=>"link", "name"=>"My article: /articles/my"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cb')}, "u"=>{"$set"=>{"xml"=>""articles", "code"=>"new_article"}], "lsid"=>{"id"=>}}
-MONGODB | [130] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [131] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cc')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"articles", "code"=>"edit_article"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [132] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [133] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cd'), "module_code"=>"articles", "code"=>"edit_article"}], "lsid"=>{"id"=>}}
-MONGODB | [133] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [134] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cd')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"articles", "code"=>"xedit_article"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [135] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [136] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ce'), "module_code"=>"articles", "code"=>"xedit_article"}], "lsid"=>{"id"=>}}
-MONGODB | [136] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [137] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86ce')}, "u"=>{"$set"=>{"xml"=>"<...
-MONGODB | [137] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [138] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_modules", "filter"=>{"code"=>"comments"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [138] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [139] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cf'), "code"=>"comments"}], "lsid"=>{"id"=>}}
-MONGODB | [139] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [140] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cf')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86cf", "icon"=>"button_cancel"}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cf')}, "u"=>{"$set"=>{"name"=>"Comment", "seq"=>7}}}], "lsid"=>{"id"=>}}
-MONGODB | [141] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [142] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"comments", "code"=>"new_comment"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [142] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [143] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d0'), "module_code"=>"comments", "code"=>"new_comment"}], "lsid"=>{"id"=>}}
-MONGODB | [143] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [144] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d0')}, "u"=>{"$set"=>{"xml"=>""jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86cf')}, "u"=>{"$set"=>{"role"=>"m"}}}], "lsid"=>{"id"=>}}
-MONGODB | [145] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [146] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"comments", "code"=>"comments"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [146] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [147] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d1'), "module_code"=>"comments", "code"=>"comments"}], "lsid"=>{"id"=>}}
-MONGODB | [147] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [148] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d1')}, "u"=>{"$set"=>{"xml"=>""jinda_modules", "filter"=>{"code"=>"ctrs"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [149] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [150] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d2'), "code"=>"ctrs"}], "lsid"=>{"id"=>}}
-MONGODB | [150] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [151] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d2')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86d2", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d2')}, "u"=>{"$set"=>{"name"=>"ctrs& Menu", "seq"=>8}}}], "lsid"=>{"id"=>}}
-MONGODB | [152] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [153] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d2')}, "u"=>{"$set"=>{"role"=>"a"}}}], "lsid"=>{"id"=>}}
-MONGODB | [153] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [154] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"ctrs", "code"=>"vfolder1"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [154] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [155] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d3'), "module_code"=>"ctrs", "code"=>"vfolder1"}], "lsid"=>{"id"=>}}
-MONGODB | [155] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [156] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d3')}, "u"=>{"$set"=>{"xml"=>""jinda_services", "filter"=>{"module_code"=>"ctrs", "code"=>"vfolder2"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [157] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [158] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d4'), "module_code"=>"ctrs", "code"=>"vfolder2"}], "lsid"=>{"id"=>}}
-MONGODB | [158] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [159] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d4')}, "u"=>{"$set"=>{"xml"=>""jinda_modules", "filter"=>{"code"=>"sitemap"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [160] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [161] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d5'), "code"=>"sitemap"}], "lsid"=>{"id"=>}}
-MONGODB | [161] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [162] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d5')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86d5", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d5')}, "u"=>{"$set"=>{"name"=>"Sitemap", "seq"=>9}}}], "lsid"=>{"id"=>}}
-MONGODB | [163] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [164] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"sitemap", "code"=>"sitemap"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [164] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [165] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d6'), "module_code"=>"sitemap", "code"=>"sitemap"}], "lsid"=>{"id"=>}}
-MONGODB | [165] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [166] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d6')}, "u"=>{"$set"=>{"xml"=>"", "name"=>"S...
-MONGODB | [166] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [167] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d5')}, "u"=>{"$set"=>{"role"=>"a"}}}], "lsid"=>{"id"=>}}
-MONGODB | [167] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [168] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_modules", "filter"=>{"code"=>"api/v1/notes"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [168] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [169] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_modules", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d7'), "code"=>"api/v1/notes"}], "lsid"=>{"id"=>}}
-MONGODB | [169] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [170] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d7')}, "u"=>{"$set"=>{"uid"=>"63794cfbbee042dbe60c86d7", "icon"=>""}}}], "lsid"=>{"id"=>"jinda_modules", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d7')}, "u"=>{"$set"=>{"name"=>"Notes API", "seq"=>10}}}], "lsid"=>{"id"=>}}
-MONGODB | [171] localhost:27017 | dummy_development.update | SUCCEEDED | 0.001s
-MONGODB | [172] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_code"=>"api/v1/notes", "code"=>"link", "name"=>"My Notes: /api/v1/notes/my"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [172] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [173] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"jinda_services", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d8'), "module_code"=>"api/v1/notes", "code"=>"link", "name"=>"My Notes: /api/v1/notes/my"}], "lsid"=>{"id"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d8')}, "u"=>{"$set"=>{"xml"=>""api/v1/notes", "code"=>"new"}], "lsid"=>{"id"=>}}
-MONGODB | [176] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [177] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d9')}, "u"=>{"$set"=>{"xml"=>""api/v1/notes", "code"=>"edit"}], "lsid"=>{"id"=>}}
-MONGODB | [179] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [180] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86da')}, "u"=>{"$set"=>{"xml"=>""api/v1/notes", "code"=>"delete"}], "lsid"=>{"id"=>}}
-MONGODB | [182] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [183] localhost:27017 #1 | dummy_development.update | STARTED | {"update"=>"jinda_services", "ordered"=>true, "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('63794cfbbee042dbe60c86db')}, "u"=>{"$set"=>{"xml"=>""jinda_modules", "ordered"=>true, "deletes"=>[{"q"=>{"uid"=>{"$nin"=>["63794cfbbee042dbe60c86a7", "63794cfbbee042dbe60c86b0", "63794cfbbee042dbe60c86b5", "63794cfbbee042dbe60c86ba", "63794cfbbee042dbe60c86bd", "63794cfbbee042dbe60c86c2", "6...
-MONGODB | [184] localhost:27017 | dummy_development.delete | SUCCEEDED | 0.001s
-MONGODB | [185] localhost:27017 #1 | dummy_development.delete | STARTED | {"delete"=>"jinda_services", "ordered"=>true, "deletes"=>[{"q"=>{"uid"=>{"$nin"=>["63794cfbbee042dbe60c86a8", "63794cfbbee042dbe60c86a9", "63794cfbbee042dbe60c86aa", "63794cfbbee042dbe60c86ab", "63794cfbbee042dbe60c86ac", "63794cfbbee042dbe60c86ad", "...
-MONGODB | [185] localhost:27017 | dummy_development.delete | SUCCEEDED | 0.001s
-MONGODB | [186] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_modules", "filter"=>{}, "sort"=>{"seq"=>1}, "lsid"=>{"id"=>}}
-MONGODB | [186] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [187] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_id"=>BSON::ObjectId('63794cfbbee042dbe60c86a7')}, "sort"=>{"seq"=>1}, "lsid"=>{"id"=>}}
-MONGODB | [187] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [188] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [188] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [189] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [189] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [190] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [190] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [191] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [191] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [192] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [192] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [193] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [193] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [194] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [194] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [195] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_id"=>BSON::ObjectId('63794cfbbee042dbe60c86bd')}, "sort"=>{"seq"=>1}, "lsid"=>{"id"=>}}
-MONGODB | [195] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [196] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [196] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [197] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [197] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [198] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c2')}, "sort"=>{"seq"=>1}, "lsid"=>{"id"=>}}
-MONGODB | [198] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [199] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [199] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [200] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [200] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [201] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [201] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [202] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [202] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [203] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [203] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [204] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_id"=>BSON::ObjectId('63794cfbbee042dbe60c86c9')}, "sort"=>{"seq"=>1}, "lsid"=>{"id"=>}}
-MONGODB | [204] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [205] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [205] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [206] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [206] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [207] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [207] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [208] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [208] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [209] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [209] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [210] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [210] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [211] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"jinda_services", "filter"=>{"module_id"=>BSON::ObjectId('63794cfbbee042dbe60c86d7')}, "sort"=>{"seq"=>1}, "lsid"=>{"id"=>}}
-MONGODB | [211] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [212] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [212] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [213] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [213] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [214] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [214] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
- Rendered jinda/_menu_mm.haml (Duration: 407.5ms | Allocations: 1045192)
-MONGODB | [215] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [215] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [216] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [216] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
- Rendered jinda/_menu.haml (Duration: 434.5ms | Allocations: 1089778)
- Rendered jinda/_static.haml (Duration: 2.7ms | Allocations: 6777)
- Rendered layouts/jqm/_full.haml (Duration: 1649.7ms | Allocations: 1471099)
- Rendered layout layouts/application.haml (Duration: 1658.2ms | Allocations: 1488766)
-Completed 200 OK in 1665ms (Views: 1661.0ms | MongoDB: 0.2ms | Allocations: 1491883)
-
-
-MONGODB | EVENT: #true, "topologyVersion"=>{"processId"=>BSON::ObjectId('6367ec5a76a448c37db6eee4'), "counter"=>0}, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2022-11-19 21:39:07.626 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>94, "minWireVersion"=>0, "maxWireVersion"=>17, "readOnly"=>false, "ok"=>1.0} average_round_trip_time=0.0038656000000000003> new=#true, "topologyVersion"=>{"processId"=>BSON::ObjectId('6367ec5a76a448c37db6eee4'), "counter"=>0}, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2022-11-19 21:39:17.626 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>92, "minWireVersion"=>0, "maxWireVersion"=>17, "readOnly"=>false, "ok"=>1.0} average_round_trip_time=0.00334028>>
-MONGODB | Server description for localhost:27017 changed from 'standalone' to 'standalone'.
-MONGODB | EVENT: #
-MONGODB | Topology type 'Single' changed to type 'Single'.
-MONGODB | EVENT: #
-MONGODB | Topology type 'unknown' initializing.
-MONGODB | EVENT: #
-MONGODB | Topology type 'Unknown' changed to type 'Unknown'.
-MONGODB | EVENT: #
-MONGODB | Server localhost:27017 initializing.
-MONGODB | Waiting for up to 30.00 seconds for servers to be scanned: #]>
-MONGODB | EVENT: # new=#true, "topologyVersion"=>{"processId"=>BSON::ObjectId('6367ec5a76a448c37db6eee4'), "counter"=>0}, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2022-11-19 21:40:36.489 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>96, "minWireVersion"=>0, "maxWireVersion"=>17, "readOnly"=>false, "ok"=>1.0} average_round_trip_time=0.004445>>
-MONGODB | Server description for localhost:27017 changed from 'unknown' to 'standalone'.
-MONGODB | EVENT: #
-MONGODB | Topology type 'Unknown' changed to type 'Single'.
-The criteria cache has been deprecated and will be removed in Mongoid 8. Please enable the Mongoid QueryCache to have caching functionality.
-MONGODB | EVENT: #true, "topologyVersion"=>{"processId"=>BSON::ObjectId('6367ec5a76a448c37db6eee4'), "counter"=>0}, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2022-11-19 21:40:36.489 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>96, "minWireVersion"=>0, "maxWireVersion"=>17, "readOnly"=>false, "ok"=>1.0} average_round_trip_time=0.004445> new=#true, "topologyVersion"=>{"processId"=>BSON::ObjectId('6367ec5a76a448c37db6eee4'), "counter"=>0}, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2022-11-19 21:40:36.493 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>97, "minWireVersion"=>0, "maxWireVersion"=>17, "readOnly"=>false, "ok"=>1.0} average_round_trip_time=0.0041722>>
-MONGODB | Server description for localhost:27017 changed from 'standalone' to 'standalone'.
-MONGODB | EVENT: #
-MONGODB | Topology type 'Single' changed to type 'Single'.
-MONGODB | [7] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"identities", "filter"=>{"code"=>"admin"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [7] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [8] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"identities", "filter"=>{"code"=>"admin"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [8] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [9] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"identities", "filter"=>{"email"=>"admin@test.com"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [9] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [10] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"identities", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794d54bee042de69125a42'), "code"=>"admin", "email"=>"admin@test.com", "password_digest"=>"$2a$12$RYJjfj152r5lVdJrnmNqDOsY9cjpviw5IekAIcE3qZ7.i0LIM/0VO"}], "lsid"=>{"id"=...
-MONGODB | [10] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.008s
-MONGODB | [11] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"code"=>"admin"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [11] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [12] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"users", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794d54bee042de69125a43'), "provider"=>"identity", "uid"=>"63794d54bee042de69125a42", "code"=>"admin", "email"=>"admin@test.com", "role"=>"M,A,D", "image"=>"https://user-image...
-MONGODB | [12] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.006s
-MONGODB | [13] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"identities", "filter"=>{"code"=>"tester"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [13] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [14] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"identities", "filter"=>{"code"=>"tester"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [14] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [15] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"identities", "filter"=>{"email"=>"tester@test.com"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [15] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [16] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"identities", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794d55bee042de69125a44'), "code"=>"tester", "email"=>"tester@test.com", "password_digest"=>"$2a$12$tEGVBz6Rg8MJzIawYNnIzOQ/t0LzritrfhvpWHlCv.pU20LzmSQ9C"}], "lsid"=>{"id...
-MONGODB | [16] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [17] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"code"=>"tester"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [17] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [18] localhost:27017 #1 | dummy_development.insert | STARTED | {"insert"=>"users", "ordered"=>true, "documents"=>[{"_id"=>BSON::ObjectId('63794d55bee042de69125a45'), "provider"=>"identity", "uid"=>"63794d55bee042de69125a44", "code"=>"tester", "email"=>"tester@test.com", "role"=>"M", "image"=>"https://www.manatees...
-MONGODB | [18] localhost:27017 | dummy_development.insert | SUCCEEDED | 0.001s
-MONGODB | [19] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"identities", "filter"=>{"code"=>"admin"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [19] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [20] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"identities", "filter"=>{"code"=>"tester"}, "projection"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [20] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-Started GET "/" for ::1 at 2022-11-19 15:40:55 -0600
-Processing by JindaController#index as HTML
- Rendering layout layouts/application.haml
- Rendering jinda/index.html.haml within layouts/application
- Rendered jinda/index.html.haml within layouts/application (Duration: 4.7ms | Allocations: 11958)
-MONGODB | [217] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [217] localhost:27017 | dummy_development.find | SUCCEEDED | 0.004s
-MONGODB | [218] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [218] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [219] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [219] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [220] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [220] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
- Rendered layouts/lte/_header.haml (Duration: 27.4ms | Allocations: 57948)
-MONGODB | [221] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>}}
-MONGODB | [221] localhost:27017 | dummy_development.find | SUCCEEDED | 0.001s
-MONGODB | [222] localhost:27017 #1 | dummy_development.find | STARTED | {"find"=>"users", "filter"=>{"auth_token"=>"YaZkE74V0-vhg08-tQEMzg"}, "sort"=>{"_id"=>1}, "limit"=>1, "lsid"=>{"id"=>