dry_crud 2.1.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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