redmine_extensions 0.4.4 → 0.6.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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +51 -0
  3. data/app/assets/javascripts/redmine_extensions/redmine_extensions.js +1 -0
  4. data/app/helpers/redmine_extensions/application_helper.rb +27 -36
  5. data/app/views/common/_collapsible_module_layout.html.erb +20 -2
  6. data/app/views/easy_front_end/_easy_front_end.html.erb +1 -19
  7. data/db/migrate/20150705172511_create_easy_settings.rb +1 -1
  8. data/db/migrate/20160519161300_create_entity_assignments.rb +1 -1
  9. data/db/migrate/20190206121100_remove_foreign_key_from_easy_settings.rb +1 -1
  10. data/lib/generators/redmine_extensions/entity/templates/_sidebar.html.erb.erb +1 -1
  11. data/lib/generators/redmine_extensions/entity/templates/show.html.erb.erb +1 -1
  12. data/lib/redmine_extensions/engine.rb +9 -23
  13. data/lib/redmine_extensions/hooks.rb +1 -9
  14. data/lib/redmine_extensions/migration.rb +1 -1
  15. data/lib/redmine_extensions/patch_manager.rb +43 -43
  16. data/lib/redmine_extensions/version.rb +3 -1
  17. metadata +11 -35
  18. data/app/assets/javascripts/redmine_extensions/jasmine_lib/boot.js +0 -153
  19. data/app/assets/javascripts/redmine_extensions/jasmine_lib/jasmine_helper.js +0 -292
  20. data/app/assets/javascripts/redmine_extensions/jasmine_lib/jasmine_lib.js +0 -3
  21. data/app/assets/javascripts/redmine_extensions/jasmine_tests/extend.js +0 -32
  22. data/app/assets/javascripts/redmine_extensions/jasmine_tests/jasmine_tests.js +0 -1
  23. data/app/assets/javascripts/redmine_extensions/jasmine_tests/modules.js +0 -164
  24. data/app/assets/stylesheets/redmine_extensions/jasmine.css +0 -35
  25. data/app/views/redmine_extensions/_development_mode.html.erb +0 -33
  26. data/app/views/redmine_extensions/_jasmine.html.erb +0 -7
  27. data/lib/redmine_extensions/html_formatting/formatter.rb +0 -86
  28. data/lib/redmine_extensions/html_formatting/helper.rb +0 -73
  29. data/lib/redmine_extensions/html_formatting/internals.rb +0 -23
  30. data/lib/redmine_extensions/html_formatting.rb +0 -3
  31. data/spec/features/autocomplete_spec.rb +0 -17
  32. data/spec/features/jasmine_spec.rb +0 -9
  33. data/spec/support/plugin_generator.rb +0 -111
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c323b631909b06ccb6639635fe5a455377bb3bc52d32697219ee719af6703cb8
4
- data.tar.gz: 95b3915e35e038289454287eea645278fd50aa4a082c1d8e73fd58444aabc9e9
3
+ metadata.gz: 83a259a0df79f133ef83c0d83a97867065e72ba53718b6021f4ea4f199350300
4
+ data.tar.gz: 498ecf0ad2f97992ecb43b5e9f08af3e8d7dd6e73260b1bf6539e1cce8c7f21b
5
5
  SHA512:
