compony 0.1.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ecb0c40f2981194e5fa6a297731c5f224f49c8d73594f016149567da28553c93
4
- data.tar.gz: 93b518bd1fd54dd04a628df57f18ee120b2be4485241b50b9143fe136eb4bb14
3
+ metadata.gz: d8c73b93a2181fc65daa7d813741776da0426bb8f17bdfee660d8e94626f1676
4
+ data.tar.gz: 70715489017a96b9fd638a75c48666fc8157971af5b6f15f80a202ce774c14e2
5
5
  SHA512:
6
- metadata.gz: d4f6f506c58e51ab3086b8a3870d05bccaefca10529869b90ed11b6ce83f0d76c6c114062c62a99ecdc3fa08dc24b8f55b825a586c640919b176ba2110eb7b7f
7
- data.tar.gz: afddee67f4c6659008704e572bee553ec6350f3fb8ad06550089e9b1954a913e5e0faf43b6d83cb35b0ae14f70c4889577cab13fda427f5a9e7d25341a442164
6
+ metadata.gz: 3f18b01d899380afbcba59880d0ef3bf827228ca410f67bcd2a8d70900cf32004442e4ae60cce6a6a2ca00801225cc8f760e0988e3a1903bda7969263ded700d
7
+ data.tar.gz: 0f9896f5d968a90f20c4c2323a41b205915a57f05b10cdb80d3968192b4af9c700635f22ed1057c5ba4850449c8d6f6c796c61f6f774418c2620a13e5fda0505
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.1.3
1
+ 3.2.2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ # 0.2.1
2
+
3
+ - Fix a bug where the app crashed on HEAD verb
4
+ - Show more details about failing authorization block
5
+ - Implement `submit_path` DSL call for WithForm
6
+ - Add French translation
7
+ - Implement `skip_autofocus` in Form
8
+ - Allow partial override of standalone verb configs. Example:
9
+ ```ruby
10
+ verb :get do
11
+ authorize { true }
12
+ end
13
+ verb :post do
14
+ authorize { true }
15
+ # Parent class implements more logic here, which will no longer be overwritten by calling `verb :post`.
16
+ end
17
+ ```
18
+
19
+ # 0.2.0
20
+
21
+ - Cleanup old code
22
+ - Remove `check_config!` that was barely used
23
+
1
24
  # 0.1.1
2
25
 
3
26
  - Support and force Rails 7.1.2
data/Gemfile.lock CHANGED
@@ -1,11 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- compony (0.1.0)
4
+ compony (0.1.2.edge)
5
5
  anchormodel (~> 0.1.2)
6
6
  cancancan (~> 3.4.0)
7
7
  dslblend (>= 0.0.3)
8
8
  dyny (>= 0.0.3)
9
+ rails (>= 7.1.2)
9
10
  request_store (>= 1.5)
10
11
  schemacop (>= 3.0.17)
11
12
  simple_form (>= 5.1.0)
@@ -13,79 +14,93 @@ PATH
13
14
  GEM
14
15
  remote: https://rubygems.org/
15
16
  specs:
16
- actioncable (7.0.4.3)
17
- actionpack (= 7.0.4.3)
18
- activesupport (= 7.0.4.3)
17
+ actioncable (7.1.2)
18
+ actionpack (= 7.1.2)
19
+ activesupport (= 7.1.2)
19
20
  nio4r (~> 2.0)
20
21
  websocket-driver (>= 0.6.1)
21
- actionmailbox (7.0.4.3)
22
- actionpack (= 7.0.4.3)
23
- activejob (= 7.0.4.3)
24
- activerecord (= 7.0.4.3)
25
- activestorage (= 7.0.4.3)
26
- activesupport (= 7.0.4.3)
22
+ zeitwerk (~> 2.6)
23
+ actionmailbox (7.1.2)
24
+ actionpack (= 7.1.2)
25
+ activejob (= 7.1.2)
26
+ activerecord (= 7.1.2)
27
+ activestorage (= 7.1.2)
28
+ activesupport (= 7.1.2)
27
29
  mail (>= 2.7.1)
