effective_resources 2.8.0 → 2.8.2

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: 750ef0ae89d5b6437e046369b0dc46811abfa26ace4559e9448b190c1e255430
4
- data.tar.gz: 7ad14d23604419ba975ab11addf2912f7fbcefe40fdaa9764c7782a2c992cc3d
3
+ metadata.gz: '0140383360a1897a1b21a4a5897f5e61d9099210ab1fca6fe8e93159c7bdc999'
4
+ data.tar.gz: 33819637928fe7fdb8e75df61f79526228652142fc76ab09222bed6ed9f91e6a
5
5
  SHA512:
6
- metadata.gz: 6b79973ce6e33a95e792921ecf6cc548fa144b9fb2aa5b550e531f1d7aa613d00e39aa301b71ab802c0e1506c7f31dba6344925e188f2efd3f78a0e071e24efa
7
- data.tar.gz: 4bd4b421e3e74108cd95a84cb3283f0740aab2f890532901f5cf0e52b4d4680383c75351612e6d9b59b5cd6f546e844e5d8120ea13c34cc1960cabd503670d6b
6
+ metadata.gz: 490636b3efc23c0406833448528f2e8029d9d707a49db92309eda2d65fff6be90d7c31c9d835827866d953b9c18a13781aeb11b43f606c411b051037f0c6f1ed
7
+ data.tar.gz: 1dc0516ce102fac154bfc374deee17678f4d4f33906a2e90bf96e175d5af0573faff5800749c5fff3f198110a3ef142b3fdb1b341e21aef3656a1388e6c4352b
data/README.md CHANGED
@@ -213,6 +213,19 @@ Just put another `app/views/posts/index.html.haml` in the posts directory to ove
213
213
 
214
214
  Sure why not. These don't really fit into my code base anywhere else.
215
215
 
216
+ ### acts_as_paginable
217
+
218
+ Quickly adds a `paginate` scope to your model that can then be used in your views and also integrates well with `effective_bootstrap`. The pagination method is `Limit and Offset`.
219
+
220
+ ```ruby
221
+ # Given any model you just need to call it like
222
+ class Thing < ApplicationRecord
223
+ acts_as_paginable
224
+ end
225
+
226
+ # Now you can use it like:
227
+ Thing.all.paginate(page: 1, per_page: 5)
228
+ ```
216
229
  ### acts_as_tokened
217
230
 
218
231
  Quickly adds rails 5 `has_secure_token` to your model, along with some `Post.find()` enhancements to work with tokens instead of IDs.
@@ -0,0 +1,36 @@
1
+ #
2
+ # ActsAsPaginable
3
+ #
4
+ # Adds the a `paginate` scope to a model for `limit` and `offset` pagination.
5
+ #
6
+ module ActsAsPaginable
7
+ extend ActiveSupport::Concern
8
+
9
+ module Base
10
+ def acts_as_paginable(options = nil)
11
+ include ::ActsAsPaginable
12
+ end
13
+ end
14
+
15
+ module ClassMethods
16
+ def acts_as_paginable?; true; end
17
+ end
18
+
19
+ included do
20
+ def self.default_per_page=(per_page)
21
+ @default_per_page = per_page
22
+ end
23
+
24
+ def self.default_per_page
25
+ @default_per_page || 12 # because we often do 3 columns of 4 elements layouts
26
+ end
27
+
28
+ scope :paginate, -> (page: nil, per_page: nil) {
29
+ per_page = (per_page || default_per_page).to_i
30
+ page = (page || 1).to_i
31
+ offset = [(page - 1), 0].max * (per_page).to_i
32
+
33
+ all.limit(per_page).offset(offset)
34
+ }
35
+ end
36
+ end
@@ -313,11 +313,10 @@ module Effective
313
313
  )
314
314
 
315
315
  if as == :date
