dry_crud 2.1.2 → 3.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 (37) hide show
  1. checksums.yaml +5 -13
  2. data/README.rdoc +1 -2
  3. data/VERSION +1 -1
  4. data/app/controllers/crud_controller.rb +96 -61
  5. data/app/controllers/dry_crud/generic_model.rb +1 -5
  6. data/app/controllers/dry_crud/rememberable.rb +1 -1
  7. data/app/controllers/dry_crud/render_callbacks.rb +2 -4
  8. data/app/controllers/list_controller.rb +4 -5
  9. data/app/helpers/dry_crud/form/builder.rb +4 -30
  10. data/app/helpers/format_helper.rb +2 -0
  11. data/app/helpers/utility_helper.rb +2 -3
  12. data/app/views/crud/show.json.jbuilder +1 -0
  13. data/app/views/layouts/_flash.html.erb +1 -1
  14. data/app/views/layouts/_flash.html.haml +1 -1
  15. data/app/views/list/index.json.jbuilder +4 -0
  16. data/config/locales/crud.de.yml +1 -1
  17. data/lib/generators/dry_crud/templates/spec/controllers/crud_test_models_controller_spec.rb +141 -139
  18. data/lib/generators/dry_crud/templates/spec/helpers/dry_crud/form/builder_spec.rb +47 -48
  19. data/lib/generators/dry_crud/templates/spec/helpers/dry_crud/table/builder_spec.rb +6 -6
  20. data/lib/generators/dry_crud/templates/spec/helpers/form_helper_spec.rb +66 -66
  21. data/lib/generators/dry_crud/templates/spec/helpers/format_helper_spec.rb +62 -61
  22. data/lib/generators/dry_crud/templates/spec/helpers/i18n_helper_spec.rb +13 -13
  23. data/lib/generators/dry_crud/templates/spec/helpers/table_helper_spec.rb +42 -38
  24. data/lib/generators/dry_crud/templates/spec/helpers/utility_helper_spec.rb +22 -22
  25. data/lib/generators/dry_crud/templates/spec/support/crud_controller_examples.rb +72 -72
  26. data/lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb +54 -45
  27. data/lib/generators/dry_crud/templates/test/controllers/crud_test_models_controller_test.rb +8 -11
  28. data/lib/generators/dry_crud/templates/test/helpers/dry_crud/form/builder_test.rb +1 -6
  29. data/lib/generators/dry_crud/templates/test/helpers/form_helper_test.rb +47 -46
  30. data/lib/generators/dry_crud/templates/test/helpers/format_helper_test.rb +1 -1
  31. data/lib/generators/dry_crud/templates/test/helpers/table_helper_test.rb +9 -3
  32. data/lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb +2 -2
  33. data/lib/generators/dry_crud/templates/test/support/crud_test_helper.rb +1 -1
  34. data/lib/generators/dry_crud/templates/test/support/crud_test_model.rb +0 -4
  35. data/lib/generators/dry_crud/templates/test/support/crud_test_models_controller.rb +5 -10
  36. metadata +15 -18
  37. data/app/controllers/dry_crud/responder.rb +0 -34
@@ -49,7 +49,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
49
49
  def test_index_search
50
50
  super
51
51
  assert_equal 1, entries.size
52
- assert_equal({ q: 'AAAA' }, session[:list_params]['/crud_test_models'])
52
+ assert_equal({ 'q' => 'AAAA' }, session[:list_params]['/crud_test_models'])
53
53
  end
54
54
 
55
55
  def test_index_with_custom_options
@@ -68,7 +68,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
68
68
  assert entries.present?
69
69
  assert_equal 1, entries.size
70
70
  assert_equal [CrudTestModel.find_by_name('BBBBB')], entries
71
- assert_equal({ q: 'DDD' }, session[:list_params]['/crud_test_models'])
71
+ assert_equal({ 'q' => 'DDD' }, session[:list_params]['/crud_test_models'])
72
72
  end
73
73
 
74
74
  def test_sort_given_column
@@ -78,7 +78,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
78
78
  assert entries.present?
79
79
  assert_equal 6, entries.size
80
80
  assert_equal CrudTestModel.all.sort_by(&:children), entries
