Skip to content

Commit

Permalink
Add task(s) to visualize element and page usage
Browse files Browse the repository at this point in the history
  • Loading branch information
tvdeyen committed Jul 3, 2023
1 parent 0b1ceaf commit 20b5655
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 0 deletions.
25 changes: 25 additions & 0 deletions lib/alchemy/tasks/usage.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# frozen_string_literal: true

module Alchemy
module Tasks
module Usage
extend self

def elements_count_by_name
Alchemy::Element.all
.select("name, COUNT(*) AS count")
.group(:name)
.order("count DESC, name ASC")
.map { |e| {"name" => e.name, "count" => e.count} }
end

def pages_count_by_type
Alchemy::Page.all
.select("page_layout, COUNT(*) AS count")
.group(:page_layout)
.order("count DESC, page_layout ASC")
.map { |p| {"page_layout" => p.page_layout, "count" => p.count} }
end
end
end
end
40 changes: 40 additions & 0 deletions lib/tasks/alchemy/usage.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
require "alchemy/tasks/usage"

namespace :alchemy do
desc "List Alchemy elements and pages usage"
task usage: [:page_usage, :element_usage]

desc "List Alchemy elements usage"
task page_usage: :environment do
include ActionView::Helpers::NumberHelper
puts "\n Alchemy pages usage"
results = Alchemy::Tasks::Usage.pages_count_by_type
if results.any?
puts " ----------------------"
puts "\n"
results.each do |row|
puts " #{number_with_delimiter(row["count"])} 𝗑 #{row["page_layout"]}"
end
puts "\n = #{number_with_delimiter(Alchemy::Page.count)} pages in total."
else
puts " > No pages found!"
end
end

desc "List Alchemy elements usage"
task element_usage: :environment do
include ActionView::Helpers::NumberHelper
puts "\n Alchemy elements usage"
results = Alchemy::Tasks::Usage.elements_count_by_name
if results.any?
puts " ----------------------"
puts "\n"
results.each do |row|
puts " #{number_with_delimiter(row["count"])} 𝗑 #{row["name"]}"
end
puts "\n = #{number_with_delimiter(Alchemy::Element.count)} elements in total."
else
puts " > No elements found!"
end
end
end
39 changes: 39 additions & 0 deletions spec/libraries/alchemy/tasks/usage_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
require "rails_helper"
require "alchemy/tasks/usage"

RSpec.describe Alchemy::Tasks::Usage do
describe ".elements_count_by_name" do
subject { described_class.elements_count_by_name }

before do
create_list(:alchemy_element, 3, name: "headline")
create_list(:alchemy_element, 2, name: "image")
create(:alchemy_element, name: "text")
end

it "returns the elements count by name" do
expect(subject).to eq [
{"name" => "headline", "count" => 3},
{"name" => "image", "count" => 2},
{"name" => "text", "count" => 1}
]
end
end

describe ".pages_count_by_type" do
subject { described_class.pages_count_by_type }

before do
create_list(:alchemy_page, 2, page_layout: "standard")
create(:alchemy_page, page_layout: "home")
end

it "returns the pages count by type" do
expect(subject).to eq [
{"page_layout" => "standard", "count" => 2},
{"page_layout" => "home", "count" => 1},
{"page_layout" => "index", "count" => 1}
]
end
end
end

0 comments on commit 20b5655

Please sign in to comment.