compony 0.11.12 → 0.11.13

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.
Files changed (138) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/CHANGELOG.md +9 -0
  4. data/Gemfile +3 -0
  5. data/Gemfile.lock +145 -106
  6. data/README.md +12 -1
  7. data/Rakefile +10 -0
  8. data/TODO.md +2 -1
  9. data/VERSION +1 -1
  10. data/compony.gemspec +5 -3
  11. data/doc/ComponentGenerator.html +1 -1
  12. data/doc/Components.html +1 -1
  13. data/doc/ComponentsGenerator.html +1 -1
  14. data/doc/Compony/Component.html +1 -1
  15. data/doc/Compony/ComponentMixins/Default/Labelling.html +1 -1
  16. data/doc/Compony/ComponentMixins/Default/Standalone/ResourcefulVerbDsl.html +1 -1
  17. data/doc/Compony/ComponentMixins/Default/Standalone/StandaloneDsl.html +1 -1
  18. data/doc/Compony/ComponentMixins/Default/Standalone/VerbDsl.html +1 -1
  19. data/doc/Compony/ComponentMixins/Default/Standalone.html +1 -1
  20. data/doc/Compony/ComponentMixins/Default.html +1 -1
  21. data/doc/Compony/ComponentMixins/Resourceful.html +1 -1
  22. data/doc/Compony/ComponentMixins.html +1 -1
  23. data/doc/Compony/Components/Buttons/CssButton.html +1 -1
  24. data/doc/Compony/Components/Buttons/Link.html +1 -1
  25. data/doc/Compony/Components/Buttons.html +1 -1
  26. data/doc/Compony/Components/Destroy.html +1 -1
  27. data/doc/Compony/Components/Edit.html +1 -1
  28. data/doc/Compony/Components/Form.html +1 -1
  29. data/doc/Compony/Components/Index.html +1 -1
  30. data/doc/Compony/Components/List.html +1 -1
  31. data/doc/Compony/Components/New.html +1 -1
  32. data/doc/Compony/Components/Show.html +1 -1
  33. data/doc/Compony/Components/WithForm.html +1 -1
  34. data/doc/Compony/Components.html +1 -1
  35. data/doc/Compony/ControllerMixin.html +1 -1
  36. data/doc/Compony/Engine.html +1 -1
  37. data/doc/Compony/Intent.html +1 -1
  38. data/doc/Compony/ManageIntentsDsl.html +2 -2
  39. data/doc/Compony/MethodAccessibleHash.html +1 -1
  40. data/doc/Compony/ModelFields/Anchormodel.html +1 -1
  41. data/doc/Compony/ModelFields/Association.html +1 -1
  42. data/doc/Compony/ModelFields/Attachment.html +1 -1
  43. data/doc/Compony/ModelFields/Base.html +8 -2
  44. data/doc/Compony/ModelFields/Boolean.html +1 -1
  45. data/doc/Compony/ModelFields/Color.html +1 -1
  46. data/doc/Compony/ModelFields/Currency.html +1 -1
  47. data/doc/Compony/ModelFields/Date.html +1 -1
  48. data/doc/Compony/ModelFields/Datetime.html +1 -1
  49. data/doc/Compony/ModelFields/Decimal.html +1 -1
  50. data/doc/Compony/ModelFields/Email.html +1 -1
  51. data/doc/Compony/ModelFields/Float.html +1 -1
  52. data/doc/Compony/ModelFields/Integer.html +1 -1
  53. data/doc/Compony/ModelFields/Percentage.html +1 -1
  54. data/doc/Compony/ModelFields/Phone.html +1 -1
  55. data/doc/Compony/ModelFields/RichText.html +1 -1
  56. data/doc/Compony/ModelFields/String.html +1 -1
  57. data/doc/Compony/ModelFields/Text.html +1 -1
  58. data/doc/Compony/ModelFields/Time.html +1 -1
  59. data/doc/Compony/ModelFields/Url.html +1 -1
  60. data/doc/Compony/ModelFields.html +1 -1
  61. data/doc/Compony/ModelMixin.html +1 -1
  62. data/doc/Compony/NaturalOrdering.html +1 -1
  63. data/doc/Compony/RequestContext.html +1 -1
  64. data/doc/Compony/Version.html +1 -1
  65. data/doc/Compony/ViewHelpers.html +1 -1
  66. data/doc/Compony/VirtualModel.html +1 -1
  67. data/doc/Compony.html +1 -1
  68. data/doc/ComponyController.html +1 -1
  69. data/doc/_index.html +1 -1
  70. data/doc/file.CHANGELOG.html +84 -77
  71. data/doc/file.README.html +21 -11
  72. data/doc/file.basic_component.html +14 -14
  73. data/doc/file.cookbook.html +27 -27
  74. data/doc/file.destroy.html +2 -2
  75. data/doc/file.dsl_reference.html +199 -199
  76. data/doc/file.edit.html +3 -3
  77. data/doc/file.example.html +13 -13
  78. data/doc/file.example_advanced.html +10 -10
  79. data/doc/file.feasibility.html +2 -2
  80. data/doc/file.form.html +7 -7
  81. data/doc/file.generators.html +3 -3
  82. data/doc/file.glossary.html +44 -44
  83. data/doc/file.gotchas.html +35 -35
  84. data/doc/file.index.html +10 -10
  85. data/doc/file.inheritance.html +5 -5
  86. data/doc/file.installation.html +9 -9
  87. data/doc/file.integrations.html +46 -46
  88. data/doc/file.intents.html +11 -11
  89. data/doc/file.internal_datastructures.html +6 -6
  90. data/doc/file.list.html +35 -35
  91. data/doc/file.maintaining.html +21 -21
  92. data/doc/file.model_fields.html +3 -3
  93. data/doc/file.nesting.html +5 -5
  94. data/doc/file.new.html +3 -3
  95. data/doc/file.ownership.html +2 -2
  96. data/doc/file.patterns.html +50 -50
  97. data/doc/file.pre_built_components.html +2 -2
  98. data/doc/file.resourceful.html +5 -5
  99. data/doc/file.show.html +17 -17
  100. data/doc/file.standalone.html +12 -12
  101. data/doc/file.virtual_models.html +2 -2
  102. data/doc/file.with_form.html +23 -23
  103. data/doc/index.html +21 -11
  104. data/doc/top-level-namespace.html +1 -1
  105. data/lib/compony/model_fields/base.rb +3 -0
  106. data/spec/README.md +22 -0
  107. data/spec/compony/component_spec.rb +80 -0
  108. data/spec/compony/compony_spec.rb +102 -0
  109. data/spec/compony/intent_spec.rb +94 -0
  110. data/spec/compony/method_accessible_hash_spec.rb +32 -0
  111. data/spec/compony/model_fields_spec.rb +70 -0
  112. data/spec/compony/model_mixin_spec.rb +81 -0
  113. data/spec/compony/natural_ordering_spec.rb +61 -0
  114. data/spec/dummy/app/components/statics/home.rb +17 -0
  115. data/spec/dummy/app/components/statics/secret.rb +15 -0
  116. data/spec/dummy/app/components/users/destroy.rb +2 -0
  117. data/spec/dummy/app/components/users/edit.rb +2 -0
  118. data/spec/dummy/app/components/users/form.rb +14 -0
  119. data/spec/dummy/app/components/users/index.rb +29 -0
  120. data/spec/dummy/app/components/users/new.rb +2 -0
  121. data/spec/dummy/app/components/users/show.rb +26 -0
  122. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  123. data/spec/dummy/app/models/ability.rb +7 -0
  124. data/spec/dummy/app/models/application_record.rb +4 -0
  125. data/spec/dummy/app/models/user.rb +22 -0
  126. data/spec/dummy/app/views/layouts/application.html.erb +7 -0
  127. data/spec/dummy/config/application.rb +20 -0
  128. data/spec/dummy/config/database.yml +3 -0
  129. data/spec/dummy/config/environment.rb +3 -0
  130. data/spec/dummy/config/initializers/simple_form.rb +9 -0
  131. data/spec/dummy/config/routes.rb +3 -0
  132. data/spec/dummy/db/schema.rb +14 -0
  133. data/spec/rails_helper.rb +23 -0
  134. data/spec/requests/authorization_spec.rb +16 -0
  135. data/spec/requests/plain_component_spec.rb +9 -0
  136. data/spec/requests/routing_spec.rb +20 -0
  137. data/spec/requests/users_crud_spec.rb +99 -0
  138. metadata +62 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b8c38a3228869e8f457c1edab5968a917a1d5355b792de7d288c8c98ca113dc
