base_editing_bootstrap 1.2.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +6 -0
- data/app/helpers/base_editing_helper.rb +37 -0
- data/app/views/base_editing/_search_field.erb +6 -0
- data/app/views/base_editing/_search_result_buttons.html.erb +3 -4
- data/lib/base_editing_bootstrap/VERSION +1 -1
- data/lib/generators/base_editing_bootstrap/scaffold/templates/spec/model.rb.tt +11 -2
- data/spec/support/external_shared/base_model.rb +14 -23
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a6226c6077cf2467b75341e9a1a8cdd8829e06faac291de10cf2e6f3686a4bc
|
4
|
+
data.tar.gz: 82eaf0b64cf498b708aea0eadd96c674a6c06b2ecf3b2d38d4450dfd249e6e3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 442b7a0c1a90eefcb4fe707fb10559dfbce75a1595a6eaed04d35529e324d57635c2b9d07d991f7ed7820404d483d5bf82dedf1883b6e048ac878e5ecb1e0590
|
7
|
+
data.tar.gz: 528f5e47faeaba5312d6aa8620de661c1503cd86fe7b52a7cb6b30bbca944078df7e7d50c65ef2d64754f1561e488aa808a05104731097c0f84a84ead9d94db2
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,22 @@
|
|
2
2
|
All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
|
3
3
|
|
4
4
|
- - -
|
5
|
+
## 1.3.1 - 2025-01-10
|
6
|
+
#### Bug Fixes
|
7
|
+
- Better spec helpers - (0d16364) - Marino Bonetti
|
8
|
+
|
9
|
+
- - -
|
10
|
+
|
11
|
+
## 1.3.0 - 2025-01-09
|
12
|
+
#### Documentation
|
13
|
+
- Aggiunta documentazione per override search field - (ba97155) - Marino Bonetti
|
14
|
+
#### Features
|
15
|
+
- Translated Namespaced button (#12) - (7e06c5f) - Marino Bonetti
|
16
|
+
#### Tests
|
17
|
+
- Add sub view for dummy posts - (0b25868) - Marino Bonetti
|
18
|
+
|
19
|
+
- - -
|
20
|
+
|
5
21
|
## 1.2.0 - 2025-01-09
|
6
22
|
#### Features
|
7
23
|
- Add new method to get label from search field - (ace5fa0) - Marino Bonetti
|
data/README.md
CHANGED
@@ -173,6 +173,12 @@ Utilizzo per modello base, in questo esempio prendiamo come modello Post come es
|
|
173
173
|
#...
|
174
174
|
```
|
175
175
|
|
176
|
+
### Translations
|
177
|
+
Traduzioni disponibili:
|
178
|
+
Per i bottoni della index, è possibile eseguire l'override del testo presente nel bottone.
|
179
|
+
Leggere la documentazione nel file `app/helpers/base_editing_helper.rb#translate_with_controller_scoped`
|
180
|
+
|
181
|
+
|
176
182
|
## Testing helpers
|
177
183
|
|
178
184
|
### Requirements(installed with generators)
|
@@ -5,5 +5,42 @@ module BaseEditingHelper
|
|
5
5
|
include Utilities::FormHelper
|
6
6
|
include Utilities::IconHelper
|
7
7
|
|
8
|
+
##
|
9
|
+
# Estrapola la traduzione, andando ad includere la path del controller nella ricerca della chiave
|
10
|
+
# Viene tenuto conto anche del namespace del controller assieme ai suoi namespace
|
11
|
+
# ES:
|
12
|
+
# In un caso in cui abbiamo un controller di questo tipo: Customer::PostsController < PostsController
|
13
|
+
# la ricerca della chiave .destroy partendo dal partial app/views/base_editing/_search_result_buttons.html.erb
|
14
|
+
# sarà così composta:
|
15
|
+
#
|
16
|
+
# it.customer/posts.index.base_editing.search_result_buttons.destroy => nil
|
17
|
+
# it.customer/posts.base_editing.search_result_buttons.destroy => nil
|
18
|
+
# it.posts.index.base_editing.search_result_buttons.destroy => nil
|
19
|
+
# it.posts.base_editing.search_result_buttons.destroy => nil
|
20
|
+
# it.base_editing.index.base_editing.search_result_buttons.destroy => nil
|
21
|
+
# it.base_editing.base_editing.search_result_buttons.destroy => nil
|
22
|
+
# it.restricted_area.index.base_editing.search_result_buttons.destroy => nil
|
23
|
+
# it.restricted_area.base_editing.search_result_buttons.destroy => nil
|
24
|
+
# it.authentication.index.base_editing.search_result_buttons.destroy => nil
|
25
|
+
# it.authentication.base_editing.search_result_buttons.destroy => nil
|
26
|
+
# it.base_editing.search_result_buttons.destroy => nil
|
27
|
+
#
|
28
|
+
def translate_with_controller_scoped(key, **options)
|
29
|
+
if key&.start_with?(".")
|
30
|
+
inner_key = scope_key_by_partial(key)
|
31
|
+
defaults = []
|
32
|
+
paths = controller.class.ancestors.select { |c| c < ApplicationController }.collect(&:controller_path).uniq
|
33
|
+
paths.each do |path|
|
34
|
+
defaults << [:"#{path}.#{action_name}.#{inner_key}", :"#{path}.#{inner_key}"]
|
35
|
+
end
|
36
|
+
defaults << inner_key.to_sym
|
37
|
+
defaults << options[:default] if options.key?(:default)
|
38
|
+
key = nil
|
39
|
+
options[:default] = defaults.flatten
|
40
|
+
end
|
41
|
+
|
42
|
+
# dobbiamo eliminare possibili duplicati nello scope delle chiavi
|
43
|
+
t(key, **options)
|
44
|
+
end
|
8
45
|
|
9
46
|
end
|
@@ -1,3 +1,9 @@
|
|
1
|
+
<%
|
2
|
+
##
|
3
|
+
# Il campo search_field è un BaseEditingBootstrap::Searches::Field.
|
4
|
+
# Per strutturare in modo differente il campo di ricerca si ha a disposizione
|
5
|
+
# l'helper BaseEditingBootstrap::Searches::Field#label che stampa il contenuto della label
|
6
|
+
%>
|
1
7
|
<div class="form-group col-xs-6 col-sm-4 col-md-3">
|
2
8
|
<%= ransack_form_builder.label(search_field.name) %>
|
3
9
|
<%= ransack_form_builder.search_field(search_field.name, class: "form-control form-control-sm") %>
|
@@ -1,15 +1,14 @@
|
|
1
1
|
<%# locals: (obj:) -%>
|
2
|
-
<%= link_to(icon("pencil-square"),
|
2
|
+
<%= link_to(icon("pencil-square", translate_with_controller_scoped(".edit", default: [:edit,""])),
|
3
3
|
edit_custom_polymorphic_path(obj),
|
4
4
|
class: "btn btn-sm btn-primary me-1") if policy(obj).edit? %>
|
5
5
|
|
6
|
-
|
7
|
-
<%= link_to(icon(:eye),
|
6
|
+
<%= link_to(icon(:eye, translate_with_controller_scoped(".show", default: [:show,""])),
|
8
7
|
show_custom_polymorphic_path(obj),
|
9
8
|
class: "btn btn-sm btn-primary me-1") if policy(obj).show? %>
|
10
9
|
|
11
10
|
|
12
|
-
<%= link_to(icon(:trash),
|
11
|
+
<%= link_to(icon(:trash, translate_with_controller_scoped(".destroy", default: [:destroy,""])),
|
13
12
|
destroy_custom_polymorphic_path(obj),
|
14
13
|
data: {
|
15
14
|
turbo_method: :delete,
|
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.1
|
@@ -1,6 +1,15 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
RSpec.describe <%= class_name %>, type: :model do
|
3
3
|
it_behaves_like "a base model",
|
4
|
-
ransack_permitted_attributes: %w[<%= attributes_names.join(" ") %>]
|
5
|
-
|
4
|
+
ransack_permitted_attributes: %w[<%= attributes_names.join(" ") %>]
|
5
|
+
|
6
|
+
# it_behaves_like "a base model",
|
7
|
+
# ransack_permitted_attributes: %w[<%= attributes_names.join(" ") %>],
|
8
|
+
# ransack_permitted_associations: [] do
|
9
|
+
# let(:auth_object) { :auth_object } <- default
|
10
|
+
# let(:auth_object) { create(:user, :as_admin) } <- in caso di necessità di override
|
11
|
+
# let(:new_user_ransack_permitted_attributes) { ransack_permitted_attributes }
|
12
|
+
# let(:new_user_ransack_permitted_associations) { ransack_permitted_associations }
|
13
|
+
# end
|
14
|
+
|
6
15
|
end
|
@@ -6,48 +6,39 @@ RSpec.shared_examples "a base model" do |ransack_permitted_attributes: [], ransa
|
|
6
6
|
expect(described_class).to respond_to(:human_action_message)
|
7
7
|
end
|
8
8
|
|
9
|
+
##
|
10
|
+
# Oggetto solitamente di classe User che identifichi l'utente a cui eseguire il check dei permessi
|
11
|
+
let(:auth_object) { :auth_object }
|
12
|
+
let(:new_user_ransack_permitted_attributes) { ransack_permitted_attributes }
|
13
|
+
let(:new_user_ransack_permitted_associations) { ransack_permitted_associations }
|
14
|
+
|
9
15
|
describe "with ransackables" do
|
10
|
-
where(:base_model_method, :
|
16
|
+
where(:base_model_method, :result, :new_user_result) do
|
11
17
|
[
|
12
18
|
[
|
13
|
-
:ransackable_attributes,
|
14
|
-
],
|
15
|
-
[
|
16
|
-
:ransackable_attributes, :permitted_attributes_for_ransack, ransack_permitted_attributes.map(&:to_sym), ransack_permitted_attributes.map(&:to_s)
|
19
|
+
:ransackable_attributes, ransack_permitted_attributes.map(&:to_s), lazy { new_user_ransack_permitted_attributes.map(&:to_s) }
|
17
20
|
],
|
18
21
|
[
|
19
|
-
:ransackable_associations,
|
22
|
+
:ransackable_associations, ransack_permitted_associations.map(&:to_s), lazy { new_user_ransack_permitted_associations.map(&:to_s) }
|
20
23
|
],
|
21
|
-
[
|
22
|
-
:ransackable_associations, :permitted_associations_for_ransack, ransack_permitted_associations.map(&:to_sym), ransack_permitted_associations.map(&:to_s)
|
23
|
-
]
|
24
24
|
]
|
25
25
|
end
|
26
26
|
|
27
27
|
with_them do
|
28
|
-
subject { described_class.send(base_model_method,
|
28
|
+
subject { described_class.send(base_model_method, inner_auth_object) }
|
29
29
|
|
30
|
-
let(:
|
31
|
-
# before do
|
32
|
-
# allow(User).to receive(:new).and_return(simulated_user_instance)
|
33
|
-
# end
|
34
|
-
let(:auth_object) { nil }
|
35
|
-
let(:policy) {
|
36
|
-
instance_double("BaseModelPolicy", policy_method => policy_output)
|
37
|
-
}
|
30
|
+
let(:inner_auth_object) { nil }
|
38
31
|
it "new user" do
|
39
32
|
expect(Pundit).to receive(:policy).with(an_instance_of(User),
|
40
33
|
an_instance_of(described_class)).and_call_original
|
41
|
-
#.and_return(policy)
|
42
34
|
|
43
|
-
is_expected.to match_array(
|
35
|
+
is_expected.to match_array(new_user_result)
|
44
36
|
end
|
45
37
|
|
46
38
|
context "with auth_object" do
|
47
|
-
let(:
|
39
|
+
let(:inner_auth_object) { auth_object }
|
48
40
|
it do
|
49
|
-
expect(Pundit).to receive(:policy).with(
|
50
|
-
# .and_return(policy)
|
41
|
+
expect(Pundit).to receive(:policy).with(inner_auth_object, an_instance_of(described_class)).and_call_original
|
51
42
|
|
52
43
|
is_expected.to match_array(result)
|
53
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: base_editing_bootstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marino Bonetti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-01-
|
11
|
+
date: 2025-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|