captive-admin 0.2.9 → 0.2.12

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: 28efe38700cab350ab210400adcfbc3f8351e30e56498f435fa67b8292443876
4
- data.tar.gz: 676f77870aa5e60da1d22c812c2ebfe7a6228e5cdcd1b830c91c86990a58d528
3
+ metadata.gz: 2c539d272b57fc46be2a7de2ab078e1d76d5d01fe7db8985c474e401d678d236
4
+ data.tar.gz: 421208417f28667ebf7275b56ec4e6bb94e9984ffe36d18d4237d1e115286075
5
5
  SHA512:
6
- metadata.gz: 723339b8fcded2c955c817b326c4bc2d596412223b3cc53146d69c4689d45cf0f2f7a3860f2fa183f2753863753813491c1b015b55658a3e3639540b8a4d9456
7
- data.tar.gz: 3cb7549acf12e634360e6f78b2ad43aab247397841044cd17fabc30b7f76d879e0dce3fbef4fdd022ed1778371b98e6add24864362ec214ec43ad8c3d2f683f3
6
+ metadata.gz: c8ddd2748ace06bef2940986c366048212503555afe7f0bbfc56e15925bd9113e9336d4425c7e5be4c5e394988cc52bae2cac9bdb693bf1cafcb96b42e227232
7
+ data.tar.gz: b97eba54c879453393654b107460d833476f15c4c6121e9be58f62a7c383e8b9d5d2d06d0a1858a34357af53b3ce17ec1f0ad7aaf586592a432718f33285c407
data/README.md CHANGED
@@ -29,6 +29,14 @@ gem 'captive-admin'
29
29
  @import "captive-admin/base";