4
- data.tar.gz: 84e7d0c60ce71b38343f1ccbd1b5e99b81b0542b481a71d3deb5c7383deef838
3
+ metadata.gz: f8bcaa093e0e0d37e75f158b228477640cd9e82d2eefea6b4982d0a3ff2d1d9e
4
+ data.tar.gz: ba97437f66551ac3f83f4aca18ac07065fb240280c2c54f81cdce82e9049c88f
5
5
  SHA512:
6
- metadata.gz: a688e011ef09f254f5d850528f620faee3e5ae44140ab5caf7316ff7317e1e85b0a4491d8bc568fd7a541d8112bbf6aaa0c3dbd7db3af24c014950ebdb6f5b28
7
- data.tar.gz: 87beb28b53b470de4fc600de01d0112e183ece2dcf476da60cc80a41ae87b0ccda1281530c229142a62fd9d36d6922880531b01e1af12bb4e92c2fa8c6c86d79
6
+ metadata.gz: 5c5374ee8aae8733c6558ed0e2ad8494bf0191d9dd9531a4be3408b3ae3357fb5496011793f9326257e920686b4c75a32ed69d3f8800a2490e657ad0c3721ffa
7
+ data.tar.gz: 84c2985fba93265015107127b5508d953d5d537873c1baf2a8d1522d1fd1950eba12ae53ba40405d734453b4ae6921b8fc65c37925fc05df9b532ae1ea12faa7
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --require rails_helper
2
+ --color
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # 0.11.13
2
+
3
+ - Fix `value_for` raising `NoMethodError` for a field that answers with nil, e.g. a `:percentage` field whose value
4
+ cannot be computed. Such a value is now rendered as nil instead of being handed to the type's transformation,
5
+ which mirrors the behavior for enumerable values, whose nil entries have always been dropped.
6
+ - Add an RSpec test suite (`bundle exec rspec` / `rake spec`) with a dummy Rails app under `spec/dummy`,
7
+ covering the module API, intents, feasibility, model fields, routing and the pre-built CRUD components.
8
+ See `spec/README.md` for layout and version pins. New development dependencies: `rspec-rails`, `sqlite3`.
9
+
1
10
  # 0.11.12
2
11
 
3
12
  - Add Spanish (`es`) translations.
data/Gemfile CHANGED
@@ -1,3 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ gem 'rack', '>= 3.1' # pre-built components use the :unprocessable_content status, introduced in Rack 3.1
6
+ gem 'rails', '~> 7.2.1' # Dyny 0.0.3 clashes with Rails >= 8.1 (textarea helper collision), see spec/README.md
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- compony (0.11.12.edge)
4
+ compony (0.11.13.edge)
5
5
  anchormodel (>= 0.3.0)
6
6
  cancancan (~> 3.6.1)
7
7
  dslblend (>= 0.0.3)
@@ -14,67 +14,70 @@ PATH
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- actioncable (7.2.1)
18
- actionpack (= 7.2.1)
19
- activesupport (= 7.2.1)
17
+ actioncable (7.2.3)
18
+ actionpack (= 7.2.3)
19
+ activesupport (= 7.2.3)
20
20
  nio4r (~> 2.0)
21
21
  websocket-driver (>= 0.6.1)
22
22
  zeitwerk (~> 2.6)
23
- actionmailbox (7.2.1)
24
- actionpack (= 7.2.1)
25
- activejob (= 7.2.1)
26
- activerecord (= 7.2.1)
27
- activestorage (= 7.2.1)
28
- activesupport (= 7.2.1)
23
+ actionmailbox (7.2.3)
24
+ actionpack (= 7.2.3)
25
+ activejob (= 7.2.3)
26
+ activerecord (= 7.2.3)
27
+ activestorage (= 7.2.3)
28
+ activesupport (= 7.2.3)
29
29
  mail (>= 2.8.0)
30
- actionmailer (7.2.1)
31
- actionpack (= 7.2.1)
32
- actionview (= 7.2.1)
33
- activejob (= 7.2.1)
34
- activesupport (= 7.2.1)
30
+ actionmailer (7.2.3)
31
+ actionpack (= 7.2.3)
32
+ actionview (= 7.2.3)
33
+ activejob (= 7.2.3)
34
+ activesupport (= 7.2.3)
35
35
  mail (>= 2.8.0)
36
36
  rails-dom-testing (~> 2.2)
37
- actionpack (7.2.1)
38
- actionview (= 7.2.1)
39
- activesupport (= 7.2.1)
37
+ actionpack (7.2.3)
38
+ actionview (= 7.2.3)
39
+ activesupport (= 7.2.3)
40
+ cgi
40
41
  nokogiri (>= 1.8.5)
