pg_rails 7.1.6 → 7.1.8

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: e9ea11adc017949414ed89c42127ce6867418dcd461219fb56289a2832a938a6
4
- data.tar.gz: 30ab308185ff7e68acebf1611161f55fa5d783bc95536db27a2026091637d69a
3
+ metadata.gz: 191011edebc40d5f12ef69b1dc820b578051ceaa04f44b8cc2d484d34eb702b9
4
+ data.tar.gz: 8d31123f512ab1e8e75ccd779911a9d91ccc704efce6d8ee00c8108f444734e9
5
5
  SHA512:
6
- metadata.gz: 61685a1f498123e153ae0a635805566b69dbf177ad079da95e53221b81c05af957cdc9d8d0de63004d48d74801cf493a7062f303c227f9cdffa08a5834442941
7
- data.tar.gz: 6c80c211396d351891a1c4071672bae515a629d933a128cd3e9f3b5fae4d948e624b9577645cee199bd10e4d6aa55b1aafa1278e4011dc7d1e7a87a60efede3e
6
+ metadata.gz: 930662b242df39cd0b10e125a7132c176f3d264f355eb7cb0e750e1998304c54858b14c99cdda286ce94f01503b1ccfed4a3b81a192c40e560b1803a8e14bcd7
7
+ data.tar.gz: 9097148fea5b072ddacf4f8aaf84b5c8ddb6cd71cc9f61e5e27cab061aeee0b0f5d395f14c82cc9990dd2fd0bfd1a3ec80aadcbf552dbe064079616a1adb1e8b
@@ -73,6 +73,11 @@ input[type=datetime-local], input[type=datetime] {
73
73
  padding: 0em 0.3em;
74
74
  }
75
75
 
76
+ .list-group-item {
77
+ --bs-list-group-item-padding-y: 0px;
78
+ --bs-list-group-item-padding-x: 0.3rem;
79
+ }
80
+
76
81
  // FILTROS
