dry_crud 6.0.0 → 8.0.0

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +2 -2
  3. data/README.rdoc +7 -6
  4. data/VERSION +1 -1
  5. data/app/assets/stylesheets/sample.scss +45 -24
  6. data/app/controllers/crud_controller.rb +24 -26
  7. data/app/controllers/dry_crud/generic_model.rb +6 -12
  8. data/app/controllers/dry_crud/nestable.rb +1 -4
  9. data/app/controllers/dry_crud/rememberable.rb +1 -4
  10. data/app/controllers/dry_crud/render_callbacks.rb +4 -12
  11. data/app/controllers/dry_crud/searchable.rb +3 -10
  12. data/app/controllers/dry_crud/sortable.rb +3 -10
  13. data/app/controllers/list_controller.rb +1 -3
  14. data/app/helpers/actions_helper.rb +13 -15
  15. data/app/helpers/dry_crud/form/builder.rb +56 -62
  16. data/app/helpers/dry_crud/form/control.rb +12 -19
  17. data/app/helpers/dry_crud/table/actions.rb +15 -20
  18. data/app/helpers/dry_crud/table/builder.rb +12 -15
  19. data/app/helpers/dry_crud/table/col.rb +5 -8
  20. data/app/helpers/dry_crud/table/sorting.rb +3 -6
  21. data/app/helpers/form_helper.rb +11 -15
  22. data/app/helpers/format_helper.rb +18 -20
  23. data/app/helpers/i18n_helper.rb +13 -15
  24. data/app/helpers/table_helper.rb +16 -19
  25. data/app/helpers/utility_helper.rb +12 -14
  26. data/app/views/crud/new.html.erb +1 -1
  27. data/app/views/crud/new.html.haml +1 -1
  28. data/app/views/layouts/application.html.erb +8 -6
  29. data/app/views/layouts/application.html.haml +6 -5
  30. data/app/views/list/_search.html.erb +1 -3
  31. data/app/views/list/_search.html.haml +1 -2
  32. data/app/views/shared/_error_messages.html.erb +2 -2
  33. data/lib/dry_crud/engine.rb +1 -3
  34. data/lib/dry_crud.rb +1 -1
  35. data/lib/generators/dry_crud/dry_crud_generator.rb +18 -18
  36. data/lib/generators/dry_crud/dry_crud_generator_base.rb +8 -8
  37. data/lib/generators/dry_crud/file_generator.rb +6 -6
  38. data/lib/generators/dry_crud/templates/config/initializers/field_error_proc.rb +1 -1
  39. data/lib/generators/dry_crud/templates/spec/controllers/crud_test_models_controller_spec.rb +122 -122
  40. data/lib/generators/dry_crud/templates/spec/helpers/dry_crud/form/builder_spec.rb +55 -60
  41. data/lib/generators/dry_crud/templates/spec/helpers/dry_crud/table/builder_spec.rb +24 -26
  42. data/lib/generators/dry_crud/templates/spec/helpers/form_helper_spec.rb +16 -18
  43. data/lib/generators/dry_crud/templates/spec/helpers/format_helper_spec.rb +90 -94
  44. data/lib/generators/dry_crud/templates/spec/helpers/i18n_helper_spec.rb +33 -34
  45. data/lib/generators/dry_crud/templates/spec/helpers/table_helper_spec.rb +59 -61
  46. data/lib/generators/dry_crud/templates/spec/helpers/utility_helper_spec.rb +20 -23
  47. data/lib/generators/dry_crud/templates/spec/support/crud_controller_examples.rb +66 -68
  48. data/lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb +11 -13
  49. data/lib/generators/dry_crud/templates/test/controllers/crud_test_models_controller_test.rb +63 -65
  50. data/lib/generators/dry_crud/templates/test/helpers/custom_assertions_test.rb +25 -27
  51. data/lib/generators/dry_crud/templates/test/helpers/dry_crud/form/builder_test.rb +74 -74
  52. data/lib/generators/dry_crud/templates/test/helpers/dry_crud/table/builder_test.rb +21 -21
  53. data/lib/generators/dry_crud/templates/test/helpers/form_helper_test.rb +21 -23
  54. data/lib/generators/dry_crud/templates/test/helpers/format_helper_test.rb +68 -70
  55. data/lib/generators/dry_crud/templates/test/helpers/i18n_helper_test.rb +26 -28
  56. data/lib/generators/dry_crud/templates/test/helpers/table_helper_test.rb +28 -30
  57. data/lib/generators/dry_crud/templates/test/helpers/utility_helper_test.rb +17 -19
  58. data/lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb +13 -15
  59. data/lib/generators/dry_crud/templates/test/support/crud_test_helper.rb +15 -19
  60. data/lib/generators/dry_crud/templates/test/support/crud_test_model.rb +9 -14
  61. data/lib/generators/dry_crud/templates/test/support/crud_test_models_controller.rb +16 -20
  62. data/lib/generators/dry_crud/templates/test/support/custom_assertions.rb +8 -10
  63. metadata +9 -10