41
42
  racc
42
- rack (>= 2.2.4, < 3.2)
43
+ rack (>= 2.2.4, < 3.3)
43
44
  rack-session (>= 1.0.1)
44
45
  rack-test (>= 0.6.3)
45
46
  rails-dom-testing (~> 2.2)
46
47
  rails-html-sanitizer (~> 1.6)
47
48
  useragent (~> 0.16)
48
- actiontext (7.2.1)
49
- actionpack (= 7.2.1)
50
- activerecord (= 7.2.1)
51
- activestorage (= 7.2.1)
52
- activesupport (= 7.2.1)
49
+ actiontext (7.2.3)
50
+ actionpack (= 7.2.3)
51
+ activerecord (= 7.2.3)
52
+ activestorage (= 7.2.3)
53
+ activesupport (= 7.2.3)
53
54
  globalid (>= 0.6.0)
54
55
  nokogiri (>= 1.8.5)
55
- actionview (7.2.1)
56
- activesupport (= 7.2.1)
56
+ actionview (7.2.3)
57
+ activesupport (= 7.2.3)
57
58
  builder (~> 3.1)
59
+ cgi
58
60
  erubi (~> 1.11)
59
61
  rails-dom-testing (~> 2.2)
60
62
  rails-html-sanitizer (~> 1.6)
61
- activejob (7.2.1)
62
- activesupport (= 7.2.1)
63
+ activejob (7.2.3)
64
+ activesupport (= 7.2.3)
63
65
  globalid (>= 0.3.6)
64
- activemodel (7.2.1)
65
- activesupport (= 7.2.1)
66
- activerecord (7.2.1)
67
- activemodel (= 7.2.1)
68
- activesupport (= 7.2.1)
66
+ activemodel (7.2.3)
67
+ activesupport (= 7.2.3)
68
+ activerecord (7.2.3)
69
+ activemodel (= 7.2.3)
70
+ activesupport (= 7.2.3)
69
71
  timeout (>= 0.4.0)
70
- activestorage (7.2.1)
71
- actionpack (= 7.2.1)
72
- activejob (= 7.2.1)
73
- activerecord (= 7.2.1)
74
- activesupport (= 7.2.1)
72
+ activestorage (7.2.3)
73
+ actionpack (= 7.2.3)
74
+ activejob (= 7.2.3)
75
+ activerecord (= 7.2.3)
76
+ activesupport (= 7.2.3)
75
77
  marcel (~> 1.0)
76
- activesupport (7.2.1)
78
+ activesupport (7.2.3)
77
79
  base64
80
+ benchmark (>= 0.3)
78
81
  bigdecimal
79
82
  concurrent-ruby (~> 1.0, >= 1.3.1)
80
83
  connection_pool (>= 2.2.5)
@@ -88,109 +91,139 @@ GEM
88
91
  rails (>= 7.0)
89
92
  ast (2.4.3)
90
93
  base64 (0.3.0)
91
- bigdecimal (3.2.2)
92
- builder (3.2.4)
94
+ benchmark (0.5.0)
95
+ bigdecimal (4.1.2)
96
+ builder (3.3.0)
93
97
  cancancan (3.6.1)
94
- concurrent-ruby (1.3.5)
95
- connection_pool (2.5.3)
96
- crass (1.0.6)
97
- date (3.3.3)
98
+ cgi (0.5.2)
99
+ concurrent-ruby (1.3.7)
100
+ connection_pool (3.0.2)
101
+ crass (1.0.7)
102
+ date (3.5.1)
103
+ diff-lcs (1.6.2)
98
104
  drb (2.2.3)
99
105
  dslblend (0.0.3)
100
106
  dyny (0.0.3)
101
107
  rails
102
- erubi (1.12.0)
103
- globalid (1.1.0)
104
- activesupport (>= 5.0)
105
- i18n (1.14.7)
108
+ erb (6.0.4)
109
+ erubi (1.13.1)
110
+ globalid (1.4.0)
111
+ activesupport (>= 6.1)
112
+ i18n (1.15.2)
106
113
  concurrent-ruby (~> 1.0)
107
- io-console (0.6.0)
108
- irb (1.14.0)
114
+ io-console (0.8.2)
115
+ irb (1.18.0)
116
+ pp (>= 0.6.0)
117
+ prism (>= 1.3.0)
109
118
  rdoc (>= 4.0.0)
110
119
  reline (>= 0.4.2)
111
- json (2.13.2)
120
+ json (2.20.0)
112
121
  language_server-protocol (3.17.0.5)
113
122
  lint_roller (1.1.0)
114
123
  logger (1.7.0)
115
- loofah (2.21.3)
124
+ loofah (2.25.1)
116
125
  crass (~> 1.0.2)
117
126
  nokogiri (>= 1.12.0)
118
- mail (2.8.1)
127
+ mail (2.9.1)
128
+ logger
119
129
  mini_mime (>= 0.1.1)
120
130
  net-imap
121
131
  net-pop
122
132
  net-smtp
123
- marcel (1.0.2)
124
- mini_mime (1.1.2)
125
- mini_portile2 (2.8.7)
126
- minitest (5.25.5)
127
- net-imap (0.3.4)
133
+ marcel (1.2.1)
134
+ mini_mime (1.1.5)
135
+ minitest (5.27.0)
136
+ net-imap (0.6.4.1)
128
137
  date
129
138
  net-protocol
130
139
  net-pop (0.1.2)
131
140
  net-protocol
132
- net-protocol (0.2.1)
141
+ net-protocol (0.2.2)
133
142
  timeout
134
- net-smtp (0.3.3)
143
+ net-smtp (0.5.1)
135
144
  net-protocol
136
- nio4r (2.5.9)
137
- nokogiri (1.15.0)
138
- mini_portile2 (~> 2.8.2)
145
+ nio4r (2.7.5)
146
+ nokogiri (1.19.4-x86_64-linux-gnu)
139
147
  racc (~> 1.4)
140
148
  parallel (1.27.0)
141
149
  parser (3.3.9.0)
142
150
  ast (~> 2.4.1)
143
151
  racc
152
+ pp (0.6.4)
153
+ prettyprint
154
+ prettyprint (0.2.0)
144
155
  prism (1.4.0)
145
- psych (5.1.1.1)
156
+ psych (5.4.0)
157
+ date
146
158
  stringio
147
- racc (1.6.2)
148
- rack (2.2.17)
149
- rack-session (1.0.1)
150
- rack (< 3)
151
- rack-test (2.1.0)
159
+ racc (1.8.1)
160
+ rack (3.2.6)
161
+ rack-session (2.1.2)
162
+ base64 (>= 0.1.0)
163
+ rack (>= 3.0.0)
164
+ rack-test (2.2.0)
152
165
  rack (>= 1.3)
