abstracted 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.envrc +1 -0
- data/.gitignore +8 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +218 -0
- data/Guardfile +77 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +15 -0
- data/abstracted.gemspec +51 -0
- data/app/assets/images/abstracted/.keep +0 -0
- data/app/assets/javascripts/abstract_resources.js +39 -0
- data/app/assets/javascripts/abstracted/.keep +0 -0
- data/app/assets/javascripts/crud.js.coffee +49 -0
- data/app/assets/javascripts/initializers.js.coffee +111 -0
- data/app/assets/stylesheets/abstract_resources.css +5 -0
- data/app/assets/stylesheets/abstracted/.keep +0 -0
- data/app/assets/stylesheets/scaffold.css +56 -0
- data/app/controllers/.keep +0 -0
- data/app/controllers/abstract_resources_controller.rb +290 -0
- data/app/controllers/application_controller.rb +22 -0
- data/app/helpers/.keep +0 -0
- data/app/helpers/abstract_resources_helper.rb +26 -0
- data/app/mailers/.keep +0 -0
- data/app/models/.keep +0 -0
- data/app/models/abstract_resource.rb +122 -0
- data/app/models/concerns/roleable.rb +61 -0
- data/app/policies/abstract_resource_policy.rb +58 -0
- data/app/views/.keep +0 -0
- data/app/views/abstract_resources/_default.html.erb +11 -0
- data/app/views/abstract_resources/destroy.js.haml +1 -0
- data/app/views/abstract_resources/edit.html.haml +11 -0
- data/app/views/abstract_resources/index.html.erb +1 -0
- data/app/views/abstract_resources/new.html.haml +12 -0
- data/app/views/abstract_resources/show.html.haml +13 -0
- data/bin/rails +12 -0
- data/config/locales/abstracted.en.yml +20 -0
- data/config/routes.rb +4 -0
- data/lib/abstracted.rb +8 -0
- data/lib/abstracted/engine.rb +19 -0
- data/lib/abstracted/version.rb +3 -0
- data/lib/abstracted_responder.rb +7 -0
- data/lib/tasks/abstracted_tasks.rake +4 -0
- data/spec/controllers/abstract_resources_controller_spec.rb +241 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/models/user.rb +3 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +26 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +56 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +21 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/dummy/log/development.log +0 -0
- data/spec/dummy/log/test.log +6229 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/abstract_resources.rb +6 -0
- data/spec/factories/users.rb +5 -0
- data/spec/features/posts/manage_posts_spec.rb +24 -0
- data/spec/models/abstract_resource_spec.rb +14 -0
- data/spec/rails_helper.rb +114 -0
- data/spec/spec_helper.rb +97 -0
- data/test/integration/abstract_resource_test.rb +7 -0
- metadata +424 -0
File without changes
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# deletePost handles deleting records
|
3
|
+
#
|
4
|
+
# dependencies:
|
5
|
+
# sweetalert
|
6
|
+
#
|
7
|
+
# data-url="", data-id="" - eg.
|
8
|
+
|
9
|
+
closeSweetAlert = () ->
|
10
|
+
try
|
11
|
+
swal.close()
|
12
|
+
catch error
|
13
|
+
$('.sweet-overlay').hide()
|
14
|
+
$('.sweet-alert').hide()
|
15
|
+
|
16
|
+
@deletePost = ($elem) ->
|
17
|
+
try
|
18
|
+
url = $elem.data('url') + "/" + $elem.data('id') + ".js"
|
19
|
+
$remove = $($elem.data('remove'))
|
20
|
+
request = $.ajax
|
21
|
+
url: url,
|
22
|
+
type: "delete",
|
23
|
+
statusCode:
|
24
|
+
|
25
|
+
200: (response,textStatus,jqXHR) ->
|
26
|
+
if $remove
|
27
|
+
$remove.hide()
|
28
|
+
closeSweetAlert()
|
29
|
+
$('.message_container').html(response.responseText)
|
30
|
+
|
31
|
+
301: () ->
|
32
|
+
$elem.show()
|
33
|
+
closeSweetAlert()
|
34
|
+
swal "Ikke slettet!", "Posten blev ikke slettet - årsagen ikke kendt", "warning"
|
35
|
+
|
36
|
+
401: (response) ->
|
37
|
+
$('.message_container').append(response.responseText)
|
38
|
+
closeSweetAlert()
|
39
|
+
|
40
|
+
409: (response) ->
|
41
|
+
$('.message_container').append(response.responseText)
|
42
|
+
closeSweetAlert()
|
43
|
+
|
44
|
+
412: () ->
|
45
|
+
closeSweetAlert()
|
46
|
+
swal "Øv!", "Et eller andet gik galt!", "error"
|
47
|
+
|
48
|
+
catch error
|
49
|
+
swal "Hmmm", "#{error}", "error"
|
@@ -0,0 +1,111 @@
|
|
1
|
+
#
|
2
|
+
# initializeSweetAlert
|
3
|
+
# initializes the sweetalert prompt
|
4
|
+
#
|
5
|
+
@initializeSweetAlert = () ->
|
6
|
+
try
|
7
|
+
# console.log 'sweet alert initializing...'
|
8
|
+
sweetHTML = '<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert" tabIndex="-1"><div class="icon error"><span class="x-mark"><span class="line left"></span><span class="line right"></span></span></div><div class="icon warning"> <span class="body"></span> <span class="dot"></span> </div> <div class="icon info"></div> <div class="icon success"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div> <div class="icon custom"></div> <h2>Title</h2><p>Text</p><button class="cancel" tabIndex="2">Cancel</button><button class="confirm" tabIndex="1">OK</button></div>'
|
9
|
+
sweetWrap = document.createElement('div')
|
10
|
+
sweetWrap.innerHTML = sweetHTML
|
11
|
+
$(document.body).append(sweetWrap)
|
12
|
+
catch error
|
13
|
+
console.log error
|
14
|
+
|
15
|
+
|
16
|
+
#
|
17
|
+
# initializeDeleteLinks
|
18
|
+
# initializes the tags classed with '.delete_link' to verify deleting an issue
|
19
|
+
#
|
20
|
+
@initializeDeleteLinks = () ->
|
21
|
+
$('.delete_link').on 'click', (e) ->
|
22
|
+
e.preventDefault()
|
23
|
+
$elem = $(this)
|
24
|
+
$elem.hide()
|
25
|
+
|
26
|
+
swal
|
27
|
+
title: "Er du sikker?",
|
28
|
+
text: "Hvis du accepterer slettes posten <b>" + $(this).data('name') + "</b> permanent, og du vil ikke kunne hente den frem igen!",
|
29
|
+
type: "warning",
|
30
|
+
html: true,
|
31
|
+
showCancelButton: true,
|
32
|
+
confirmButtonColor: "#DD6B55",
|
33
|
+
confirmButtonText: "Ja, slet den!",
|
34
|
+
cancelButtonText: "Nej - jeg har fortrudt!"
|
35
|
+
closeOnConfirm: false,
|
36
|
+
# closeOnCancel: true,
|
37
|
+
(confirmed) ->
|
38
|
+
if !confirmed
|
39
|
+
$elem.show()
|
40
|
+
# swal "Ok!", "Posten blev ikke slettet - du valgte at fortryde.", "success"
|
41
|
+
else
|
42
|
+
deletePost($elem)
|
43
|
+
|
44
|
+
# console.log( ".delete_link event handler was set")
|
45
|
+
|
46
|
+
|
47
|
+
#
|
48
|
+
# fadeItOut will fade an element out with a preset or
|
49
|
+
# supplied delay
|
50
|
+
#
|
51
|
+
@fadeItOut = (e,delay=3500) ->
|
52
|
+
$(e).delay( delay ).fadeOut( 1000 )
|
53
|
+
|
54
|
+
|
55
|
+
#
|
56
|
+
# PageOnLoad loads and initializes
|
57
|
+
# fixed elements like SELECT's, Materialized's elements, et al.
|
58
|
+
#
|
59
|
+
@pageOnLoad = () ->
|
60
|
+
|
61
|
+
#
|
62
|
+
# Initialize the 'hamburger'
|
63
|
+
#
|
64
|
+
$(".button-collapse").sideNav();
|
65
|
+
|
66
|
+
#
|
67
|
+
# Initialize collapsible (uncomment the line below if you use the dropdown variation)
|
68
|
+
#
|
69
|
+
$('.collapsible').collapsible
|
70
|
+
accordion : true # A setting that changes the collapsible behavior to expandable instead of the default accordion style
|
71
|
+
|
72
|
+
#
|
73
|
+
# Initialize SELECT's
|
74
|
+
#
|
75
|
+
$('select').material_select();
|
76
|
+
|
77
|
+
#
|
78
|
+
# Initialize INPUT TYPE='DATE'
|
79
|
+
#
|
80
|
+
# %input.datepicker{ type:"date" }
|
81
|
+
#
|
82
|
+
$('.datepicker').pickadate
|
83
|
+
selectMonths: true, # Creates a dropdown to control month
|
84
|
+
selectYears: 15 # Creates a dropdown of 15 years to control year
|
85
|
+
|
86
|
+
#
|
87
|
+
# Prepare delete_link's for acting on clicks to delete posts
|
88
|
+
#
|
89
|
+
initializeDeleteLinks()
|
90
|
+
|
91
|
+
#
|
92
|
+
# Try to keep users from double-clicking submit's
|
93
|
+
#
|
94
|
+
# document.addEventListener('DOMContentLoaded', disableMultipleSubmits, false);
|
95
|
+
|
96
|
+
#
|
97
|
+
# Prepare close-notice's for acting on clicks to remove div
|
98
|
+
#
|
99
|
+
$('.message_container').delegate 'a.close-notice', 'click', () ->
|
100
|
+
$(this).closest('.alert').remove()
|
101
|
+
|
102
|
+
#
|
103
|
+
# make drop-downs react nicely
|
104
|
+
#
|
105
|
+
$(".dropdown-button").dropdown()
|
106
|
+
|
107
|
+
# here to test whether pageOnLoad runs - -
|
108
|
+
# try
|
109
|
+
# swal( 'pageOnLoad', 'pageOnLoad blev kaldt!', 'success')
|
110
|
+
# catch
|
111
|
+
# console.log 'autch!'
|
File without changes
|
@@ -0,0 +1,56 @@
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
2
|
+
|
3
|
+
body, p, ol, ul, td {
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
5
|
+
font-size: 13px;
|
6
|
+
line-height: 18px;
|
7
|
+
}
|
8
|
+
|
9
|
+
pre {
|
10
|
+
background-color: #eee;
|
11
|
+
padding: 10px;
|
12
|
+
font-size: 11px;
|
13
|
+
}
|
14
|
+
|
15
|
+
a { color: #000; }
|
16
|
+
a:visited { color: #666; }
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
18
|
+
|
19
|
+
div.field, div.actions {
|
20
|
+
margin-bottom: 10px;
|
21
|
+
}
|
22
|
+
|
23
|
+
#notice {
|
24
|
+
color: green;
|
25
|
+
}
|
26
|
+
|
27
|
+
.field_with_errors {
|
28
|
+
padding: 2px;
|
29
|
+
background-color: red;
|
30
|
+
display: table;
|
31
|
+
}
|
32
|
+
|
33
|
+
#error_explanation {
|
34
|
+
width: 450px;
|
35
|
+
border: 2px solid red;
|
36
|
+
padding: 7px;
|
37
|
+
padding-bottom: 0;
|
38
|
+
margin-bottom: 20px;
|
39
|
+
background-color: #f0f0f0;
|
40
|
+
}
|
41
|
+
|
42
|
+
#error_explanation h2 {
|
43
|
+
text-align: left;
|
44
|
+
font-weight: bold;
|
45
|
+
padding: 5px 5px 5px 15px;
|
46
|
+
font-size: 12px;
|
47
|
+
margin: -7px;
|
48
|
+
margin-bottom: 0px;
|
49
|
+
background-color: #c00;
|
50
|
+
color: #fff;
|
51
|
+
}
|
52
|
+
|
53
|
+
#error_explanation ul li {
|
54
|
+
font-size: 12px;
|
55
|
+
list-style: square;
|
56
|
+
}
|
File without changes
|
@@ -0,0 +1,290 @@
|
|
1
|
+
require "abstracted_responder"
|
2
|
+
|
3
|
+
class AbstractResourcesController < ApplicationController
|
4
|
+
self.responder = ::AbstractedResponder
|
5
|
+
respond_to :html, :xml, :js, :json
|
6
|
+
|
7
|
+
before_action :set_resource
|
8
|
+
before_action :set_resources, only: [:index]
|
9
|
+
before_action :set_variant_template
|
10
|
+
|
11
|
+
before_filter :authenticate_user!
|
12
|
+
after_action :verify_authorized
|
13
|
+
# after_action :manage_parenthood, only: [:create,:update,:destroy]
|
14
|
+
|
15
|
+
# default implementation
|
16
|
+
def show
|
17
|
+
authorize resource
|
18
|
+
respond_with resource
|
19
|
+
rescue Exception => e
|
20
|
+
scoop_from_error e
|
21
|
+
end
|
22
|
+
|
23
|
+
def new
|
24
|
+
resource.parent_id = params[:parent_id] if resource.respond_to? :parent_id
|
25
|
+
authorize resource
|
26
|
+
respond_with resource
|
27
|
+
rescue Exception => e
|
28
|
+
scoop_from_error e
|
29
|
+
end
|
30
|
+
|
31
|
+
def edit
|
32
|
+
authorize resource
|
33
|
+
respond_with resource
|
34
|
+
rescue Exception => e
|
35
|
+
scoop_from_error e
|
36
|
+
end
|
37
|
+
|
38
|
+
def index
|
39
|
+
authorize resource_class
|
40
|
+
respond_with resources
|
41
|
+
rescue Exception => e
|
42
|
+
scoop_from_error e
|
43
|
+
end
|
44
|
+
|
45
|
+
def create
|
46
|
+
@resource = resource_class.new(resource_params)
|
47
|
+
authorize resource
|
48
|
+
flash[:notice] = t('.success.created', resource: resource_class.to_s ) if resource.save
|
49
|
+
respond_with(resource)
|
50
|
+
rescue Exception => e
|
51
|
+
scoop_from_error e
|
52
|
+
end
|
53
|
+
|
54
|
+
def update
|
55
|
+
authorize resource
|
56
|
+
flash[:notice] = t('.success.updated', resource: resource_class.to_s ) if resource.update_attributes(resource_params)
|
57
|
+
respond_with(resource)
|
58
|
+
rescue Exception => e
|
59
|
+
scoop_from_error e
|
60
|
+
end
|
61
|
+
|
62
|
+
def destroy
|
63
|
+
authorize resource
|
64
|
+
result = true if resource.destroy
|
65
|
+
result ? (flash.now[:notice] = t('.success', resource: resource_class.to_s)) : (flash.now[:error] = t('.deleted.error',resource: resource_class.to_s))
|
66
|
+
if result==true
|
67
|
+
render layout:false, status: 200, locals: { result: true }
|
68
|
+
else
|
69
|
+
render layout:false, status: 301, locals: { result: true }
|
70
|
+
end
|
71
|
+
rescue Exception => e
|
72
|
+
scoop_from_error e
|
73
|
+
end
|
74
|
+
|
75
|
+
def resource_params
|
76
|
+
raise 'You need to "def resource_params" on the %sController! (see: http://blog.trackets.com/2013/08/17/strong-parameters-by-example.html)' % params[:controller].capitalize
|
77
|
+
end
|
78
|
+
|
79
|
+
def set_resource
|
80
|
+
parent
|
81
|
+
resource
|
82
|
+
end
|
83
|
+
|
84
|
+
def set_resources
|
85
|
+
resources
|
86
|
+
end
|
87
|
+
|
88
|
+
def resource
|
89
|
+
@resource ||= (params[:id].nil? ? resource_class.new : resource_class.find(params[:id]) ) rescue nil
|
90
|
+
end
|
91
|
+
|
92
|
+
def resource_name
|
93
|
+
resource_class.to_s.underscore.pluralize
|
94
|
+
end
|
95
|
+
|
96
|
+
def resource_class
|
97
|
+
@resource_class ||= params[:controller].singularize.classify.constantize rescue nil
|
98
|
+
end
|
99
|
+
|
100
|
+
def parent
|
101
|
+
@parent ||= find_parent
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
def parent_class
|
106
|
+
@parent_class ||= @parent.class
|
107
|
+
end
|
108
|
+
|
109
|
+
def parent?
|
110
|
+
!(%w{NilClass TrueClass FalseClass}.include? @parent.class.to_s)
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
#
|
115
|
+
# return the resources collection - preferably from the cache
|
116
|
+
def resources options={}
|
117
|
+
@resources ||= find_resources options
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
#
|
122
|
+
# returns the url for the resource - like /users/1
|
123
|
+
def resource_url options={}
|
124
|
+
options = resource_options(options)
|
125
|
+
action= case params[:action]
|
126
|
+
when 'show'; '/%s' % resource.id
|
127
|
+
when 'edit'; '/%s/edit' % resource.id
|
128
|
+
else ''
|
129
|
+
end
|
130
|
+
parent? ? ("%s/%s%s%s" % [parent_url,resource_name,action,options]) : ("/%s%s%s" % [resource_name,action,options])
|
131
|
+
end
|
132
|
+
|
133
|
+
|
134
|
+
#
|
135
|
+
# returns the url for the resources - /employees or /employees/1/events
|
136
|
+
def resources_url options={}
|
137
|
+
options = resource_options(options)
|
138
|
+
"%s/%s" % [ parent_url, resource_name ]
|
139
|
+
end
|
140
|
+
|
141
|
+
#
|
142
|
+
# parent_url returns the parent url - /employees/1
|
143
|
+
def parent_url
|
144
|
+
parent? ? ( "/%s/%s" % [ @parent.class.table_name, @parent.id ] ) : ""
|
145
|
+
end
|
146
|
+
|
147
|
+
|
148
|
+
private
|
149
|
+
|
150
|
+
#
|
151
|
+
# use views/../$action.html+mobile.erb if request originates from an iPad
|
152
|
+
#
|
153
|
+
def set_variant_template
|
154
|
+
request.variant = :mobile if request.user_agent =~ /iPad/
|
155
|
+
end
|
156
|
+
|
157
|
+
def resource_options options
|
158
|
+
options.merge! params.except( "id", "controller", "action" )
|
159
|
+
options = (options.empty? ? "" : "?" + options.collect{ |k,v| "#{k}=#{v}" }.join("&"))
|
160
|
+
end
|
161
|
+
|
162
|
+
#
|
163
|
+
# find the resources collection
|
164
|
+
def find_resources options
|
165
|
+
|
166
|
+
params[:ids] ||= []
|
167
|
+
params[:ids] << params[:id] unless params[:id].nil?
|
168
|
+
|
169
|
+
if params[:ids].compact.any?
|
170
|
+
policy_scope(resource_class).where(id: params[:ids].compact.split(",").flatten)
|
171
|
+
else
|
172
|
+
if params[:q].nil? or params[:q]=="" #or params[:q]=="undefined"
|
173
|
+
r = parent? ? parent.send(resource_name) : (resource_class.nil? ? nil : policy_scope(resource_class))
|
174
|
+
else
|
175
|
+
r = find_resources_queried options
|
176
|
+
end
|
177
|
+
|
178
|
+
return r #if params[:print_list]
|
179
|
+
# params[:perpage] ||= 20
|
180
|
+
# (params[:format].nil? or params[:format]=='html') ? r.page(params[:page]).per(params[:perpage]) : r
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
#
|
186
|
+
# find queried resources collection - implement on each controller to customize
|
187
|
+
# raise an exception
|
188
|
+
def find_resources_queried options
|
189
|
+
case params[:f]
|
190
|
+
when nil
|
191
|
+
if parent?
|
192
|
+
policy_scope(resource_class).tags_included?( params[:q].split(" ") ).where( options )
|
193
|
+
else
|
194
|
+
policy_scope(resource_class).tags_included?( params[:q].split(" ") )
|
195
|
+
end
|
196
|
+
else
|
197
|
+
policy_scope(resource_class)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
#
|
201
|
+
#
|
202
|
+
# /employees/1/teams
|
203
|
+
# /employees/1/teams/5
|
204
|
+
# /employees/1/teams/5/attach
|
205
|
+
def find_parent
|
206
|
+
if params[:parent].nil?
|
207
|
+
return nil if (request.path.split("/").size < 4) or (request.path.split("/").size==4 and %w{edit new}.include?( params[:action]))
|
208
|
+
dummy, parent_cls, parent_id, resource_cls, resource_id, action = request.path.split("/")
|
209
|
+
parent_cls.singularize.classify.constantize.find(parent_id) rescue nil
|
210
|
+
else
|
211
|
+
params[:parent].constantize.find(params[:parent_id])
|
212
|
+
end
|
213
|
+
end
|
214
|
+
#
|
215
|
+
# # /employees/1/teams/new
|
216
|
+
# # /employees/1/teams/1/edit
|
217
|
+
# # /employees/1/teams/1/delete
|
218
|
+
# def manage_parenthood
|
219
|
+
# if params[:parent] and params[:parent_id]
|
220
|
+
# parent = params[:parent].classify.constantize.find(params[:parent_id])
|
221
|
+
# unless parent.blank?
|
222
|
+
# case params[:action]
|
223
|
+
# when "create"
|
224
|
+
# child = eval("@#{resource_class.to_s.underscore}")
|
225
|
+
# children = eval("parent.#{resource_name}")
|
226
|
+
# children << child
|
227
|
+
# when "edit"
|
228
|
+
# when "delete"
|
229
|
+
# child = eval("@#{resource_class.to_s.underscore}")
|
230
|
+
# children = eval("parent.#{resource_name}")
|
231
|
+
# children >> child
|
232
|
+
# end
|
233
|
+
# end
|
234
|
+
# end
|
235
|
+
# end
|
236
|
+
#
|
237
|
+
#
|
238
|
+
|
239
|
+
def scoop_from_error e
|
240
|
+
logger.debug "AbstractResourcesController##{params[:action]}: #{e.class}"
|
241
|
+
case e.class.to_s
|
242
|
+
when "Pundit::NotAuthorizedError"
|
243
|
+
flash.now[:error] = flash[:error] = t('.fail.authorized', resource: resource)
|
244
|
+
result = false
|
245
|
+
status = 401
|
246
|
+
when "ActiveRecord::StatementInvalid" # Mysql2::Error
|
247
|
+
flash.now[:error] = flash[:error] = t('fail.mysql_error', mysql: e.to_s)
|
248
|
+
result= false
|
249
|
+
status = 409
|
250
|
+
else
|
251
|
+
flash.now[:error] = flash[:error] = "An error occured - please refer to log for details!"
|
252
|
+
render head: 412
|
253
|
+
end
|
254
|
+
|
255
|
+
|
256
|
+
respond_to do |format|
|
257
|
+
case params[:action]
|
258
|
+
when 'new'
|
259
|
+
format.html { flash.keep(:error) ; redirect_to resources_url }
|
260
|
+
format.js { render layout: false, status: status, locals: { result: result} }
|
261
|
+
format.json { render json: resources, status: status }
|
262
|
+
when 'create'
|
263
|
+
format.html { render :new }
|
264
|
+
format.js { render layout: false, status: status, locals: { result: result} }
|
265
|
+
format.json { render json: resource.errors, status: status }
|
266
|
+
when 'show'
|
267
|
+
format.html { flash.keep(:error) ; redirect_to resources_url }
|
268
|
+
format.js { render layout: false, status: status, locals: { result: result} }
|
269
|
+
format.json { render json: resources, status: status }
|
270
|
+
when 'edit'
|
271
|
+
format.html { flash.keep(:error) ; redirect_to resources_url }
|
272
|
+
format.js { render layout: false, status: status, locals: { result: result} }
|
273
|
+
format.json { render json: resources, status: status }
|
274
|
+
when 'update'
|
275
|
+
format.html { render :edit }
|
276
|
+
format.js { render layout: false, status: status, locals: { result: result} }
|
277
|
+
format.json { render json: resource.errors, status: status }
|
278
|
+
when 'index', 'destroy'
|
279
|
+
# we should render index - but an error here will not make us happy
|
280
|
+
# format.html { render :index }
|
281
|
+
#
|
282
|
+
format.html { redirect_to root_path, alert: flash[:error] }
|
283
|
+
format.js { render layout: false, status: status, locals: { result: result} }
|
284
|
+
format.json { render json: resources, status: status }
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
end
|
289
|
+
|
290
|
+
end
|