rails_admin_toggleable 0.3.1 → 0.4.0

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