77
82
  .filter {
78
83
  display: inline-block;
@@ -6,6 +6,7 @@ module PgEngine
6
6
  clazz.helper_method :atributos_para_mostrar
7
7
  clazz.helper_method :current_page_size
8
8
  clazz.helper_method :show_filters?
9
+ clazz.helper_method :available_page_sizes
9
10
  end
10
11
 
11
12
  # Public endpoints
@@ -18,11 +19,7 @@ module PgEngine
18
19
  end
19
20
 
20
21
  def index
21
- @collection = filtros_y_policy atributos_para_buscar
22
-
23
- shared_context = Ransack::Adapters::ActiveRecord::Context.new(@collection)
24
- @q = @clase_modelo.ransack(params[:q], context: shared_context)
25
- @collection = shared_context.evaluate(@q)
22
+ @collection = filtros_y_policy(atributos_para_buscar, default_sort)
26
23
 
27
24
  pg_respond_index
28
25
  end
@@ -57,6 +54,14 @@ module PgEngine
57
54
 
58
55
  protected
59
56
 
57
+ def default_sort
58
+ nil
59
+ end
60
+
61
+ def available_page_sizes
62
+ [10, 20, 30, 50, 100].push(current_page_size).uniq.sort
63
+ end
64
+
60
65
  def show_filters?
61
66
  cur_route = pg_current_route
62
67
  idtf = cur_route[:controller] + '#' + cur_route[:action] + '#open-filters'
@@ -72,15 +77,18 @@ module PgEngine
72
77
 
73
78
  def current_page_size
74
79
  if params[:page_size].present?
75
- session[:page_size] = params[:page_size]
76
- params[:page_size].to_i
77
- else
78
- default_page_size
80
+ session[page_size_session_key] = params[:page_size].to_i
79
81
  end
82
+
83
+ session[page_size_session_key].presence || default_page_size
84
+ end
85
+
86
+ def page_size_session_key
87
+ "#{controller_name}/#{action_name}/page_size"
80
88
  end
81
89
 
82
90
  def default_page_size
83
- session[:page_size].present? ? session[:page_size].to_i : 10
91
+ 10
84
92
  end
85
93
 
86
94
  def pg_respond_update
@@ -286,13 +294,20 @@ module PgEngine
286
294
  @clase_modelo ||= self.class.name.singularize.gsub('Controller', '').constantize
287
295
  end
288
296
 
289
- def filtros_y_policy(campos)
297
+ def filtros_y_policy(campos, dflt_sort = nil)
290
298
  @filtros = PgEngine::FiltrosBuilder.new(
291
299
  self, clase_modelo, campos
292
300
  )
293
301
  scope = policy_scope(clase_modelo)
294
302
 
295
- @filtros.filtrar(scope)
303
+ scope = @filtros.filtrar(scope)
304
+
305
+ shared_context = Ransack::Adapters::ActiveRecord::Context.new(scope)
306
+ @q = @clase_modelo.ransack(params[:q], context: shared_context)
307
+
308
+ @q.sorts = dflt_sort if @q.sorts.empty? && dflt_sort.present?
309
+
310
+ shared_context.evaluate(@q)
296
311
  end
297
312
 
298
313
  def default_scope_for_current_model
@@ -8,12 +8,12 @@ module PgEngine
8
8
  sort_field = input.last
9
9
  else
10
10
  campo = sort_field = input
11
+ sort_field = sort_field.to_s.sub(/_f\z/, '')
12
+ sort_field = sort_field.to_s.sub(/_text\z/, '')
11
13
  end
12
14
 
13
15
  campo = campo.to_s.sub(/_f\z/, '')
14
16
  campo = campo.to_s.sub(/_text\z/, '')
15
- sort_field = sort_field.to_s.sub(/_f\z/, '')
16
- sort_field = sort_field.to_s.sub(/_text\z/, '')
17
17
 
18
18
  clase = options[:clase] || @clase_modelo
19
19
  key = [controller_name, action_name, 'listado_header', campo].join('.')
@@ -21,7 +21,11 @@ module PgEngine
21
21
  human_name = clase.human_attribute_name(key, default: dflt)
22
22
 
23
23
  if options[:ordenable]
24
- sort_link(@q, sort_field, human_name, default_order: default_order(campo))
24
+ if sort_field.is_a? Array
25
+ sort_link(@q, sort_field.first, sort_field, human_name, default_order: default_order(campo))
26
+ else
27
+ sort_link(@q, sort_field, human_name, default_order: default_order(campo))
28
+ end
25
29
  else
26
30
  human_name
27
31
  end
@@ -58,8 +58,15 @@ div
58
58
  = object.edit_link(text: '', klass: 'btn-light')
59
59
  = object.destroy_link
60
60
 
61
- .ps-3.justify-content-center
61
+ .d-flex.justify-content-center
62
62
  = paginate(@collection)
63
+ .d-flex.align-items-center.justify-content-center.opacity-50
64
+ label.me-2 Filas por página:
65
+ ul.list-group.list-group-horizontal
66
+ - available_page_sizes.each do |page_size|
67
+ = link_to page_size,
68
+ namespaced_path(@clase_modelo, page_size:),
69
+ class: "list-group-item #{'active' if current_page_size == page_size}"
63
70
  - elsif @records_filtered
64
71
  - i18n_key = "#{controller_key}.#{action_name}.index.empty_but_filtered"
65
72
  p.m-3
@@ -0,0 +1,26 @@
1
+ # Initially generated with PgRails::SystemSpecGenerator
2
+ # https://github.com/martin-rosso/pg_rails
3
+
4
+ require 'rails_helper'
5
+
6
+ # By default uses selenium_chrome_headless_iphone driver
7
+ # run with DRIVER environment variable to override, eg:
8
+ #
9
+ # DRIVER=selenium rspec
10
+ describe 'Page sizes' do
11
+ let(:logged_user) { create :user, :developer }
12
+
13
+ before do
14
+ login_as logged_user
15
+ create_list :cosa, 8
16
+ end
17
+
18
+ describe 'some case' do
19
+ it do
20
+ visit '/admin/cosas?page_size=2'
21
+ expect(page).to have_css('.page-item', count: 6)
22
+ visit '/admin/cosas?page_size=5'
23
+ expect(page).to have_css('.page-item', count: 4)
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PgRails
4
- VERSION = '7.1.6'
4
+ VERSION = '7.1.8'
5
5
  end
@@ -0,0 +1,5 @@
1
+ Description:
2
+ Generates a system spec
3
+
4
+ Example:
5
+ rails generate pg_rails:system_spec "Some feature"
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PgRails
4
+ class SystemSpecGenerator < Rails::Generators::NamedBase
5
+ source_root File.expand_path('templates', __dir__)
6
+
7
+ def copy_application_policy
8
+ template 'system_spec.rb', "spec/system/#{file_name}.rb"
9
+ end
10
+
11
+ private
12
+
13
+ def file_name
14
+ "#{name.downcase.gsub(' ', '_')}_spec"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ # Initially generated with PgRails::SystemSpecGenerator
2
+ # https://github.com/martin-rosso/pg_rails
3
+
4
+ require 'rails_helper'
5
+
6
+ # By default uses selenium_chrome_headless_iphone driver
7
+ # run with DRIVER environment variable to override, eg:
8
+ #
9
+ # DRIVER=selenium rspec
10
+ describe '<%= name %>' do
11
+ subject(:visitar) do
12
+ visit 'some url'
13
+ end
14
+
15
+ let(:logged_user) { create :user }
16
+
17
+ before do
18
+ login_as logged_user
19
+ end
20
+
21
+ describe 'some case' do
22
+ it do
23
+ visitar
24
+
25
+ expect(page).to have_text 'some text'
26
+ end
27
+ end
28
+ end
@@ -3,13 +3,15 @@ require 'rails_helper'
3
3
  require 'generators/pg_rspec/scaffold/scaffold_generator'
4
4
  require 'generators/pg_decorator/pg_decorator_generator'
5
5
  require 'generators/pg_active_record/model/model_generator'
6
+ require 'generators/pg_rails/system_spec/system_spec_generator'
6
7
 
7
8
  TEST_ENV_NUMBER = ENV.fetch('TEST_ENV_NUMBER', '')
8
9
  DESTINATION_PATH = File.expand_path("./../../tmp/generator_testing#{TEST_ENV_NUMBER}", __dir__)
9
10
 
10
11
  describe 'Generators', type: :generator do
12
+ destination DESTINATION_PATH
13
+
11
14
  describe 'PgDecoratorGenerator' do
12
- destination DESTINATION_PATH
13
15
  tests PgDecoratorGenerator
14
16
 
15
17
  before { prepare_destination }
@@ -24,7 +26,6 @@ describe 'Generators', type: :generator do
24
26
  end
25
27
 
26
28
  describe 'ScaffoldGenerator' do
27
- destination DESTINATION_PATH
28
29
  tests PgRspec::Generators::ScaffoldGenerator
29
30
 
30
31
  before { prepare_destination }
@@ -40,7 +41,6 @@ describe 'Generators', type: :generator do
40
41
  end
41
42
 
42
43
  describe PgActiveRecord::ModelGenerator do
43
- destination DESTINATION_PATH
44
44
  tests described_class
45
45
 
46
46
  before { prepare_destination }
@@ -53,4 +53,19 @@ describe 'Generators', type: :generator do
53
53
  end
54
54
  end
55
55
  end
56
+
57
+ describe PgRails::SystemSpecGenerator do
58
+ tests described_class
59
+
60
+ before { prepare_destination }
61
+
62
+ it do
63
+ run_generator(['Filtros en listados'])
64
+
65
+ my_assert_file 'spec/system/filtros_en_listados_spec.rb' do |content|
66
+ expect(content).to match(/rails_helper/)
67
+ expect(content).to include 'describe \'Filtros en listados\' do'
68
+ end
69
+ end
70
+ end
56
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.6
4
+ version: 7.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martín Rosso
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-01 00:00:00.000000000 Z
11
+ date: 2024-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -791,6 +791,7 @@ files:
791
791
  - pg_engine/spec/system/destroy_spec.rb
792
792
  - pg_engine/spec/system/login_spec.rb
793
793
  - pg_engine/spec/system/noticed_spec.rb
794
+ - pg_engine/spec/system/page_sizes_spec.rb
794
795
  - pg_engine/spec/system/send_mail_spec.rb
795
796
  - pg_engine/spec/system/signup_spec.rb
796
797
  - pg_engine/spec/system/tooltips_spec.rb
@@ -890,6 +891,9 @@ files:
890
891
  - pg_scaffold/lib/generators/pg_rails/instalar/USAGE
891
892
  - pg_scaffold/lib/generators/pg_rails/instalar/instalar_generator.rb
892
893
  - pg_scaffold/lib/generators/pg_rails/instalar/templates/pg_rails.rb
894
+ - pg_scaffold/lib/generators/pg_rails/system_spec/USAGE
895
+ - pg_scaffold/lib/generators/pg_rails/system_spec/system_spec_generator.rb
896
+ - pg_scaffold/lib/generators/pg_rails/system_spec/templates/system_spec.rb
893
897
  - pg_scaffold/lib/generators/pg_resource_route/pg_resource_route_generator.rb
894
898
  - pg_scaffold/lib/generators/pg_rspec/model/model_generator.rb
895
899
  - pg_scaffold/lib/generators/pg_rspec/model/templates/model_spec.rb