6
- metadata.gz: 72ce72eaddf0dfb74b725161d5f10be15f14811bd0c10d7c393e4cb7d94bfe9e5270e2a04e51a0c26a72868ec6ffc69b014d2fe270423d4ba5a4b2a2dc5e43a4
7
- data.tar.gz: 7f3472c8c33946ebcf5a174528bc7413b1e5a1c118f369a345fdbd69a74ea4b5840da6a22aa663948758d7d8e4cdb76ea7f5b24ae0b336bb83b62ad3cd417df8
6
+ metadata.gz: fadd35b5ab3c6ebfd7254b760ddbf17cd56a39fc3de03a673d15e7e2dda50ae83c4469a1e5f4d6264e87733284097d619c2181724021b8ebadf0f9d591f98f28
7
+ data.tar.gz: e7a1aaca2e52ec55f08178b5526aae5f82d155582683359c4f853ee7d0c3d13c79603949371cc333310d14d0af939d35d990124093ecfdef3dfeb478568dd1ee
data/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # Redmine Extensions
2
+
3
+ [![pipeline status](https://git.easy.cz/redmine/redmine_extensions_gem/badges/master/pipeline.svg)](https://git.easy.cz/redmine/redmine_extensions_gem/-/commits/master)
4
+
5
+ [![Latest Release](https://git.easy.cz/redmine/redmine_extensions_gem/-/badges/release.svg)](https://git.easy.cz/redmine/redmine_extensions_gem/-/releases)
6
+
7
+ [![Gem Version](https://badge.fury.io/rb/redmine_extensions.svg)](http://badge.fury.io/rb/redmine_extensions)
8
+
9
+
10
+ ⚠️ This gem currently not working with Redmine at all.
11
+
12
+ ---
13
+ This gem provides an extended funcionality for a Redmine project
14
+
15
+ ## Provided functionalities
16
+ * EasySetting - per project settings
17
+ * Redmine Plugin Generator
18
+ * Redmine Entity Generator
19
+
20
+ ## Redmine Plugin Generator
21
+
22
+ Description:
23
+ The plugin generator creates stubs for a new Redmine plugin.
24
+ Plugin is prepared for use in Redmine and Easy Redmine as well.
25
+ You can use --customer flag to generate a special plugin if you can make just a few changes to code. Backup this plugin before Redmine or Easy Redmine upgrade and move back for keep you changes.
26
+
27
+ Example:
28
+ rails g redmine_extensions:plugin NameOfNewPlugin
29
+ create plugins/name_of_new_plugin/app/controllers
30
+ ...
31
+
32
+ Help:
33
+ rails g redmine_extensions:plugin --help
34
+
35
+
36
+ ## Redmine Entity Generator
37
+
38
+ Description:
39
+ The entity generator creates new entity for Redmine plugin.
40
+ New entity is prepared for use in Redmine and Easy Redmine as well.
41
+
42
+ Example:
43
+ rails g redmine_extensions:entity NameOfNewPlugin Post
44
+ create plugins/name_of_new_plugin/app/controllers
45
+ ...
46
+
47
+ Help:
48
+ rails g redmine_extensions:entity --help
49
+
50
+ ## Licence
51
+ This is published under GPL-2 license.
@@ -83,6 +83,7 @@ EasyGem.schedule.require(function () {
83
83
  render_item: function (ul, item) {
84
84
  return $("<li>")
85
85
  .data("item.autocomplete", item)
86
+ .attr('item_id', item.id)
86
87
  .text(item.label)
87
88
  .appendTo(ul);
88
89
  },
@@ -14,7 +14,7 @@ module RedmineExtensions
14
14
 
15
15
  # -------= Rendering and presenting methods =-------
16
16
 
17
- def present(model, options={}, &block)
17
+ def present(model, options = {}, &block)
18
18
  if model.is_a?(RedmineExtensions::BasePresenter)
19
19
  presenter = model.update_options(options.merge(view_context: self))
20
20
  else
@@ -31,11 +31,12 @@ module RedmineExtensions
31
31
 
32
32
  # hide elements for issues and users
33
33
  def detect_hide_elements(uniq_id, user = nil, default = true)
34
- return ''.html_safe if uniq_id.blank?
35
- return 'style="display:none"'.html_safe if !toggle_button_expanded?(uniq_id, user, default)
34
+ return if uniq_id.blank?
35
+
36
+ 'style="display:none"'.html_safe if !toggle_button_expanded?(uniq_id, user, default)
36
37
  end
37
38
 
38
- def url_to_entity(entity, options={})
39
+ def url_to_entity(entity, options = {})
39
40
  m = "url_to_#{entity.class.name.underscore}".to_sym
40
41
  if respond_to?(m)
41
42
  send(m, entity, options)
@@ -87,7 +88,7 @@ module RedmineExtensions
87
88
  render(:partial => 'easy_entity_assignments/assignments_container', :locals => {
88
89
  :entity => entity,
89
90
  :query => query, :project => project,
90
- :entities => entities, :entities_count => entities_count, :options => options})
91
+ :entities => entities, :entities_count => entities_count, :options => options })
91
92
  end
92
93
 
93
94
  def entity_css_icon(entity_or_entity_class)
@@ -116,7 +117,7 @@ module RedmineExtensions
116
117
  else
117
118
  content_or_options_with_block
118
119
  end
119
- html_options.reverse_merge!({type:'application/javascript'})
120
+ html_options.reverse_merge!({ type: 'application/javascript' })
120
121
  priority = html_options.delete(:priority) || 0
121
122
  content = " EasyGem.schedule.late(function(){#{content} }, #{priority});"
122
123
 
@@ -139,27 +140,16 @@ module RedmineExtensions
139
140
  javascript_tag content.html_safe, html_options
140
141
  end
141
142
 
142
- def get_jasmine_tags
143
- tags = params[:jasmine]
144
- return [] if tags == 'true'
145
- if tags.is_a?(String)
146
- [tags.to_sym]
147
- elsif tags.is_a?(Array)
148
- tags.map &:to_sym
149
- else
150
- []
151
- end
152
- end
153
-
154
143
  def easy_avatar_url(user = nil)
144
+ return avatar_url(user) if respond_to?(:avatar_url)
145
+
155
146
  user ||= User.current
156
- result = if Setting.gravatar_enabled?
157
- options = {:ssl => (request && request.ssl?), :default => Setting.gravatar_default}
158
- email = nil
159
- if user.respond_to?(:mail)
160
- email = user.mail
147
+ if Setting.gravatar_enabled?
148
+ options = { ssl: (request&.ssl?), default: Setting.gravatar_default }
149
+ email = if user.respond_to?(:mail)
150
+ user.mail
161
151
  elsif user.to_s =~ %r{<(.+?)>}
162
- email = $1
152
+ $1
163
153
  end
164
154
  email ? gravatar_url(email, options) : ''
165
155
  elsif user.easy_avatar_url.present?
@@ -167,7 +157,6 @@ module RedmineExtensions
167
157
  elsif user.respond_to?(:easy_avatar) && (av = user.easy_avatar).present? && (img_url = av.image.url(:small))
168
158
  get_easy_absolute_uri_for(img_url).to_s
169
159
  end
170
- result
171
160
  end
172
161
 
173
162
  # ==== Options
@@ -180,13 +169,14 @@ module RedmineExtensions
180
169
  # * <tt>remember: false</tt> - This disable remember function of toggle container
181
170
  # ** Aliases for this options are: ajax_call
182
171
  #
183
- def render_module_easy_box(id, heading, options = {}, &block) # with fallback to old
172
+ def render_module_easy_box(id, heading, options = {}, &block)
173
+ # with fallback to old
184
174
  options[:toggle] = true unless options.key?(:toggle)
185
175
  options[:remember] = options.delete(:ajax_call) if options.key?(:ajax_call)
186
176
  options[:collapsible] = !options.delete(:no_expander) if options.key?(:no_expander)
187
177
 
188
178
  renderer = EasyBoxRenderer.new(self, id, heading, options)
189
- renderer.content = capture {yield renderer}
179
+ renderer.content = capture { yield renderer }
190
180
 
191
181
  renderer.render
192
182
  end
@@ -247,8 +237,9 @@ module RedmineExtensions
247
237
  end
248
238
 
249
239
  def render
250
- view.render({partial: 'common/collapsible_module_layout', locals: {renderer: self, content: content}} )
240
+ view.render({ partial: 'common/collapsible_module_layout', locals: { renderer: self, content: content } })
251
241
  end
242
+
252
243
  private
253
244
 
254
245
  def css_classes
@@ -257,9 +248,9 @@ module RedmineExtensions
257
248
  @css_classes = css_class
258
249
  else
259
250
  @css_classes = {
260
- container: css_class,
261
- heading: css_class,
262
- content: css_class
251
+ container: css_class,
252
+ heading: css_class,
253
+ content: css_class
263
254
  }
264
255
  end
265
256
  end
@@ -287,7 +278,7 @@ module RedmineExtensions
287
278
  # * +rootElement+ - Has sence only if jsonpath is used for available values. It tells if the json response has values wrapped under root element.
288
279
  # For response like <tt>{projects: [[<name>, <id>], [<name2>, <id2>]]}</tt> user option <tt>rootElement: 'projects'</tt>
289
280
  def autocomplete_field_tag(name, jsonpath_or_array, selected_values, options = {})
290
- options.reverse_merge!({select_first_value: false, load_immediately: false, preload: true, multiple: true, combo: false})
281
+ options.reverse_merge!(select_first_value: false, load_immediately: false, preload: true, multiple: true, combo: false)
291
282
  options[:id] ||= sanitize_to_id(name)
292
283
 
293
284
  selected_values ||= []
@@ -298,9 +289,9 @@ module RedmineExtensions
298
289
  source = "'#{jsonpath_or_array}'"
299
290
  end
300
291
 
301
- content_tag(:span, :class => 'easy-multiselect-tag-container') do
302
- search_field_tag('', '', (options[:html_options] || {}).merge(id: options[:id])) +
303
- late_javascript_tag("$('##{options[:id]}').easymultiselect({multiple: #{options[:multiple]}, rootElement: #{options[:rootElement].to_json}, inputName: '#{name}', preload: #{options[:preload]}, combo: #{options[:combo]}, source: #{source}, selected: #{selected_values.to_json}, select_first_value: #{options[:select_first_value]}, load_immediately: #{options[:load_immediately]}, autocomplete_options: #{(options[:jquery_auto_complete_options]||{}).to_json} });")
292
+ content_tag(:span, class: 'easy-multiselect-tag-container', data: { cy: "container_old_autocomplete--#{name}" }) do
293
+ search_field_tag('', '', (options[:html_options] || {}).merge(id: options[:id], data: { cy: "search_old_autocomplete--#{name}" })) +
294
+ late_javascript_tag("$('##{options[:id]}').easymultiselect({multiple: #{options[:multiple]}, rootElement: #{options[:rootElement].to_json}, inputName: '#{name}', preload: #{options[:preload]}, combo: #{options[:combo]}, source: #{source}, selected: #{selected_values.to_json}, select_first_value: #{options[:select_first_value]}, load_immediately: #{options[:load_immediately]}, autocomplete_options: #{(options[:jquery_auto_complete_options] || {}).to_json} });")
304
295
  end
305
296
  end
306
297
 
@@ -323,7 +314,7 @@ module RedmineExtensions
323
314
  # <input type="hidden" name="issue[tag_ids][]" value="#{@issue.tag_ids.second}" />
324
315
  # ...(wraping service tags end)
325
316
  # </span>
326
- def autocomplete_field(object_name, method, choices, options={}, html_options={})
317
+ def autocomplete_field(object_name, method, choices, options = {}, html_options = {})
327
318
  Tags::AutocompleteField.new(object_name, method, self, choices, options, html_options).render
328
319
  end
329
320
 
@@ -1,8 +1,26 @@
1
1
  <div class="module box <%= renderer.container_class %>"<%=raw renderer.saving_state_enabled? && %Q{ data-toggle="#{renderer.id}"} || nil %>>
2
2
  <%= content_tag(:div, class: 'module-heading ' + renderer.heading_class, onclick: (renderer.collapsible? && 'EasyToggler.toggle(this.nextElementSibling, event)' || nil)) do %>
3
- <%= content_tag(:span, ' ', class: 'expander module-toggler') if renderer.collapsible? %>
4
3
  <%= content_tag(renderer.heading_tag, renderer.heading, class: renderer.icon) %>
5
- <%= content_tag(:span, renderer.heading_links, class: 'module-heading-links') if renderer.heading_links.presence %>
4
+ <% if renderer.heading_links.presence %>
5
+ <div class="module-heading-links">
6
+ <a class="module-heading-links__control icon-more-horiz control--<%= renderer.id %>" title="<%= l(:button_heading_links) %>" aria-label="<%= l(:button_heading_links) %>" role="button"></a>
7
+ <ul class="module-heading-links__tooltip tooltip tooltip--<%= renderer.id %>">
8
+ <%= renderer.heading_links %>
9
+ <% if renderer.collapsible? -%>
10
+ <li><span href="#" class="icon-chevron-up module__expander" data-cy="expander__toggle--module" title="Expander" aria-label="Expander" role="button">&nbsp;</span></li>
11
+ <% end -%>
12
+ </ul>
13
+ <script>
14
+ EASY.schedule.require(function(){
15
+ $('.control--<%= renderer.id %>').toggleable({
16
+ observer: EASY.defaultClickObserver,
17
+ content: $('.tooltip--<%= renderer.id %>')
18
+ })},function () {
19
+ return EASY.defaultClickObserver;
20
+ })
21
+ </script>
22
+ </div>
23
+ <% end -%>
6
24
  <% end if renderer.heading.present? %>
7
25
  <div class="module-content" id="<%= renderer.id %>"<%=raw renderer.collapsed? && %q{ style="display:none"} || nil %>>
8
26
  <%= content -%>
@@ -1,22 +1,4 @@
1
1
  <% content_for :header_tags do %>
2
- <%=
3
- if params['combine_by_pipeline'].nil?
4
- if Rails.env.development? && ENV['DART'] == '1'
5
- javascript_include_tag('dart/localhost', plugin: plugin, defer: true)
6
- else
7
- javascript_include_tag("#{plugin}.dart", defer: true)
8
- end
9
- else
10
- if params['combine_by_pipeline'] == 'false'
11
- #javascript_include_tag('dart/debug', plugin: plugin, defer: true)
12
- if ENV['DART'] == '1'
13
- javascript_include_tag('dart/localhost', plugin: plugin, defer: true)
14
- end
15
- else
16
- javascript_include_tag("#{plugin}.dart", defer: true)
17
- end
18
- end
19
- %>
20
2
 
21
3
  <%
22
4
  standard_lang_files = [
@@ -87,6 +69,6 @@
87
69
 
88
70
  %>
89
71
  <script>
90
- window.frontEndCommons = "<%= escape_javascript(front_end_commons.to_json.html_safe) %>";
72
+ window.frontEndCommons = "<%= j(front_end_commons.to_json.html_safe) %>";
91
73
  </script>
92
74
  <% end %>
@@ -1,4 +1,4 @@
1
- class CreateEasySettings < RedmineExtensions::Migration
1
+ class CreateEasySettings < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  if table_exists?(:easy_settings)
4
4
  add_column(:easy_settings, :type, :string, null: true) unless column_exists?(:easy_settings, :type)
@@ -1,4 +1,4 @@
1
- class CreateEntityAssignments < RedmineExtensions::Migration
1
+ class CreateEntityAssignments < ActiveRecord::Migration[4.2]
2
2
  def self.up
3
3
  unless table_exists?(:easy_entity_assignments)
4
4
  create_table :easy_entity_assignments do |t|
@@ -1,4 +1,4 @@
1
- class RemoveForeignKeyFromEasySettings < RedmineExtensions::Migration
1
+ class RemoveForeignKeyFromEasySettings < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  begin
4
4
  remove_foreign_key :easy_settings, :projects
@@ -2,7 +2,7 @@
2
2
  <%% if @<%= model_name_underscored %> && !@<%= model_name_underscored %>.new_record? %>
3
3
  <%%= content_tag(:li, link_to(l(:button_edit), edit_polymorphic_path([@project, @<%= model_name_underscored %>]), title: l(:button_edit), class: 'icon icon-edit button')) %>
4
4
  <%% end %>
5
- <%% unless @<%= model_name_underscored %> %>
5
+ <%% if @<%= model_name_underscored %>.nil? %>
6
6
  <%%= content_tag(:li, link_to(l(:button_<%= model_name_underscored %>_new), new_polymorphic_path([@project, :<%= model_name_underscored %>]), title: l(:title_<%= model_name_underscored %>_new), class: 'icon icon-add button button-positive')) %>
7
7
  <%% end %>
8
8
  <%%= content_tag(:li, link_to(l(:label_<%= model_name_pluralize_underscored %>), polymorphic_path([@project, :<%= model_name_pluralize_underscored %>], set_filter: '1'), title: l(:label_<%= model_name_pluralize_underscored %>), class: 'icon icon-folder button')) %>
@@ -24,7 +24,7 @@
24
24
  <hr />
25
25
  <%%= render partial: 'redmine_extensions/custom_field_rows', locals: { custom_field_values: @<%= model_name_underscored %>.visible_custom_field_values } %>
26
26
  <%- end -%>
27
- <%%= call_hook(:view_<%= model_name_pluralize_underscored %>_show_details_bottom, :<%= model_name_underscored%>: @<%= model_name_underscored %>) %>
27
+ <%%= call_hook(:view_<%= model_name_pluralize_underscored %>_show_details_bottom, <%= model_name_underscored%>: @<%= model_name_underscored %>) %>
28
28
  </table>
29
29
  <%- if description_column? -%>
30
30
  <%% if !@<%= model_name_underscored %>.<%= description_column %>.blank? %>
@@ -8,10 +8,9 @@ require_relative './query_output'
8
8
 
9
9
  module RedmineExtensions
10
10
  class Engine < ::Rails::Engine
11
-
12
11
  config.generators do |g|
13
- g.test_framework :rspec, :fixture => false
14
- g.fixture_replacement :factory_girl, :dir => 'spec/factories'
12
+ g.test_framework :rspec, fixture: false
13
+ g.fixture_replacement :factory_girl, dir: 'spec/factories'
15
14
  g.assets false
16
15
  g.helper false
17
16
  end
@@ -23,14 +22,10 @@ module RedmineExtensions
23
22
  if config.respond_to?(:assets)
24
23
  config.assets.precompile << 'redmine_extensions/applications.js'
25
24
  config.assets.precompile << 'redmine_extensions/blocking.js'
26
- unless Rails.env.production?
27
- config.assets.precompile << 'redmine_extensions/jasmine_lib/jasmine_lib.js'
28
- config.assets.precompile << 'redmine_extensions/jasmine.css'
29
- end
30
25
  end
31
26
  end
32
27
 
33
- #config.to_prepare goes after Reloader.to_prepare
28
+ # config.to_prepare goes after Reloader.to_prepare
34
29
  RedmineExtensions::Reloader.to_prepare do
35
30
  RedmineExtensions::QueryOutput.register_output RedmineExtensions::QueryOutputs::ListOutput
36
31
  RedmineExtensions::QueryOutput.register_output RedmineExtensions::QueryOutputs::TilesOutput
@@ -39,7 +34,7 @@ module RedmineExtensions
39
34
  ApplicationController.include RedmineExtensions::RenderingHelper
40
35
  end
41
36
 
42
- initializer 'redmine_extensions.initialize' do |app|
37
+ initializer 'redmine_extensions.initialize' do |_app|
43
38
  ActionDispatch::Routing::RouteSet::Generator.prepend RedmineExtensions::RailsPatches::RouteSetGeneratorPatch
44
39
  end
45
40
 
@@ -52,17 +47,15 @@ module RedmineExtensions
52
47
  if true
53
48
  js_dir = app.root.join('public', 'javascripts', 'redmine_extensions')
54
49
  FileUtils.mkdir(js_dir) unless File.directory?(js_dir)
55
- Dir.glob( root.join('app', 'assets', 'javascripts', 'redmine_extensions', '*.js') ) do |js_file|
56
- begin
57
- FileUtils.cp(js_file, app.root.join('public', 'javascripts', 'redmine_extensions'))
58
- rescue
59
- end
50
+ Dir.glob(root.join('app', 'assets', 'javascripts', 'redmine_extensions', '*.js')) do |js_file|
51
+ FileUtils.cp(js_file, app.root.join('public', 'javascripts', 'redmine_extensions'))
52
+ rescue StandardError
60
53
  end
61
54
  end
62
55
  end
63
56
 
64
57
  # include helpers
65
- initializer 'redmine_extensions.rails_patching', before: :load_config_initializers do |app|
58
+ initializer 'redmine_extensions.rails_patching', before: :load_config_initializers do |_app|
66
59
  ActiveSupport.on_load(Rails::VERSION::MAJOR >= 5 ? :action_controller_base : :action_controller) do
67
60
  helper RedmineExtensions::ApplicationHelper
68
61
  # helper RedmineExtensions::EasyQueryHelper
@@ -78,17 +71,10 @@ module RedmineExtensions
78
71
  initializer 'redmine_extensions.initialize_easy_plugins', after: :load_config_initializers do
79
72
  require_relative './hooks'
80
73
 
81
- unless Redmine::Plugin.installed?(:easy_extensions)
82
- ActiveSupport.run_load_hooks(:easyproject, self)
83
- end
74
+ ActiveSupport.run_load_hooks(:easyproject, self) unless Redmine::Plugin.installed?(:easy_extensions)
84
75
 
85
76
  require_relative './easy_entity_formatters/easy_entity_formatter'
86
77
  end
87
78
 
88
- # initializer :add_html_formatting do |app|
89
- # require_relative "./html_formatting"
90
- # Redmine::WikiFormatting.register(:HTML, RedmineExtensions::HTMLFormatting::Formatter, RedmineExtensions::HTMLFormatting::Helper)
91
- # end
92
-
93
79
  end
94
80
  end
@@ -1,10 +1,6 @@
1
1
  module RedmineExtensions
2
2
  class Hooks < Redmine::Hook::ViewListener
3
3
 
4
- if Rails.env.development?
5
- render_on :view_layouts_base_body_bottom, partial: 'redmine_extensions/development_mode'
6
- end
7
-
8
4
  if defined?(EasyExtensions)
9
5
  if EasyExtensions.try(:deferred_js)
10
6
 
@@ -23,9 +19,6 @@ module RedmineExtensions
23
19
  context[:template].require_asset('redmine_extensions/application')
24
20
  end
25
21
  end
26
- if Rails.env.development? || Rails.env.test?
27
- render_on :view_layouts_base_html_head, partial: 'redmine_extensions/jasmine'
28
- end
29
22
  else
30
23
  ### JAVASCRIPTS IN REDMINE ###
31
24
  def view_layouts_base_html_head(context = {})
@@ -42,8 +35,7 @@ module RedmineExtensions
42
35
  javascript_include_tag('redmine_extensions/easy_togglers') +
43
36
  javascript_include_tag('redmine_extensions/jquery.entityarray') +
44
37
  javascript_include_tag('redmine_extensions/render_polyfill') +
45
- javascript_include_tag('redmine_extensions/redmine_extensions') +
46
- (context[:controller].send(:render_to_string, partial: 'redmine_extensions/jasmine') if Rails.env.development? || Rails.env.test?)
38
+ javascript_include_tag('redmine_extensions/redmine_extensions')
47
39
  end
48
40
  end
49
41
 
@@ -6,4 +6,4 @@ module RedmineExtensions
6
6
  class Migration < ActiveRecord::Migration
7
7
  end
8
8
  end
9
- end
9
+ end
@@ -47,14 +47,14 @@ module RedmineExtensions
47
47
  # => :after => 'Project'
48
48
  # => :last
49
49
  # => :if => Proc.new{ Object.const_defined?(:EasyBudgetSheetQuery) }
50
- def self.register_patch(original_klasses_to_patch, patching_module, options={})
50
+ def self.register_patch(original_klasses_to_patch, patching_module, options = {})
51
51
  return if @@reloading_code
52
52
 
53
53
  options ||= {}
54
54
 
55
55
  begin
56
56
  const = patching_module.constantize
57
- @@patches_locations[patching_module] = const.methods(false).map{|m| const.method(m) }.first.source_location.first
57
+ @@patches_locations[patching_module] = const.methods(false).map { |m| const.method(m) }.first.source_location.first
58
58
  rescue
59
59
  # [0] is register_*_patch
60
60
  from_location = caller_locations(2..2).first
@@ -71,7 +71,7 @@ module RedmineExtensions
71
71
  raise ArgumentError, 'EasyPatchManager->register_patch: The \'original_klass_to_patch\' have to be a string or array of strings!'
72
72
  end
73
73
 
74
- raise ArgumentError, "EasyPatchManager->register_patch: The \'patching_module\' (#{patching_module}) already exists!" if EasyPatch.all_patching_modules.include?( patching_module )
74
+ raise ArgumentError, "EasyPatchManager->register_patch: The \'patching_module\' (#{patching_module}) already exists!" if EasyPatch.all_patching_modules.include?(patching_module)
75
75
 
76
76
  if options[:section]
77
77
  section = options.delete(:section).to_sym
@@ -81,47 +81,47 @@ module RedmineExtensions
81
81
  raise ArgumentError, "EasyPatchManager->register_patch: The section (#{section}) must be one of x#{@@registered_patches.keys.join(', ')}x " unless @@registered_patches.key?(section)
82
82
 
83
83
  original_klasses_to_patch.each do |original_klass_to_patch|
84
- pcollection = @@registered_patches[section].move_and_get_or_insert( original_klass_to_patch, options )
84
+ pcollection = @@registered_patches[section].move_and_get_or_insert(original_klass_to_patch, options)
85
85
  pcollection << EasyPatch.new(original_klass_to_patch, patching_module, options)
86
86
  end
87
87
  end
88
- private_class_method :register_patch
89
88
 
89
+ private_class_method :register_patch
90
90
 
91
- def self.register_ruby_patch(original_klass_to_patch, patching_module, options={})
92
- register_patch(original_klass_to_patch, patching_module, {:section => :ruby}.merge(options))
91
+ def self.register_ruby_patch(original_klass_to_patch, patching_module, options = {})
92
+ register_patch(original_klass_to_patch, patching_module, { section: :ruby }.merge(options))
93
93
  end
94
94
 
95
- def self.register_rails_patch(original_klass_to_patch, patching_module, options={})
96
- register_patch(original_klass_to_patch, patching_module, {:section => :rails}.merge(options))
95
+ def self.register_rails_patch(original_klass_to_patch, patching_module, options = {})
96
+ register_patch(original_klass_to_patch, patching_module, { section: :rails }.merge(options))
97
97
  end
98
98
 
99
- def self.register_redmine_plugin_patch(original_klass_to_patch, patching_module, options={})
100
- register_patch(original_klass_to_patch, patching_module, {:section => :redmine_plugins}.merge(options))
99
+ def self.register_redmine_plugin_patch(original_klass_to_patch, patching_module, options = {})
100
+ register_patch(original_klass_to_patch, patching_module, { :section => :redmine_plugins }.merge(options))
101
101
  end
102
102
 
103
- def self.register_other_patch(original_klass_to_patch, patching_module, options={})
104
- register_patch(original_klass_to_patch, patching_module, {:section => :others}.merge(options))
103
+ def self.register_other_patch(original_klass_to_patch, patching_module, options = {})
104
+ register_patch(original_klass_to_patch, patching_module, { :section => :others }.merge(options))
105
105
  end
106
106
 
107
- def self.register_concern_patch(original_klass_to_patch, patching_module, options={})
108
- register_patch(original_klass_to_patch, patching_module, {:section => :concerns}.merge(options))
107
+ def self.register_concern_patch(original_klass_to_patch, patching_module, options = {})
108
+ register_patch(original_klass_to_patch, patching_module, { :section => :concerns }.merge(options))
109
109
  end
110
110
 
111
- def self.register_controller_patch(original_klass_to_patch, patching_module, options={})
112
- register_patch(original_klass_to_patch, patching_module, {:section => :controllers}.merge(options))
111
+ def self.register_controller_patch(original_klass_to_patch, patching_module, options = {})
112
+ register_patch(original_klass_to_patch, patching_module, { :section => :controllers }.merge(options))
113
113
  end
114
114
 
115
- def self.register_helper_patch(original_klass_to_patch, patching_module, options={})
116
- register_patch(original_klass_to_patch, patching_module, {:section => :helpers}.merge(options))
115
+ def self.register_helper_patch(original_klass_to_patch, patching_module, options = {})
116
+ register_patch(original_klass_to_patch, patching_module, { :section => :helpers }.merge(options))
117
117
  end
118
118
 
119
- def self.register_model_patch(original_klass_to_patch, patching_module, options={})
120
- register_patch(original_klass_to_patch, patching_module, {:section => :models}.merge(options))
119
+ def self.register_model_patch(original_klass_to_patch, patching_module, options = {})
120
+ register_patch(original_klass_to_patch, patching_module, { :section => :models }.merge(options))
121
121
  end
122
122
 
123
- def self.register_patch_to_be_first(original_klass_to_patch, patching_module, options={})
124
- register_patch(original_klass_to_patch, patching_module, {:section => :force_first}.merge(options))
123
+ def self.register_patch_to_be_first(original_klass_to_patch, patching_module, options = {})
124
+ register_patch(original_klass_to_patch, patching_module, { :section => :force_first }.merge(options))
125
125
  end
126
126
 
127
127
  def self.register_easy_page_helper(*helper_or_helpers_klass_name)
@@ -208,28 +208,28 @@ module RedmineExtensions
208
208
  end
209
209
 
210
210
  def [](name)
211
- pcollection = @patches_collections.detect{|patch_col| patch_col.name == name }
211
+ pcollection = @patches_collections.detect { |patch_col| patch_col.name == name }
212
212
  end
213
213
 
214
214
  def include_patch?(name)
215
- !!@patches_collections.detect{|patch_col| patch_col.name == name }
215
+ !!@patches_collections.detect { |patch_col| patch_col.name == name }
216
216
  end
217
217
 
218
- def move_and_get_or_insert( name, options )
219
- pcollection = @patches_collections.detect{|patch_col| patch_col.name == name }
220
- founded_order = find_order( options )
218
+ def move_and_get_or_insert(name, options)
219
+ pcollection = @patches_collections.detect { |patch_col| patch_col.name == name }
220
+ founded_order = find_order(options)
221
221
  if pcollection
222
222
  if founded_order
223
223
  pcollection.order = founded_order
224
224
  update_order_by(pcollection)
225
225
  end
226
226
  else
227
- pcollection = insert( name, founded_order )
227
+ pcollection = insert(name, founded_order)
228
228
  end
229
229
  pcollection
230
230
  end
231
231
 
232
- def find_order( options )
232
+ def find_order(options)
233
233
  if options.delete(:first)
234
234
  return 1
235
235
  elsif before = options.delete(:before)
@@ -240,7 +240,7 @@ module RedmineExtensions
240
240
  actual = nil
241
241
  before_patch = self[before_class_name]
242
242
  actual = before_patch.order if before_patch
243
- if actual && ( !min || actual < min )
243
+ if actual && (!min || actual < min)
244
244
  min = actual
245
245
  end
246
246
  end
@@ -277,7 +277,7 @@ module RedmineExtensions
277
277
 
278
278
  private
279
279
 
280
- def push_back( collection )
280
+ def push_back(collection)
281
281
  # => ambitious, if it is private method...
282
282
  # raise ArgumentError, "Section already contains a collection #{collection.name}" if @patches_collections.detect{ |coll| collection.name == coll.name }
283
283
  @patches_collections << collection
@@ -287,16 +287,16 @@ module RedmineExtensions
287
287
  @last_order += 1
288
288
  end
289
289
 
290
- def insert( name, order = nil )
290
+ def insert(name, order = nil)
291
291
  final_order = order || last_order
292
- collection = EasyPatchesCollection.new( name, final_order )
293
- push_back( collection )
294
- update_order_by( collection ) if order
292
+ collection = EasyPatchesCollection.new(name, final_order)
293
+ push_back(collection)
294
+ update_order_by(collection) if order
295
295
  collection
296
296
  end
297
297
 
298
- def update_order_by( collection )
299
- @patches_collections.select {|patch_coll| ( patch_coll.name != collection.name ) && ( patch_coll.order >= collection.order ) }.each do |col|
298
+ def update_order_by(collection)
299
+ @patches_collections.select { |patch_coll| (patch_coll.name != collection.name) && (patch_coll.order >= collection.order) }.each do |col|
300
300
  col.order = col.order + 1
301
301
  end
302
302
  @patches_collections.sort!
@@ -347,7 +347,6 @@ module RedmineExtensions
347
347
 
348
348
  end
349
349
 
350
-
351
350
  class EasyPatch
352
351
 
353
352
  def self.all_patching_modules
@@ -374,9 +373,7 @@ module RedmineExtensions
374
373
  end
375
374
 
376
375
  def apply_patch
377
- if (cond = @options[:if]) && cond.respond_to?(:call)
378
- return unless cond.call
379
- end
376
+ return if (cond = @options[:if]) && cond.respond_to?(:call) && !cond.call
380
377
 
381
378
  pm_klass = easy_constantize(patching_module)
382
379
  # pm_klass.class_eval { unloadable }
@@ -392,10 +389,13 @@ module RedmineExtensions
392
389
  oktp_klass.include pm_klass
393
390
  end
394
391
  end
392
+ rescue NameError => e
393
+ patch_location = Module.const_source_location(patching_module)
394
+ raise NameError, "#{e.message} in #{patch_location}"
395
395
  end
396
396
 
397
397
  def easy_constantize(name)
398
- const = name.constantize
398
+ name.constantize
399
399
  rescue NameError
400
400
  if RedmineExtensions::PatchManager.patches_locations.has_key?(name)
401
401
  RedmineExtensions::PatchManager.with_reloading_code do