@@ -1,13 +1,12 @@
1
- require 'test_helper'
2
- require 'support/crud_test_helper'
3
- require 'support/crud_test_model'
4
- require 'support/crud_controller_test_helper'
1
+ require "test_helper"
2
+ require "support/crud_test_helper"
3
+ require "support/crud_test_model"
4
+ require "support/crud_controller_test_helper"
5
5
 
6
6
  # Tests all actions of the CrudController based on a dummy model
7
7
  # (CrudTestModel). This is useful to test the general behavior
8
8
  # of CrudController.
9
9
  class CrudTestModelsControllerTest < ActionController::TestCase
10
-
11
10
  include CrudControllerTestHelper
12
11
  include CrudTestHelper
13
12
 
@@ -20,13 +19,13 @@ class CrudTestModelsControllerTest < ActionController::TestCase
20
19
  def test_setup
21
20
  assert_equal 6, CrudTestModel.count
22
21
  assert_equal CrudTestModelsController, @controller.class
23
- assert_recognizes({ controller: 'crud_test_models',
24
- action: 'index' },
25
- '/crud_test_models')
26
- assert_recognizes({ controller: 'crud_test_models',
27
- action: 'show',
28
- id: '1' },
29
- '/crud_test_models/1')
22
+ assert_recognizes({ controller: "crud_test_models",
23
+ action: "index" },
24
+ "/crud_test_models")
25
+ assert_recognizes({ controller: "crud_test_models",
26
+ action: "show",
27
+ id: "1" },
28
+ "/crud_test_models/1")
30
29
  end
31
30
 
32
31
  def test_index
@@ -39,14 +38,14 @@ class CrudTestModelsControllerTest < ActionController::TestCase
39
38
  def test_index_js
40
39
  get :index, params: test_params, xhr: true
41
40
  assert_response :success
42
- assert_equal 'index js', @response.body
41
+ assert_equal "index js", @response.body
43
42
  assert entries.present?
44
43
  end
45
44
 
46
45
  def test_index_search
47
46
  super
48
47
  assert_equal 1, entries.size
49
- assert_equal({ 'q' => 'AAAA' }, session[:list_params]['/crud_test_models'])
48
+ assert_equal({ "q" => "AAAA" }, session[:list_params]["/crud_test_models"])
50
49
  end
51
50
 
52
51
  def test_index_with_custom_options
@@ -58,65 +57,65 @@ class CrudTestModelsControllerTest < ActionController::TestCase
58
57
  end
59
58
 
60
59
  def test_index_search_with_custom_options
61
- get :index, params: { q: 'DDD', filter: true }
60
+ get :index, params: { q: "DDD", filter: true }
62
61
  assert_response :success
63
62
  assert entries.present?
64
63
  assert_equal 1, entries.size
65
- assert_equal [CrudTestModel.find_by(name: 'BBBBB')], entries
66
- assert_equal({ 'q' => 'DDD' }, session[:list_params]['/crud_test_models'])
64
+ assert_equal [ CrudTestModel.find_by(name: "BBBBB") ], entries
65
+ assert_equal({ "q" => "DDD" }, session[:list_params]["/crud_test_models"])
67
66
  end
