dry_crud 5.2.0 → 6.0.0

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: 3fa4767cf781b94a5ed47a5833f76a96494c450967e9f3599806226aafcf4a74
4
- data.tar.gz: bd4c40f8493eef40c6618ead701877f8ec8d39b552db5787ae184273be0fc8d3
3
+ metadata.gz: 3ff2a042dc7c846957d5e17001f9a538df726084e3695988d68066849938d544
4
+ data.tar.gz: 504a97b4e2b0769cb260790725bb1a59aaffe33a16a093556d9462dd2403794f
5
5
  SHA512:
6
- metadata.gz: 8fef4d2ed06521eafd92c4fa87a36d07fdeee79a1a0f0d3a0e6098e2ac98b6c92d7c5cd2e87046b4cf37a3fa2e90f2d1cda382d645e828b3aeba2b5cd26e0903
7
- data.tar.gz: 41b31166a4f5c82374587e49fe76580d32487ccff0fa52b6f0e72f131b2eb9a7d296d6ff53d8cc3de470fe1671dbdfb2749a4bdba685ce2bf110ea163abea225
6
+ metadata.gz: 9808508def34a37d4d7bea43c5e7d810a4ac57d09c36ceadf8ee0fbf5bba3650611c5e3c5b010f5aa015666076ac3971fe824f2d6deeb17d913cc4404d2261bd
7
+ data.tar.gz: c9b52ac7b06f5ab74f4fc3b8b0f340f1e3e5f35296296d109585dcb51906b46eb9615c393865cdde30aefb096dabf41dac197a24dc8e364d57e071551fbb0e5e
@@ -1,6 +1,6 @@
1
1
  = DRY CRUD
2
2
 
