redmine_extensions 0.3.00 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +16 -40
  3. data/lib/generators/redmine_extensions/entity/entity_generator.rb +77 -24
  4. data/lib/generators/redmine_extensions/entity/templates/_%model_name_underscored%.api.rsb.tt +18 -0
  5. data/lib/generators/redmine_extensions/entity/templates/controller.rb.erb +14 -20
  6. data/lib/generators/redmine_extensions/entity/templates/controller_spec.rb.erb +19 -22
  7. data/lib/generators/redmine_extensions/entity/templates/easy_query.rb.erb +1 -3
  8. data/lib/generators/redmine_extensions/entity/templates/factories.rb.erb +5 -6
  9. data/lib/generators/redmine_extensions/entity/templates/helper.rb.erb +0 -21
  10. data/lib/generators/redmine_extensions/entity/templates/index.api.rsb.erb +2 -4
  11. data/lib/generators/redmine_extensions/entity/templates/migration.rb.erb +4 -3
  12. data/lib/generators/redmine_extensions/entity/templates/model.rb.erb +1 -1
  13. data/lib/generators/redmine_extensions/entity/templates/show.api.rsb.erb +1 -1
  14. data/lib/generators/redmine_extensions/entity/templates/spec/requests/%model_name_underscored%_spec.rb.tt +19 -0
  15. data/lib/redmine_extensions/engine.rb +1 -0
  16. data/lib/redmine_extensions/redmine_patches/models/custom_field_patch.rb +11 -0
  17. data/lib/redmine_extensions/tags/autocomplete_field.rb +1 -1
  18. data/lib/redmine_extensions/version.rb +1 -1
  19. data/spec/factories/easy_settings.rb +5 -4
  20. data/spec/features/autocomplete_spec.rb +1 -3
  21. data/spec/features/jasmine_spec.rb +1 -3
  22. data/spec/init_rails.rb +13 -0
  23. data/spec/models/easy_setting_spec.rb +0 -2
  24. data/spec/presenters/easy_settings/params_wrapper_spec.rb +2 -2
  25. data/spec/spec_helper.rb +2 -69
  26. data/spec/support/plugin_generator.rb +1 -10
  27. metadata +12 -126
  28. data/spec/factories/easy_queries.rb +0 -8
  29. data/spec/factories/issues.rb +0 -96
  30. data/spec/factories/projects.rb +0 -84
  31. data/spec/factories/time_entries.rb +0 -38
  32. data/spec/factories/trackers.rb +0 -15
  33. data/spec/factories/users.rb +0 -23
  34. data/spec/rails_helper.rb +0 -119
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 475bbf4d44a8cbffb13eeeebeacd659836bac0f08129670c11c0fdd8fb30d2f2
4
- data.tar.gz: 1569eb4186cdf5001d546ecfe7a97e8d07e809915c9cf6ef2b8f586484c315c1
3
+ metadata.gz: 9e5bdd71d9b581303878b289c07e4fa88fec0f319ee9c94b310db8ffe9bcf71a
4
+ data.tar.gz: 5c8d77bc0b82467bbb10a2429a984efdeece83f62372ce83f39c51f5977a7f89
5
5
  SHA512:
6
- metadata.gz: 5e71efb7e7f14d678ca1393949fd71aa1fa2678712bf6ba886f9f93d63af127710a914438ba913e116500c91c892076ccddfc0201b07ea3e597b979a4056a6db
7
- data.tar.gz: 93bcf47bcea77726f9c129586e2cdc7289a818e7456a87cbc5f0e3f802ace860625a718ef5db36a7dcdd63e3740bd4bf052a7adfe7c82c3f4785313c6888ee3f
6
+ metadata.gz: 4a46dc0c10ebbd8e95257516d22e49d4bef13c02fbc2564ad000dfc48f67e960c66ac9a5e4bc2e141bf4697ee3d33eae8a6abf127cd3fa56c1e99ce64a5354f2
7
+ data.tar.gz: 20a9d5f7e2bc0dabf8465297965b5497bbd5f06b6c3991405ee5d5d66eaab09cb1d110f60ae37a7346bcbe5b6afd1aca70595aeb177d998c342afe40c60a8851
data/Rakefile CHANGED
@@ -1,49 +1,25 @@
1
- #!/usr/bin/env rake
2
- begin
3
- require 'bundler/setup'
4
- rescue LoadError
5
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
- end
1
+ require 'bundler/setup'
7
2
 