316
- term = term.to_date
317
- end_at = end_at.to_date
316
+ relation.where("#{sql_column} >= ? AND #{sql_column} < ?", term.to_date, (end_at + 1.day).to_date)
317
+ else
318
+ relation.where("#{sql_column} >= ? AND #{sql_column} <= ?", term, end_at)
318
319
  end
319
-
320
- relation.where("#{sql_column} >= ? AND #{sql_column} <= ?", term, end_at)
321
320
  elsif value.respond_to?(:strftime) && operation == :eq
322
321
  relation.where(attribute.matches(value))
323
322
  end
@@ -347,7 +346,7 @@ module Effective
347
346
 
348
347
  case operation
349
348
  when :eq then relation.where("#{sql_column} = ?", term)
350
- when :matches then search_columns_by_ilike_term(relation, term, columns: name)
349
+ when :matches then search_columns_by_ilike_term(relation, term, columns: (sql_column.presence || name))
351
350
  when :not_eq then relation.where(attribute.not_eq(term))
352
351
  when :does_not_match then relation.where(attribute.does_not_match("%#{term}%"))
353
352
  when :starts_with then relation.where(attribute.matches("#{term}%"))
@@ -426,7 +425,10 @@ module Effective
426
425
 
427
426
  # Do any of these columns contain all the terms?
428
427
  conditions = columns.map do |name|
429
- keys = terms.keys.map { |key| (fuzzy ? "#{sql_column(name)} #{ilike} :#{key}" : "#{sql_column(name)} = :#{key}") }
428
+ column = (name.to_s.include?('.') ? name : sql_column(name))
429
+ raise("expected an sql column for #{name}") if column.blank?
430
+
431
+ keys = terms.keys.map { |key| (fuzzy ? "#{column} #{ilike} :#{key}" : "#{column} = :#{key}") }
430
432
  '(' + keys.join(' AND ') + ')'
431
433
  end.join(' OR ')
432
434
 
@@ -29,8 +29,10 @@ module EffectiveResources
29
29
  ActiveRecord::Base.extend(ActsAsTokened::Base)
30
30
  ActiveRecord::Base.extend(ActsAsSlugged::Base)
31
31
  ActiveRecord::Base.extend(ActsAsStatused::Base)
32
+ ActiveRecord::Base.extend(ActsAsPaginable::Base)
32
33
  ActiveRecord::Base.extend(ActsAsWizard::Base)
33
34
  ActiveRecord::Base.extend(ActsAsPurchasableWizard::Base)
35
+
34
36
  ActiveRecord::Base.extend(HasManyPurgable::Base)
35
37
  ActiveRecord::Base.extend(HasManyRichTexts::Base)
36
38
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '2.8.0'.freeze
2
+ VERSION = '2.8.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-12 00:00:00.000000000 Z
11
+ date: 2023-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -122,6 +122,34 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: psych
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "<"
130
+ - !ruby/object:Gem::Version
131
+ version: '4'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "<"
137
+ - !ruby/object:Gem::Version
138
+ version: '4'
139
+ - !ruby/object:Gem::Dependency
140
+ name: net-smtp
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
125
153
  description: Make any controller an effective resource controller.
126
154
  email:
127
155
  - info@codeandeffect.com
@@ -159,6 +187,7 @@ files:
159
187
  - app/mailers/concerns/effective_mailer.rb
160
188
  - app/models/concerns/acts_as_archived.rb
161
189
  - app/models/concerns/acts_as_email_form.rb
190
+ - app/models/concerns/acts_as_paginable.rb
162
191
  - app/models/concerns/acts_as_purchasable_wizard.rb
163
192
  - app/models/concerns/acts_as_slugged.rb
164
193
  - app/models/concerns/acts_as_statused.rb
@@ -243,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
272
  - !ruby/object:Gem::Version
244
273
  version: '0'
245
274
  requirements: []
246
- rubygems_version: 3.1.2
275
+ rubygems_version: 3.3.7
247
276
  signing_key:
248
277
  specification_version: 4
249
278
  summary: Make any controller an effective resource controller.