81
- assert_equal({ sort: 'children', sort_dir: 'asc' },
81
+ assert_equal({ 'sort' => 'children', 'sort_dir' => 'asc' },
82
82
  session[:list_params]['/crud_test_models'])
83
83
  end
84
84
 
@@ -88,7 +88,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
88
88
  assert_template 'index'
89
89
  assert entries.present?
90
90
  assert_equal 6, entries.size
91
- assert_equal({ sort: 'chatty', sort_dir: 'desc' },
91
+ assert_equal({ 'sort' => 'chatty', 'sort_dir' => 'desc' },
92
92
  session[:list_params]['/crud_test_models'])
93
93
 
94
94
  # sort order is ambiguous, use index
@@ -108,15 +108,15 @@ class CrudTestModelsControllerTest < ActionController::TestCase
108
108
  assert entries.present?
109
109
  assert_equal 3, entries.size
110
110
  assert_equal %w(CCCCC DDDDD BBBBB), entries.map(&:name)
111
- assert_equal({ sort: 'chatty', sort_dir: 'asc', q: 'DDD' },
111
+ assert_equal({ 'sort' => 'chatty', 'sort_dir' => 'asc', 'q' => 'DDD' },
112
112
  session[:list_params]['/crud_test_models'])
113
113
  end
114
114
 
115
115
  def test_index_returning
116
116
  session[:list_params] = {}
117
- session[:list_params]['/crud_test_models'] = { q: 'DDD',
118
- sort: 'chatty',
119
- sort_dir: 'desc' }
117
+ session[:list_params]['/crud_test_models'] = { 'q' => 'DDD',
118
+ 'sort' => 'chatty',
119
+ 'sort_dir' => 'desc' }
120
120
  get :index, returning: true
121
121
  assert_response :success
122
122
  assert_template 'index'
@@ -234,7 +234,6 @@ class CrudTestModelsControllerTest < ActionController::TestCase
234
234
  end
235
235
  assert_response :unprocessable_entity
236
236
  assert entry.new_record?
237
- assert_match(/errors/, @response.body)
238
237
  assert_equal [:before_create, :before_save], @controller.called_callbacks
239
238
  end
240
239
 
@@ -257,7 +256,6 @@ class CrudTestModelsControllerTest < ActionController::TestCase
257
256
  format: 'json'
258
257
  assert_response :unprocessable_entity
259
258
  assert entry.changed?
260
- assert_match(/errors/, @response.body)
261
259
  assert flash[:notice].blank?
262
260
  assert_equal 20, entry.rating
263
261
  assert_equal [:before_update, :before_save], @controller.called_callbacks
@@ -291,7 +289,6 @@ class CrudTestModelsControllerTest < ActionController::TestCase
291
289
  format: 'json')
292
290
  end
293
291
  assert_response :unprocessable_entity
294
- assert_match(/errors/, @response.body)
295
292
  assert flash[:notice].blank?
296
293
  end
297
294
 
@@ -21,12 +21,7 @@ module DryCrud
21
21
 
22
22
  def create_form
23
23
  @entry = CrudTestModel.first
24
- if Rails.version < '4.0'
25
- @form = DryCrud::Form::Builder.new(:entry, @entry, self, {},
26
- ->(form) { form })
27
- else
28
- @form = DryCrud::Form::Builder.new(:entry, @entry, self, {})
29
- end
24
+ @form = DryCrud::Form::Builder.new(:entry, @entry, self, {})
30
25
  end
31
26
 
32
27
  test 'input_field dispatches string attr to string_field' do
@@ -1,6 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  require 'test_helper'
3
3
  require 'support/crud_test_model'
4
+ require 'support/crud_test_helper'
4
5
 
5
6
  # Test FormHelper
6
7
  class FormHelperTest < ActionView::TestCase
@@ -23,15 +24,15 @@ class FormHelperTest < ActionView::TestCase
23
24
  end
24
25
  end
25
26
 
26
- assert_match(/form .*?action="\/crud_test_models\/#{e.id}"
27
- .*?class="special\ form-horizontal"
27
+ assert_match(/form .*?class="special\ form-horizontal"
28
+ .*?action="\/crud_test_models\/#{e.id}"
28
29
  .*?method="post"/x, f)
29
- assert_match(/input .*?name="_method"
30
- .*?type="hidden"
30
+ assert_match(/input .*?type="hidden"
31
+ .*?name="_method"
31
32
  .*?value="(patch|put)"/x, f)
32
- assert_match(/input .*?name="crud_test_model\[name\]"
33
- .*?type="text"
34
- .*?value="AAAAA"/x, f)
33
+ assert_match(/input .*?type="text"
34
+ .*?value="AAAAA"
35
+ .*?name="crud_test_model\[name\]"/x, f)
35
36
  end
36
37
 
37
38
  test 'standard form' do
@@ -46,22 +47,22 @@ class FormHelperTest < ActionView::TestCase
46
47
  end
47
48
 
48
49
  assert_match(/form .*?action="\/crud_test_models\/#{e.id}"
49
- .*?class="special\ form-horizontal"
50
- .*?method="post"/x, f)
51
- assert_match(/input .*?name="_method"
52
- .*?type="hidden"
50
+ .*?method="post"/x, f)
51
+ assert_match(/form .*?class="special\ form-horizontal"/x, f)
52
+ assert_match(/input .*?type="hidden"
53
+ .*?name="_method"
53
54
  .*?value="(patch|put)"/x, f)
54
- assert_match(/input .*?name="crud_test_model\[name\]"
55
- .*?type="text"
56
- .*?value="AAAAA"/x, f)
57
- assert_match(/input .*?name="crud_test_model\[birthdate\]"
58
- .*?type="date"/x, f)
59
- assert_match(/input .*?name="crud_test_model\[children\]"
60
- .*?type="number"
61
- .*?value=\"9\"/x, f)
62
- assert_match(/input .*?name="crud_test_model\[human\]"
63
- .*?type="checkbox"/x, f)
64
- assert_match(/button\ .*?type="submit"\>
55
+ assert_match(/input .*?type="text"
56
+ .*?value="AAAAA"
57
+ .*?name="crud_test_model\[name\]"/x, f)
58
+ assert_match(/input .*?type="date"
59
+ .*?name="crud_test_model\[birthdate\]"/x, f)
60
+ assert_match(/input .*?type="number"
61
+ .*?value=\"9\"
62
+ .*?name="crud_test_model\[children\]"/x, f)
63
+ assert_match(/input .*?type="checkbox"
64
+ .*?name="crud_test_model\[human\]"/x, f)
65
+ assert_match(/button\ .*?type="submit".*\>
65
66
  #{t('global.button.save')}
66
67
  \<\/button\>/x, f)
67
68
  assert_match(/\<a\ .*href="\/somewhere".*\>
@@ -84,16 +85,16 @@ class FormHelperTest < ActionView::TestCase
84
85
 
85
86
  assert_match(/form .*?action="\/crud_test_models\/#{e.id}"
86
87
  .*?method="post"/x, f)
87
- assert_match(/input .*?name="_method"
88
- .*?type="hidden"
88
+ assert_match(/input .*?type="hidden"
89
+ .*?name="_method"
89
90
  .*?value="(patch|put)"/x, f)
90
91
  assert_match(/div[^>]* id='error_explanation'/, f)
91
92
  assert_match(/div\ class="form-group\ has-error"\>.*?
92
- \<input .*?name="crud_test_model\[name\]"
93
- .*?type="text"/x, f)
94
- assert_match(/input .*?name="crud_test_model\[birthdate\]"
93
+ \<input .*?type="text"
94
+ .*?name="crud_test_model\[name\]"/x, f)
95
+ assert_match(/input .*?value="1910-01-01"
95
96
  .*?type="date"
96
- .*?value="1910-01-01"/x, f)
97
+ .*?name="crud_test_model\[birthdate\]"/x, f)
97
98
  end
98
99
 
99
100
  test 'crud form' do
@@ -102,24 +103,24 @@ class FormHelperTest < ActionView::TestCase
102
103
  end
103
104
 
104
105
  assert_match(/form .*?action="\/crud_test_models\/#{entry.id}"/, f)
105
- assert_match(/input .*?name="crud_test_model\[name\]"
106
- .*?type="text"/x, f)
107
- assert_match(/input .*?name="crud_test_model\[whatever\]"
108
- .*?type="text"/x, f)
109
- assert_match(/input .*?name="crud_test_model\[children\]"
110
- .*?type="number"/x, f)
111
- assert_match(/input .*?name="crud_test_model\[rating\]"
112
- .*?type="number"/x, f)
113
- assert_match(/input .*?name="crud_test_model\[income\]"
114
- .*?type="number"/x, f)
115
- assert_match(/input .*?name="crud_test_model\[birthdate\]"
116
- .*?type="date"/x, f)
117
- assert_match(/input .*?name="crud_test_model\[gets_up_at\]"
118
- .*?type="time"/x, f)
119
- assert_match(/input .*?name="crud_test_model\[last_seen\]"
120
- .*?type="datetime"/x, f)
121
- assert_match(/input .*?name="crud_test_model\[human\]"
122
- .*?type="checkbox"/x, f)
106
+ assert_match(/input .*?type="text"
107
+ .*?name="crud_test_model\[name\]"/x, f)
108
+ assert_match(/input .*?type="text"
109
+ .*?name="crud_test_model\[whatever\]"/x, f)
110
+ assert_match(/input .*?type="number"
111
+ .*?name="crud_test_model\[children\]"/x, f)
112
+ assert_match(/input .*?type="number"
113
+ .*?name="crud_test_model\[rating\]"/x, f)
114
+ assert_match(/input .*?type="number"
115
+ .*?name="crud_test_model\[income\]"/x, f)
116
+ assert_match(/input .*?type="date"
117
+ .*?name="crud_test_model\[birthdate\]"/x, f)
118
+ assert_match(/input .*?type="time"
119
+ .*?name="crud_test_model\[gets_up_at\]"/x, f)
120
+ assert_match(/input .*?type="datetime"
121
+ .*?name="crud_test_model\[last_seen\]"/x, f)
122
+ assert_match(/input .*?type="checkbox"
123
+ .*?name="crud_test_model\[human\]"/x, f)
123
124
  assert_match(/select .*?name="crud_test_model\[companion_id\]"/, f)
124
125
  assert_match(/textarea .*?name="crud_test_model\[remarks\]"/, f)
125
126
  assert_match(/a .*href="\/crud_test_models\/#{entry.id}\?returning=true"
@@ -96,7 +96,7 @@ class FormatHelperTest < ActionView::TestCase
96
96
  assert_equal '9', format_type(m, :children)
97
97
 
98
98
  m.children = 10_000
99
- assert_equal '10000', format_type(m, :children)
99
+ assert_equal '10,000', format_type(m, :children)
100
100
  end
101
101
 
102
102
  unless ENV['NON_LOCALIZED'] # localization dependent tests
@@ -12,7 +12,7 @@ class TableHelperTest < ActionView::TestCase
12
12
  include CustomAssertions
13
13
  include CrudTestHelper
14
14
 
15
- setup :reset_db, :setup_db, :create_test_data
15
+ setup :reset_db, :setup_db, :create_test_data, :empty_params
16
16
  teardown :reset_db
17
17
 
18
18
  attr_reader :entries
@@ -25,13 +25,19 @@ class TableHelperTest < ActionView::TestCase
25
25
  "#{f(obj.size)} chars"
26
26
  end
27
27
 
28
- test 'empty table should render message' do
28
+ def empty_params
29
+ def params
30
+ {}
31
+ end
32
+ end
33
+
34
+ test 'empty table renders message' do
29
35
  result = plain_table_or_message([]) {}
30
36
  assert result.html_safe?
31
37
  assert_match(/\<div class=["']table["']\>.*\<\/div\>/, result)
32
38
  end
33
39
 
34
- test 'non empty table should render table' do
40
+ test 'non empty table renders table' do
35
41
  result = plain_table_or_message(%w(foo bar)) do |t|
36
42
  t.attrs :size, :upcase
37
43
  end
@@ -91,7 +91,7 @@ module CrudControllerTestHelper
91
91
  format: 'json')
92
92
  end
93
93
  assert_response :success
94
- assert @response.body.starts_with?('{')
94
+ assert @response.body.starts_with?('{"id":')
95
95
  end
96
96
 
97
97
  def test_edit # :nodoc:
@@ -117,7 +117,7 @@ module CrudControllerTestHelper
117
117
  format: 'json')
118
118
  end
119
119
  assert_response :success
120
- assert_equal '', @response.body.strip
120
+ assert @response.body.starts_with?('{"id":')
121
121
  end
122
122
 
123
123
  def test_destroy # :nodoc:
@@ -75,7 +75,7 @@ module CrudTestHelper
75
75
  t.boolean :human, default: true
76
76
  t.text :remarks
77
77
 
78
- t.timestamps
78
+ t.timestamps null: false
79
79
  end
80
80
  end
81
81
 
@@ -13,8 +13,6 @@ class CrudTestModel < ActiveRecord::Base #:nodoc:
13
13
  validates :name, presence: true
14
14
  validates :rating, inclusion: { in: 1..10 }
15
15
 
16
- attr_protected nil if Rails.version < '4.0'
17
-
18
16
  def to_s
19
17
  name
20
18
  end
@@ -40,8 +38,6 @@ class OtherCrudTestModel < ActiveRecord::Base #:nodoc:
40
38
  has_and_belongs_to_many :others, class_name: 'CrudTestModel'
41
39
  belongs_to :more, foreign_key: :more_id, class_name: 'CrudTestModel'
42
40
 
43
- attr_protected nil if Rails.version < '4.0'
44
-
45
41
  def to_s
46
42
  name
47
43
  end
@@ -7,11 +7,9 @@ class CrudTestModelsController < CrudController #:nodoc:
7
7
  self.search_columns = [:name, :whatever, :remarks]
8
8
  self.sort_mappings = { chatty: 'length(remarks)' }
9
9
  self.default_sort = 'name'
10
- <% if Rails.version >= '4.0' -%>
11
10
  self.permitted_attrs = [:name, :email, :password, :whatever, :children,
12
11
  :companion_id, :rating, :income, :birthdate,
13
12
  :gets_up_at, :last_seen, :human, :remarks]
14
- <% end -%>
15
13
 
16
14
  before_create :possibly_redirect
17
15
  before_create :handle_name
@@ -30,20 +28,17 @@ class CrudTestModelsController < CrudController #:nodoc:
30
28
  layout false
31
29
 
32
30
  def index
33
- super do |format|
34
- format.js { render text: 'index js' }
35
- end
31
+ entries
32
+ render text: 'index js' if request.format.js?
36
33
  end
37
34
 
38
35
  def show
39
- super do |format|
40
- format.html { render text: 'custom html' } if entry.name == 'BBBBB'
41
- end
36
+ render text: 'custom html' if entry.name == 'BBBBB'
42
37
  end
43
38
 
44
39
  def create
45
- super do |_format|
46
- flash[:notice] = 'model got created' if entry.persisted?
40
+ super do |_format, success|
41
+ flash[:notice] = 'model got created' if success
47
42
  end
48
43
  end
49
44
 
metadata CHANGED
@@ -1,37 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry_crud
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 3.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: 2014-09-01 00:00:00.000000000 Z
11
+ date: 2015-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.2'
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
26
  version: '3.2'
27
- description: ! 'Generates simple and extendable controller, views and helpers that
28
- support you
29
-
27
+ description: |
28
+ Generates simple and extendable controller, views and helpers that support you
30
29
  to DRY up the CRUD code in your Rails project. Start with these elements and
31
-
32
30
  build a clean base to efficiently develop your application upon.
33
-
34
- '
35
31
  email: spam@codez.ch
36
32
  executables: []
37
33
  extensions: []
@@ -55,7 +51,6 @@ files:
55
51
  - app/controllers/dry_crud/nestable.rb
56
52
  - app/controllers/dry_crud/rememberable.rb
57
53
  - app/controllers/dry_crud/render_callbacks.rb
58
- - app/controllers/dry_crud/responder.rb
59
54
  - app/controllers/dry_crud/searchable.rb
60
55
  - app/controllers/dry_crud/sortable.rb
61
56
  - app/controllers/list_controller.rb
@@ -89,6 +84,7 @@ files:
89
84
  - app/views/crud/new.html.haml
90
85
  - app/views/crud/show.html.erb
91
86
  - app/views/crud/show.html.haml
87
+ - app/views/crud/show.json.jbuilder
92
88
  - app/views/layouts/_flash.html.erb
93
89
  - app/views/layouts/_flash.html.haml
94
90
  - app/views/layouts/_nav.html.erb
@@ -103,6 +99,7 @@ files:
103
99
  - app/views/list/_search.html.haml
104
100
  - app/views/list/index.html.erb
105
101
  - app/views/list/index.html.haml
102
+ - app/views/list/index.json.jbuilder
106
103
  - app/views/shared/_error_messages.html.erb
107
104
  - app/views/shared/_error_messages.html.haml
108
105
  - app/views/shared/_labeled.html.erb
@@ -146,26 +143,26 @@ licenses: []
146
143
  metadata: {}
147
144
  post_install_message:
148
145
  rdoc_options:
149
- - --title
150
- - ! '"Dry Crud"'
151
- - --main
146
+ - "--title"
147
+ - '"Dry Crud"'
148
+ - "--main"
152
149
  - README.rdoc
153
- - --line-numbers
150
+ - "--line-numbers"
154
151
  require_paths:
155
152
  - lib
156
153
  required_ruby_version: !ruby/object:Gem::Requirement
157
154
  requirements:
158
- - - ! '>='
155
+ - - ">="
159
156
  - !ruby/object:Gem::Version
160
157
  version: '0'
161
158
  required_rubygems_version: !ruby/object:Gem::Requirement
162
159
  requirements:
163
- - - ! '>='
160
+ - - ">="
164
161
  - !ruby/object:Gem::Version
165
162
  version: '0'
166
163
  requirements: []
167
164
  rubyforge_project:
168
- rubygems_version: 2.2.2
165
+ rubygems_version: 2.4.3
169
166
  signing_key:
170
167
  specification_version: 4
171
168
  summary: Generates DRY and specifically extendable CRUD controller, views and helpers