effective_resources 2.40.0 → 2.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d40e6af3f4462f8e86aab9914919598680c3c0ac550bb3dfd5aa6d041602edef
4
- data.tar.gz: 6a1f999236e9dcd9f633612f2f2fbdac0844430023adb021fc9f83aa1c58e727
3
+ metadata.gz: c322710a6dffa4c2e384fd31e06b0226826e3bc364277abdaac8a71e6d9adfc6
4
+ data.tar.gz: cbf12a724542c9148a8ce95a0dadf5f9e86748af998faded9f912839dba43a5f
5
5
  SHA512:
6
- metadata.gz: 20dbbb02219d7e360cd7c0d1d859233089394f330931be722c3c5894ef9545237d0cdb3f997dc217e3f48941f754c72a107a3f3b5e7ae78c5e4401d418f300bb
7
- data.tar.gz: f5bd1ce1b2006c2e32b8c23f0366f50a4378b3ac13ee8b9c8a00bfec111c2818942af591f01dce1e90128c61b54c60155ab75770a2d26ed9d022d638fb4270c7
6
+ metadata.gz: 7f601bd8c2e4efb5d74e92f701a3b5288b83ed5e38924cb8ef548c868f9c1ec19edec48adea1c8ce78cf6b9e9551a0eab958bf804f0781477e2fd1b887e3c128
7
+ data.tar.gz: 5e84dc97c1ced2733f1981e5a8a23c9e142d217d1b604d08ff3624483e6df8368c302d2f17a43e67af178a59f1241476c3ce8f4fbad1b3ec890246aa07c119cb
@@ -33,7 +33,7 @@ module Effective
33
33
  # Paginate
34
34
  if !skip_paginate
35
35
  per_page = 50
36
- page = (params[:page] || 1).to_i
36
+ page = EffectiveResources.normalize_page(params[:page]) || 1
37
37
  last = (collection.reselect(:id).count.to_f / per_page).ceil
38
38
  more = page < last
39
39
 
@@ -27,7 +27,7 @@ module ActsAsPaginable
27
27
 
28
28
  scope :paginate, -> (page: nil, per_page: nil) {
29
29
  per_page = (per_page || default_per_page).to_i
30
- page = (page || 1).to_i
30
+ page = EffectiveResources.normalize_page(page) || 1
31
31
  offset = [(page - 1), 0].max * (per_page).to_i
32
32
 
33
33
  all.limit(per_page).offset(offset)
@@ -60,11 +60,11 @@ module EffectiveGem
60
60
  resolve_class_name(key, namespace: namespace)
61
61
  end
62
62
 
63
- def klass(key, fallback: nil)
63
+ def klass(key, skip_fallback: false)
64
64
  raise('expected key to be a symbol') unless key.kind_of?(Symbol)
65
65
 
66
66
  namespace = Tenant.current if defined?(Tenant)
67
- resolve_class_name(key, namespace: namespace, fallback: fallback).constantize
67
+ resolve_class_name(key, namespace: namespace, skip_fallback: skip_fallback)&.constantize
68
68
  end
69
69
 
70
70
  # Mailer Settings
@@ -121,7 +121,7 @@ module EffectiveGem
121
121
 
122
122
  private
123
123
 
124
- def resolve_class_name(key, namespace:, fallback: nil)
124
+ def resolve_class_name(key, namespace:, skip_fallback: false)
125
125
  key = key.to_s.singularize
126
126
  configured = config(namespace)["#{key}_class_name".to_sym]
127
127
 
@@ -132,7 +132,9 @@ module EffectiveGem
132
132
  return tenant_class_name if tenant_class_name.safe_constantize
133
133
  end
134
134
 
135
- fallback || "Effective::#{key.classify}"
135
+ return if skip_fallback
136
+
137
+ "Effective::#{key.classify}"
136
138
  end
137
139
  end
138
140
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '2.40.0'.freeze
2
+ VERSION = '2.42.0'.freeze
3
3
  end
@@ -87,6 +87,22 @@ module EffectiveResources
87
87
 
88
88
  # Utilities
89
89
 
90
+ def self.normalize_page(value)
91
+ return 1 if value.nil? || value == ''
92
+ return value if value.is_a?(Integer) && value.positive?
93
+ return value.to_i if value.is_a?(String) && value.match?(/\A[1-9]\d*\z/)
94
+ end
95
+
96
+ def self.validate_page!(value, collection_count:, per_page:)
97
+ page = normalize_page(value)
98
+ raise ActiveRecord::RecordNotFound, "Page #{value.inspect} is invalid" unless page
99
+
100
+ last = [(collection_count.to_f / per_page).ceil, 1].max
101
+ raise ActiveRecord::RecordNotFound, "Page #{page} does not exist" if page > last
102
+
103
+ page
104
+ end
105
+
90
106
  # This looks up the best class give the name
91
107
  # If the Tenant is present, use those classes first.
92
108
  def self.best(name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.40.0
4
+ version: 2.42.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect