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 +4 -4
- data/lib/rails_admin_state/action.rb +23 -5
- data/lib/rails_admin_state/field.rb +55 -28
- data/lib/rails_admin_state/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3dfba5319d0c88df1f3be75dd3e2ae8fa33b40b62455c134db782cc512b7869
|
4
|
+
data.tar.gz: '0917cebc9cb29dc8aac1ab9ba6553cce676877dc1d00a2617883036a2dc69fc0'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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.
|
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:
|
11
|
+
date: 2019-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails_admin
|