Sha256: 63ab30e5d7bc014db9134141c6de89d243014e6c20e1542962ad3a753916a9c1
Contents?: true
Size: 1.74 KB
Versions: 1
Compression:
Stored size: 1.74 KB
Contents
# frozen_string_literal: true module ThemeCheck class PaginationSize < LiquidCheck severity :suggestion categories :performance doc docs_url(__FILE__) attr_reader :min_size attr_reader :max_size def initialize(min_size: 1, max_size: 50) @min_size = min_size @max_size = max_size end def on_document(_node) @paginations = {} @schema_settings = {} end def on_paginate(node) size = node.value.page_size unless @paginations.key?(size) @paginations[size] = [] end @paginations[size].push(node) end def on_schema(node) schema = JSON.parse(node.value.nodelist.join) if (settings = schema["settings"]) @schema_settings = settings end rescue JSON::ParserError # Ignored, handled in ValidSchema. end def after_document(_node) @paginations.each_pair do |size, nodes| numerical_size = if size.is_a?(Numeric) size else get_setting_default_value(size.lookups.last) end if numerical_size.nil? nodes.each { |node| add_offense("Default pagination size should be defined in the section settings", node: node) } elsif numerical_size > @max_size || numerical_size < @min_size || !numerical_size.is_a?(Integer) nodes.each { |node| add_offense("Pagination size must be a positive integer between #{@min_size} and #{@max_size}", node: node) } end end end private def get_setting_default_value(setting_id) setting = @schema_settings.find { |s| s['id'] == setting_id } return nil if setting.empty? default_value = setting['default'].to_i return nil if default_value == 0 default_value end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
theme-check-1.5.0 | lib/theme_check/checks/pagination_size.rb |