153
- rackup (1.0.0)
154
- rack (< 3)
155
- webrick
156
- rails (7.2.1)
157
- actioncable (= 7.2.1)
158
- actionmailbox (= 7.2.1)
159
- actionmailer (= 7.2.1)
160
- actionpack (= 7.2.1)
161
- actiontext (= 7.2.1)
162
- actionview (= 7.2.1)
163
- activejob (= 7.2.1)
164
- activemodel (= 7.2.1)
165
- activerecord (= 7.2.1)
166
- activestorage (= 7.2.1)
167
- activesupport (= 7.2.1)
166
+ rackup (2.3.1)
167
+ rack (>= 3)
168
+ rails (7.2.3)
169
+ actioncable (= 7.2.3)
170
+ actionmailbox (= 7.2.3)
171
+ actionmailer (= 7.2.3)
172
+ actionpack (= 7.2.3)
173
+ actiontext (= 7.2.3)
174
+ actionview (= 7.2.3)
175
+ activejob (= 7.2.3)
176
+ activemodel (= 7.2.3)
177
+ activerecord (= 7.2.3)
178
+ activestorage (= 7.2.3)
179
+ activesupport (= 7.2.3)
168
180
  bundler (>= 1.15.0)
169
- railties (= 7.2.1)
170
- rails-dom-testing (2.2.0)
181
+ railties (= 7.2.3)
182
+ rails-dom-testing (2.3.0)
171
183
  activesupport (>= 5.0.0)
172
184
  minitest
173
185
  nokogiri (>= 1.6)
174
- rails-html-sanitizer (1.6.0)
175
- loofah (~> 2.21)
176
- nokogiri (~> 1.14)
177
- railties (7.2.1)
178
- actionpack (= 7.2.1)
179
- activesupport (= 7.2.1)
186
+ rails-html-sanitizer (1.7.0)
187
+ loofah (~> 2.25)
188
+ nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
189
+ railties (7.2.3)
190
+ actionpack (= 7.2.3)
191
+ activesupport (= 7.2.3)
192
+ cgi
180
193
  irb (~> 1.13)
181
194
  rackup (>= 1.0.0)
182
195
  rake (>= 12.2)
183
196
  thor (~> 1.0, >= 1.2.2)
197
+ tsort (>= 0.2)
184
198
  zeitwerk (~> 2.6)
185
199
  rainbow (3.1.1)
186
- rake (13.0.6)
187
- rdoc (6.6.0)
200
+ rake (13.4.2)
201
+ rdoc (7.2.0)
202
+ erb
188
203
  psych (>= 4.0.0)
204
+ tsort
189
205
  regexp_parser (2.11.2)
190
- reline (0.5.10)
206
+ reline (0.6.3)
191
207
  io-console (~> 0.5)
192
208
  request_store (1.7.0)
193
209
  rack (>= 1.4)
210
+ rspec-core (3.13.6)
211
+ rspec-support (~> 3.13.0)
212
+ rspec-expectations (3.13.5)
213
+ diff-lcs (>= 1.2.0, < 2.0)
214
+ rspec-support (~> 3.13.0)
215
+ rspec-mocks (3.13.8)
216
+ diff-lcs (>= 1.2.0, < 2.0)
217
+ rspec-support (~> 3.13.0)
218
+ rspec-rails (8.0.4)
219
+ actionpack (>= 7.2)
220
+ activesupport (>= 7.2)
221
+ railties (>= 7.2)
222
+ rspec-core (>= 3.13.0, < 5.0.0)
223
+ rspec-expectations (>= 3.13.0, < 5.0.0)
224
+ rspec-mocks (>= 3.13.0, < 5.0.0)
225
+ rspec-support (>= 3.13.0, < 5.0.0)
226
+ rspec-support (3.13.7)
194
227
  rubocop (1.79.2)
195
228
  json (~> 2.3)
196
229
  language_server-protocol (~> 3.17.0.2)
@@ -217,32 +250,38 @@ GEM
217
250
  activesupport (>= 4.0)
218
251
  ruby2_keywords (= 0.0.4)
219
252
  securerandom (0.4.1)
220
- simple_form (5.3.1)
221
- actionpack (>= 5.2)
222
- activemodel (>= 5.2)
223
- stringio (3.0.9)
224
- thor (1.2.2)
225
- timeout (0.4.1)
253
+ simple_form (5.4.1)
254
+ actionpack (>= 7.0)
255
+ activemodel (>= 7.0)
256
+ sqlite3 (2.9.5-x86_64-linux-gnu)
257
+ stringio (3.2.0)
258
+ thor (1.5.0)
259
+ timeout (0.6.1)
260
+ tsort (0.2.0)
226
261
  tzinfo (2.0.6)
227
262
  concurrent-ruby (~> 1.0)
228
263
  unicode-display_width (3.1.5)
229
264
  unicode-emoji (~> 4.0, >= 4.0.4)
230
265
  unicode-emoji (4.0.4)
231
- useragent (0.16.10)
232
- webrick (1.8.1)
233
- websocket-driver (0.7.5)
266
+ useragent (0.16.11)
267
+ websocket-driver (0.8.2)
268
+ base64
234
269
  websocket-extensions (>= 0.1.0)
235
270
  websocket-extensions (0.1.5)
236
271
  yard (0.9.34)
237
- zeitwerk (2.6.8)
272
+ zeitwerk (2.8.2)
238
273
 
239
274
  PLATFORMS
240
275
  x86_64-linux
241
276
 
242
277
  DEPENDENCIES
243
278
  compony!
279
+ rack (>= 3.1)
280
+ rails (~> 7.2.1)
281
+ rspec-rails (>= 6.1)
244
282
  rubocop (>= 1.48)
245
283
  rubocop-rails (>= 2.18.0)
284
+ sqlite3 (>= 1.7)
246
285
  yard (>= 0.9.28)
247
286
 
248
287
  BUNDLED WITH
data/README.md CHANGED
@@ -24,7 +24,7 @@ Compony's key aspects:
24
24
 
25
25
  ## State of the project
26
26
 
27
- I am actively using this framework in various applications and both performance and reliability are good. However, the project is experimental and lacking peer reviews and especially automatic testing, such as unit and integration tests. Also, expect there to be ([documented](/CHANGELOG.md)) breaking changes in the future, as the API will likely be further refined, resulting in renamings and deprecation of various methods.
27
+ I am actively using this framework in various applications and both performance and reliability are good. However, the project is experimental and lacking peer reviews and especially extensive automatic testing, such as unit and integration tests. Also, expect there to be ([documented](/CHANGELOG.md)) breaking changes in the future, as the API will likely be further refined, resulting in renamings and deprecation of various methods.
28
28
 