68
67
 
69
68
  def test_sort_given_column
70
- get :index, params: { sort: 'children', sort_dir: 'asc' }
69
+ get :index, params: { sort: "children", sort_dir: "asc" }
71
70
  assert_response :success
72
71
  assert entries.present?
73
72
  assert_equal 6, entries.size
74
73
  assert_equal CrudTestModel.all.sort_by(&:children), entries
75
- assert_equal({ 'sort' => 'children', 'sort_dir' => 'asc' },
76
- session[:list_params]['/crud_test_models'])
74
+ assert_equal({ "sort" => "children", "sort_dir" => "asc" },
75
+ session[:list_params]["/crud_test_models"])
77
76
  end
78
77
 
79
78
  def test_sort_virtual_column
80
- get :index, params: { sort: 'chatty', sort_dir: 'desc' }
79
+ get :index, params: { sort: "chatty", sort_dir: "desc" }
81
80
  assert_response :success
82
81
  assert entries.present?
83
82
  assert_equal 6, entries.size
84
- assert_equal({ 'sort' => 'chatty', 'sort_dir' => 'desc' },
85
- session[:list_params]['/crud_test_models'])
83
+ assert_equal({ "sort" => "chatty", "sort_dir" => "desc" },
84
+ session[:list_params]["/crud_test_models"])
86
85
 
87
86
  # sort order is ambiguous, use index
88
87
  names = entries.map(&:name)
89
- assert names.index('BBBBB') < names.index('AAAAA')
90
- assert names.index('BBBBB') < names.index('DDDDD')
91
- assert names.index('EEEEE') < names.index('AAAAA')
92
- assert names.index('EEEEE') < names.index('DDDDD')
93
- assert names.index('AAAAA') < names.index('CCCCC')
94
- assert names.index('DDDDD') < names.index('CCCCC')
88
+ assert names.index("BBBBB") < names.index("AAAAA")
89
+ assert names.index("BBBBB") < names.index("DDDDD")
90
+ assert names.index("EEEEE") < names.index("AAAAA")
91
+ assert names.index("EEEEE") < names.index("DDDDD")
92
+ assert names.index("AAAAA") < names.index("CCCCC")
93
+ assert names.index("DDDDD") < names.index("CCCCC")
95
94
  end
96
95
 
97
96
  def test_sort_with_search
98
- get :index, params: { q: 'DDD', sort: 'chatty', sort_dir: 'asc' }
97
+ get :index, params: { q: "DDD", sort: "chatty", sort_dir: "asc" }
99
98
  assert_response :success
100
99
  assert entries.present?
101
100
  assert_equal 3, entries.size
102
101
  assert_equal %w[CCCCC DDDDD BBBBB], entries.map(&:name)
103
- assert_equal({ 'sort' => 'chatty', 'sort_dir' => 'asc', 'q' => 'DDD' },
104
- session[:list_params]['/crud_test_models'])
102
+ assert_equal({ "sort" => "chatty", "sort_dir" => "asc", "q" => "DDD" },
103
+ session[:list_params]["/crud_test_models"])
105
104
  end
106
105
 
107
106
  def test_index_returning
108
107
  session[:list_params] = {}
109
- session[:list_params]['/crud_test_models'] = { 'q' => 'DDD',
110
- 'sort' => 'chatty',
111
- 'sort_dir' => 'desc' }
108
+ session[:list_params]["/crud_test_models"] = { "q" => "DDD",
109
+ "sort" => "chatty",
110
+ "sort_dir" => "desc" }
112
111
  get :index, params: { returning: true }
113
112
  assert_response :success
114
113
  assert entries.present?
115
114
  assert_equal 3, entries.size
116
115
  assert_equal %w[BBBBB DDDDD CCCCC], entries.map(&:name)
117
- assert_equal 'DDD', @controller.params[:q]
118
- assert_equal 'chatty', @controller.params[:sort]
119
- assert_equal 'desc', @controller.params[:sort_dir]
116
+ assert_equal "DDD", @controller.params[:q]
117
+ assert_equal "chatty", @controller.params[:sort]
118
+ assert_equal "desc", @controller.params[:sort_dir]
120
119
  end
121
120
 
122
121
  def test_new
@@ -128,7 +127,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
128
127
  def test_show_with_custom
129
128
  get :show, params: test_params(id: crud_test_models(:BBBBB).id)
130
129
  assert_response :success
131
- assert_equal 'custom html', @response.body
130
+ assert_equal "custom html", @response.body
132
131
  end
133
132
 
134
133
  def test_create
@@ -147,8 +146,8 @@ class CrudTestModelsControllerTest < ActionController::TestCase
147
146
 
148
147
  def test_update
149
148
  super
150
- assert_equal I18n.t('crud.update.flash.success',
151
- model: 'Crud Test Model <i>foo</i>'),
149
+ assert_equal I18n.t("crud.update.flash.success",
150
+ model: "Crud Test Model <i>foo</i>"),
152
151
  flash[:notice]
153
152
  assert flash[:alert].blank?
154
153
  assert_equal %i[before_update before_save after_save after_update],
@@ -159,42 +158,42 @@ class CrudTestModelsControllerTest < ActionController::TestCase
159
158
  super
160
159
  assert_equal %i[before_destroy after_destroy],
161
160
  @controller.called_callbacks
162
- assert_equal I18n.t('crud.destroy.flash.success',
163
- model: 'Crud Test Model <i>AAAAA</i>'),
161
+ assert_equal I18n.t("crud.destroy.flash.success",
162
+ model: "Crud Test Model <i>AAAAA</i>"),
164
163
  flash[:notice]
165
164
  end
166
165
 
167
166
  def test_create_with_before_callback
168
- assert_no_difference('CrudTestModel.count') do
167
+ assert_no_difference("CrudTestModel.count") do
169
168
  post :create,
170
- params: { crud_test_model: { name: 'illegal', children: 2 } }
169
+ params: { crud_test_model: { name: "illegal", children: 2 } }
171
170
  end
172
171
  assert_response :success
173
172
  assert entry.new_record?
174
173
  assert flash[:alert].present?
175
- assert_equal 'illegal', entry.name
174
+ assert_equal "illegal", entry.name
176
175
  assert_equal %i[before_render_new before_render_form],
177
176
  @controller.called_callbacks
178
177
  end
179
178
 
180
179
  def test_create_with_before_callback_redirect
181
180
  @controller.should_redirect = true
182
- assert_no_difference('CrudTestModel.count') do
181
+ assert_no_difference("CrudTestModel.count") do
183
182
  post :create,
184
- params: { crud_test_model: { name: 'illegal', children: 2 } }
183
+ params: { crud_test_model: { name: "illegal", children: 2 } }
185
184
  end
186
- assert_redirected_to action: 'index'
185
+ assert_redirected_to action: "index"
187
186
  assert_nil @controller.called_callbacks
188
187
  end
189
188
 
190
189
  def test_new_with_before_render_callback_redirect_does_not_set_companions
191
190
  @controller.should_redirect = true
192
191
  get :new
193
- assert_redirected_to action: 'index'
192
+ assert_redirected_to action: "index"
194
193
  end
195
194
 
196
195
  def test_create_with_failure
197
- assert_no_difference('CrudTestModel.count') do
196
+ assert_no_difference("CrudTestModel.count") do
198
197
  post :create, params: { crud_test_model: { children: 2 } }
199
198
  end
200
199
  assert_response :success
@@ -208,8 +207,8 @@ class CrudTestModelsControllerTest < ActionController::TestCase
208
207
  end
209
208
 
210
209
  def test_create_with_failure_json
211
- assert_no_difference('CrudTestModel.count') do
212
- post :create, params: { crud_test_model: { children: 2 }, format: 'json' }
210
+ assert_no_difference("CrudTestModel.count") do
211
+ post :create, params: { crud_test_model: { children: 2 }, format: "json" }
213
212
  end
