rails_admin_state 1.6.2 → 1.8.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
  SHA256:
3
- metadata.gz: c3bd861e03c61582cf8332e0f43de009998ddd2cb17ae610d28f0cef471232b8
4
- data.tar.gz: 984dad7bd37df4de260a81189c44330b034ace5fd8fdac438552a6acba40198a
3
+ metadata.gz: a3dfba5319d0c88df1f3be75dd3e2ae8fa33b40b62455c134db782cc512b7869
4
+ data.tar.gz: '0917cebc9cb29dc8aac1ab9ba6553cce676877dc1d00a2617883036a2dc69fc0'
5
5
  SHA512:
6
- metadata.gz: 0e90994431e5924d0a0f8308bba41eb0edecc65880ccdc9ec13aee39c2f47680e86002afd6eaf1b61641a5568ee440d932d0d31d0479987b52a24dc98b67fab2
7
- data.tar.gz: 616398eda1a7e761db1dcceabf73666301714dddd37c36fec1dee4024f7c9c408e725df1419021c7984063c7ea6ddaefde04a99a80921d383c484f2c6935371f
6
+ metadata.gz: 6927e33771eaec9dfabba5bb0fb7da1bc2de94d4b57351a65fd43b4dfef265e1bac060a6a0339c31f6698ee5bf945207b636f01315c6ff2871b7c3f3b18be43d
7
+ data.tar.gz: c381c5efc393d480f54cff46797a61813b5d8f18e1eff72a41a3421560ef2bd995288f1badbb4ef85d580816ea9d6fa12c400907d9fb2780625d3f9cfcb2b67e
@@ -30,18 +30,36 @@ module RailsAdmin
30
30
  raise 'event disabled' if @state_machine_options.disabled?(params[:event].to_sym)
31
31
  if @object.send("fire_#{params[:attr]}_event".to_sym, params[:event].to_sym)
32
32
  @object.save!
33
- flash[:success] = I18n.t('admin.state_machine.event_fired', attr: params[:method], event: params[:event])
33
+ if params['ajax'].present?
34
+ render json: {
35
+ html: RailsAdmin::Config::Fields::Types::State.pretty_value_from_params(params[:attr], @abstract_model, @object, @authorization_adapter, rails_admin, @state_machine_options)
36
+ }
37
+ else
38
+ flash[:success] = I18n.t('admin.state_machine.event_fired', attr: params[:method], event: params[:event])
39
+ end
34
40
  else
35
- flash[:error] = @object.errors.full_messages.join(', ')
41
+ if params['ajax'].present?
42
+ render text: @object.errors.full_messages.join(', ')
43
+ else
44
+ flash[:error] = @object.errors.full_messages.join(', ')
45
+ end
36
46
  end
37
47
  rescue Exception => e
38
48
  Rails.logger.error e
39
- flash[:error] = I18n.t('admin.state_machine.error', err: e.to_s)
49
+ if params['ajax'].present?
50
+ render text: I18n.t('admin.state_machine.error', err: e.to_s)
51
+ else
52
+ flash[:error] = I18n.t('admin.state_machine.error', err: e.to_s)
53
+ end
40
54
  end
41
55
  else
42
- flash[:error] = I18n.t('admin.state_machine.no_id')
56
+ if params['ajax'].present?
57
+ render text: I18n.t('admin.state_machine.no_id')
58
+ else
59
+ flash[:error] = I18n.t('admin.state_machine.no_id')
60
+ end
43
61
  end
44
- redirect_back(fallback_location: rails_admin.dashboard_path)
62
+ redirect_back(fallback_location: rails_admin.dashboard_path) unless params['ajax'].present?
45
63
  end
46
64
  end
47
65
 
@@ -10,35 +10,13 @@ module RailsAdmin
10
10
  include RailsAdmin::Engine.routes.url_helpers
11
11
 
12
12
  register_instance_option :pretty_value do
13
+
13
14
  @state_machine_options = ::RailsAdminState::Configuration.new @abstract_model
14
15
  v = bindings[:view]
16
+ obj = bindings[:object]
17
+ c = bindings[:controller]
15
18
 