29
29
  ## Other projects exploring similar concepts
30
30
 
@@ -78,6 +78,17 @@ Compony is Free Software under the LGPLv3 and you are most welcome to contribute
78
78
  - If you'd like to contribute feedback or discuss something, please open an issue.
79
79
  - If you have an idea that is worth implementing, please fork the repo, implement your changes in your own fork, and open a pull request.
80
80
 
81
+ ## Running the tests
82
+
83
+ The gem ships an RSpec suite backed by a minimal dummy Rails app (in-memory SQLite, no setup needed):
84
+
85
+ ```sh
86
+ bundle install
87
+ bundle exec rspec # or: bundle exec rake spec (also the default rake task)
88
+ ```
89
+
90
+ See [spec/README.md](./spec/README.md) for the suite's layout and the reasons behind the Gemfile's `rails` and `rack` version pins.
91
+
81
92
  # Caveats
82
93
 
83
94
  - The API is not yet as consistent as I'd like it. Examples:
data/Rakefile CHANGED
@@ -3,6 +3,14 @@ require_relative 'lib/compony/version'
3
3
 
4
4
  File.open('VERSION', 'w') { |f| f.puts(Compony::Version::LABEL) }
5
5
 
6
+ begin
7
+ require 'rspec/core/rake_task'
8
+ RSpec::Core::RakeTask.new(:spec)
9
+ task default: :spec
10
+ rescue LoadError
11
+ # rspec not available (e.g. production install), skip test task
12
+ end
13
+
6
14
  task :gemspec do
7
15
  specification = Gem::Specification.new do |s|
8
16
  s.name = 'compony'
@@ -20,6 +28,8 @@ task :gemspec do
20
28
  s.add_development_dependency 'yard', '>= 0.9.28'
21
29
  s.add_development_dependency 'rubocop', '>= 1.48'
22
30
  s.add_development_dependency 'rubocop-rails', '>= 2.18.0'
31
+ s.add_development_dependency 'rspec-rails', '>= 6.1'
32
+ s.add_development_dependency 'sqlite3', '>= 1.7'
23
33
 
24
34
  s.add_runtime_dependency 'rails', '>= 7.2.1'
25
35
  s.add_runtime_dependency 'request_store', '>= 1.7'
data/TODO.md CHANGED
@@ -1,2 +1,3 @@
1
1
  - When cancelling in an owned form, prefer Show instead of owner.Index
2
- - Come up with something like `data_class(BaseClass){ attribute(:foo) }` -> ActiveType
2
+ - Come up with something like `data_class(BaseClass){ attribute(:foo) }` -> ActiveType
3
+ - Fix standalone config deep-merge losing verb defaults across class hierarchies: when a base class declares `standalone do ... end` first (e.g. to set `layout`/`skip_authentication!`), the subclass's later `standalone path: ... do verb :get ... end` merges with `provide_defaults: false`, so its VerbDsl conf lacks the default respond block (`respond_blocks[nil]` stays nil). `on_standalone_access` then calls `request_context.evaluate(&nil)` → `instance_eval` without a block → cryptic `ArgumentError: wrong number of arguments (given 0, expected 1..3)`. Workaround: every such verb needs an explicit `respond { render_standalone(controller) }`. Fix idea: fall back to the default respond block at dispatch time (`respond_blocks[nil] || proc { render_standalone(controller) }`) or provide per-verb defaults regardless of merge order. Related: `before_render` (name `:main`) in a subclass silently replaces the base class's unnamed `before_render` via NaturalOrdering — base classes must name their hooks; consider documenting or warning. (Both hit while building the storabble-direct portal base component, 2026-07.)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.12
1
+ 0.11.13
data/compony.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
  # This file is auto-generated via: 'rake gemspec'.
3
3
 
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: compony 0.11.12 ruby lib
5
+ # stub: compony 0.11.13 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "compony".freeze
9
- s.version = "0.11.12".freeze
9
+ s.version = "0.11.13".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
14
  s.date = "1980-01-02"
15
- s.files = [".gitignore".freeze, ".ruby-version".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "CLAUDE.md".freeze, "Gemfile".freeze, "Gemfile.lock".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "TODO.md".freeze, "VERSION".freeze, "app/controllers/compony_controller.rb".freeze, "compony.gemspec".freeze, "config/locales/de.yml".freeze, "config/locales/en.yml".freeze, "config/locales/es.yml".freeze, "config/locales/fr.yml".freeze, "config/routes.rb".freeze, "doc/ComponentGenerator.html".freeze, "doc/Components.html".freeze, "doc/ComponentsGenerator.html".freeze, "doc/Compony.html".freeze, "doc/Compony/Component.html".freeze, "doc/Compony/ComponentMixins.html".freeze, "doc/Compony/ComponentMixins/Default.html".freeze, "doc/Compony/ComponentMixins/Default/Labelling.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/ResourcefulVerbDsl.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/StandaloneDsl.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/VerbDsl.html".freeze, "doc/Compony/ComponentMixins/Resourceful.html".freeze, "doc/Compony/Components.html".freeze, "doc/Compony/Components/Button.html".freeze, "doc/Compony/Components/Buttons.html".freeze, "doc/Compony/Components/Buttons/CssButton.html".freeze, "doc/Compony/Components/Buttons/Link.html".freeze, "doc/Compony/Components/Destroy.html".freeze, "doc/Compony/Components/Edit.html".freeze, "doc/Compony/Components/Form.html".freeze, "doc/Compony/Components/Index.html".freeze, "doc/Compony/Components/List.html".freeze, "doc/Compony/Components/New.html".freeze, "doc/Compony/Components/Show.html".freeze, "doc/Compony/Components/WithForm.html".freeze, "doc/Compony/ControllerMixin.html".freeze, "doc/Compony/Engine.html".freeze, "doc/Compony/ExposedIntentsDsl.html".freeze, "doc/Compony/Intent.html".freeze, "doc/Compony/ManageIntentsDsl.html".freeze, "doc/Compony/MethodAccessibleHash.html".freeze, "doc/Compony/ModelFields.html".freeze, "doc/Compony/ModelFields/Anchormodel.html".freeze, "doc/Compony/ModelFields/Association.html".freeze, "doc/Compony/ModelFields/Attachment.html".freeze, "doc/Compony/ModelFields/Base.html".freeze, "doc/Compony/ModelFields/Boolean.html".freeze, "doc/Compony/ModelFields/Color.html".freeze, "doc/Compony/ModelFields/Currency.html".freeze, "doc/Compony/ModelFields/Date.html".freeze, "doc/Compony/ModelFields/Datetime.html".freeze, "doc/Compony/ModelFields/Decimal.html".freeze, "doc/Compony/ModelFields/Email.html".freeze, "doc/Compony/ModelFields/Float.html".freeze, "doc/Compony/ModelFields/Integer.html".freeze, "doc/Compony/ModelFields/Percentage.html".freeze, "doc/Compony/ModelFields/Phone.html".freeze, "doc/Compony/ModelFields/RichText.html".freeze, "doc/Compony/ModelFields/String.html".freeze, "doc/Compony/ModelFields/Text.html".freeze, "doc/Compony/ModelFields/Time.html".freeze, "doc/Compony/ModelFields/Url.html".freeze, "doc/Compony/ModelMixin.html".freeze, "doc/Compony/NaturalOrdering.html".freeze, "doc/Compony/RequestContext.html".freeze, "doc/Compony/Version.html".freeze, "doc/Compony/ViewHelpers.html".freeze, "doc/Compony/VirtualModel.html".freeze, "doc/ComponyController.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.CHANGELOG.html".freeze, "doc/file.README.html".freeze, "doc/file.basic_component.html".freeze, "doc/file.cookbook.html".freeze, "doc/file.destroy.html".freeze, "doc/file.dsl_reference.html".freeze, "doc/file.edit.html".freeze, "doc/file.example.html".freeze, "doc/file.example_advanced.html".freeze, "doc/file.feasibility.html".freeze, "doc/file.form.html".freeze, "doc/file.generators.html".freeze, "doc/file.glossary.html".freeze, "doc/file.gotchas.html".freeze, "doc/file.index.html".freeze, "doc/file.inheritance.html".freeze, "doc/file.installation.html".freeze, "doc/file.integrations.html".freeze, "doc/file.intents.html".freeze, "doc/file.internal_datastructures.html".freeze, "doc/file.list.html".freeze, "doc/file.maintaining.html".freeze, "doc/file.model_fields.html".freeze, "doc/file.nesting.html".freeze, "doc/file.new.html".freeze, "doc/file.ownership.html".freeze, "doc/file.patterns.html".freeze, "doc/file.pre_built_components.html".freeze, "doc/file.resourceful.html".freeze, "doc/file.show.html".freeze, "doc/file.standalone.html".freeze, "doc/file.virtual_models.html".freeze, "doc/file.with_form.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/guide/basic_component.md".freeze, "doc/guide/cookbook.md".freeze, "doc/guide/dsl_reference.md".freeze, "doc/guide/example.md".freeze, "doc/guide/example_advanced.md".freeze, "doc/guide/feasibility.md".freeze, "doc/guide/generators.md".freeze, "doc/guide/glossary.md".freeze, "doc/guide/gotchas.md".freeze, "doc/guide/inheritance.md".freeze, "doc/guide/installation.md".freeze, "doc/guide/intents.md".freeze, "doc/guide/internal_datastructures.md".freeze, "doc/guide/maintaining.md".freeze, "doc/guide/model_fields.md".freeze, "doc/guide/nesting.md".freeze, "doc/guide/ownership.md".freeze, "doc/guide/patterns.md".freeze, "doc/guide/pre_built_components.md".freeze, "doc/guide/pre_built_components/destroy.md".freeze, "doc/guide/pre_built_components/edit.md".freeze, "doc/guide/pre_built_components/form.md".freeze, "doc/guide/pre_built_components/index.md".freeze, "doc/guide/pre_built_components/list.md".freeze, "doc/guide/pre_built_components/new.md".freeze, "doc/guide/pre_built_components/show.md".freeze, "doc/guide/pre_built_components/with_form.md".freeze, "doc/guide/resourceful.md".freeze, "doc/guide/standalone.md".freeze, "doc/guide/virtual_models.md".freeze, "doc/imgs/intro-example-destroy.png".freeze, "doc/imgs/intro-example-edit.png".freeze, "doc/imgs/intro-example-index.png".freeze, "doc/imgs/intro-example-new.png".freeze, "doc/imgs/intro-example-show.png".freeze, "doc/index.html".freeze, "doc/integrations.md".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/llms.txt".freeze, "doc/method_list.html".freeze, "doc/resourceful_lifecycle.graphml".freeze, "doc/resourceful_lifecycle.pdf".freeze, "doc/resourceful_lifecycle.png".freeze, "doc/top-level-namespace.html".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/buttons/css_button.rb".freeze, "lib/compony/components/buttons/link.rb".freeze, "lib/compony/components/destroy.rb".freeze, "lib/compony/components/edit.rb".freeze, "lib/compony/components/form.rb".freeze, "lib/compony/components/index.rb".freeze, "lib/compony/components/list.rb".freeze, "lib/compony/components/new.rb".freeze, "lib/compony/components/show.rb".freeze, "lib/compony/components/with_form.rb".freeze, "lib/compony/controller_mixin.rb".freeze, "lib/compony/engine.rb".freeze, "lib/compony/intent.rb".freeze, "lib/compony/manage_intents_dsl.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/natural_ordering.rb".freeze, "lib/compony/request_context.rb".freeze, "lib/compony/version.rb".freeze, "lib/compony/view_helpers.rb".freeze, "lib/compony/virtual_model.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/index.rb.erb".freeze, "lib/generators/component/templates/list.rb.erb".freeze, "lib/generators/component/templates/new.rb.erb".freeze, "lib/generators/component/templates/show.rb.erb".freeze, "lib/generators/component/templates/with_base_component.rb.erb".freeze, "lib/generators/components/USAGE".freeze, "lib/generators/components/components_generator.rb".freeze, "logo.svg".freeze]
15
+ s.files = [".gitignore".freeze, ".rspec".freeze, ".ruby-version".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "CLAUDE.md".freeze, "Gemfile".freeze, "Gemfile.lock".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "TODO.md".freeze, "VERSION".freeze, "app/controllers/compony_controller.rb".freeze, "compony.gemspec".freeze, "config/locales/de.yml".freeze, "config/locales/en.yml".freeze, "config/locales/es.yml".freeze, "config/locales/fr.yml".freeze, "config/routes.rb".freeze, "doc/ComponentGenerator.html".freeze, "doc/Components.html".freeze, "doc/ComponentsGenerator.html".freeze, "doc/Compony.html".freeze, "doc/Compony/Component.html".freeze, "doc/Compony/ComponentMixins.html".freeze, "doc/Compony/ComponentMixins/Default.html".freeze, "doc/Compony/ComponentMixins/Default/Labelling.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/ResourcefulVerbDsl.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/StandaloneDsl.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/VerbDsl.html".freeze, "doc/Compony/ComponentMixins/Resourceful.html".freeze, "doc/Compony/Components.html".freeze, "doc/Compony/Components/Button.html".freeze, "doc/Compony/Components/Buttons.html".freeze, "doc/Compony/Components/Buttons/CssButton.html".freeze, "doc/Compony/Components/Buttons/Link.html".freeze, "doc/Compony/Components/Destroy.html".freeze, "doc/Compony/Components/Edit.html".freeze, "doc/Compony/Components/Form.html".freeze, "doc/Compony/Components/Index.html".freeze, "doc/Compony/Components/List.html".freeze, "doc/Compony/Components/New.html".freeze, "doc/Compony/Components/Show.html".freeze, "doc/Compony/Components/WithForm.html".freeze, "doc/Compony/ControllerMixin.html".freeze, "doc/Compony/Engine.html".freeze, "doc/Compony/ExposedIntentsDsl.html".freeze, "doc/Compony/Intent.html".freeze, "doc/Compony/ManageIntentsDsl.html".freeze, "doc/Compony/MethodAccessibleHash.html".freeze, "doc/Compony/ModelFields.html".freeze, "doc/Compony/ModelFields/Anchormodel.html".freeze, "doc/Compony/ModelFields/Association.html".freeze, "doc/Compony/ModelFields/Attachment.html".freeze, "doc/Compony/ModelFields/Base.html".freeze, "doc/Compony/ModelFields/Boolean.html".freeze, "doc/Compony/ModelFields/Color.html".freeze, "doc/Compony/ModelFields/Currency.html".freeze, "doc/Compony/ModelFields/Date.html".freeze, "doc/Compony/ModelFields/Datetime.html".freeze, "doc/Compony/ModelFields/Decimal.html".freeze, "doc/Compony/ModelFields/Email.html".freeze, "doc/Compony/ModelFields/Float.html".freeze, "doc/Compony/ModelFields/Integer.html".freeze, "doc/Compony/ModelFields/Percentage.html".freeze, "doc/Compony/ModelFields/Phone.html".freeze, "doc/Compony/ModelFields/RichText.html".freeze, "doc/Compony/ModelFields/String.html".freeze, "doc/Compony/ModelFields/Text.html".freeze, "doc/Compony/ModelFields/Time.html".freeze, "doc/Compony/ModelFields/Url.html".freeze, "doc/Compony/ModelMixin.html".freeze, "doc/Compony/NaturalOrdering.html".freeze, "doc/Compony/RequestContext.html".freeze, "doc/Compony/Version.html".freeze, "doc/Compony/ViewHelpers.html".freeze, "doc/Compony/VirtualModel.html".freeze, "doc/ComponyController.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.CHANGELOG.html".freeze, "doc/file.README.html".freeze, "doc/file.basic_component.html".freeze, "doc/file.cookbook.html".freeze, "doc/file.destroy.html".freeze, "doc/file.dsl_reference.html".freeze, "doc/file.edit.html".freeze, "doc/file.example.html".freeze, "doc/file.example_advanced.html".freeze, "doc/file.feasibility.html".freeze, "doc/file.form.html".freeze, "doc/file.generators.html".freeze, "doc/file.glossary.html".freeze, "doc/file.gotchas.html".freeze, "doc/file.index.html".freeze, "doc/file.inheritance.html".freeze, "doc/file.installation.html".freeze, "doc/file.integrations.html".freeze, "doc/file.intents.html".freeze, "doc/file.internal_datastructures.html".freeze, "doc/file.list.html".freeze, "doc/file.maintaining.html".freeze, "doc/file.model_fields.html".freeze, "doc/file.nesting.html".freeze, "doc/file.new.html".freeze, "doc/file.ownership.html".freeze, "doc/file.patterns.html".freeze, "doc/file.pre_built_components.html".freeze, "doc/file.resourceful.html".freeze, "doc/file.show.html".freeze, "doc/file.standalone.html".freeze, "doc/file.virtual_models.html".freeze, "doc/file.with_form.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/guide/basic_component.md".freeze, "doc/guide/cookbook.md".freeze, "doc/guide/dsl_reference.md".freeze, "doc/guide/example.md".freeze, "doc/guide/example_advanced.md".freeze, "doc/guide/feasibility.md".freeze, "doc/guide/generators.md".freeze, "doc/guide/glossary.md".freeze, "doc/guide/gotchas.md".freeze, "doc/guide/inheritance.md".freeze, "doc/guide/installation.md".freeze, "doc/guide/intents.md".freeze, "doc/guide/internal_datastructures.md".freeze, "doc/guide/maintaining.md".freeze, "doc/guide/model_fields.md".freeze, "doc/guide/nesting.md".freeze, "doc/guide/ownership.md".freeze, "doc/guide/patterns.md".freeze, "doc/guide/pre_built_components.md".freeze, "doc/guide/pre_built_components/destroy.md".freeze, "doc/guide/pre_built_components/edit.md".freeze, "doc/guide/pre_built_components/form.md".freeze, "doc/guide/pre_built_components/index.md".freeze, "doc/guide/pre_built_components/list.md".freeze, "doc/guide/pre_built_components/new.md".freeze, "doc/guide/pre_built_components/show.md".freeze, "doc/guide/pre_built_components/with_form.md".freeze, "doc/guide/resourceful.md".freeze, "doc/guide/standalone.md".freeze, "doc/guide/virtual_models.md".freeze, "doc/imgs/intro-example-destroy.png".freeze, "doc/imgs/intro-example-edit.png".freeze, "doc/imgs/intro-example-index.png".freeze, "doc/imgs/intro-example-new.png".freeze, "doc/imgs/intro-example-show.png".freeze, "doc/index.html".freeze, "doc/integrations.md".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/llms.txt".freeze, "doc/method_list.html".freeze, "doc/resourceful_lifecycle.graphml".freeze, "doc/resourceful_lifecycle.pdf".freeze, "doc/resourceful_lifecycle.png".freeze, "doc/top-level-namespace.html".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/buttons/css_button.rb".freeze, "lib/compony/components/buttons/link.rb".freeze, "lib/compony/components/destroy.rb".freeze, "lib/compony/components/edit.rb".freeze, "lib/compony/components/form.rb".freeze, "lib/compony/components/index.rb".freeze, "lib/compony/components/list.rb".freeze, "lib/compony/components/new.rb".freeze, "lib/compony/components/show.rb".freeze, "lib/compony/components/with_form.rb".freeze, "lib/compony/controller_mixin.rb".freeze, "lib/compony/engine.rb".freeze, "lib/compony/intent.rb".freeze, "lib/compony/manage_intents_dsl.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/natural_ordering.rb".freeze, "lib/compony/request_context.rb".freeze, "lib/compony/version.rb".freeze, "lib/compony/view_helpers.rb".freeze, "lib/compony/virtual_model.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/index.rb.erb".freeze, "lib/generators/component/templates/list.rb.erb".freeze, "lib/generators/component/templates/new.rb.erb".freeze, "lib/generators/component/templates/show.rb.erb".freeze, "lib/generators/component/templates/with_base_component.rb.erb".freeze, "lib/generators/components/USAGE".freeze, "lib/generators/components/components_generator.rb".freeze, "logo.svg".freeze, "spec/README.md".freeze, "spec/compony/component_spec.rb".freeze, "spec/compony/compony_spec.rb".freeze, "spec/compony/intent_spec.rb".freeze, "spec/compony/method_accessible_hash_spec.rb".freeze, "spec/compony/model_fields_spec.rb".freeze, "spec/compony/model_mixin_spec.rb".freeze, "spec/compony/natural_ordering_spec.rb".freeze, "spec/dummy/app/components/statics/home.rb".freeze, "spec/dummy/app/components/statics/secret.rb".freeze, "spec/dummy/app/components/users/destroy.rb".freeze, "spec/dummy/app/components/users/edit.rb".freeze, "spec/dummy/app/components/users/form.rb".freeze, "spec/dummy/app/components/users/index.rb".freeze, "spec/dummy/app/components/users/new.rb".freeze, "spec/dummy/app/components/users/show.rb".freeze, "spec/dummy/app/controllers/application_controller.rb".freeze, "spec/dummy/app/models/ability.rb".freeze, "spec/dummy/app/models/application_record.rb".freeze, "spec/dummy/app/models/user.rb".freeze, "spec/dummy/app/views/layouts/application.html.erb".freeze, "spec/dummy/config/application.rb".freeze, "spec/dummy/config/database.yml".freeze, "spec/dummy/config/environment.rb".freeze, "spec/dummy/config/initializers/simple_form.rb".freeze, "spec/dummy/config/routes.rb".freeze, "spec/dummy/db/schema.rb".freeze, "spec/rails_helper.rb".freeze, "spec/requests/authorization_spec.rb".freeze, "spec/requests/plain_component_spec.rb".freeze, "spec/requests/routing_spec.rb".freeze, "spec/requests/users_crud_spec.rb".freeze]
16
16
  s.required_ruby_version = Gem::Requirement.new(">= 3.3.5".freeze)