28
30
  net-imap
29
31
  net-pop
30
32
  net-smtp
31
- actionmailer (7.0.4.3)
32
- actionpack (= 7.0.4.3)
33
- actionview (= 7.0.4.3)
34
- activejob (= 7.0.4.3)
35
- activesupport (= 7.0.4.3)
33
+ actionmailer (7.1.2)
34
+ actionpack (= 7.1.2)
35
+ actionview (= 7.1.2)
36
+ activejob (= 7.1.2)
37
+ activesupport (= 7.1.2)
36
38
  mail (~> 2.5, >= 2.5.4)
37
39
  net-imap
38
40
  net-pop
39
41
  net-smtp
40
- rails-dom-testing (~> 2.0)
41
- actionpack (7.0.4.3)
42
- actionview (= 7.0.4.3)
43
- activesupport (= 7.0.4.3)
44
- rack (~> 2.0, >= 2.2.0)
42
+ rails-dom-testing (~> 2.2)
43
+ actionpack (7.1.2)
44
+ actionview (= 7.1.2)
45
+ activesupport (= 7.1.2)
46
+ nokogiri (>= 1.8.5)
47
+ racc
48
+ rack (>= 2.2.4)
49
+ rack-session (>= 1.0.1)
45
50
  rack-test (>= 0.6.3)
46
- rails-dom-testing (~> 2.0)
47
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
48
- actiontext (7.0.4.3)
49
- actionpack (= 7.0.4.3)
50
- activerecord (= 7.0.4.3)
51
- activestorage (= 7.0.4.3)
52
- activesupport (= 7.0.4.3)
51
+ rails-dom-testing (~> 2.2)
52
+ rails-html-sanitizer (~> 1.6)
53
+ actiontext (7.1.2)
54
+ actionpack (= 7.1.2)
55
+ activerecord (= 7.1.2)
56
+ activestorage (= 7.1.2)
57
+ activesupport (= 7.1.2)
53
58
  globalid (>= 0.6.0)
54
59
  nokogiri (>= 1.8.5)
55
- actionview (7.0.4.3)
56
- activesupport (= 7.0.4.3)
60
+ actionview (7.1.2)
61
+ activesupport (= 7.1.2)
57
62
  builder (~> 3.1)
58
- erubi (~> 1.4)
59
- rails-dom-testing (~> 2.0)
60
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
61
- activejob (7.0.4.3)
62
- activesupport (= 7.0.4.3)
63
+ erubi (~> 1.11)
64
+ rails-dom-testing (~> 2.2)
65
+ rails-html-sanitizer (~> 1.6)
66
+ activejob (7.1.2)
67
+ activesupport (= 7.1.2)
63
68
  globalid (>= 0.3.6)
64
- activemodel (7.0.4.3)
65
- activesupport (= 7.0.4.3)
66
- activerecord (7.0.4.3)
67
- activemodel (= 7.0.4.3)
68
- activesupport (= 7.0.4.3)
69
- activestorage (7.0.4.3)
70
- actionpack (= 7.0.4.3)
71
- activejob (= 7.0.4.3)
72
- activerecord (= 7.0.4.3)
73
- activesupport (= 7.0.4.3)
69
+ activemodel (7.1.2)
70
+ activesupport (= 7.1.2)
71
+ activerecord (7.1.2)
72
+ activemodel (= 7.1.2)
73
+ activesupport (= 7.1.2)
74
+ timeout (>= 0.4.0)
75
+ activestorage (7.1.2)
76
+ actionpack (= 7.1.2)
77
+ activejob (= 7.1.2)
78
+ activerecord (= 7.1.2)
79
+ activesupport (= 7.1.2)
74
80
  marcel (~> 1.0)
75
- mini_mime (>= 1.1.0)
76
- activesupport (7.0.4.3)
81
+ activesupport (7.1.2)
82
+ base64
83
+ bigdecimal
77
84
  concurrent-ruby (~> 1.0, >= 1.0.2)