8
- begin
9
- require 'rdoc/task'
3
+ possible_app_dirs = [
4
+ ENV['DUMMY_PATH'],
5
+ File.join(Dir.pwd, 'test/dummy')
6
+ ]
7
+ dir = possible_app_dirs.compact.first
10
8
 
11
- desc "Generate documentation for the plugin."
12
- Rake::RDocTask.new do |rdoc|
13
- rdoc.rdoc_dir = "rdoc"
14
- rdoc.title = "RedmineExtensions #{RedmineExtensions::VERSION}"
15
- rdoc.rdoc_files.include("README*")
16
- rdoc.rdoc_files.include("lib/**/*.rb")
17
- end
18
- rescue LoadError
19
- puts 'RDocTask is not supported for this platform'
9
+ if !File.directory?(dir)
10
+ abort("Directory '#{dir}' does not exists")
20
11
  end
21
12
 
22
- APP_RAKEFILE = File.expand_path("../spec/redmine/Rakefile", __FILE__)
13
+ APP_RAKEFILE = File.expand_path(File.join(dir, 'Rakefile'), __dir__)
23
14
  load 'rails/tasks/engine.rake'
24
-
25
- # load 'rails/tasks/statistics.rake'
15
+ load 'rails/tasks/statistics.rake'
26
16
 
27
17
  Bundler::GemHelper.install_tasks
28
18
 
29
- Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
30
-
31
- require 'rspec/core'
32
- require 'rspec/core/rake_task'
33
-
34
- desc "Run all specs in spec directory (excluding plugin specs)"
35
-
36
- task :generate_test_plugin do
37
- require RedmineExtensions::Engine.root.join('spec', 'support', 'plugin_generator').to_s
38
- PluginGenerator.generate_test_plugin!
39
- end
40
- RSpec::Core::RakeTask.new(spec: [:generate_test_plugin, 'app:redmine:plugins:migrate']) do |spec|
41
- spec.pattern = 'spec/**/*_spec.rb'
42
- spec.exclude_pattern = 'spec/redmine/**/*_spec.rb'
19
+ namespace :redmine_extensions do
20
+ task :generate_test_plugin do
21
+ require_relative 'spec/init_rails'
22
+ require RedmineExtensions::Engine.root.join('spec', 'support', 'plugin_generator').to_s
23
+ PluginGenerator.generate_test_plugin!
24
+ end
43
25
  end
44
-
45
- # task :redmine_test do |rake|
46
- # Rake::Task['app:test'].invoke
47
- # end
48
-
49
- task :default => :spec
@@ -6,6 +6,8 @@ module RedmineExtensions
6
6
  argument :model_name, type: :string, required: true, banner: 'Post'
7
7
  argument :attributes, type: :array, required: true, banner: 'field[:type][:index] field[:type][:index]'
8
8
 
9
+ class_option :rys, type: :boolean, default: false, required: false, desc: "Use in case of RYS"
10
+
9
11
  class_option :associations, type: :array, required: false, banner: '--associations association_type[:association_name][:association_class]'
10
12
 
11
13
  class_option :project, type: :boolean, default: true, banner: '', :desc => 'make model depends on project'
@@ -25,12 +27,14 @@ module RedmineExtensions
25
27
  attr_reader :controller_class, :model_name_underscored, :model_name_pluralize_underscored
26
28
  attr_reader :db_columns
27
29
  attr_reader :associations
28
-
30
+ attr_reader :rys
29
31
  def initialize(*args)
30
32
  super
33
+ @rys = !!options["rys"]
31
34
  @plugin_name_underscored = plugin_name.underscore
32
35
  @plugin_pretty_name = @plugin_name_underscored.titleize
33
- @plugin_path = "plugins/#{@plugin_name_underscored}"
36
+
37
+ @plugin_path = rys ? "." : "plugins/#{@plugin_name_underscored}"
34
38
  @plugin_title = @plugin_name_underscored.camelize
35
39
 
36
40
  @model_name_underscored = model_name.underscore
@@ -49,8 +53,10 @@ module RedmineExtensions
49
53
  template 'edit.html.erb.erb', "#{plugin_path}/app/views/#{model_name_pluralize_underscored}/edit.html.erb"
50
54
  template 'edit.js.erb.erb', "#{plugin_path}/app/views/#{model_name_pluralize_underscored}/edit.js.erb"
51
55
 
52
- template 'controller_spec.rb.erb', "#{plugin_path}/test/spec/controllers/#{model_name_pluralize_underscored}_controller_spec.rb"
53
- template 'factories.rb.erb', "#{plugin_path}/test/factories/#{model_name_underscored}.rb"
56
+ tests_root = rys ? "./spec" : "#{plugin_path}/test"
57
+ template 'controller_spec.rb.erb', "#{tests_root + (!rys && "/spec" || "")}/controllers/#{model_name_pluralize_underscored}_controller_spec.rb"
58
+ template 'factories.rb.erb', "#{tests_root}/factories/#{model_name_underscored}.rb"
59
+ template 'spec/requests/%model_name_underscored%_spec.rb.tt', "#{tests_root}/requests/#{model_name_underscored}.rb"
54
60
 
55
61
  if File.exists?("#{plugin_path}/config/locales/en.yml")
56
62
  original_langfile = YAML.load_file("#{plugin_path}/config/locales/en.yml")
@@ -95,31 +101,32 @@ module RedmineExtensions
95
101
  if File.exists?("#{plugin_path}/extra/easy_patch/easy_extensions/helpers/entity_attribute_helper_patch.rb")
96
102
 
97
103
  inject_into_file "#{plugin_path}/extra/easy_patch/easy_extensions/helpers/entity_attribute_helper_patch.rb",
98
- "\n def format_html_#{model_name_underscored}_attribute(entity_class, attribute, unformatted_value, options={})" +
99
- "\n value = format_entity_attribute(entity_class, attribute, unformatted_value, options)" +
100
- "\n case attribute.name" +
101
- "\n when :name" +
102
- "\n link_to(value, #{model_name_underscored.singularize}_path(options[:entity].id))" +
103
- "\n else" +
104
- "\n h(value)" +
105
- "\n end" +
106
- "\n end" +
107
- "\n", after: "base.class_eval do"
104
+ "\n def format_html_#{model_name_underscored}_attribute(entity_class, attribute, unformatted_value, options={})" +
105
+ "\n value = format_entity_attribute(entity_class, attribute, unformatted_value, options)" +
106
+ "\n case attribute.name" +
107
+ "\n when :name" +
108
+ "\n link_to(value, #{model_name_underscored.singularize}_path(options[:entity].id))" +
109
+ "\n else" +
110
+ "\n h(value)" +
111
+ "\n end" +
112
+ "\n end" +
113
+ "\n", after: "base.class_eval do"
108
114
 
109
115
  end
110
116
  else
111
117
  template 'query.rb.erb', "#{plugin_path}/app/models/#{model_name_underscored}_query.rb"
112
118
  end
113
119
 
114
- if File.exists?("#{plugin_path}/config/routes.rb")
120
+ routes_file = "#{plugin_path}/config/routes.rb"
121
+ if File.exists?(routes_file)
115
122
  if project?
116
- append_to_file "#{plugin_path}/config/routes.rb" do
123
+ insert_into_file routes_file, before: (rys ? /end\z/ : /\z/) do
117
124
  "\nresources :projects do " +
118
125
  "\n resources :#{model_name_pluralize_underscored}" +
119
126
  "\nend\n"
120
127
  end
121
128
  end
122
- append_to_file "#{plugin_path}/config/routes.rb" do
129
+ insert_into_file routes_file, before: (rys ? /end\z/ : /\z/) do
123
130
  "\nresources :#{model_name_pluralize_underscored} do" +
124
131
  "\n collection do " +
125
132
  "\n get 'autocomplete'" +
@@ -166,10 +173,56 @@ module RedmineExtensions
166
173
  s << "\nend"
167
174
 
168
175
  append_to_file "#{plugin_path}/after_init.rb", s