3
- {<img src="https://secure.travis-ci.org/codez/dry_crud.png" />}[http://travis-ci.org/codez/dry_crud]
3
+ {<img src="https://travis-ci.org/codez/dry_crud.svg?branch=master" />}[http://travis-ci.org/codez/dry_crud]
4
4
 
5
5
  dry_crud generates simple and extendable controllers, views and helpers that support you to DRY up the CRUD code in your Rails projects. List, search, sort, show, create, edit and destroy any model entries in just 5 minutes. Start with these artifacts and build a clean base to efficiently develop your application upon.
6
6
 
@@ -21,7 +21,7 @@ We recommend to use dry_crud as a generator as described above for the best unde
21
21
 
22
22
  rails generate dry_crud:file list/index.html.erb
23
23
 
24
- If a dry_crud file exists in your application, it will be used, if not, the one from the engine is used. This holds for controllers, helpers and view templates.
24
+ If a dry_crud file exists in your application, it will be used, if not, the one from the engine is used. This holds for controllers, helper methods and view templates.
25
25
 
26
26
 
27
27
  == Integration
@@ -33,12 +33,12 @@ To integrate dry_crud into your code, only a few additions are required:
33
33
  * Optionally define a +list+ scope in your models to be used in the +index+ action.
34
34
  * Optionally define a +options_list+ scope in your models to be used in select dropdowns.
35
35
 
36
- From version 5.0 onwards, the major and minor version numbers will be kept in sync with Rails, and only the matching Rails version is supported. Version 3.0 is compatible 4.2, Version 2.0 and higher are compatible with Rails 4 and Rails 3.2. dry_crud is tested with Ruby 2.2.5 and JRuby. If you are using Ruby 1.9.3, please refer to version 3.0.0.
36
+ From version 5.0 onwards, the major and minor version numbers will be kept in sync with Rails, and only the matching Rails version is supported. Version 3.0 is compatible 4.2, Version 2.0 and higher are compatible with Rails 4 and Rails 3.2. dry_crud is tested with Ruby 2.5. If you are using Ruby 1.9.3, please refer to version 3.0.0.
37
37
 
38
38
 
39
39
  == Background
40
40
 
41
- In most Rails applications, you have some models that require basic CRUD (create, read, update, delete) functionality. There are various possibilities like Rails scaffolding, {Inherited Resources}[https://github.com/josevalim/inherited_resources] or {Rails Admin}[https://github.com/sferik/rails_admin]. Still, various parts in your application remain duplicated. While you might pull up common methods into a common superclass controller, most views still contain very similar code. And then you also have to remember the entire API of these frameworks.
41
+ In most Rails applications, you have some models that require basic CRUD (create, read, update, delete) functionality. There are various possibilities like Rails scaffolding, {Inherited Resources}[https://github.com/activeadmin/inherited_resources] or {Rails Admin}[https://github.com/sferik/rails_admin]. Still, various parts in your application remain duplicated. While you might pull up common methods into a common superclass controller, most views still contain very similar code. And then you also have to remember the entire API of these frameworks.
42
42
 
43
43
  Enter dry_crud.
44
44
 
@@ -46,11 +46,11 @@ Enter dry_crud.
46
46
  The main idea of dry_crud is to concentrate basic functionality of your application, like CRUD actions, uniform formatting, forms and tables into specifically extendable units. dry_crud generates various foundation classes that you may browse easily and adapt freely to your application's needs. For each model, you may transparently customize arbitrary parts or just fallback to the general behavior. This applies not only for controllers, but also for view templates and helpers. There is no black box your code depends on. You lay the foundation that fits your application best.
47
47
  </b>
48
48
 
49
- dry_crud is a Rails generator. All code resides in your application and is open for you to inspect and to extend. You may pick whatever you consider useful or adapt what is not sufficient. Even if you do not require any CRUD functionality, you might find some helpers simplifying your work. There are no runtime dependencies to the dry_crud gem. Having said this, dry_crud does not want to provide a maximum of functionality that requires a lot of configuration, but rather a clean and lightweight foundation to build your application's requirements upon. This is why dry_crud comes as a generator and not as a Rails plugin.
49
+ dry_crud is a Rails generator. All code resides in your application and is open for you to inspect and to extend. You may pick whatever you consider useful or adapt what is not sufficient. Even if you do not require any CRUD functionality, you might find some helpers simplifying your work. There are no runtime dependencies to the dry_crud gem. Having said this, dry_crud does not want to provide a maximum of functionality that requires a lot of configuration, but rather a clean and lightweight foundation to build your application's requirements upon. This is why dry_crud comes as a generator and not as a Rails extension.
50
50
 
51
- dry_crud does not depend on any other plugins, but easily allows you to integrate them in order to unify the behavior of your CRUD controllers. You might even use the plugins mentioned above to adapt your generated CrudController base class. All classes come with thorough tests that provide you with a solid foundation for implementing your own adaptions.
51
+ dry_crud does not depend on any other gems, but easily allows you to integrate them in order to unify the behavior of your CRUD controllers. You might even use the gems mentioned above to adapt your generated CrudController base class. All classes come with thorough tests that provide you with a solid foundation for implementing your own adaptions.
52
52
 
53
- A basic CSS gets you started with your application's layout. For advanced needs, dry_crud supports the styles and classes used in {Bootstrap 3}[http://getbootstrap.com]. A great design never was so close.
53
+ A basic CSS gets you started with your application's layout. For advanced needs, dry_crud supports the styles and classes used in {Bootstrap 4}[http://getbootstrap.com]. A great design never was so close.
54
54
 
55
55
  If you find yourself adapting the same parts of dry_crud for your applications over and over, please feel free to {fork me on Github}[http://github.com/codez/dry_crud].
56
56
 
@@ -66,7 +66,7 @@ Say you want to manage a +Person+ model. Overwrite the +to_s+ method of your mod
66
66
  <tt>app/models/person.rb</tt>:
67
67
  class Person
68
68
  def to_s
69
- "#{lastname} #{firstname}"
69
+ [lastname, firstname].compact.join(' ')
70
70
  end
71
71
  end
72
72
 
@@ -74,7 +74,7 @@ Then create the following controller. The +permitted_attrs+ define the attribute
74
74
 
75
75
  <tt>app/controllers/people_controller.rb</tt>:
76
76
  class PeopleController < CrudController
77
- self.permitted_attrs = [:firstname, :lastname, :birthday, :sex, :city_id]
77
+ self.permitted_attrs = [:firstname, :lastname, :birthday, :gender, :city_id]
78
78
  end
79
79
 
80
80
  That's it. You have a sortable overview of all people, detail pages and forms to edit and create people. Of course, you may delete people as well. By default, all attributes are displayed and formatted according to their column type wherever they appear. This applies for the input fields as well.
@@ -84,14 +84,14 @@ That's it. You have a sortable overview of all people, detail pages and forms to
84
84
 
85
85
  Well, maybe there are certain attributes you do not want to display in the people list, or others that are not editable in the form. No problem, simply create a <tt> _list</tt> partial in <tt>app/views/people/_list.html.erb</tt> to customize this:
86
86
 
87
- <%= crud_table :lastname, :firstname, :city, :sex %>
87
+ <%= crud_table :lastname, :firstname, :city, :gender %>
88
88
 
89
89
  This only displays these four attributes in the table. All other templates, as well as the main index view, fallback to the ones in <tt>app/views/crud</tt>.
90
90
 
91
91
 
92
92
  ==== Adapt general behavior
93
93
 
94
- Next, let's adapt a part of the general behavior used in all CRUD controllers. As an example, we include pagination with kaminari[https://github.com/amatsuda/kaminari] in all our overview tables:
94
+ Next, let's adapt a part of the general behavior used in all CRUD controllers. As an example, we include pagination with kaminari[https://github.com/kaminari/kaminari] in all our overview tables:
95
95
 
96
96
  In <tt>app/controllers/list_controller.rb</tt>, change the list_entries method to
97
97
  def list_entries
@@ -106,11 +106,11 @@ And we are done. All our controllers inheriting from ListController, including a
106
106
 
107
107
  ==== Special formatting for selected attributes
108
108
 
109
- Sometimes, the default formatting provided by +format_attr+ will not be sufficient. We have a boolean column +sex+ in our model, but would like to display 'male' or 'female' for it (instead of 'no' or 'yes', which is a bit cryptic). Just define a method in your view helper starting with <tt>format_</tt>, followed by the class and attribute name:
109
+ Sometimes, the default formatting provided by +format_attr+ will not be sufficient. We have a boolean column +female+ in our model (which is quite a legacy nowadays!), but we would like to display 'male' or 'female' for it (instead of 'no' or 'yes', which is a bit cryptic). Just define a method in your view helper starting with <tt>format_</tt>, followed by the class and attribute name:
110
110
 
111
111
  In <tt>app/helpers/people.rb</tt>:
112
- def format_person_sex(person)
113
- person.sex ? 'female' : 'male'
112
+ def format_person_female(person)
113
+ person.female ? 'female' : 'male'
114
114
  end
115
115
 
116
116
  Should you have attributes with the same name for multiple models that you want to be formatted the same way, you may define a helper method <tt>format_{attr}</tt> for these attributes.
@@ -133,7 +133,7 @@ In <tt>app/controllers/people_controller.rb</tt>:
133
133
  When you display computed values in your list table, you may define sort mappings to enable sorting of these columns:
134
134
 
135
135
  In <tt>app/controllers/people_controller.rb</tt>:
136
- self.sort_mappings = {age: 'birthday', city_id: 'cities.name'}
136
+ self.sort_mappings = { age: 'birthday', city_id: 'cities.name' }
137
137
 
138
138
  There is also a simple search functionality (based on SQL LIKE queries) implemented in Crud::Searchable. Define an array of columns in your controller's +search_columns+ class variable to make the entries searchable by these fields:
139
139
 
@@ -151,17 +151,17 @@ dry_crud provides two builder classes for update/create forms and tables for dis
151
151
 
152
152
  The following code defines a table with some attribute columns for a list of same-type entries. Columns get a header corresponding to the attribute name:
153
153
  <%= plain_table(@people) do |t|
154
- t.sortable_attrs :lastname, :firstname
154
+ t.sortable_attrs(:lastname, :firstname)
155
155
  end %>
156
156
 
157
157
  If entries is empty, a basic 'No entries found' message is rendered instead of the table.
158
158
 
159
159
  To render custom columns, use the +col+ method with an appropriate block:
160
160
  <%= plain_table(@people) do |t|
161
- t.sortable_attrs :lastname, :firstname
162
- t.col('', class: 'center') {|entry| image_tag(entry.picture) }
163
- t.attr :street
164
- t.col('Map') {|entry| link_to(entry.city, "http://maps.google.com/?q=#{entry.city}" }
161
+ t.sortable_attrs(:lastname, :firstname)
162
+ t.col('', class: 'center') { |entry| image_tag(entry.picture) }
163
+ t.attr(:street)
164
+ t.col('Map') { |entry| link_to(entry.city, "http://maps.google.com/?q=#{entry.city}" }
165
165
  end %>
166
166
 
167
167
  For views of subclasses of ListController, you can directly use the +crud_table+ helper method, where you do not have to pass the <tt>@people</tt> list explicitly and actions are added automatically.
@@ -175,9 +175,9 @@ Forms work very similar. In the most simple case, you just have to specify which
175
175
  Of course, custom input fields may be defined as well:
176
176
  <%= standard_form(@person, url: custom_update_person_path(@person.id)) do |f| %>
177
177
  <%= f.labeled_input_fields :firstname, :lastname %>
178
- <%= f.labeled(:sex) do %>
179
- <%= f.radio_button :sex, true %> female
180
- <%= f.radio_button :sex, false %> male
178
+ <%= f.labeled(:female) do %>
179
+ <%= f.radio_button :female, true %> female
180
+ <%= f.radio_button :female, false %> male
181
181
  <% end %>
182
182
  <%= f.labeled_integer_field :age %>
183
183
  <%= f.labeled_file_field :picture %>
@@ -193,7 +193,7 @@ Optionally, +has_and_belongs_to_many+ and +has_many+ associations can be rendere
193
193
 
194
194
  And yes again, the same advice for where to put finder logic applies here as well.
195
195
 
196
- <b>Note:</b> +has_and_belongs_to_many+ and +has_many+ associations are not automatically rendered in a form, you have to explicitly include these attributes. You might also want to stylize the multi-select widget, for example with a {jQuery UI Multiselect}[http://www.quasipartikel.at/multiselect/].
196
+ <b>Note:</b> +has_and_belongs_to_many+ and +has_many+ associations are not automatically rendered in a form, you have to explicitly include these attributes. You might also want to stylize the multi-select widget with a JavaScript library of your choice.
197
197
 
198
198
 
199
199
  === Nested Resources
@@ -221,8 +221,8 @@ In <tt>app/controllers/people_controller.rb</tt>:
221
221
 
222
222
  def delete_picture
223
223
  if !perform_delete_picture(entry.picture)
224
- flash.alert = 'Could not delete picture'
225
- false
224
+ flash[:alert] = 'Could not delete picture'
225
+ throw :abort
226
226
  end
227
227
  end
228
228
 
@@ -269,49 +269,49 @@ All generated files are supposed to provide a reasonable foundation for the CRUD
269
269
 
270
270
  === Controller
271
271
 
272
- {controller/crud_controller.rb}[http://codez.ch/dry_crud?q=CrudController]:: Abstract controller providing basic CRUD actions. This implementation mainly follows the one of the Rails scaffolding controller and responses to HTML and JSON requests. Some enhancements were made to ease extendability. Several protected helper methods are there to be (optionally) overriden by subclasses. With the help of additional callbacks, it is possible to hook into the action procedures without overriding the entire method. This class is based on ListController.
272
+ {controller/crud_controller.rb}[https://rubydoc.info/github/codez/dry_crud/master/CrudController]:: Abstract controller providing basic CRUD actions. This implementation mainly follows the one of the Rails scaffolding controller and responses to HTML and JSON requests. Some enhancements were made to ease extendability. Several protected helper methods are there to be (optionally) overriden by subclasses. With the help of additional callbacks, it is possible to hook into the action procedures without overriding the entire method. This class is based on ListController.
273
273
 
274
- {controller/list_controller.rb}[http://codez.ch/dry_crud?q=ListController]:: Abstract controller providing a basic list action. Use this controller if you require read-only functionality. It includes the following modules.
274
+ {controller/list_controller.rb}[https://rubydoc.info/github/codez/dry_crud/master/ListController]:: Abstract controller providing a basic list action. Use this controller if you require read-only functionality. It includes the following modules.
275
275
 
276
- {controller/dry_crud/generic_model.rb}[http://codez.ch/dry_crud?q=DryCrud::GenericModel]:: Work with the model whose name corrsponds to the controller's name.
276
+ {controller/dry_crud/generic_model.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/GenericModel]:: Work with the model whose name corrsponds to the controller's name.
277
277
 
278
- {controller/dry_crud/nestable.rb}[http://codez.ch/dry_crud?q=DryCrud::Nestable]:: Provides functionality to easily nest controllers/resources.
278
+ {controller/dry_crud/nestable.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Nestable]:: Provides functionality to easily nest controllers/resources.
279
279
 
280
- {controller/dry_crud/rememberable.rb}[http://codez.ch/dry_crud?q=DryCrud::Rememberable]:: Remembers certain params of the index action in order to return to the same list after an entry was viewed or edited.
280
+ {controller/dry_crud/rememberable.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Rememberable]:: Remembers certain params of the index action in order to return to the same list after an entry was viewed or edited.
281
281
 
282
- {controller/dry_crud/searchable.rb}[http://codez.ch/dry_crud?q=DryCrud::Searchable]:: Search functionality for the index table.
282
+ {controller/dry_crud/searchable.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Searchable]:: Search functionality for the index table.
283
283
 
284
- {controller/dry_crud/sortable.rb}[http://codez.ch/dry_crud?q=DryCrud::Sortable]:: Sort functionality for the index table.
284
+ {controller/dry_crud/sortable.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Sortable]:: Sort functionality for the index table.
285
285
 
286
- {controller/dry_crud/render_callbacks.rb}[http://codez.ch/dry_crud?q=DryCrud::RenderCallbacks]:: Provide +before_render+ callbacks to controllers.
286
+ {controller/dry_crud/render_callbacks.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/RenderCallbacks]:: Provide +before_render+ callbacks to controllers.
287
287
 
288
- {controller/dry_crud/responder.rb}[http://codez.ch/dry_crud?q=DryCrud::Responder]:: Responder used by the CrudController to handle the +path_args+.
288
+ {controller/dry_crud/responder.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Responder]:: Responder used by the CrudController to handle the +path_args+.
289
289
 
290
290
  === Helpers
291
291
 
292
- {helpers/dry_crud/form/builder.rb}[http://codez.ch/dry_crud?q=DryCrud::Form::Builder]:: A form builder that automatically selects the corresponding input type for ActiveRecord columns. Input elements are rendered together with a label by default.
292
+ {helpers/dry_crud/form/builder.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Form/Builder]:: A form builder that automatically selects the corresponding input type for ActiveRecord columns. Input elements are rendered together with a label by default.
293
293
 
294
- {helpers/dry_crud/form/control.rb}[http://codez.ch/dry_crud?q=DryCrud::Form::Control]:: Representation of a single form control consisting of a label, input field, addon or help text.
294
+ {helpers/dry_crud/form/control.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Form/Control]:: Representation of a single form control consisting of a label, input field, addon or help text.
295
295
 
296
- {helpers/dry_crud/table/builder.rb}[http://codez.ch/dry_crud?q=DryCrud::Table::Builder]:: A helper object to easily define tables listing several rows of the same data type.
296
+ {helpers/dry_crud/table/builder.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Table/Builder]:: A helper object to easily define tables listing several rows of the same data type.
297
297
 
298
- {helpers/dry_crud/table/col.rb}[http://codez.ch/dry_crud?q=DryCrud::Table::Col]:: Helper class representing a single table column.
298
+ {helpers/dry_crud/table/col.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Table/Col]:: Helper class representing a single table column.
299
299
 
300
- {helpers/dry_crud/table/actions.rb}[http://codez.ch/dry_crud?q=DryCrud::Table::Actions]:: Module to add support for uniform CRUD actions in tables.
300
+ {helpers/dry_crud/table/actions.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Table/Actions]:: Module to add support for uniform CRUD actions in tables.
301
301
 
302
- {helpers/dry_crud/table/sorting.rb}[http://codez.ch/dry_crud?q=DryCrud::Table::Sorting]:: Module to add support for sort links in table headers.
302
+ {helpers/dry_crud/table/sorting.rb}[https://rubydoc.info/github/codez/dry_crud/master/DryCrud/Table/Sorting]:: Module to add support for sort links in table headers.
303
303
 
304
- {helpers/form_helper.rb}[http://codez.ch/dry_crud?q=FormHelper]:: Create forms to edit models with Crud::FormBuilder. Contains a standardized and a custom definable form.
304
+ {helpers/form_helper.rb}[https://rubydoc.info/github/codez/dry_crud/master/FormHelper]:: Create forms to edit models with Crud::FormBuilder. Contains a standardized and a custom definable form.
305
305
 
306
- {helpers/table_helper.rb}[http://codez.ch/dry_crud?q=TableHelper]:: Create tables to list multiple models with Crud::TableBuilder. Contains a standardized and a custom definable table.
306
+ {helpers/table_helper.rb}[https://rubydoc.info/github/codez/dry_crud/master/TableHelper]:: Create tables to list multiple models with Crud::TableBuilder. Contains a standardized and a custom definable table.
307
307
 
308
- {helpers/format_helper.rb}[http://codez.ch/dry_crud?q=FormatHelper]:: Format attribute and basic values according to their database or Ruby type.
308
+ {helpers/format_helper.rb}[https://rubydoc.info/github/codez/dry_crud/master/FormatHelper]:: Format attribute and basic values according to their database or Ruby type.
309
309
 
310
- {helpers/actions_helper.rb}[http://codez.ch/dry_crud?q=ActionsHelper]:: Uniform action links for the most common crud actions.
310
+ {helpers/actions_helper.rb}[https://rubydoc.info/github/codez/dry_crud/master/ActionsHelper]:: Uniform action links for the most common crud actions.
311
311
 
312
- {helpers/i18n_helper.rb}[http://codez.ch/dry_crud?q=I18nHelper]:: Translation helpers extending Rails' +translate+ helper to support translation inheritance over the controller class hierarchy.
312
+ {helpers/i18n_helper.rb}[https://rubydoc.info/github/codez/dry_crud/master/I18nHelper]:: Translation helpers extending Rails' +translate+ helper to support translation inheritance over the controller class hierarchy.
313
313
 
314
- {helpers/utility_helper.rb}[http://codez.ch/dry_crud?q=UtilityHelper]:: View helpers for basic functions used in various other helpers.
314
+ {helpers/utility_helper.rb}[https://rubydoc.info/github/codez/dry_crud/master/UtilityHelper]:: View helpers for basic functions used in various other helpers.
315
315
 
316
316
 
317
317
 
@@ -372,9 +372,9 @@ app/assets/images/action/*.png:: Some sample action icons from the {Open Icon Li
372
372
 
373
373
  test/support/crud_test_model.rb:: A dummy model to run CRUD tests against.
374
374
 
375
- {test/support/custom_assertions.rb}[http://codez.ch/dry_crud?q=CustomAssertions]:: A handful of convenient assertions. Include this module into your <tt>test_helper.rb</tt> file.
375
+ {test/support/custom_assertions.rb}[https://rubydoc.info/github/codez/dry_crud/master/CustomAssertions]:: A handful of convenient assertions. Include this module into your <tt>test_helper.rb</tt> file.
376
376
 
377
- {test/support/crud_controller_test_helper.rb}[http://codez.ch/dry_crud?q=CrudControllerTestHelper]:: A module to include into the functional tests for your CrudController subclasses. Contains a handful of CRUD functionality tests for the provided implementation. So for each new CRUD controller, you get 20 tests for free.
377
+ {test/support/crud_controller_test_helper.rb}[https://rubydoc.info/github/codez/dry_crud/master/CrudControllerTestHelper]:: A module to include into the functional tests for your CrudController subclasses. Contains a handful of CRUD functionality tests for the provided implementation. So for each new CRUD controller, you get 20 tests for free.
378
378
 
379
379
  test/controllers/crud_test_models_controller_test.rb:: Functional tests for the basic CrudController functionality.
380
380
 
@@ -385,7 +385,7 @@ test/helpers/*_test.rb:: Tests for the provided helper implementations and a gre
385
385
 
386
386
  spec/support/crud_controller_examples.rb:: A whole set of shared exampled to include into your controller specs. See <tt>spec/controllers/crud_test_models_controller_spec.rb</tt> for usage. So for each new CRUD controller, you get all the basic specs for free.
387
387
 
388
- {spec/support/crud_controller_test_helper.rb}[http://codez.ch/dry_crud?q=CrudControllerTestHelper::ClassMethods]:: Convenience methods used by the crud controller examples.
388
+ {spec/support/crud_controller_test_helper.rb}[https://rubydoc.info/github/codez/dry_crud/master/CrudControllerTestHelper/ClassMethods]:: Convenience methods used by the crud controller examples.
389
389
 
390
390
  spec/support/crud_test_model.rb:: A dummy model to run CRUD tests against.
391
391
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.2.0
1
+ 6.0.0
@@ -73,9 +73,7 @@ module DryCrud
73
73
  def boolean_field(attr, html_options = {})
74
74
  content_tag(:div, class: 'checkbox') do
75
75
  content_tag(:label) do
76
- # rubocop:disable Rails/OutputSafety
77
76
  detail = html_options.delete(:detail) || '&nbsp;'.html_safe
78
- # rubocop:enable Rails/OutputSafety
79
77
  safe_join([check_box(attr, html_options), ' ', detail])
80
78
  end
81
79
  end
@@ -90,6 +88,22 @@ module DryCrud
90
88
  end
91
89
  end
92
90
 
91
+ def integer_field(attr, html_options = {})
92
+ html_options[:step] ||= 1
93
+ number_field(attr, html_options)
94
+ end
95
+
96
+ def float_field(attr, html_options = {})
97
+ html_options[:step] ||= 'any'
98
+ number_field(attr, html_options)
99
+ end
100
+
101
+ def decimal_field(attr, html_options = {})
102
+ html_options[:step] ||=
103
+ (10**-column_property(object, attr, :scale)).to_f
104
+ number_field(attr, html_options)
105
+ end
106
+
93
107
  # Customize the standard text area to have 5 rows by default.
94
108
  def text_area(attr, html_options = {})
95
109
  add_css_class(html_options, 'form-control')
@@ -97,10 +111,6 @@ module DryCrud
97
111
  super(attr, html_options)
98
112
  end
99
113
 
100
- alias integer_field number_field
101
- alias float_field number_field
102
- alias decimal_field number_field
103
-
104
114
  # Render a select element for a :belongs_to association defined by attr.
105
115
  # Use additional html_options for the select element.
106
116
  # To pass a custom element list, specify the list with the :list key or
@@ -3,9 +3,8 @@ require 'English'
3
3
  # View helpers for basic functions used in various other helpers.
4
4
  module UtilityHelper
5
5
 
6
- # rubocop:disable Rails/OutputSafety
7
- EMPTY_STRING = '&nbsp;'.html_safe # non-breaking space asserts better css.
8
- # rubocop:enable Rails/OutputSafety
6
+ # non-breaking space asserts better css.
7
+ EMPTY_STRING = '&nbsp;'.html_safe.freeze
9
8
 
10
9
  # Render a content tag with the collected contents rendered
11
10
  # by &block for each item in collection.
@@ -7,9 +7,10 @@
7
7
 
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
9
  <%= csrf_meta_tag %>
10
+ <%= csp_meta_tag %>
10
11
 
11
- <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
12
- <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
12
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
13
+ <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
13
14
 
14
15
  <%= yield :head %>
15
16
  </head>
@@ -9,9 +9,10 @@
9
9
 
10
10
  %meta{name: 'viewport', content: 'width=device-width, initial-scale=1.0'}
11
11
  = csrf_meta_tag
12
+ = csp_meta_tag
12
13
 
13
- = stylesheet_link_tag 'application', :media => 'all', 'data-turbolinks-track' => true
14
- = javascript_include_tag 'application', 'data-turbolinks-track' => true
14
+ = stylesheet_link_tag 'application', :media => 'all', 'data-turbolinks-track': 'reload'
15
+ = javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'
15
16
 
16
17
  = yield :head
17
18
 
@@ -1,14 +1,17 @@
1
1
  module DryCrud
2
2
  # Dry Crud Rails engine
3
3
  class Engine < Rails::Engine
4
+
5
+ # Fields with errors are directly styled in DryCrud::FormBuilder.
6
+ # Rails should just output the plain html tag.
4
7
  initializer 'dry_crud.field_error_proc' do |_app|
5
- # Fields with errors are directly styled in DryCrud::FormBuilder.
6
- # Rails should just output the plain html tag.
7
8
  ActionView::Base.field_error_proc =
8
9
  proc { |html_tag, _instance| html_tag }
10
+ end
9
11
 
10
- # Load dry_crud engine helpers first so that the application may override
11
- # them.
12
+ # Load dry_crud engine helpers first so that the application may override
13
+ # them.
14
+ config.to_prepare do
12
15
  paths = ApplicationController.helpers_path
13
16
  helper_path = "#{File::SEPARATOR}app#{File::SEPARATOR}helpers"
14
17
  regexp = /dry_crud(-\d+\.\d+\.\d+)?#{helper_path}\z/
@@ -18,5 +21,6 @@ module DryCrud
18
21
  paths.prepend(dry_crud_helpers)
19
22
  end
20
23
  end
24
+
21
25
  end
22
26
  end
@@ -1,6 +1,6 @@
1
1
  begin
2
2
  require 'generators/dry_crud/dry_crud_generator_base'
3
- rescue LoadError => _ # rubocop:disable Lint/HandleExceptions
3
+ rescue LoadError => _e # rubocop:disable Lint/HandleExceptions
4
4
  # ok, we are in the rake task
5
5
  end
6
6
 
@@ -43,11 +43,9 @@ shared_examples 'crud controller' do |options|
43
43
 
44
44
  describe_action :get, :index,
45
45
  unless: skip?(options, 'index') do
46
-
47
46
  context '.html',
48
47
  format: :html,
49
48
  unless: skip?(options, %w[index html]) do
50
-
51
49
  context 'plain',
52
50
  unless: skip?(options, %w[index html plain]),
53
51
  combine: 'ihp' do
@@ -110,11 +108,9 @@ shared_examples 'crud controller' do |options|
110
108
  describe_action :get, :show,
111
109
  id: true,
112
110
  unless: skip?(options, 'show') do
113
-
114
111
  context '.html',
115
112
  format: :html,
116
113
  unless: skip?(options, %w[show html]) do
117
-
118
114
  context 'plain',
119
115
  unless: skip?(options, %w[show html plain]),
120
116
  combine: 'sh' do
@@ -254,7 +250,6 @@ shared_examples 'crud controller' do |options|
254
250
  context '.json',
255
251
  format: :json,
256
252
  unless: skip?(options, %w[update json]) do
257
-
258
253
  context 'with valid params',
259
254
  unless: skip?(options, %w[update json valid]),
260
255
  combine: 'ujv' do
@@ -278,7 +273,6 @@ shared_examples 'crud controller' do |options|
278
273
  describe_action :delete, :destroy,
279
274
  id: true,
280
275
  unless: skip?(options, %w[destroy]) do
281
-
282
276
  it 'removes entry from database', perform_request: false do
283
277
  expect { perform_request }.to change { model_class.count }.by(-1)
284
278
  end
@@ -286,7 +280,6 @@ shared_examples 'crud controller' do |options|
286
280
  context '.html',
287
281
  format: :html,
288
282
  unless: skip?(options, %w[destroy html]) do
289
-
290
283
  context 'successfull', combine: 'dhs' do
291
284
  it_is_expected_to_redirect_to_index
292
285
  it_is_expected_to_have_flash(:notice)
@@ -301,7 +294,6 @@ shared_examples 'crud controller' do |options|
301
294
  context '.json',
302
295
  format: :json,
303
296
  unless: skip?(options, %w[destroy json]) do
304
-
305
297
  context 'successfull', combine: 'djs' do
306
298
  it_is_expected_to_respond(204)
307
299
  it { expect(response.body).to be_blank }
@@ -45,7 +45,7 @@ module CrudControllerTestHelper
45
45
 
46
46
  # treat in-memory entry as committed in order to
47
47
  # avoid rollback of internal state.
48
- entry.committed! if entry
48
+ entry&.committed!
49
49
  end
50
50
 
51
51
  def restore_request
@@ -1,8 +1,8 @@
1
1
  #:nodoc:
2
- REGEXP_ROWS = /<tr.+?<\/tr>/m #:nodoc:
3
- REGEXP_HEADERS = /<th.+?<\/th>/m #:nodoc:
4
- REGEXP_SORT_HEADERS = /<th.*?><a .*?sort_dir=asc.*?>.*?<\/a><\/th>/m #:nodoc:
5
- REGEXP_ACTION_CELL = /<td class=\"action\"><a .*?href.+?<\/a><\/td>/m #:nodoc:
2
+ REGEXP_ROWS = /<tr.+?<\/tr>/m.freeze
3
+ REGEXP_HEADERS = /<th.+?<\/th>/m.freeze
4
+ REGEXP_SORT_HEADERS = /<th.*?><a .*?sort_dir=asc.*?>.*?<\/a><\/th>/m.freeze
5
+ REGEXP_ACTION_CELL = /<td class=\"action\"><a .*?href.+?<\/a><\/td>/m.freeze
6
6
 
7
7
  # A simple test helper to prepare the test database with a CrudTestModel model.
8
8
  # This helper is used to test the CrudController and various helpers
@@ -128,8 +128,17 @@ module CrudTestHelper
128
128
  routes = @routes
129
129
 
130
130
  controller.singleton_class.send(:include, routes.url_helpers)
131
- controller.view_context_class = Class.new(controller.view_context_class) do
132
- include routes.url_helpers
131
+
132
+ if controller.respond_to?(:view_context_class)
133
+ view_context_class = Class.new(controller.view_context_class) do
134
+ include routes.url_helpers
135
+ end
136
+ custom_view_context = Module.new do
137
+ define_method(:view_context_class) do
138
+ view_context_class
139
+ end
140
+ end
141
+ controller.extend(custom_view_context)
133
142
  end
134
143
 
135
144
  @routes.draw { resources :crud_test_models }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry_crud
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pascal Zumkehr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-26 00:00:00.000000000 Z
11
+ date: 2019-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: '6.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '5.0'
26
+ version: '6.0'
27
27
  description: |
28
28
  Generates simple and extendable controller, views and helpers that support you
29
29
  to DRY up the CRUD code in your Rails project. Start with these elements and
@@ -139,7 +139,7 @@ files:
139
139
  - lib/generators/dry_crud/templates/test/support/crud_test_model.rb
140
140
  - lib/generators/dry_crud/templates/test/support/crud_test_models_controller.rb
141
141
  - lib/generators/dry_crud/templates/test/support/custom_assertions.rb
142
- homepage: http://codez.ch/dry_crud
142
+ homepage: http://github.com/codez/dry_crud
143
143
  licenses: []
144
144
  metadata: {}
145
145
  post_install_message: