rails_admin_toggleable 0.3.1 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cdf07752624f3739bc2bf661c7b439421a4c57bd
4
- data.tar.gz: e6eb4dd883bd7e870b72ea44b522a4733805c6b1
3
+ metadata.gz: fb92a958891b7937df4c21e3f51e688b4c561643
4
+ data.tar.gz: 750aa25771f3bf92df6dbc194d32ec9e7b62210c
5
5
  SHA512:
6
- metadata.gz: 6d34159c692761853a752006bccae2f36d6cb2024015e9095b124bfc6871188e729739adcf4520c5704a374e2b49cce755d56bf5e61d3a2acfeee3f00bcbac34
7
- data.tar.gz: 5a393f72baa767302192148904f4bb36d46eb478fdaee68c843ae04a384d73ef1751a0a10747608efa1a1f38f4a8bbe2a48efd01797768675be972a5c92f70d8
6
+ metadata.gz: 438a6f3b22d623f475114ba67b9aa77cac5b1a845945e6a3b09a53030845f2957f003dcc6855112e2c972aa1c7e4e732bf102af578f8a72020d1e16cf331154e
7
+ data.tar.gz: d0956078c95bf42897eb94c00e95652fb3ae1b7a5017911ec8ca58e44bb890028402ad5a191ce350d196f132ffc26ee3e869c6666bcf12cc01c6f4670a030284
data/README.md CHANGED
@@ -37,6 +37,43 @@ Make the field you need toggleable:
37
37
  ...
38
38
  end
39
39
 
40
+ ## Bulk action usage
41
+
42
+ # Add the bulk action:
43
+ # define_bulk_toggle_method(type of action, model field)
44
+ define_bulk_toggle_method(:enable, :enabled)
45
+ define_bulk_toggle_method(:disable, :enabled)
46
+ define_bulk_toggle_method(:toggle, :enabled)
47
+ define_bulk_toggle_method(:enable, :deleted)
48
+ define_bulk_toggle_method(:disable, :deleted)
49
+ define_bulk_toggle_method(:toggle, :deleted)
50
+
51
+ # enable it for all or some models
52
+ RailsAdmin.config do |config|
53
+ config.actions do
54
+ ......
55
+ bulk_enable_enabled do
56
+ visible do
57
+ ['Adder::Contest'].include? bindings[:abstract_model].model_name
58
+ end
59
+ end
60
+ bulk_disable_enabled do
61
+ visible do
62
+ ['Adder::Contest'].include? bindings[:abstract_model].model_name
63
+ end
64
+ end
65
+ bulk_toggle_enabled do
66
+ visible do
67
+ ['Adder::Contest'].include? bindings[:abstract_model].model_name
68
+ end
69
+ end
70
+
71
+ bulk_enable_deleted
72
+ bulk_disable_deleted
73
+ bulk_toggle_deleted
74
+ end
75
+ end
76
+
40
77
  ## Contributing
41
78
 
42
79
  1. Fork it
@@ -3,6 +3,18 @@ en:
3
3
  actions:
4
4
  toggle:
5
5
  title: "Toggle"
6
+ bulk_enable_enabled:
7
+ bulk_link: 'Enable selected "enabled"'
8
+ bulk_disable_enabled:
9
+ bulk_link: 'Disable selected "enabled"'
10
+ bulk_toggle_enabled:
11
+ bulk_link: 'Toggle selected "enabled"'
12
+ bulk_enable_deleted:
13
+ bulk_link: 'Enable selected "deleted"'
14
+ bulk_disable_deleted:
15
+ bulk_link: 'Disable selected "deleted"'
16
+ bulk_toggle_deleted:
17
+ bulk_link: 'Toggle selected "deleted"'
6
18
  toggle:
7
19
  enabled: '"%{attr}" enabled'
8
20
  disabled: '"%{attr}" disabled'
@@ -3,6 +3,18 @@ ru:
3
3
  actions:
4
4
  toggle:
5
5
  title: "Переключить"
6
+ bulk_enable_enabled:
7
+ bulk_link: 'Включить выбренные "enabled"'
8
+ bulk_disable_enabled:
9
+ bulk_link: 'Выключить выбренные "enabled"'
10
+ bulk_toggle_enabled:
11
+ bulk_link: 'Переключить выбренные "enabled"'
12
+ bulk_enable_deleted:
13
+ bulk_link: 'Включить выбренные "deleted"'
14
+ bulk_disable_deleted:
15
+ bulk_link: 'Выключить выбренные "deleted"'
16
+ bulk_toggle_deleted:
17
+ bulk_link: 'Переключить выбренные "deleted"'
6
18
  toggle:
7
19
  enabled: '"%{attr}" включен'
8
20
  disabled: '"%{attr}" выключен'
@@ -19,29 +19,57 @@ module RailsAdmin
19
19
  end
20
20
 
21
21
  register_instance_option :controller do
22
- Proc.new do |klass|
22
+ proc do
23
+ ajax_link = Proc.new do |fv, on, badge|
24
+ render json: {
25
+ text: fv.html_safe,
26
+ href: toggle_path(model_name: @abstract_model, id: @object.id, method: @meth, on: on.to_s),
27
+ class: 'badge ' + badge,
28
+ }
29
+ end
23
30
  if params['id'].present?
24
31
  begin
25
- obj = @abstract_model.model.find(params['id'])
26
- method = params[:method]
27
- obj.send(method + '=', params[:on] == '1' ? true : false)
28
- if obj.save
29
- if params[:on] == '1'
30
- flash[:success] = I18n.t('admin.toggle.enabled', attr: method)
32
+ @object = @abstract_model.model.find(params['id'])
33
+ @meth = params[:method]
34
+ @object.send(@meth + '=', params[:on] == '1' ? true : false)
35
+ if @object.save
36
+ if params['ajax'].present?
37
+ if params[:on] == '1'
38
+ ajax_link.call('✓', 0, 'badge-success')
39
+ else
40
+ ajax_link.call('✘', 1, 'badge-important')
41
+ end
31
42
  else
32
- flash[:success] = I18n.t('admin.toggle.disabled', attr: method)
43
+ if params[:on] == '1'
44
+ flash[:success] = I18n.t('admin.toggle.enabled', attr: @meth)
45
+ else
46
+ flash[:success] = I18n.t('admin.toggle.disabled', attr: @meth)
47
+ end
33
48
  end
34
-
35
49
  else
36
- flash[:error] = obj.errors.full_messages.join(', ')
50
+ if params['ajax'].present?
51
+ render text: @object.errors.full_messages.join(', '), layout: false, status: 422
52
+ else
53
+ flash[:error] = @object.errors.full_messages.join(', ')
54
+ end
37
55
  end
38
56
  rescue Exception => e
39
- flash[:error] = I18n.t('admin.toggle.error', err: e.to_s)
57
+ if params['ajax'].present?
58
+ render text: I18n.t('admin.toggle.error', err: e.to_s), status: 422
59
+ else
60
+ flash[:error] = I18n.t('admin.toggle.error', err: e.to_s)
61
+ end
40
62
  end
41
63
  else
42
- flash[:error] = I18n.t('admin.toggle.no_id')
64
+ if params['ajax'].present?
65
+ render text: I18n.t('admin.toggle.no_id'), status: 422
66
+ else
67
+ flash[:error] = I18n.t('admin.toggle.no_id')
68
+ end
69
+
43
70
  end
44
- redirect_to :back
71
+
72
+ redirect_to :back unless params['ajax'].present?
45
73
  end
46
74
  end
47
75
 
@@ -0,0 +1,55 @@
1
+ module RailsAdmin
2
+ module Config
3
+ module Actions
4
+ class BulkToggleBase < RailsAdmin::Config::Actions::Base
5
+ # Is the action acting on the root level (Example: /admin/contact)
6
+ register_instance_option :collection? do
7
+ true
8
+ end
9
+
10
+ register_instance_option :bulkable? do
11
+ true
12
+ end
13
+
14
+ register_instance_option :link_icon do
15
+ 'icon-move'
16
+ end
17
+
18
+ register_instance_option :http_methods do
19
+ [:post]
20
+ end
21
+ end
22
+
23
+ class BulkToggle < RailsAdmin::Config::Actions::BulkToggleBase
24
+ register_instance_option :controller do
25
+ Proc.new do |klass|
26
+ @objects = list_entries(@model_config, :toggle)
27
+ @objects.each do |obj|
28
+ obj.send("#{@action.class.meth}=", !obj.send(@action.class.meth))
29
+ obj.save!
30
+ end
31
+ redirect_to :back
32
+ end
33
+ end
34
+ end
35
+ class BulkEnable < RailsAdmin::Config::Actions::BulkToggleBase
36
+ register_instance_option :controller do
37
+ Proc.new do |klass|
38
+ @objects = list_entries(@model_config, :toggle)
39
+ @objects.update_all(@action.class.meth => true)
40
+ redirect_to :back
41
+ end
42
+ end
43
+ end
44
+ class BulkDisable < RailsAdmin::Config::Actions::BulkToggleBase
45
+ register_instance_option :controller do
46
+ Proc.new do |klass|
47
+ @objects = list_entries(@model_config, :toggle)
48
+ @objects.update_all(@action.class.meth => false)
49
+ redirect_to :back
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -18,18 +18,19 @@ module RailsAdmin
18
18
  bindings[:view].link_to(
19
19
  fv.html_safe,
20
20
  toggle_path(model_name: @abstract_model, id: bindings[:object].id, method: name, on: on.to_s),
21
- method: :post,
22
- class: 'badge ' + badge
21
+ # method: :post,
22
+ class: 'badge ' + badge,
23
+ onclick: 'var $t = $(this); $t.html("<i class=\"fa fa-spinner fa-spin\"></i>"); $.ajax({type: "POST", url: $t.attr("href"), data: {ajax:true}, success: function(r) { $t.attr("href", r.href); $t.attr("class", r.class); $t.text(r.text); $t.parent().attr("title", r.text); }, error: function(e) { alert(e.responseText); }}); return false;'
23
24
  )
24
25
  end
25
26
 
26
27
  case value
27
28
  when nil
28
- g_link('&#x2718;', 0, 'badge-important') + g_link('&#x2713;', 1, 'badge-success')
29
+ g_link('', 0, 'badge-important') + g_link('', 1, 'badge-success')
29
30
  when false
30
- g_link('&#x2718;', 1, 'badge-important')
31
+ g_link('', 1, 'badge-important')
31
32
  when true
32
- g_link('&#x2713', 0, 'badge-success')
33
+ g_link('', 0, 'badge-success')
33
34
  else
34
35
  %{<span class="badge">-</span>}
35
36
  end.html_safe
@@ -1,3 +1,3 @@
1
1
  module RailsAdminToggleable
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -4,5 +4,21 @@ require 'rails_admin/config/actions'
4
4
  require 'rails_admin/config/model'
5
5
 
6
6
  require 'rails_admin_toggleable/action'
7
+ require 'rails_admin_toggleable/bulk_action'
7
8
  require 'rails_admin_toggleable/field'
8
9
  require 'rails_admin_toggleable/engine'
10
+
11
+ def define_bulk_toggle_method(type, meth)
12
+ u = "bulk_#{type}_#{meth}"
13
+ c = u.camelize
14
+ s = c.to_sym
15
+ Object.const_set(s, Class.new("RailsAdmin::Config::Actions::Bulk#{type.to_s.camelize}".constantize) {})
16
+
17
+ c.constantize.class_eval <<-RUBY, __FILE__, __LINE__+1
18
+ def self.meth
19
+ #{meth.to_sym.inspect}
20
+ end
21
+ RUBY
22
+
23
+ RailsAdmin::Config::Actions.register(u.to_sym, c.constantize)
24
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin_toggleable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gleb Tv
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-03 00:00:00.000000000 Z
11
+ date: 2014-04-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Toggleable field for rails admin
14
14
  email:
@@ -26,6 +26,7 @@ files:
26
26
  - config/locales/ru.rails_admin_toggleable.yml
27
27
  - lib/rails_admin_toggleable.rb
28
28
  - lib/rails_admin_toggleable/action.rb
29
+ - lib/rails_admin_toggleable/bulk_action.rb
29
30
  - lib/rails_admin_toggleable/engine.rb
30
31
  - lib/rails_admin_toggleable/field.rb
31
32
  - lib/rails_admin_toggleable/version.rb
@@ -49,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
50
  version: '0'
50
51
  requirements: []
51
52
  rubyforge_project:
52
- rubygems_version: 2.0.6
53
+ rubygems_version: 2.2.1
53
54
  signing_key:
54
55
  specification_version: 4
55
56
  summary: Make any boolean field easily toggleable on\off from index view in rails