214
213
  assert_response :unprocessable_entity
215
214
  assert entry.new_record?
@@ -234,7 +233,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
234
233
  id: test_entry.id,
235
234
  crud_test_model: {
236
235
  rating: 20,
237
- other_ids: [OtherCrudTestModel.first.id]
236
+ other_ids: [ OtherCrudTestModel.first.id ]
238
237
  }
239
238
  }
240
239
  assert_response :success
@@ -252,7 +251,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
252
251
  put :update,
253
252
  params: { id: test_entry.id,
254
253
  crud_test_model: { rating: 20 },
255
- format: 'json' }
254
+ format: "json" }
256
255
  assert_response :unprocessable_entity
257
256
  assert entry.changed?
258
257
  assert flash[:notice].blank?
@@ -262,7 +261,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
262
261
 
263
262
  def test_destroy_failure
264
263
  assert_no_difference("#{model_class.name}.count") do
265
- @request.env['HTTP_REFERER'] =
264
+ @request.env["HTTP_REFERER"] =
266
265
  crud_test_model_url(crud_test_models(:BBBBB))
267
266
  delete :destroy, params: test_params(id: crud_test_models(:BBBBB).id)
268
267
  end
@@ -274,7 +273,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
274
273
  def test_destroy_failure_callback
275
274
  e = crud_test_models(:AAAAA)
276
275
  # rubocop:disable Rails/SkipsModelValidations
277
- e.update_attribute(:name, 'illegal')
276
+ e.update_attribute(:name, "illegal")
278
277
  # rubocop:enable Rails/SkipsModelValidations
279
278
  assert_no_difference("#{model_class.name}.count") do
280
279
  delete :destroy, params: test_params(id: e.id)
@@ -287,15 +286,15 @@ class CrudTestModelsControllerTest < ActionController::TestCase
287
286
  def test_destroy_failure_json
288
287
  assert_no_difference("#{model_class.name}.count") do
289
288
  delete :destroy, params: test_params(id: crud_test_models(:BBBBB).id,
290
- format: 'json')
289
+ format: "json")
291
290
  end
292
291
  assert_response :unprocessable_entity
293
292
  assert flash[:notice].blank?
294
293
  end
295
294
 
296
295
  def test_models_label
297
- assert_equal 'Crud Test Models', @controller.models_label
298
- assert_equal 'Crud Test Model', @controller.models_label(false)
296
+ assert_equal "Crud Test Models", @controller.models_label
297
+ assert_equal "Crud Test Model", @controller.models_label(plural: false)
299
298
  end
300
299
 
301
300
  private
@@ -305,24 +304,23 @@ class CrudTestModelsControllerTest < ActionController::TestCase
305
304
  end
306
305
 
307
306
  def new_entry_attrs
