effective_resources 1.0.3 → 1.0.4
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/app/controllers/concerns/effective/crud_controller/actions.rb +11 -14
- data/app/controllers/concerns/effective/crud_controller/dsl.rb +5 -1
- data/app/controllers/concerns/effective/crud_controller/permitted_params.rb +6 -0
- data/app/controllers/concerns/effective/crud_controller/save.rb +16 -9
- data/app/controllers/concerns/effective/crud_controller.rb +1 -1
- data/app/helpers/effective_resources_helper.rb +1 -1
- data/app/helpers/effective_resources_private_helper.rb +22 -23
- data/app/models/effective/resources/attributes.rb +8 -2
- data/app/views/effective/resource/_actions.html.haml +1 -1
- data/app/views/effective/resource/_actions_dropleft.html.haml +1 -1
- data/app/views/effective/resource/_actions_glyphicons.html.haml +1 -1
- data/lib/effective_resources/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12e0851418c01ba4290cee861341751689d05963
|
4
|
+
data.tar.gz: a9ee4c64ac47d1abac493d72eece30383d77fad4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d27c675dc474aaf51403453d98ce32b83264cfe7437d4178f58fc45dafbeb20b454d6450235e775fd9bee049eb94db8444ab8979e88752e26f68a9ef7a1e224b
|
7
|
+
data.tar.gz: 0a749056b57fdd205fba43497bff68bbfd61d0ed61617efea637902453b9974886064345a01e50cb388d375bd82abf2bf69769e48bad0cbdd37e5c684048b58b
|
@@ -65,30 +65,30 @@ module Effective
|
|
65
65
|
Rails.logger.info 'Processed by Effective::CrudController#create'
|
66
66
|
|
67
67
|
self.resource ||= resource_scope.new
|
68
|
-
action = commit_action[:action]
|
68
|
+
action = (commit_action[:action] == :save ? :create : commit_action[:action])
|
69
69
|
|
70
70
|
resource.assign_attributes(send(resource_params_method_name))
|
71
71
|
resource.created_by = current_user if resource.respond_to?(:created_by=)
|
72
72
|
|
73
|
-
EffectiveResources.authorize!(self,
|
73
|
+
EffectiveResources.authorize!(self, action, resource)
|
74
74
|
@page_title ||= "New #{resource_name.titleize}"
|
75
75
|
|
76
76
|
respond_to do |format|
|
77
77
|
if save_resource(resource, action)
|
78
|
-
request.format = :html if specific_redirect_path?
|
78
|
+
request.format = :html if specific_redirect_path?(action)
|
79
79
|
|
80
80
|
format.html do
|
81
|
-
flash[:success] ||= resource_flash(:success, resource,
|
82
|
-
redirect_to(resource_redirect_path)
|
81
|
+
flash[:success] ||= resource_flash(:success, resource, action)
|
82
|
+
redirect_to(resource_redirect_path(action))
|
83
83
|
end
|
84
84
|
|
85
85
|
format.js do
|
86
|
-
flash.now[:success] ||= resource_flash(:success, resource,
|
86
|
+
flash.now[:success] ||= resource_flash(:success, resource, action)
|
87
87
|
reload_resource # create.js.erb
|
88
88
|
end
|
89
89
|
else
|
90
90
|
flash.delete(:success)
|
91
|
-
flash.now[:danger] ||= resource_flash(:danger, resource,
|
91
|
+
flash.now[:danger] ||= resource_flash(:danger, resource, action)
|
92
92
|
|
93
93
|
run_callbacks(:resource_render)
|
94
94
|
|
@@ -130,21 +130,20 @@ module Effective
|
|
130
130
|
Rails.logger.info 'Processed by Effective::CrudController#update'
|
131
131
|
|
132
132
|
self.resource ||= resource_scope.find(params[:id])
|
133
|
-
action = commit_action[:action]
|
133
|
+
action = (commit_action[:action] == :save ? :update : commit_action[:action])
|
134
134
|
|
135
|
-
EffectiveResources.authorize!(self,
|
135
|
+
EffectiveResources.authorize!(self, action, resource)
|
136
136
|
@page_title ||= "Edit #{resource}"
|
137
137
|
|
138
138
|
resource.assign_attributes(send(resource_params_method_name))
|
139
|
-
resource.current_user = current_user if resource.respond_to?(:current_user=)
|
140
139
|
|
141
140
|
respond_to do |format|
|
142
141
|
if save_resource(resource, action)
|
143
|
-
request.format = :html if specific_redirect_path?
|
142
|
+
request.format = :html if specific_redirect_path?(action)
|
144
143
|
|
145
144
|
format.html do
|
146
145
|
flash[:success] ||= resource_flash(:success, resource, action)
|
147
|
-
redirect_to(resource_redirect_path)
|
146
|
+
redirect_to(resource_redirect_path(action))
|
148
147
|
end
|
149
148
|
|
150
149
|
format.js do
|
@@ -216,8 +215,6 @@ module Effective
|
|
216
215
|
to_assign = (send(resource_params_method_name) rescue {})
|
217
216
|
resource.assign_attributes(to_assign) if to_assign.present? && to_assign.permitted?
|
218
217
|
|
219
|
-
resource.current_user = current_user if resource.respond_to?(:current_user=)
|
220
|
-
|
221
218
|
respond_to do |format|
|
222
219
|
if save_resource(resource, action)
|
223
220
|
request.format = :html if specific_redirect_path?(action)
|
@@ -7,8 +7,12 @@ module Effective
|
|
7
7
|
_insert_callbacks(names, blk) { |name, options| set_callback(:resource_render, :before, name, options) }
|
8
8
|
end
|
9
9
|
|
10
|
+
def before_save(*names, &blk)
|
11
|
+
_insert_callbacks(names, blk) { |name, options| set_callback(:resource_before_save, :after, name, options) }
|
12
|
+
end
|
13
|
+
|
10
14
|
def after_save(*names, &blk)
|
11
|
-
_insert_callbacks(names, blk) { |name, options| set_callback(:
|
15
|
+
_insert_callbacks(names, blk) { |name, options| set_callback(:resource_after_save, :after, name, options) }
|
12
16
|
end
|
13
17
|
|
14
18
|
def after_error(*names, &blk)
|
@@ -35,6 +35,10 @@ module Effective
|
|
35
35
|
permitted_params = effective_resource.permitted_attributes.select do |name, (_, atts)|
|
36
36
|
if BLACKLIST.include?(name)
|
37
37
|
false
|
38
|
+
elsif name == :token # has_secure_token
|
39
|
+
resource.respond_to?("regenerate_#{name}") == false
|
40
|
+
elsif name == :site_id # acts_as_site_specific
|
41
|
+
resource.class.respond_to?(:site_specific?) == false
|
38
42
|
elsif atts.blank? || !atts.key?(:permitted)
|
39
43
|
true # Default is true
|
40
44
|
else
|
@@ -57,6 +61,8 @@ module Effective
|
|
57
61
|
{ k => [] }
|
58
62
|
elsif datatype == :effective_address
|
59
63
|
{ k => EffectiveAddresses.permitted_params }
|
64
|
+
elsif datatype == :effective_assets
|
65
|
+
EffectiveAssets.permitted_params
|
60
66
|
else
|
61
67
|
k
|
62
68
|
end
|
@@ -5,33 +5,40 @@ module Effective
|
|
5
5
|
# Based on the incoming params[:commit] or passed action. Merges all options.
|
6
6
|
def commit_action(action = nil)
|
7
7
|
config = (['create', 'update'].include?(params[:action]) ? self.class.submits : self.class.buttons)
|
8
|
+
ons = self.class.ons
|
8
9
|
|
9
|
-
commit =
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
commit = config[params[:commit].to_s]
|
11
|
+
commit ||= config.find { |_, v| v[:action] == action }.try(:last)
|
12
|
+
commit ||= config.find { |_, v| v[:action] == :save }.try(:last) if [nil, :create, :update].include?(action)
|
13
|
+
commit ||= { action: (action || :save) }
|
14
|
+
|
15
|
+
on = ons[params[:commit].to_s] || ons[action] || ons[commit[:action]]
|
14
16
|
|
15
|
-
commit.reverse_merge!(
|
17
|
+
commit.reverse_merge!(on) if on.present?
|
16
18
|
|
17
19
|
commit
|
18
20
|
end
|
19
21
|
|
20
22
|
# This calls the appropriate member action, probably save!, on the resource.
|
21
23
|
def save_resource(resource, action = :save, &block)
|
22
|
-
|
24
|
+
save_action = ([:create, :update].include?(action) ? :save : action)
|
25
|
+
|
26
|
+
raise "expected @#{resource_name} to respond to #{save_action}!" unless resource.respond_to?("#{save_action}!")
|
23
27
|
|
24
28
|
resource.current_user ||= current_user if resource.respond_to?(:current_user=)
|
25
29
|
|
26
30
|
ActiveRecord::Base.transaction do
|
27
31
|
begin
|
28
|
-
|
32
|
+
run_callbacks(:resource_before_save)
|
33
|
+
|
34
|
+
if resource.public_send("#{save_action}!") == false
|
29
35
|
raise("failed to #{action} #{resource}")
|
30
36
|
end
|
31
37
|
|
32
38
|
yield if block_given?
|
33
39
|
|
34
|
-
run_callbacks(:
|
40
|
+
run_callbacks(:resource_after_save)
|
41
|
+
|
35
42
|
return true
|
36
43
|
rescue => e
|
37
44
|
Rails.logger.info "Failed to #{action}: #{e.message}" if Rails.env.development?
|
@@ -11,7 +11,7 @@ module Effective
|
|
11
11
|
included do
|
12
12
|
define_actions_from_routes
|
13
13
|
define_permitted_params_from_model
|
14
|
-
define_callbacks :resource_render, :
|
14
|
+
define_callbacks :resource_render, :resource_before_save, :resource_after_save, :resource_error
|
15
15
|
end
|
16
16
|
|
17
17
|
module ClassMethods
|
@@ -71,7 +71,7 @@ module EffectiveResourcesHelper
|
|
71
71
|
actions ||= (resource.kind_of?(Class) ? effective_resource.resource_klass_actions : effective_resource.resource_actions)
|
72
72
|
|
73
73
|
# Filter Actions
|
74
|
-
action_keys = effective_resource.actions
|
74
|
+
action_keys = effective_resource.actions
|
75
75
|
raise "unknown action for #{effective_resource.name}: #{(atts.keys - action_keys).join(' ')}." if (atts.keys - action_keys).present?
|
76
76
|
actions = actions.select { |_, v| atts[v[:action]].respond_to?(:call) ? instance_exec(&atts[v[:action]]) : (atts[v[:action]] != false) }
|
77
77
|
|
@@ -1,9 +1,9 @@
|
|
1
|
+
# frozen_sting_literals: true
|
2
|
+
|
1
3
|
module EffectiveResourcesPrivateHelper
|
2
4
|
REPLACE_PAGE_ACTIONS = {'update' => :edit, 'create' => :new}
|
3
5
|
|
4
|
-
def permitted_resource_actions(resource, actions
|
5
|
-
effective_resource ||= find_effective_resource
|
6
|
-
|
6
|
+
def permitted_resource_actions(resource, actions)
|
7
7
|
page_action = REPLACE_PAGE_ACTIONS[params[:action]] || params[:action]&.to_sym || :save
|
8
8
|
|
9
9
|
actions.select do |commit, args|
|
@@ -14,19 +14,24 @@ module EffectiveResourcesPrivateHelper
|
|
14
14
|
(args.key?(:if) ? controller.instance_exec(&args[:if]) : true) &&
|
15
15
|
(args.key?(:unless) ? !controller.instance_exec(&args[:unless]) : true) &&
|
16
16
|
EffectiveResources.authorized?(controller, action, resource)
|
17
|
-
end.
|
18
|
-
|
17
|
+
end.inject({}) do |h, (commit, args)|
|
18
|
+
opts = args.except(:default, :only, :except, :if, :unless, :redirect, :success, :danger)
|
19
19
|
|
20
20
|
# Transform data: { ... } hash into 'data-' keys
|
21
|
-
if
|
22
|
-
data.each { |k, v| opts["data-#{k}"] ||= v }
|
21
|
+
if opts.key?(:data)
|
22
|
+
opts.delete(:data).each { |k, v| opts["data-#{k}"] ||= v }
|
23
|
+
end
|
24
|
+
|
25
|
+
# Replace resource name in any token strings
|
26
|
+
if opts.key?('data-confirm')
|
27
|
+
opts['data-confirm'].gsub!('@resource', (resource.to_s.presence || resource.class.name.gsub('::', ' ').underscore.gsub('_', ' ')).to_s)
|
23
28
|
end
|
24
29
|
|
25
30
|
# Assign class
|
26
31
|
opts[:class] ||= (
|
27
|
-
if opts['data-method']
|
32
|
+
if opts['data-method'] == 'delete'
|
28
33
|
'btn btn-danger'
|
29
|
-
elsif
|
34
|
+
elsif h.length == 0
|
30
35
|
'btn btn-primary'
|
31
36
|
elsif defined?(EffectiveBootstrap)
|
32
37
|
'btn btn-secondary'
|
@@ -36,22 +41,16 @@ module EffectiveResourcesPrivateHelper
|
|
36
41
|
)
|
37
42
|
|
38
43
|
# Assign title
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Replace resource name in any token strings
|
50
|
-
if opts['data-confirm']
|
51
|
-
opts['data-confirm'].gsub!('@resource', (resource.to_s.presence || effective_resource.human_name).to_s)
|
44
|
+
opts[:title] ||= case opts[:action]
|
45
|
+
when :save then commit
|
46
|
+
when :edit then "Edit #{resource}"
|
47
|
+
when :show then "#{resource}"
|
48
|
+
when :destroy then "Delete #{resource}"
|
49
|
+
when :index then "All #{resource.class.name.gsub('::', ' ').underscore.gsub('_', ' ').titleize.pluralize}"
|
50
|
+
else "#{opts[:action].to_s.titleize} #{resource}"
|
52
51
|
end
|
53
52
|
|
54
|
-
|
53
|
+
h[commit] = opts; h
|
55
54
|
end
|
56
55
|
end
|
57
56
|
|
@@ -20,7 +20,7 @@ module Effective
|
|
20
20
|
h[ass.foreign_key.to_sym] = [:integer, :index => true]
|
21
21
|
|
22
22
|
if ass.options[:polymorphic]
|
23
|
-
h[ass.foreign_type.to_sym] = [:
|
23
|
+
h[ass.foreign_type.to_sym] = [:string, :index => true]
|
24
24
|
end
|
25
25
|
|
26
26
|
end; h
|
@@ -36,10 +36,15 @@ module Effective
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def effective_addresses_attributes
|
39
|
-
return {} unless instance.respond_to?(:effective_address_names)
|
39
|
+
return {} unless defined?(EffectiveAddresses) && instance.respond_to?(:effective_address_names)
|
40
40
|
instance.effective_address_names.inject({}) { |h, name| h[name] = [:effective_address]; h }
|
41
41
|
end
|
42
42
|
|
43
|
+
def effective_assets_attributes
|
44
|
+
return {} unless defined?(EffectiveAssets) && instance.respond_to?(:asset_boxes)
|
45
|
+
{ effective_assets: [:effective_assets] }
|
46
|
+
end
|
47
|
+
|
43
48
|
# All will include primary_key, created_at, updated_at and belongs_tos
|
44
49
|
# This is the attributes as defined by the effective_resources do .. end block
|
45
50
|
# { :name => [:string, { permitted: false }], ... }
|
@@ -52,6 +57,7 @@ module Effective
|
|
52
57
|
.merge(has_manys_attributes)
|
53
58
|
.merge(has_ones_attributes)
|
54
59
|
.merge(effective_addresses_attributes)
|
60
|
+
.merge(effective_assets_attributes)
|
55
61
|
.merge(atts)
|
56
62
|
else # This is the migrator. This should match table_attributes
|
57
63
|
belong_tos_attributes.merge(atts.reject { |_, v| v[0] == :permitted_param })
|
@@ -1,4 +1,4 @@
|
|
1
|
-
- permitted_resource_actions(resource, actions
|
1
|
+
- permitted_resource_actions(resource, actions).each do |label, opts|
|
2
2
|
= link_to(label, (effective_resource.action_path(opts[:action], resource) || '#'), opts.except(:action))
|
3
3
|
|
4
4
|
= instance_exec(resource, &format_block) if local_assigns[:format_block]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
= dropdown(variation: :dropleft) do
|
2
|
-
- permitted_resource_actions(resource, actions
|
2
|
+
- permitted_resource_actions(resource, actions).each do |label, opts|
|
3
3
|
= dropdown_link_to(label, (effective_resource.action_path(opts[:action], resource) || '#'), opts.except(:action, :class))
|
4
4
|
|
5
5
|
= instance_exec(resource, &format_block) if local_assigns[:format_block]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
- permitted_resource_actions(resource, actions
|
1
|
+
- permitted_resource_actions(resource, actions).each do |label, opts|
|
2
2
|
= glyphicon_to(opts[:action], (effective_resource.action_path(opts[:action], resource) || '#'), opts.except(:action, :class))
|
3
3
|
|
4
4
|
= instance_exec(resource, &format_block) if local_assigns[:format_block]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|