16
- state = bindings[:object].send(name)
17
- state_class = @state_machine_options.state(state)
18
- s = bindings[:object].class.state_machines[name.to_sym].states[state.to_sym]
19
- ret = [
20
- '<div class="label ' + state_class + '">' + s.human_name + '</div>',
21
- '<div style="height: 10px;"></div>'
22
- ]
23
- unless read_only
24
- events = bindings[:object].class.state_machines[name.to_sym].events
25
- bindings[:object].send("#{name}_events".to_sym).each do |event|
26
- next if @state_machine_options.disabled?(event)
27
- unless bindings[:controller].try(:authorization_adapter).nil?
28
- adapter = bindings[:controller].authorization_adapter
29
- next unless (adapter.authorized?(:state, @abstract_model, bindings[:object]) && (adapter.authorized?(:all_events, @abstract_model, bindings[:object]) || adapter.authorized?(event, @abstract_model, bindings[:object])))
30
- end
31
- event_class = @state_machine_options.event(event)
32
- ret << bindings[:view].link_to(
33
- events[event].human_name,
34
- state_path(model_name: @abstract_model, id: bindings[:object].id, event: event, attr: name),
35
- method: :post,
36
- class: "btn btn-mini btn-xs #{event_class}",
37
- style: 'margin-bottom: 5px;'
38
- )
39
- end
40
- end
41
- ('<div style="white-space: normal;">' + ret.join(' ') + '</div>').html_safe
19
+ self.class.pretty_value_from_params(name, @abstract_model, obj, c.try(:authorization_adapter), v, @state_machine_options, read_only)
42
20
  end
43
21
 
44
22
  register_instance_option :formatted_value do
@@ -63,7 +41,7 @@ module RailsAdmin
63
41
  events = bindings[:object].class.state_machines[name.to_sym].events
64
42
  bindings[:object].send("#{name}_events".to_sym).each do |event|
65
43
  next if @state_machine_options.disabled?(event)
66
- unless bindings[:controller].try(:authorization_adapter).nil?
44
+ unless bindings[:controller].try(:authorization_adapter).nil?
67
45
  adapter = bindings[:controller].authorization_adapter
68
46
  next unless (adapter.authorized?(:state, @abstract_model, bindings[:object]) && (adapter.authorized?(:all_events, @abstract_model, bindings[:object]) || adapter.authorized?(event, @abstract_model, bindings[:object])))
69
47
  end
@@ -91,7 +69,7 @@ module RailsAdmin
91
69
  end
92
70
  ('<div style="white-space: normal;">' + ret.join(' ') + '</div>').html_safe
93
71
  end
94
-
72
+
95
73
  register_instance_option :export_value do
96
74
  state = bindings[:object].send(name)
97
75
  bindings[:object].class.state_machines[name.to_sym].states[state.to_sym].human_name
@@ -112,6 +90,55 @@ module RailsAdmin
112
90
  register_instance_option :multiple? do
113
91
  false
114
92
  end
93
+
94
+ def self.pretty_value_from_params name, abstract_model, obj, authorization_adapter, view, state_machine_options, read_only = false
95
+ state = obj.send(name)
96
+ state_class = state_machine_options.state(state)
97
+ s = obj.class.state_machines[name.to_sym].states[state.to_sym]
98
+ ret = [
99
+ '<div class="label ' + state_class + '">' + s.human_name + '</div>',
100
+ '<div style="height: 10px;"></div>'
101
+ ]
102
+ unless read_only
103
+ events = obj.class.state_machines[name.to_sym].events
104
+ obj.send("#{name}_events".to_sym).each do |event|
105
+ next if state_machine_options.disabled?(event)
106
+ unless authorization_adapter.nil?
107
+ adapter = authorization_adapter
108
+ next unless (adapter.authorized?(:state, abstract_model, obj) && (adapter.authorized?(:all_events, abstract_model, obj) || adapter.authorized?(event, abstract_model, obj)))
109
+ end
110
+ event_class = state_machine_options.event(event)
111
+ ret << ActionController::Base.helpers.link_to(
112
+ events[event].human_name,
113
+ view.state_path(model_name: abstract_model, id: obj.id, event: event, attr: name),
114
+ method: :post,
115
+ class: "btn btn-mini btn-xs #{event_class}",
116
+ style: 'margin-bottom: 5px;',
117
+ onclick: <<-END.strip_heredoc.gsub("\n", ' ').gsub(/ +/, ' ')
118
+ event.preventDefault();
119
+ event.stopPropagation();
120
+ var $t = $(this);
121
+ var old_html = $t.html();
122
+ $t.html("<i class='fa fa-spinner fa-spin'></i>");
123
+ $.ajax({
124
+ type: "POST",
125
+ url: $t.attr("href"),
126
+ data: {ajax:true},
127
+ success: function(r) {
128
+ $t.parent().parent().html(r.html);
129
+ },
130
+ error: function(e) {
131
+ $t.html(old_html);
132
+ alert(e.responseText);
133
+ }
134
+ });
135
+ return false;
136
+ END
137
+ )
138
+ end
139
+ end
140
+ ('<div style="white-space: normal;">' + ret.join(' ') + '</div>').html_safe
141
+ end
115
142
  end
116
143
  end
117
144
  end
@@ -1,3 +1,3 @@
1
1
  module RailsAdminState
2
- VERSION = "1.6.2"
2
+ VERSION = "1.8.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebtv
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-05 00:00:00.000000000 Z
11
+ date: 2019-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails_admin