17
17
  s.rubygems_version = "4.0.13".freeze
18
18
  s.summary = "Compony is a Gem that allows you to write your Rails application in component-style fashion. It combines a controller action and route along \\ with its view into a single Ruby class. This allows writing much DRYer code, using inheritance even in views and much easier refactoring for your Rails \\ applications, helping you to keep the code clean as the application evolves.".freeze
@@ -22,6 +22,8 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency(%q<yard>.freeze, [">= 0.9.28".freeze])
23
23
  s.add_development_dependency(%q<rubocop>.freeze, [">= 1.48".freeze])
24
24
  s.add_development_dependency(%q<rubocop-rails>.freeze, [">= 2.18.0".freeze])
25
+ s.add_development_dependency(%q<rspec-rails>.freeze, [">= 6.1".freeze])
26
+ s.add_development_dependency(%q<sqlite3>.freeze, [">= 1.7".freeze])
25
27
  s.add_runtime_dependency(%q<rails>.freeze, [">= 7.2.1".freeze])
26
28
  s.add_runtime_dependency(%q<request_store>.freeze, [">= 1.7".freeze])
27
29
  s.add_runtime_dependency(%q<dyny>.freeze, [">= 0.0.3".freeze])
@@ -249,7 +249,7 @@
249
249
  </div>