308
- { name: 'foo',
307
+ { name: "foo",
309
308
  children: 42,
310
309
  companion_id: 3,
311
310
  rating: 8.5,
312
311
  income: 2.42,
313
- birthdate: '31-12-1999'.to_date,
312
+ birthdate: "31-12-1999".to_date,
314
313
  human: true,
315
314
  remarks: "some custom\n\tremarks" }
316
315
  end
317
316
 
318
317
  def edit_entry_attrs
319
- { name: 'foo',
318
+ { name: "foo",
320
319
  children: 42,
321
320
  rating: 8.5,
322
321
  income: 2.42,
323
- birthdate: '31-12-1999'.to_date,
322
+ birthdate: "31-12-1999".to_date,
324
323
  human: true,
325
324
  remarks: "some custom\n\tremarks" }
326
325
  end
327
-
328
326
  end
@@ -1,73 +1,72 @@
1
- require 'test_helper'
2
- require 'support/custom_assertions'
3
- require 'support/crud_test_helper'
4
- require 'support/crud_test_model'
1
+ require "test_helper"
2
+ require "support/custom_assertions"
3
+ require "support/crud_test_helper"
4
+ require "support/crud_test_model"
5
5
 
6
6
  # Test CustomAssertions
7
7
  class CustomAssertionsTest < ActiveSupport::TestCase
8
-
9
8
  include CustomAssertions
10
9
  include CrudTestHelper
11
10
 
12
11
  setup :reset_db, :setup_db, :create_test_data
13
12
  teardown :reset_db
14
13
 
15
- test 'assert count succeeds if count matches' do
14
+ test "assert count succeeds if count matches" do
16
15
  assert_nothing_raised do
17
- assert_count 3, 'ba', 'barbabapa'
16
+ assert_count 3, "ba", "barbabapa"
18
17
  end
19
18
  end
20
19
 
21
- test 'assert count succeeds if count is zero' do
20
+ test "assert count succeeds if count is zero" do
22
21
  assert_nothing_raised do
23
- assert_count 0, 'bo', 'barbabapa'
22
+ assert_count 0, "bo", "barbabapa"
24
23
  end
25
24
  end
26
25
 
27
- test 'assert count fails if count does not match' do
28
- assert_raise(MiniTest::Assertion) do
29
- assert_count 2, 'ba', 'barbabapa'
26
+ test "assert count fails if count does not match" do
27
+ assert_raise(Minitest::Assertion) do
28
+ assert_count 2, "ba", "barbabapa"
30
29
  end
31
30
  end
32
31
 
33
- test 'assert valid record succeeds' do
32
+ test "assert valid record succeeds" do
34
33
  assert_nothing_raised do
35
- assert_valid crud_test_models('AAAAA')
34
+ assert_valid crud_test_models("AAAAA")
36
35
  end
37
36
  end
38
37
 
39
- test 'assert valid record fails for invalid' do
40
- assert_raise(MiniTest::Assertion) do
38
+ test "assert valid record fails for invalid" do
39
+ assert_raise(Minitest::Assertion) do
41
40
  assert_valid invalid_record
42
41
  end
43
42
  end
44
43
 
45
- test 'assert not valid succeeds if record invalid' do
44
+ test "assert not valid succeeds if record invalid" do
46
45
  assert_nothing_raised do
47
46
  assert_not_valid invalid_record
48
47
  end
49
48
  end
50
49
 
51
- test 'assert not valid succeds if record invalid and invalid attrs given' do
50
+ test "assert not valid succeds if record invalid and invalid attrs given" do
52
51
  assert_nothing_raised do
53
52
  assert_not_valid invalid_record, :name, :rating
54
53
  end
55
54
  end
56
55
 
57
- test 'assert not valid fails if record valid' do
58
- assert_raise(MiniTest::Assertion) do
59
- assert_not_valid crud_test_models('AAAAA')
56
+ test "assert not valid fails if record valid" do
57
+ assert_raise(Minitest::Assertion) do
58
+ assert_not_valid crud_test_models("AAAAA")
60
59
  end
61
60
  end
62
61
 
63
- test 'assert not valid fails if record invalid and valid attrs given' do
64
- assert_raise(MiniTest::Assertion) do
62
+ test "assert not valid fails if record invalid and valid attrs given" do
63
+ assert_raise(Minitest::Assertion) do
65
64
  assert_not_valid invalid_record, :name, :rating, :children
66
65
  end
67
66
  end
68
67
 
69
- test 'assert not valid fails if not all invalid attrs given' do
70
- assert_raise(MiniTest::Assertion) do
68
+ test "assert not valid fails if not all invalid attrs given" do
69
+ assert_raise(Minitest::Assertion) do
71
70
  assert_not_valid invalid_record, :name
72
71
  end
73
72
  end
@@ -75,10 +74,9 @@ class CustomAssertionsTest < ActiveSupport::TestCase
75
74
  private
76
75
 
77
76
  def invalid_record
78
- m = crud_test_models('AAAAA')
77
+ m = crud_test_models("AAAAA")
79
78
  m.name = nil
80
79
  m.rating = 42
81
80
  m
82
81
  end
83
-
84
82
  end