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.
- checksums.yaml +5 -13
- data/README.rdoc +1 -2
- data/VERSION +1 -1
- data/app/controllers/crud_controller.rb +96 -61
- data/app/controllers/dry_crud/generic_model.rb +1 -5
- data/app/controllers/dry_crud/rememberable.rb +1 -1
- data/app/controllers/dry_crud/render_callbacks.rb +2 -4
- data/app/controllers/list_controller.rb +4 -5
- data/app/helpers/dry_crud/form/builder.rb +4 -30
- data/app/helpers/format_helper.rb +2 -0
- data/app/helpers/utility_helper.rb +2 -3
- data/app/views/crud/show.json.jbuilder +1 -0
- data/app/views/layouts/_flash.html.erb +1 -1
- data/app/views/layouts/_flash.html.haml +1 -1
- data/app/views/list/index.json.jbuilder +4 -0
- data/config/locales/crud.de.yml +1 -1
- data/lib/generators/dry_crud/templates/spec/controllers/crud_test_models_controller_spec.rb +141 -139
- data/lib/generators/dry_crud/templates/spec/helpers/dry_crud/form/builder_spec.rb +47 -48
- data/lib/generators/dry_crud/templates/spec/helpers/dry_crud/table/builder_spec.rb +6 -6
- data/lib/generators/dry_crud/templates/spec/helpers/form_helper_spec.rb +66 -66
- data/lib/generators/dry_crud/templates/spec/helpers/format_helper_spec.rb +62 -61
- data/lib/generators/dry_crud/templates/spec/helpers/i18n_helper_spec.rb +13 -13
- data/lib/generators/dry_crud/templates/spec/helpers/table_helper_spec.rb +42 -38
- data/lib/generators/dry_crud/templates/spec/helpers/utility_helper_spec.rb +22 -22
- data/lib/generators/dry_crud/templates/spec/support/crud_controller_examples.rb +72 -72
- data/lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb +54 -45
- data/lib/generators/dry_crud/templates/test/controllers/crud_test_models_controller_test.rb +8 -11
- data/lib/generators/dry_crud/templates/test/helpers/dry_crud/form/builder_test.rb +1 -6
- data/lib/generators/dry_crud/templates/test/helpers/form_helper_test.rb +47 -46
- data/lib/generators/dry_crud/templates/test/helpers/format_helper_test.rb +1 -1
- data/lib/generators/dry_crud/templates/test/helpers/table_helper_test.rb +9 -3
- data/lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb +2 -2
- data/lib/generators/dry_crud/templates/test/support/crud_test_helper.rb +1 -1
- data/lib/generators/dry_crud/templates/test/support/crud_test_model.rb +0 -4
- data/lib/generators/dry_crud/templates/test/support/crud_test_models_controller.rb +5 -10
- metadata +15 -18
- 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
|
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
|
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
|
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
|
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
|
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
|
118
|
-
sort
|
119
|
-
sort_dir
|
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
|
-
|
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 .*?
|
27
|
-
.*?
|
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 .*?
|
30
|
-
.*?
|
30
|
+
assert_match(/input .*?type="hidden"
|
31
|
+
.*?name="_method"
|
31
32
|
.*?value="(patch|put)"/x, f)
|
32
|
-
assert_match(/input .*?
|
33
|
-
.*?
|
34
|
-
.*?
|
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
|
-
.*?
|
50
|
-
|
51
|
-
assert_match(/input .*?
|
52
|
-
.*?
|
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 .*?
|
55
|
-
.*?
|
56
|
-
.*?
|
57
|
-
assert_match(/input .*?
|
58
|
-
.*?
|
59
|
-
assert_match(/input .*?
|
60
|
-
.*?
|
61
|
-
.*?
|
62
|
-
assert_match(/input .*?
|
63
|
-
.*?
|
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 .*?
|
88
|
-
.*?
|
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 .*?
|
93
|
-
.*?
|
94
|
-
assert_match(/input .*?
|
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
|
-
.*?
|
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 .*?
|
106
|
-
.*?
|
107
|
-
assert_match(/input .*?
|
108
|
-
.*?
|
109
|
-
assert_match(/input .*?
|
110
|
-
.*?
|
111
|
-
assert_match(/input .*?
|
112
|
-
.*?
|
113
|
-
assert_match(/input .*?
|
114
|
-
.*?
|
115
|
-
assert_match(/input .*?
|
116
|
-
.*?
|
117
|
-
assert_match(/input .*?
|
118
|
-
.*?
|
119
|
-
assert_match(/input .*?
|
120
|
-
.*?
|
121
|
-
assert_match(/input .*?
|
122
|
-
.*?
|
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 '
|
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
|
-
|
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
|
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
|
-
|
120
|
+
assert @response.body.starts_with?('{"id":')
|
121
121
|
end
|
122
122
|
|
123
123
|
def test_destroy # :nodoc:
|
@@ -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
|
-
|
34
|
-
|
35
|
-
end
|
31
|
+
entries
|
32
|
+
render text: 'index js' if request.format.js?
|
36
33
|
end
|
37
34
|
|
38
35
|
def show
|
39
|
-
|
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
|
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:
|
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:
|
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:
|
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
|
-
-
|
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.
|
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
|