85
+ connection_pool (>= 2.2.5)
86
+ drb
78
87
  i18n (>= 1.6, < 2)
79
88
  minitest (>= 5.1)
89
+ mutex_m
80
90
  tzinfo (~> 2.0)
81
- anchormodel (0.1.2)
91
+ anchormodel (0.1.3)
82
92
  rails (~> 7.0)
83
93
  ast (2.4.2)
94
+ base64 (0.2.0)
95
+ bigdecimal (3.1.4)
84
96
  builder (3.2.4)
85
97
  cancancan (3.4.0)
86
98
  concurrent-ruby (1.2.2)
99
+ connection_pool (2.4.1)
87
100
  crass (1.0.6)
88
101
  date (3.3.3)
102
+ drb (2.2.0)
103
+ ruby2_keywords
89
104
  dslblend (0.0.3)
90
105
  dyny (0.0.3)
91
106
  rails
@@ -94,6 +109,10 @@ GEM
94
109
  activesupport (>= 5.0)
95
110
  i18n (1.13.0)
96
111
  concurrent-ruby (~> 1.0)
112
+ io-console (0.6.0)
113
+ irb (1.9.1)
114
+ rdoc
115
+ reline (>= 0.3.8)
97
116
  json (2.6.3)
98
117
  loofah (2.21.3)
99
118
  crass (~> 1.0.2)
@@ -104,9 +123,9 @@ GEM
104
123
  net-pop
105
124
  net-smtp
106
125
  marcel (1.0.2)
107
- method_source (1.0.0)
108
126
  mini_mime (1.1.2)
109
127
  minitest (5.18.0)
128
+ mutex_m (0.2.0)
110
129
  net-imap (0.3.4)
111
130
  date
112
131
  net-protocol
@@ -122,39 +141,53 @@ GEM
122
141
  parallel (1.23.0)
123
142
  parser (3.2.2.1)
124
143
  ast (~> 2.4.1)
144
+ psych (5.1.1.1)
145
+ stringio
125
146
  racc (1.6.2)
126
147
  rack (2.2.7)
148
+ rack-session (1.0.1)
149
+ rack (< 3)
127
150
  rack-test (2.1.0)
128
151
  rack (>= 1.3)
129
- rails (7.0.4.3)
130
- actioncable (= 7.0.4.3)
131
- actionmailbox (= 7.0.4.3)
132
- actionmailer (= 7.0.4.3)
133
- actionpack (= 7.0.4.3)
134
- actiontext (= 7.0.4.3)
135
- actionview (= 7.0.4.3)
136
- activejob (= 7.0.4.3)
137
- activemodel (= 7.0.4.3)
138
- activerecord (= 7.0.4.3)
139
- activestorage (= 7.0.4.3)
140
- activesupport (= 7.0.4.3)
152
+ rackup (1.0.0)
153
+ rack (< 3)
154
+ webrick
155
+ rails (7.1.2)
156
+ actioncable (= 7.1.2)
157
+ actionmailbox (= 7.1.2)
158
+ actionmailer (= 7.1.2)
159
+ actionpack (= 7.1.2)
160
+ actiontext (= 7.1.2)
161
+ actionview (= 7.1.2)
162
+ activejob (= 7.1.2)
163
+ activemodel (= 7.1.2)
164
+ activerecord (= 7.1.2)
165
+ activestorage (= 7.1.2)
166
+ activesupport (= 7.1.2)
141
167
  bundler (>= 1.15.0)
142
- railties (= 7.0.4.3)
143
- rails-dom-testing (2.0.3)
144
- activesupport (>= 4.2.0)
168
+ railties (= 7.1.2)
169
+ rails-dom-testing (2.2.0)
170
+ activesupport (>= 5.0.0)
171
+ minitest
145
172
  nokogiri (>= 1.6)
146
- rails-html-sanitizer (1.5.0)
147
- loofah (~> 2.19, >= 2.19.1)
148
- railties (7.0.4.3)
149
- actionpack (= 7.0.4.3)
150
- activesupport (= 7.0.4.3)
151
- method_source
173
+ rails-html-sanitizer (1.6.0)
174
+ loofah (~> 2.21)
175
+ nokogiri (~> 1.14)
176
+ railties (7.1.2)
177
+ actionpack (= 7.1.2)
178
+ activesupport (= 7.1.2)
179
+ irb
180
+ rackup (>= 1.0.0)
152
181
  rake (>= 12.2)
153
- thor (~> 1.0)
154
- zeitwerk (~> 2.5)
182
+ thor (~> 1.0, >= 1.2.2)
183
+ zeitwerk (~> 2.6)
155
184
  rainbow (3.1.1)
156
185
  rake (13.0.6)
186
+ rdoc (6.6.0)
187
+ psych (>= 4.0.0)
157
188
  regexp_parser (2.8.0)
189
+ reline (0.4.0)
190
+ io-console (~> 0.5)
158
191
  request_store (1.5.1)
159
192
  rack (>= 1.4)
160
193
  rexml (3.2.5)
@@ -182,11 +215,13 @@ GEM
182
215
  simple_form (5.2.0)
183
216
  actionpack (>= 5.2)
184
217
  activemodel (>= 5.2)
218
+ stringio (3.0.9)
185
219
  thor (1.2.2)
186
- timeout (0.3.2)
220
+ timeout (0.4.1)
187
221
  tzinfo (2.0.6)
188
222
  concurrent-ruby (~> 1.0)
189
223
  unicode-display_width (2.4.2)
224
+ webrick (1.8.1)
190
225
  websocket-driver (0.7.5)
191
226
  websocket-extensions (>= 0.1.0)
192
227
  websocket-extensions (0.1.5)
@@ -15,7 +15,9 @@ class ComponyController < ApplicationController
15
15
 
16
16
  # Define controller action for each standalone config
17
17
  define_method(standalone_config.rails_action_name) do
18
- verb_config = standalone_config.verbs[request.raw_request_method.downcase.to_sym]
18
+ translated_verb = request.raw_request_method.downcase.to_sym
19
+ translated_verb = :get if translated_verb == :head # Rails transparently converts HEAD to GET, so we must do the same for fetching the config.
20
+ verb_config = standalone_config.verbs[translated_verb]
19
21
  Compony.comp_class_for!(comp_cst, family_cst).new.on_standalone_access(verb_config, self)
20
22
  end
21
23
 
data/compony.gemspec CHANGED
@@ -2,19 +2,19 @@
2
2
  # This file is auto-generated via: 'rake gemspec'.