250
250
 
251
251
  <div id="footer">
252
- Generated on Tue Jun 30 22:41:21 2026 by
252
+ Generated on Tue Aug 18 14:36:37 2026 by
253
253
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
254
254
  0.9.34 (ruby-3.4.9).
255
255
  </div>
data/doc/Components.html CHANGED
@@ -95,7 +95,7 @@
95
95
  </div>
96
96
 
97
97
  <div id="footer">
98
- Generated on Tue Jun 30 22:41:20 2026 by
98
+ Generated on Tue Aug 18 14:36:36 2026 by
99
99
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
100
100
  0.9.34 (ruby-3.4.9).
101
101
  </div>
@@ -193,7 +193,7 @@
193
193
  </div>
194
194
 
195
195
  <div id="footer">
196
- Generated on Tue Jun 30 22:41:21 2026 by
196
+ Generated on Tue Aug 18 14:36:37 2026 by
197
197
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
198
198
  0.9.34 (ruby-3.4.9).
199
199
  </div>
@@ -2072,7 +2072,7 @@
2072
2072
  </div>
2073
2073
 
2074
2074
  <div id="footer">
2075
- Generated on Tue Jun 30 22:41:20 2026 by
2075
+ Generated on Tue Aug 18 14:36:36 2026 by
2076
2076
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
2077
2077
  0.9.34 (ruby-3.4.9).
2078
2078
  </div>
@@ -477,7 +477,7 @@
477
477
  </div>
478
478
 
479
479
  <div id="footer">
480
- Generated on Tue Jun 30 22:41:20 2026 by
480
+ Generated on Tue Aug 18 14:36:36 2026 by
481
481
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
482
482
  0.9.34 (ruby-3.4.9).
483
483
  </div>
@@ -529,7 +529,7 @@
529
529
  </div>
530
530
 
531
531
  <div id="footer">
532
- Generated on Tue Jun 30 22:41:22 2026 by
532
+ Generated on Tue Aug 18 14:36:37 2026 by
533
533
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
534
534
  0.9.34 (ruby-3.4.9).
535
535
  </div>
@@ -698,7 +698,7 @@
698
698
  </div>
699
699
 
700
700
  <div id="footer">
701
- Generated on Tue Jun 30 22:41:22 2026 by
701
+ Generated on Tue Aug 18 14:36:37 2026 by
702
702
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
703
703
  0.9.34 (ruby-3.4.9).
704
704
  </div>
@@ -603,7 +603,7 @@
603
603
  </div>
604
604
 
605
605
  <div id="footer">
606
- Generated on Tue Jun 30 22:41:22 2026 by
606
+ Generated on Tue Aug 18 14:36:37 2026 by
607
607
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
608
608
  0.9.34 (ruby-3.4.9).
609
609
  </div>