176
+ elsif rys
177
+ s = ""
178
+ s << "\n Redmine::AccessControl.map do |map|"
179
+ s << "\n map.easy_category :#{model_name_pluralize_underscored} do |pmap|"
180
+ s << "\n pmap.permission :view_#{model_name_pluralize_underscored}, { #{model_name_pluralize_underscored}: [:index, :show, :autocomplete, :context_menu] }, read: true"
181
+ s << "\n pmap.permission :manage_#{model_name_pluralize_underscored}, { #{model_name_pluralize_underscored}: [:new, :create, :edit, :update, :destroy, :bulk_edit, :bulk_update] }"
182
+ s << "\n end "
183
+ s << "\n end\n"
184
+ append_to_file "./config/initializers/01_access_control.rb", s
185
+
186
+ s = ""
187
+ s << "\n Redmine::MenuManager.map :top_menu do |menu|"
188
+ s << "\n menu.push :#{model_name_pluralize_underscored}, { controller: '#{model_name_pluralize_underscored}', action: 'index', project_id: nil }, caption: :label_#{model_name_pluralize_underscored}"
189
+ s << "\n end\n"
190
+ if project?
191
+ s << "\n Redmine::MenuManager.map :project_menu do |menu|"
192
+ s << "\n menu.push :#{model_name_pluralize_underscored}, { controller: '#{model_name_pluralize_underscored}', action: 'index' }, param: :project_id, caption: :label_#{model_name_pluralize_underscored}"
193
+ s << "\n end\n"
194
+ end
195
+ append_to_file "./config/initializers/02_menu_manager.rb", s
196
+ s = ""
197
+ if acts_as_customizable?
198
+ s << "\n CustomFieldsHelper::CUSTOM_FIELDS_TABS << {name: '#{model_name}CustomField', partial: 'custom_fields/index', label: :label_#{model_name_pluralize_underscored}}\n"
199
+ end
200
+ if acts_as_searchable?
201
+ s << "\n Redmine::Search.map do |search|"
202
+ s << "\n search.register :#{model_name_pluralize_underscored}"
203
+ s << "\n end\n"
204
+ end
205
+ if acts_as_activity_provider?
206
+ s << "\n Redmine::Activity.map do |activity|"
207
+ s << "\n activity.register :#{model_name_pluralize_underscored}, {class_name: %w(#{model_name}), default: false}"
208
+ s << "\n end\n"
209
+ end
210
+ other_initializer = "./config/initializers/06_others.rb"
211
+ if File.exist?(other_initializer)
212
+ append_file other_initializer do
213
+ s
214
+ end
215
+ else
216
+ create_file other_initializer do
217
+ s
218
+ end
219
+ end
220
+
169
221
  end
170
222
 
171
223
 
172
224
  template 'show.api.rsb.erb', "#{plugin_path}/app/views/#{model_name_pluralize_underscored}/show.api.rsb"
225
+ template '_%model_name_underscored%.api.rsb.tt', "#{plugin_path}/app/views/#{model_name_pluralize_underscored}/_#{model_name_underscored}.api.rsb"
173
226
  template 'show.html.erb.erb', "#{plugin_path}/app/views/#{model_name_pluralize_underscored}/show.html.erb"
174
227
  template 'show.js.erb.erb', "#{plugin_path}/app/views/#{model_name_pluralize_underscored}/show.js.erb"
175
228
  end
@@ -239,15 +292,15 @@ module RedmineExtensions
239
292
  if attr_type == 'timestamp'
240
293
  @timestamp_exist = true
241
294
  else
242
- @db_columns[attr_name] = {type: attr_type || 'string', idx: attr_idx, null: true, safe: true, query_type: attr_type || 'string', lang_key: lang_key}
295
+ @db_columns[attr_name] = { type: attr_type || 'string', idx: attr_idx, null: true, safe: true, query_type: attr_type || 'string', lang_key: lang_key }
243
296
  end
244
297
  end
245
298
 
246
- @db_columns['project_id'] = {type: 'integer', idx: nil, null: false, safe: false, class: 'Project', list_class_name: 'name', query_type: 'list_optional', query_column_name: 'project', lang_key: "field_#{model_name_underscored}_project"} if project? && !@db_columns.key?('project_id')
247
- @db_columns['author_id'] = {type: 'integer', idx: nil, null: false, safe: true, class: 'User', list_class_name: 'name', query_type: 'list', query_column_name: 'author', lang_key: "field_#{model_name_underscored}_author"} if author? && !@db_columns.key?('author_id')
299
+ @db_columns['project_id'] = { type: 'integer', idx: nil, null: false, safe: false, class: 'Project', list_class_name: 'name', query_type: 'list_optional', query_column_name: 'project', lang_key: "field_#{model_name_underscored}_project" } if project? && !@db_columns.key?('project_id')
300
+ @db_columns['author_id'] = { type: 'integer', idx: nil, null: false, safe: true, class: 'User', list_class_name: 'name', query_type: 'list', query_column_name: 'author', lang_key: "field_#{model_name_underscored}_author" } if author? && !@db_columns.key?('author_id')
248
301
 