30
30
  ```
31
31
 
32
+ ## Usage
33
+
34
+ You can use the admin generator. [See the usage doc to read more information](./lib/generators/admin/USAGE) :
35
+
36
+ ```console
37
+ bin/rails generate admin Thing
38
+ ```
39
+
32
40
  ## Contributing
33
41
 
34
42
  Bug reports and pull requests are welcome on GitHub at https://github.com/Captive-Studio/captive-sdk.
data/lib/captive/admin.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "captive/admin/engine"
4
+ require "captive/theme"
5
+ require "kaminari-i18n"
4
6
 
5
7
  module Captive
6
8
  module Admin
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Créé une resource ActiveAdmin au standard
3
+
4
+ Example:
5
+ bin/rails generate admin Thing
6
+
7
+ This will create:
8
+ app/admin/things.rb
9
+ app/views/admin/things/_form.html.arb
10
+ app/views/admin/things/_show.html.arb
@@ -0,0 +1,130 @@
1
+ class AdminGenerator < Rails::Generators::NamedBase
2
+ desc "Créé une resource ActiveAdmin au standard"
3
+ def create_resource_file
4
+ say "Voir le Standard : https://captive.notion.site/ActiveAdmin-Personnaliser-l-index-e7869c1bd6064e94a623eb7950d1ca8c?pvs=4",
5
+ :blue
6
+ create_resource
7
+ create_show
8
+ create_form
9
+ end
10
+
11
+ private
12
+
13
+ def create_resource
14
+ create_file "app/admin/#{plural_name}.rb", <<~RUBY
15
+ # frozen_string_literal: true
16
+
17
+ ActiveAdmin.register #{class_name} do
18
+ config.sort_order = "created_at_desc"
19
+
20
+ permit_params #{permit_params.map { |p| ":#{p}" }.join(", ")}
21
+ #{includes}
22
+ index do
23
+ #{index_columns.map { |attr| "column :#{attr}" }.join("\n ")}
24
+ actions dropdown: true
25
+ end
26
+
27
+ show do
28
+ render partial: "admin/#{plural_name}/show", locals: { resource: resource }
29
+ end
30
+
31
+ form partial: "admin/#{plural_name}/form"
32
+ end
33
+ RUBY
34
+ end
35
+
36
+ def create_show
37
+ create_file "app/views/admin/#{plural_name}/_show.html.arb", <<~RUBY
38
+ # frozen_string_literal: true
39
+
40
+ panel "Détails #{plural_name}" do
41
+ attributes_table_for resource do
42
+ #{show_rows.map { |attr| "row :#{attr}" }.join("\n ")}
43
+ end
44
+ end
45
+ RUBY
46
+ end
47
+
48
+ def create_form
49
+ create_file "app/views/admin/#{plural_name}/_form.html.arb", <<~RUBY
50
+ # frozen_string_literal: true
51
+
52
+ active_admin_form_for [:admin, resource] do |f|
53
+ f.semantic_errors
54
+ f.inputs do
55
+ #{form_inputs.map { |p| "f.input :#{p}" }.join("\n ")}
56
+ end
57
+ f.actions
58
+ end
59
+ RUBY
60
+ end
61
+
62
+ def columns
63
+ @columns ||=
64
+ class_name.constantize
65
+ .columns
66
+ .map(&:name)
67
+ end
68
+
69
+ def columns_with_associations
70
+ @columns_with_associations ||=
71
+ columns.map do |c|
72
+ association =
73
+ class_name.constantize.reflect_on_all_associations.find do |a|
74
+ a.association_foreign_key == c
75
+ end
76
+
77
+ next c if association.blank?
78
+
79
+ association.name.to_s
80
+ end
81
+ end
82
+
83
+ def associations
84
+ @associations ||=
85
+ columns.map do |c|
86
+ class_name.constantize.reflect_on_all_associations.find do |a|
87
+ a.association_foreign_key == c
88
+ end&.name
89
+ end.compact
90
+ end
91
+
92
+ def includes
93
+ return if associations.blank?
94
+
95
+ "\n includes :#{associations.join(", ")}\n"
96
+ end
97
+
98
+ PERMIT_PARAMS_EXCLUDED = [
99
+ "id",
100
+ "created_at",
101
+ "updated_at",
102
+ "encrypted_password",
103
+ "reset_password_token",
104
+ "reset_password_sent_at",
105
+ "remember_created_at",
106
+ ].freeze
107
+ def permit_params
108
+ permit_params = columns.excluding(PERMIT_PARAMS_EXCLUDED)
109
+ if columns.include?("encrypted_password")
110
+ permit_params << "password"
111
+ permit_params << "password_confirmation"
112
+ end
113
+ permit_params
114
+ end
115
+
116
+ INDEX_EXCLUDED = PERMIT_PARAMS_EXCLUDED
117
+ def index_columns
118
+ columns_with_associations.excluding(INDEX_EXCLUDED)
119
+ end
120
+
121
+ SHOW_EXCLUDED = ["encrypted_password"].freeze
122
+ def show_rows
123
+ columns_with_associations.excluding(SHOW_EXCLUDED)
124
+ end
125
+
126
+ INPUT_EXCLUDED = INDEX_EXCLUDED
127
+ def form_inputs
128
+ columns_with_associations.excluding(INPUT_EXCLUDED)
129
+ end
130
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: captive-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Captive
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-11-06 00:00:00.000000000 Z
12
+ date: 2023-11-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -31,14 +31,48 @@ dependencies:
31
31
  requirements:
32
32
  - - '='
33
33
  - !ruby/object:Gem::Version
34
- version: 0.2.9
34
+ version: 0.2.12
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - '='
40
40
  - !ruby/object:Gem::Version
41
- version: 0.2.9
41
+ version: 0.2.12
42
+ - !ruby/object:Gem::Dependency
43
+ name: activeadmin
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 2.0.0
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '4.0'
52
+ type: :runtime
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 2.0.0
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: kaminari-i18n
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.5.0
69
+ type: :runtime
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.5.0
42
76
  - !ruby/object:Gem::Dependency
43
77
  name: rspec-rails
44
78
  requirement: !ruby/object:Gem::Requirement
@@ -91,13 +125,15 @@ files:
91
125
  - app/assets/stylesheets/captive-admin/structure/_title_bar.scss
92
126
  - lib/captive/admin.rb
93
127
  - lib/captive/admin/engine.rb
128
+ - lib/generators/admin/USAGE
129
+ - lib/generators/admin/admin_generator.rb
94
130
  - lib/tasks/captive/admin_tasks.rake
95
131
  homepage: https://captive.fr/
96
132
  licenses:
97
133
  - MIT
98
134
  metadata:
99
135
  homepage_uri: https://captive.fr/
100
- source_code_uri: https://github.com/Captive-Studio/captive-sdk/tree/v0.2.9/captive-admin
136
+ source_code_uri: https://github.com/Captive-Studio/captive-sdk/tree/v0.2.12/captive-admin
101
137
  post_install_message:
102
138
  rdoc_options: []
103
139
  require_paths: