Now that we've moved the logic to generate the events data to a model, and we've got access to the model in the component rendering the chart, we can render the data inside the chart instead of doing an extra AJAX request to get the same data. Originally, this was problaby done this way so the page wouldn't take several seconds to load while preparing the data for the chart when there are thousands of dates being displayed. With an AJAX call, the page would load as fast as usual, and then the chart would render after a few seconds. However, we can have an even better performance improvement in this scenario if we use a Set instead of an Array. The method `Array#include?`, which we were calling for every date in the data, is much slower that `Set#merge`. So now both the page and the chart load as fast as expected. We could also use something like: ``` def add (...) shared_keys.push(*collection.keys) end def build (...) shared_keys.uniq.each do |k| (...) end def shared_keys @shared_keys ||= [] end ``` Or other approaches to avoid using `Array#include?`. The performance would be similar to the one we get when using `Set`. We're using a `Set` because it makes more obvious that `shared_keys` is supposed to contain unique elements. We've had some tests failing in the past due to these AJAX requests being triggered automatically during the tests and no expectations checking the requests have finished, so now we're reducing the amount of flaky tests.
349 lines
9.5 KiB
Ruby
349 lines
9.5 KiB
Ruby
namespace :admin do
|
|
root to: "dashboard#index"
|
|
resources :organizations, only: :index do
|
|
get :search, on: :collection
|
|
member do
|
|
put :verify
|
|
put :reject
|
|
end
|
|
end
|
|
|
|
resources :hidden_users, only: [:index, :show] do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :hidden_budget_investments, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :hidden_debates, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :debates, only: [:index, :show]
|
|
|
|
resources :proposals, only: [:index, :show, :update] do
|
|
member { patch :toggle_selection }
|
|
resources :milestones, controller: "proposal_milestones"
|
|
resources :progress_bars, except: :show, controller: "proposal_progress_bars"
|
|
end
|
|
|
|
resources :hidden_proposals, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :hidden_proposal_notifications, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :budgets, except: [:create, :new] do
|
|
member do
|
|
patch :publish
|
|
put :calculate_winners
|
|
end
|
|
|
|
resources :groups, except: [:index, :show], controller: "budget_groups" do
|
|
resources :headings, except: [:index, :show], controller: "budget_headings"
|
|
end
|
|
|
|
resources :budget_investments, only: [:index, :show, :edit, :update] do
|
|
member { patch :toggle_selection }
|
|
|
|
resources :audits, only: :show, controller: "budget_investment_audits"
|
|
resources :milestones, controller: "budget_investment_milestones"
|
|
resources :progress_bars, except: :show, controller: "budget_investment_progress_bars"
|
|
end
|
|
|
|
resources :budget_phases, only: [:edit, :update] do
|
|
member do
|
|
patch :enable
|
|
patch :disable
|
|
end
|
|
end
|
|
end
|
|
|
|
namespace :budgets_wizard do
|
|
resources :budgets, only: [:create, :new, :edit, :update] do
|
|
resources :groups, only: [:index, :create, :edit, :update, :destroy] do
|
|
resources :headings, only: [:index, :create, :edit, :update, :destroy]
|
|
end
|
|
|
|
resources :phases, as: "budget_phases", only: [:index, :edit, :update] do
|
|
member do
|
|
patch :enable
|
|
patch :disable
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
resources :milestone_statuses, only: [:index, :new, :create, :update, :edit, :destroy]
|
|
|
|
resources :signature_sheets, only: [:index, :new, :create, :show]
|
|
|
|
resources :banners, only: [:index, :new, :create, :edit, :update, :destroy] do
|
|
collection { get :search }
|
|
end
|
|
|
|
resources :hidden_comments, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :comments, only: :index
|
|
|
|
resources :tags, only: [:index, :create, :update, :destroy]
|
|
|
|
resources :officials, only: [:index, :edit, :update, :destroy] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resources :settings, only: [:index, :update]
|
|
put :update_map, to: "settings#update_map"
|
|
put :update_content_types, to: "settings#update_content_types"
|
|
|
|
resources :moderators, only: [:index, :create, :destroy] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resources :valuators, only: [:show, :index, :edit, :update, :create, :destroy] do
|
|
get :search, on: :collection
|
|
get :summary, on: :collection
|
|
end
|
|
|
|
resources :valuator_groups
|
|
|
|
resources :managers, only: [:index, :create, :destroy] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
namespace :sdg do
|
|
resources :managers, only: [:index, :create, :destroy]
|
|
end
|
|
|
|
resources :administrators, only: [:index, :create, :destroy, :edit, :update] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resources :users, only: [:index, :show]
|
|
|
|
scope module: :poll do
|
|
resources :polls do
|
|
get :booth_assignments, on: :collection
|
|
|
|
resources :booth_assignments, only: [:index, :show, :create, :destroy] do
|
|
get :search_booths, on: :collection
|
|
get :manage, on: :collection
|
|
end
|
|
|
|
resources :officer_assignments, only: [:index, :create, :destroy] do
|
|
get :search_officers, on: :collection
|
|
get :by_officer, on: :collection
|
|
end
|
|
|
|
resources :recounts, only: :index
|
|
resources :results, only: :index
|
|
end
|
|
|
|
resources :officers, only: [:index, :new, :create, :destroy] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resources :booths do
|
|
get :available, on: :collection
|
|
|
|
resources :shifts do
|
|
get :search_officers, on: :collection
|
|
end
|
|
end
|
|
|
|
resources :questions, shallow: true do
|
|
resources :answers, except: [:index, :show], controller: "questions/answers", shallow: false
|
|
resources :answers, only: [], controller: "questions/answers" do
|
|
resources :images, controller: "questions/answers/images"
|
|
resources :videos, controller: "questions/answers/videos", shallow: false
|
|
resources :documents, only: [:index, :create], controller: "questions/answers/documents"
|
|
end
|
|
post "/answers/order_answers", to: "questions/answers#order_answers"
|
|
end
|
|
|
|
resource :active_polls, only: [:create, :edit, :update]
|
|
end
|
|
|
|
resources :verifications, controller: :verifications, only: :index do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resource :activity, controller: :activity, only: :show
|
|
|
|
resources :newsletters do
|
|
member do
|
|
post :deliver
|
|
end
|
|
get :users, on: :collection
|
|
end
|
|
|
|
resources :admin_notifications do
|
|
member do
|
|
post :deliver
|
|
end
|
|
end
|
|
|
|
resources :system_emails, only: [:index] do
|
|
get :view
|
|
get :preview_pending
|
|
put :moderate_pending
|
|
put :send_pending
|
|
end
|
|
|
|
resources :emails_download, only: :index do
|
|
get :generate_csv, on: :collection
|
|
end
|
|
|
|
resource :stats, only: :show do
|
|
get :graph, on: :member
|
|
get :budgets, on: :collection
|
|
get :budget_supporting, on: :member
|
|
get :budget_balloting, on: :member
|
|
get :proposal_notifications, on: :collection
|
|
get :direct_messages, on: :collection
|
|
get :polls, on: :collection
|
|
get :sdg, on: :collection
|
|
end
|
|
|
|
namespace :legislation do
|
|
resources :processes do
|
|
resources :questions
|
|
resources :proposals do
|
|
member { patch :toggle_selection }
|
|
end
|
|
resources :draft_versions
|
|
resources :milestones
|
|
resources :progress_bars, except: :show
|
|
resource :homepage, only: [:edit, :update]
|
|
end
|
|
end
|
|
|
|
resources :geozones, only: [:index, :new, :create, :edit, :update, :destroy]
|
|
|
|
namespace :site_customization do
|
|
resources :pages, except: [:show] do
|
|
resources :cards, except: [:show], as: :widget_cards
|
|
end
|
|
resources :images, only: [:index, :update, :destroy]
|
|
resources :content_blocks, except: [:show]
|
|
delete "/heading_content_blocks/:id", to: "content_blocks#delete_heading_content_block",
|
|
as: "delete_heading_content_block"
|
|
get "/edit_heading_content_blocks/:id", to: "content_blocks#edit_heading_content_block",
|
|
as: "edit_heading_content_block"
|
|
put "/update_heading_content_blocks/:id", to: "content_blocks#update_heading_content_block",
|
|
as: "update_heading_content_block"
|
|
resources :information_texts, only: [:index] do
|
|
post :update, on: :collection
|
|
end
|
|
resources :documents, only: [:index, :new, :create, :destroy]
|
|
end
|
|
|
|
resource :homepage, controller: :homepage, only: [:show]
|
|
|
|
namespace :widget do
|
|
resources :cards
|
|
resources :feeds, only: [:update]
|
|
end
|
|
|
|
namespace :dashboard do
|
|
resources :actions, only: [:index, :new, :create, :edit, :update, :destroy]
|
|
resources :administrator_tasks, only: [:index, :edit, :update]
|
|
end
|
|
|
|
resources :local_census_records
|
|
namespace :local_census_records do
|
|
resources :imports, only: [:new, :create, :show]
|
|
end
|
|
|
|
resource :machine_learning, controller: :machine_learning, only: [:show] do
|
|
post :execute, on: :collection
|
|
delete :cancel, on: :collection
|
|
end
|
|
|
|
resources :tenants, except: [:show, :destroy] do
|
|
member do
|
|
put :hide
|
|
put :restore
|
|
end
|
|
end
|
|
end
|
|
|
|
resolve "Milestone" do |milestone|
|
|
[*resource_hierarchy_for(milestone.milestoneable), milestone]
|
|
end
|
|
|
|
resolve "ProgressBar" do |progress_bar|
|
|
[*resource_hierarchy_for(progress_bar.progressable), progress_bar]
|
|
end
|
|
|
|
resolve "Audit" do |audit|
|
|
[*resource_hierarchy_for(audit.associated || audit.auditable), audit]
|
|
end
|
|
|
|
resolve "Widget::Card" do |card, options|
|
|
[*resource_hierarchy_for(card.cardable), card]
|
|
end
|
|
|
|
resolve "Budget::Group" do |group, options|
|
|
[group.budget, :group, options.merge(id: group)]
|
|
end
|
|
|
|
resolve "Budget::Heading" do |heading, options|
|
|
[heading.budget, :group, :heading, options.merge(group_id: heading.group, id: heading)]
|
|
end
|
|
|
|
resolve "Budget::Phase" do |phase, options|
|
|
[phase.budget, :phase, options.merge(id: phase)]
|
|
end
|
|
|
|
resolve "Poll::Booth" do |booth, options|
|
|
[:booth, options.merge(id: booth)]
|
|
end
|
|
|
|
resolve "Poll::BoothAssignment" do |assignment, options|
|
|
[assignment.poll, :booth_assignment, options.merge(id: assignment)]
|
|
end
|
|
|
|
resolve "Poll::Shift" do |shift, options|
|
|
[:booth, :shift, options.merge(booth_id: shift.booth, id: shift)]
|
|
end
|
|
|
|
resolve "Poll::Officer" do |officer, options|
|
|
[:officer, options.merge(id: officer)]
|
|
end
|
|
|
|
resolve "Poll::Question::Answer" do |answer, options|
|
|
[:question, :answer, options.merge(question_id: answer.question, id: answer)]
|
|
end
|
|
|
|
resolve "Poll::Question::Answer::Video" do |video, options|
|
|
[:answer, :video, options.merge(answer_id: video.answer, id: video)]
|
|
end
|
|
|
|
resolve "Legislation::DraftVersion" do |version, options|
|
|
[version.process, :draft_version, options.merge(id: version)]
|
|
end
|