249
- @db_columns['created_at'] = {type: 'datetime', idx: nil, null: false, safe: false, query_type: 'date', lang_key: "field_#{model_name_underscored}_created_at"}
250
- @db_columns['updated_at'] = {type: 'datetime', idx: nil, null: false, safe: false, query_type: 'date', lang_key: "field_#{model_name_underscored}_updated_at"}
302
+ @db_columns['created_at'] = { type: 'datetime', idx: nil, null: false, safe: false, query_type: 'date', lang_key: "field_#{model_name_underscored}_created_at" }
303
+ @db_columns['updated_at'] = { type: 'datetime', idx: nil, null: false, safe: false, query_type: 'date', lang_key: "field_#{model_name_underscored}_updated_at" }
251
304
  end
252
305
 
253
306
  def prepare_associations
@@ -259,7 +312,7 @@ module RedmineExtensions
259
312
  assoc_type, assoc_name, assoc_class = assoc.split(':')
260
313
  next if assoc_type.blank? || assoc_name.blank?
261
314
 
262
- @associations[assoc_name] = {type: assoc_type, class: assoc_class}
315
+ @associations[assoc_name] = { type: assoc_type, class: assoc_class }
263
316
 
264
317
  assoc_model_class = assoc_class.presence || assoc_name.singularize.camelize
265
318
  assoc_model_filename = assoc_model_class.underscore
@@ -283,7 +336,7 @@ module RedmineExtensions
283
336
  end
284
337
  end
285
338
 
286
- @db_columns["#{assoc_model_class.underscore.singularize}_id"] = {type: 'integer', idx: true, lang_key: assoc_model_class.underscore, query_type: 'list_optional', null: true}
339
+ @db_columns["#{assoc_model_class.underscore.singularize}_id"] = { type: 'integer', idx: true, lang_key: assoc_model_class.underscore, query_type: 'list_optional', null: true }
287
340
  end
288
341
  end
289
342
  end
@@ -0,0 +1,18 @@
1
+ local_assigns[:api].<%= model_name_underscored %> do
2
+ local_assigns[:api].id <%= model_name_underscored %>.id
3
+ <%- db_columns.keys.each do |column_name| -%>
4
+ local_assigns[:api].<%= column_name %> <%= model_name_underscored %>.<%= column_name %>
5
+ <%- end -%>
6
+ <%- if acts_as_customizable? -%>
7
+ render_api_custom_values <%= model_name_underscored %>.visible_custom_field_values, local_assigns[:api]
8
+ <%- end -%>
9
+ <%- if acts_as_attachable? -%>
10
+ local_assigns[:api].array :attachments do
11
+ <%= model_name_underscored %>.attachments.each do |attachment|
12
+ render_api_attachment attachment, local_assigns[:api]
13
+ end
14
+ end if include_in_api_response?('attachments')
15
+ <%- end -%>
16
+
17
+ call_hook :helper_render_api_<%= model_name_underscored %>, { api: local_assigns[:api], <%= model_name_underscored %>: <%= model_name_underscored %> }
18
+ end
@@ -48,7 +48,7 @@ class <%= controller_class %>Controller < ApplicationController
48
48
  end
49
49
 
50
50
  def create
51
- @<%= model_name_underscored %> = <%= model_name %>.new
51
+ @<%= model_name_underscored %> = <%= model_name %>.new<%= "author: User.current" if author? %>
52
52
  <%- if project? -%>
53
53
  @<%= model_name_underscored %>.project = @project
54
54
  <%- end -%>
@@ -57,17 +57,15 @@ class <%= controller_class %>Controller < ApplicationController
57
57
  @<%= model_name_underscored %>.save_attachments(params[:attachments] || (params[:<%= model_name_underscored %>] && params[:<%= model_name_underscored %>][:uploads]))
58
58
  <%- end -%>
59
59
 
60
- if @<%= model_name_underscored %>.save
61
- respond_to do |format|
62
- format.html {
60
+ respond_to do |format|
61
+ if @<%= model_name_underscored %>.save
62
+ format.html do
63
63
  flash[:notice] = l(:notice_successful_create)
64
64
  redirect_back_or_default <%= model_name_underscored %>_path(@<%= model_name_underscored %>)
65
- }
65
+ end
66
66
  format.api { render action: 'show', status: :created, location: <%= model_name_underscored %>_url(@<%= model_name_underscored %>) }