3
3
 
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: compony 0.1.1 ruby lib
5
+ # stub: compony 0.2.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "compony".freeze
9
- s.version = "0.1.1".freeze
9
+ s.version = "0.2.1".freeze
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Sandro Kalbermatter".freeze, "contributors".freeze]
14
- s.date = "2023-11-23"
15
- s.files = [".gitignore".freeze, ".ruby-version".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "Gemfile.lock".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "app/controllers/compony_controller.rb".freeze, "compony.gemspec".freeze, "config/locales/de.yml".freeze, "config/locales/en.yml".freeze, "config/routes.rb".freeze, "doc/resourceful_lifecycle.graphml".freeze, "doc/resourceful_lifecycle.pdf".freeze, "lib/compony.rb".freeze, "lib/compony/component.rb".freeze, "lib/compony/component_mixins/default/labelling.rb".freeze, "lib/compony/component_mixins/default/standalone.rb".freeze, "lib/compony/component_mixins/default/standalone/resourceful_verb_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/standalone_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/verb_dsl.rb".freeze, "lib/compony/component_mixins/resourceful.rb".freeze, "lib/compony/components/button.rb".freeze, "lib/compony/components/destroy.rb".freeze, "lib/compony/components/edit.rb".freeze, "lib/compony/components/form.rb".freeze, "lib/compony/components/new.rb".freeze, "lib/compony/components/with_form.rb".freeze, "lib/compony/controller_mixin.rb".freeze, "lib/compony/engine.rb".freeze, "lib/compony/method_accessible_hash.rb".freeze, "lib/compony/model_fields/anchormodel.rb".freeze, "lib/compony/model_fields/association.rb".freeze, "lib/compony/model_fields/attachment.rb".freeze, "lib/compony/model_fields/base.rb".freeze, "lib/compony/model_fields/boolean.rb".freeze, "lib/compony/model_fields/color.rb".freeze, "lib/compony/model_fields/currency.rb".freeze, "lib/compony/model_fields/date.rb".freeze, "lib/compony/model_fields/datetime.rb".freeze, "lib/compony/model_fields/decimal.rb".freeze, "lib/compony/model_fields/email.rb".freeze, "lib/compony/model_fields/float.rb".freeze, "lib/compony/model_fields/integer.rb".freeze, "lib/compony/model_fields/percentage.rb".freeze, "lib/compony/model_fields/phone.rb".freeze, "lib/compony/model_fields/rich_text.rb".freeze, "lib/compony/model_fields/string.rb".freeze, "lib/compony/model_fields/text.rb".freeze, "lib/compony/model_fields/time.rb".freeze, "lib/compony/model_fields/url.rb".freeze, "lib/compony/model_mixin.rb".freeze, "lib/compony/request_context.rb".freeze, "lib/compony/version.rb".freeze, "lib/compony/view_helpers.rb".freeze, "lib/generators/component/USAGE".freeze, "lib/generators/component/component_generator.rb".freeze, "lib/generators/component/templates/component.rb.erb".freeze, "lib/generators/component/templates/destroy.rb.erb".freeze, "lib/generators/component/templates/edit.rb.erb".freeze, "lib/generators/component/templates/form.rb.erb".freeze, "lib/generators/component/templates/new.rb.erb".freeze, "lib/generators/components/USAGE".freeze, "lib/generators/components/components_generator.rb".freeze]
14
+ s.date = "2024-01-22"
15
+ s.files = [".gitignore".freeze, ".ruby-version".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "Gemfile.lock".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "app/controllers/compony_controller.rb".freeze, "compony.gemspec".freeze, "config/locales/de.yml".freeze, "config/locales/en.yml".freeze, "config/locales/fr.yml".freeze, "config/routes.rb".freeze, "doc/resourceful_lifecycle.graphml".freeze, "doc/resourceful_lifecycle.pdf".freeze, "lib/compony.rb".freeze, "lib/compony/component.rb".freeze, "lib/compony/component_mixins/default/labelling.rb".freeze, "lib/compony/component_mixins/default/standalone.rb".freeze, "lib/compony/component_mixins/default/standalone/resourceful_verb_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/standalone_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/verb_dsl.rb".freeze, "lib/compony/component_mixins/resourceful.rb".freeze, "lib/compony/components/button.rb".freeze, "lib/compony/components/destroy.rb".freeze, "lib/compony/components/edit.rb".freeze, "lib/compony/components/form.rb".freeze, "lib/compony/components/new.rb".freeze, "lib/compony/components/with_form.rb".freeze, "lib/compony/controller_mixin.rb".freeze, "lib/compony/engine.rb".freeze, "lib/compony/method_accessible_hash.rb".freeze, "lib/compony/model_fields/anchormodel.rb".freeze, "lib/compony/model_fields/association.rb".freeze, "lib/compony/model_fields/attachment.rb".freeze, "lib/compony/model_fields/base.rb".freeze, "lib/compony/model_fields/boolean.rb".freeze, "lib/compony/model_fields/color.rb".freeze, "lib/compony/model_fields/currency.rb".freeze, "lib/compony/model_fields/date.rb".freeze, "lib/compony/model_fields/datetime.rb".freeze, "lib/compony/model_fields/decimal.rb".freeze, "lib/compony/model_fields/email.rb".freeze, "lib/compony/model_fields/float.rb".freeze, "lib/compony/model_fields/integer.rb".freeze, "lib/compony/model_fields/percentage.rb".freeze, "lib/compony/model_fields/phone.rb".freeze, "lib/compony/model_fields/rich_text.rb".freeze, "lib/compony/model_fields/string.rb".freeze, "lib/compony/model_fields/text.rb".freeze, "lib/compony/model_fields/time.rb".freeze, "lib/compony/model_fields/url.rb".freeze, "lib/compony/model_mixin.rb".freeze, "lib/compony/request_context.rb".freeze, "lib/compony/version.rb".freeze, "lib/compony/view_helpers.rb".freeze, "lib/generators/component/USAGE".freeze, "lib/generators/component/component_generator.rb".freeze, "lib/generators/component/templates/component.rb.erb".freeze, "lib/generators/component/templates/destroy.rb.erb".freeze, "lib/generators/component/templates/edit.rb.erb".freeze, "lib/generators/component/templates/form.rb.erb".freeze, "lib/generators/component/templates/new.rb.erb".freeze, "lib/generators/components/USAGE".freeze, "lib/generators/components/components_generator.rb".freeze]
16
16
  s.required_ruby_version = Gem::Requirement.new(">= 3.0.0".freeze)