67
67
  format.js { render template: 'common/close_modal' }
68
- end
69
- else
70
- respond_to do |format|
68
+ else
71
69
  format.html { render action: 'new' }
72
70
  format.api { render_validation_errors(@<%= model_name_underscored %>) }
73
71
  format.js { render action: 'new' }
@@ -90,17 +88,15 @@ class <%= controller_class %>Controller < ApplicationController
90
88
  @<%= model_name_underscored %>.save_attachments(params[:attachments] || (params[:<%= model_name_underscored %>] && params[:<%= model_name_underscored %>][:uploads]))
91
89
  <%- end -%>
92
90
 
93
- if @<%= model_name_underscored %>.save
94
- respond_to do |format|
95
- format.html {
91
+ respond_to do |format|
92
+ if @<%= model_name_underscored %>.save
93
+ format.html do
96
94
  flash[:notice] = l(:notice_successful_update)
97
95
  redirect_back_or_default <%= model_name_underscored %>_path(@<%= model_name_underscored %>)
98
- }
96
+ end
99
97
  format.api { render_api_ok }
100
98
  format.js { render template: 'common/close_modal' }
101
- end
102
- else
103
- respond_to do |format|
99
+ else
104
100
  format.html { render action: 'edit' }
105
101
  format.api { render_validation_errors(@<%= model_name_underscored %>) }
106
102
  format.js { render action: 'edit' }
@@ -109,15 +105,13 @@ class <%= controller_class %>Controller < ApplicationController
109
105
  end
110
106
 
111
107
  def destroy
112
- @<%= model_name_pluralize_underscored %>.each do |<%= model_name_underscored %>|
113
- <%= model_name_underscored %>.destroy
114
- end
108
+ @<%= model_name_pluralize_underscored %>.each(&:destroy)
115
109
 
116
110
  respond_to do |format|
117
- format.html {
111
+ format.html do
118
112
  flash[:notice] = l(:notice_successful_delete)
119
113
  redirect_back_or_default <%= model_name_pluralize_underscored %>_path
120
- }
114
+ end
121
115
  format.api { render_api_ok }
122
116
  end
123
117
  end
@@ -1,8 +1,9 @@
1
- require Rails.root.join('plugins', 'easyproject', 'easy_plugins', 'easy_extensions/test/spec/spec_helper')
2
-
3
- describe <%= controller_class %>Controller, logged: true do
1
+ <% unless rys %>
2
+ require "easy_extensions/spec_helper"
3
+ <% end %>
4
+ RSpec.describe <%= controller_class %>Controller, logged: true do
4
5
  let(:<%= model_name_underscored %>) { FactoryBot.create(:<%= model_name_underscored %>) }
5
- let(:<%= model_name_pluralize_underscored %>) { FactoryBot.create_list(:<%= model_name_underscored %>, 5) }
6
+ let(:<%= model_name_pluralize_underscored %>) { FactoryBot.create_list(:<%= model_name_underscored %>, 2) }
6
7
 
7
8
  before(:each) do
8
9
  role = Role.non_member
@@ -21,7 +22,7 @@ describe <%= controller_class %>Controller, logged: true do
21
22
  end
22
23
 
23
24
  it 'show' do
24
- get :show, {id: <%= model_name_underscored %>}
25
+ get :show, params: { id: <%= model_name_underscored %> }
25
26
  expect(response).to have_http_status(:success)
26
27
  expect(response).to render_template('<%= model_name_pluralize_underscored %>/show')
27
28
  end
@@ -33,45 +34,41 @@ describe <%= controller_class %>Controller, logged: true do
33
34
  end
34
35
 
35
36
  it 'create with invalid' do
36
- post :create, {<%= model_name_underscored %>: {}}
37
- expect(response).to have_http_status(:success)
38
- expect(assigns[:<%= model_name_underscored %>]).to be_a_new(<%= model_name %>)
37
+ post :create, params: { <%= model_name_underscored %>: { } }
39
38
  expect(response).to render_template('<%= model_name_pluralize_underscored %>/new')
39
+ expect(assigns[:<%= model_name_underscored %>]).to be_a_new(<%= model_name %>)
40
40
  end
41
41
 
42
42
  it 'create with valid' do