17
- s.rubygems_version = "3.4.21".freeze
17
+ s.rubygems_version = "3.4.22".freeze
18
18
  s.summary = "Needs summary".freeze
19
19
 
20
20
  s.specification_version = 4
@@ -0,0 +1,33 @@
1
+ fr:
2
+ compony:
3
+ cancel: 'Annuler'
4
+ filtered: '[Filtré]' # Not translated as this appears in log
5
+ boolean:
6
+ true: 'Oui'
7
+ false: 'Non'
8
+ feasibility:
9
+ has_dependent_models: 'il existe des %{dependent_class} dépendants'
10
+ model_fields:
11
+ attachment:
12
+ download: 'Télécharger'
13
+ components:
14
+ form:
15
+ submit: 'Envoyer'
16
+ cancel: 'Annuler'
17
+ edit:
18
+ label:
19
+ long: 'Modifier %{data_label}'
20
+ short: 'Modifier'
21
+ data_was_updated: '%{data_label} a été enregistré.'
22
+ new:
23
+ label:
24
+ long: 'Créer %{data_class}'
25
+ short: 'Nouveau'
26
+ data_was_created: '%{data_label} a été créé.'
27
+ destroy:
28
+ label:
29
+ long: 'Supprimer %{data_label}'
30
+ short: 'Supprimer'
31
+ confirm_question: 'Voulez-vous vraiment supprimer %{data_label} ?'
32
+ confirm_button: 'Oui, supprimer'
33
+ data_was_destroyed: '%{data_label} a été supprimé.'
@@ -37,7 +37,6 @@ module Compony
37
37
  setup_blocks.each do |setup_block|
38
38
  instance_exec(&setup_block)
39
39
  end
40
- check_config!
41
40
  end
42
41
 
43
42
  def inspect
@@ -228,9 +227,5 @@ module Compony
228
227
  def resourceful?
229
228
  return false
230
229
  end
231
-
232
- protected
233
-
234
- def check_config!; end
235
230
  end
236
231
  end
@@ -14,7 +14,7 @@ module Compony
14
14
  end
15
15
 
16
16
  # For internal usage only, processes the block and returns a config hash.
17
- def to_conf(&)
17
+ def to_conf(provide_defaults:, &)
18
18
  return super.deep_merge({
19
19
  load_data_block: @load_data_block,
20
20
  assign_attributes_block: @assign_attributes_block,
@@ -4,11 +4,13 @@ module Compony
4
4
  module Standalone
5
5
  # @api description
6
6
  # Wrapper and DSL helper for component's standalone config
7
+ # Pass `provide_defaults` true if this is the first standalone DSL of a component. Pass false if it is a subsequent one (e.g. if subclassed comp)
7
8
  class StandaloneDsl < Dslblend::Base
8
- def initialize(component, name = nil, path: nil)
9
+ def initialize(component, name = nil, provide_defaults:, path: nil)
9
10
  super()
10
11
  @component = component
11
12
  @name = name&.to_sym
13
+ @provide_defaults = provide_defaults
12
14
  @path = path
13
15
  @verbs = {}
14
16
  @skip_authentication = false
@@ -38,8 +40,17 @@ module Compony
38
40
  def verb(verb, *args, **nargs, &)
39
41
  verb = verb.to_sym
40
42
  verb_dsl_class = @component.resourceful? ? ResourcefulVerbDsl : VerbDsl
41
- @verbs[verb] ||= Compony::MethodAccessibleHash.new
42
- @verbs[verb].deep_merge! verb_dsl_class.new(@component, verb, *args, **nargs).to_conf(&)
43
+ if @verbs[verb]
44
+ @verbs[verb].deep_merge! verb_dsl_class.new(@component, verb, *args, **nargs).to_conf(provide_defaults: false, &)
45
+ else
46
+ # Note about provide_defaults:
47
+ # - We must pass false if this is the second time `standalone` was called for this component -> see @provide_defaults
48
+ # - We musst pass false if this is the second time `verb` was called for this component -> handled by the if statement (other branch)
49
+ # - We must pass true otherwise (handled by this branch)
50
+ @verbs[verb] = Compony::MethodAccessibleHash.new(
51
+ verb_dsl_class.new(@component, verb, *args, **nargs).to_conf(provide_defaults: @provide_defaults, &)
52
+ )
53
+ end
43
54
  end
44
55
 
45
56
  # DSL
@@ -17,18 +17,19 @@ module Compony
17
17
 
18
18
  @component = component
19
19
  @verb = verb
20
- @respond_blocks = { nil => proc { render_standalone(controller) } } # default format
20
+ @respond_blocks = {}
21
21
  @authorize_block = nil
22
22
  end
23
23
 
24
24
  # For internal usage only, processes the block and returns a config hash.
25
- def to_conf(&)
25
+ def to_conf(provide_defaults:, &)
26
26
  evaluate(&) if block_given?
27
- return {
27
+ base_config = provide_defaults ? default_config : {}
28
+ return base_config.deep_merge({
28
29
  verb: @verb,
29
- authorize_block: @authorize_block || proc { can?(comp_name.to_sym, family_name.to_sym) },
30
+ authorize_block: @authorize_block,
30
31
  respond_blocks: @respond_blocks
31
- }.compact
32
+ }.compact)
32
33
  end
33
34
 
34
35
  protected
@@ -45,6 +46,14 @@ module Compony
45
46
  def respond(format = nil, &block)
46
47
  @respond_blocks[format&.to_sym] = block
47
48
  end
49
+
50
+ # Internal, do not use
51
+ def default_config
52
+ return {
53
+ authorize_block: proc { can?(comp_name.to_sym, family_name.to_sym) },
54
+ respond_blocks: { nil => proc { render_standalone(controller) } }
55
+ }
56
+ end
48
57
  end
49
58
  end
50
59
  end
@@ -57,7 +57,7 @@ module Compony
57
57
  end
58
58
 
59
59
  # TODO: Make much prettier, providing message, action, subject and conditions
60
- fail CanCan::AccessDenied, inspect unless request_context.evaluate(&verb_config.authorize_block)
60
+ fail CanCan::AccessDenied, [inspect, verb_config.authorize_block.inspect].join(', ') unless request_context.evaluate(&verb_config.authorize_block)
61
61
 
62
62
  if verb_config.store_data_block
63
63
  request_context.evaluate_with_backfire(&verb_config.store_data_block)
@@ -107,8 +107,11 @@ module Compony
107
107
  def standalone(name = nil, *args, **nargs, &block)
108
108
  block = proc {} unless block_given? # If called without a block, must default to an empty block to provide a binding to the DSL.
109
109
  name = name&.to_sym # nil name is the most common case
110
- @standalone_configs[name] ||= Compony::MethodAccessibleHash.new
111
- @standalone_configs[name].deep_merge! StandaloneDsl.new(self, name, *args, **nargs).to_conf(&block)
110
+ if @standalone_configs[name]
111
+ @standalone_configs[name].deep_merge! StandaloneDsl.new(self, name, *args, provide_defaults: false, **nargs).to_conf(&block)
112
+ else
113
+ @standalone_configs[name] = Compony::MethodAccessibleHash.new(StandaloneDsl.new(self, name, *args, provide_defaults: true, **nargs).to_conf(&block))
114
+ end
112
115
  end
113
116
 
114
117
  # Undoes previous standalone calls
@@ -8,13 +8,11 @@ module Compony
8
8
  super
9
9
  end
10
10
 
11
- def check_config!
12
- super
13
- fail "#{inspect} requires config.form_fields do ..." if @form_fields.blank?
14
- end
15
-
16
11
  setup do
17
12
  before_render do
13
+ # Make sure the error message is going to be nice if form_fields were not implemented
14
+ fail "#{component.inspect} requires config.form_fields do ..." if @form_fields.nil?
15
+
18
16
  # Must render the buttons now as the rendering within simple form breaks the form
19
17
  @submit_button = Compony.button_component_class.new(
20
18
  label: @submit_label || I18n.t('compony.components.form.submit'), icon: 'arrow-right', type: :submit
@@ -88,7 +86,7 @@ module Compony
88
86
  if hidden
89
87
  return model_field.simpleform_input_hidden(@simpleform, self, **input_opts)
90
88
  else
91
- unless @focus_given
89
+ unless @focus_given || @skip_autofocus
92
90
  input_opts[:autofocus] = true unless input_opts.key? :autofocus
93
91
  @focus_given = true
94
92
  end
@@ -138,6 +136,11 @@ module Compony
138
136
  fail 'schema requires a block to be given'
139
137
  end
140
138
  end
139
+
140
+ # DSL method, skips adding autofocus to the first field
141
+ def skip_autofocus
142
+ @skip_autofocus = true
143
+ end
141
144
  end
142
145
  end
143
146
  end
@@ -4,6 +4,11 @@ module Compony
4
4
  # This component is destined to take a sub-component that is a form component.
5
5
  # It can be called via :get or via `submit_verb` depending on whether its form should be shown or submitted.
6
6
  class WithForm < Component
7
+ def initialize(...)
8
+ @submit_path_block = ->(controller) { controller.helpers.send("#{Compony.path_helper_name(comp_name, family_name)}_path") }
9
+ super
10
+ end
11
+
7
12
  # Returns an instance of the form component responsible for rendering the form.
8
13
  # Feel free to override this in subclasses.
9
14
  def form_comp
@@ -11,7 +16,7 @@ module Compony
11
16
  self,
12
17
  submit_verb:,
13
18
  # If applicable, Rails adds the route keys automatically, thus, e.g. :id does not need to be passed here, as it comes from the request.
14
- submit_path: ->(controller) { controller.helpers.send("#{Compony.path_helper_name(comp_name, family_name)}_path") }
19
+ submit_path: @submit_path_block
15
20
  )
16
21
  end
17
22
 
@@ -32,6 +37,13 @@ module Compony
32
37
  def form_comp_class(new_form_comp_class = nil)
33
38
  @form_comp_class ||= new_form_comp_class
34
39
  end
40
+
41
+ # DSL method
42
+ # Overrides the submit path which would otherwise default to this component
43
+ # This takes a block that will be called and given a controller
44
+ def submit_path(&new_submit_path_block)
45
+ @submit_path_block = new_submit_path_block
46
+ end
35
47
  end
36
48
  end
37
49
  end
@@ -1,7 +1,7 @@
1
1
  module Compony
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 1
4
+ MINOR = 2
5
5
  PATCH = 1
6
6
 
7
7
  EDGE = false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: compony
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Kalbermatter
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-11-23 00:00:00.000000000 Z
12
+ date: 2024-01-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard
@@ -184,6 +184,7 @@ files:
184
184
  - compony.gemspec
185
185
  - config/locales/de.yml
186
186
  - config/locales/en.yml
187
+ - config/locales/fr.yml
187
188
  - config/routes.rb
188
189
  - doc/resourceful_lifecycle.graphml
189
190
  - doc/resourceful_lifecycle.pdf