43
- post :create, {<%= model_name_underscored %>: FactoryBot.attributes_for(:<%= model_name_underscored %>)}
44
- expect(response).to have_http_status(:success)
45
- expect(assigns[:<%= model_name_underscored %>]).not_to be_a_new(<%= model_name %>)
43
+ post :create, params: { <%= model_name_underscored %>: FactoryBot.attributes_for(:<%= model_name_underscored %>) }
46
44
  expect(response).to redirect_to(<%= model_name_underscored %>_path(assigns[:<%= model_name_underscored %>]))
45
+ expect(assigns[:<%= model_name_underscored %>]).not_to be_a_new(<%= model_name %>)
47
46
  end
48
47
 
49
48
  it 'edit' do
50
- get :edit, {id: <%= model_name_underscored %>}
49
+ get :edit, params: { id: <%= model_name_underscored %> }
51
50
  expect(response).to have_http_status(:success)
52
51
  expect(response).to render_template('<%= model_name_pluralize_underscored %>/edit')
53
52
  end
54
53
 
55
54
  it 'update with invalid' do
56
- put :update, {id: <%= model_name_underscored %>, <%= model_name_underscored %>: {<%= safe_columns.first %>: ''}}
57
- expect(response).to have_http_status(:success)
58
- expect(assigns[:<%= model_name_underscored %>].valid?).to be false
55
+ put :update, params: { id: <%= model_name_underscored %>, <%= model_name_underscored %>: { <%= safe_columns.first[0] %>: '' } }
59
56
  expect(response).to render_template('<%= model_name_pluralize_underscored %>/edit')
57
+ expect(assigns[:<%= model_name_underscored %>].valid?).to be false
60
58
  end
61
59
 
62
60
  it 'update with valid' do
63
- put :update, {id: <%= model_name_underscored %>, <%= model_name_underscored %>: {<%= safe_columns.first %>: 'Tralalala'}}
64
- expect(response).to have_http_status(:success)
65
- expect(assigns[:<%= model_name_underscored %>].valid?).to be true
61
+ put :update, params: { id: <%= model_name_underscored %>, <%= model_name_underscored %>: { <%= safe_columns.first[0] %>: 'Tralalala' } }
66
62
  expect(response).to redirect_to(<%= model_name_underscored %>_path(assigns[:<%= model_name_underscored %>]))
63
+ expect(assigns[ :<%= model_name_underscored %>].valid?).to be true
67
64
  end
68
65
 
69
66
  it 'destroy' do
70
- <%= model_name_underscored %>
71
- <%= model_name_pluralize_underscored %>
67
+ <%= model_name_underscored %>
68
+ <%= model_name_pluralize_underscored %>
72
69
 
73
- expect(<%= model_name %>.count).to eq(6)
74
- expect {delete :destroy, {id: <%= model_name_underscored %>}}.to change(<%= model_name %>, :count).by(-1)
70
+ expect(<%= model_name %>.count).to eq(3)
71
+ expect { delete :destroy, params: { id: <%= model_name_underscored %> } }.to change(<%= model_name %>, :count).by(-1)
75
72
  expect(response).to redirect_to(<%= model_name_pluralize_underscored %>_path)
76
73
  expect(response).to redirect_to(<%= model_name_pluralize_underscored %>_path)
77
74
  end
@@ -18,17 +18,15 @@ class <%= model_name %>Query < EasyQuery
18
18
  end
19
19
 
20
20
  def initialize_available_columns
21
- return @available_columns if @available_columns
22
21
  group = l("label_filter_group_#{self.class.name.underscore}")
23
22
 
24
23
  <%- db_columns.each do |column_name, column_options| -%>
25
24
  add_available_column '<%= column_options[:query_column_name] || column_name %>', caption: <%= model_name %>.human_attribute_name(:<%= column_name %>), title: <%= model_name %>.human_attribute_name(:<%= column_name %>), group: group
26
25
  <%- end -%>
27
26
  <%- if acts_as_customizable? -%>
28
- @available_columns += <%= model_name %>CustomField.visible.collect { |cf| EasyQueryCustomFieldColumn.new(cf, :group => l(:label_filter_group_custom_fields)) }
27
+ add_available_columns <%= model_name %>CustomField.sorted.visible.collect { |cf| EasyQueryCustomFieldColumn.new(cf, group: l(:label_filter_group_custom_fields))}
29
28
  <%- end -%>
30
29
 
31
- @available_columns
32
30
  end
33
31
 
34
32
  def default_list_columns